0
- 13.03.2013 - 16:43
|
Решила тут покодить немного от скуки, чтоб в памяти освежить... Вопчем есть таблица значений, у которой есть колонка "Сотрудник". Задаю конкретного сотрудника, конкретный номер строки и колонку "Сотрудник". Почему мне НайтиЗначение выдает =1, если в этой строке совсем другой сотрудник? или все-таки он не только по этой строке ищет? | |
1
- 13.03.2013 - 17:23
| поделись кодом | |
2
- 13.03.2013 - 17:26
|
ТЗ.НайтиЗначение(ЗначениеЧто,поз,"ИдентификаторКол онки") . если поз = 0 или опущен - ищется по всей ТЗ в указанной колонке. | |
3
- 13.03.2013 - 17:29
|
1-Маус > чуть попозжее, отойти надо 2-Чучундер > я в отладчике туда даже конкретную цифру ставлю, а он все-равно =1 выдает:( | |
4
- 13.03.2013 - 17:32
| А значение поз после поиска какое? | |
5
- 13.03.2013 - 17:33
|
(3) чудес не бывает.. ;-) ты же знаешь... . давай на почту ид и пароль для тима, посмотрим тугеза ;-) | |
6
- 13.03.2013 - 17:33
| В смысле значение переменной куда возвращается номер строки? | |
7
- 13.03.2013 - 17:35
|
так делаешь? ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Сотрудник", "Справочник.Сотрудники"); стр=0; Если ТЗ.НайтиЗначение(РеквизитНаФормеСТипомЗначенияСпра вочникСотрудники, стр, "Сотрудник")=1 Тогда Сообщить("Ура"); КонецЕсли; | |
8
- 13.03.2013 - 17:52
|
конкретный номер строки и конкретная колонка... как бы "чо искать та?". если координаты известны, просто получи значение. PS в переменной номера строки после поиска номер не той строки, которая была на входе. готов поспорить на пиво (не проверял, так что по честному). | |
9
- 13.03.2013 - 18:42
|
Вот типа такой код: ТабДанных=ПолучитьТаблицуДанных(); ТабПериодов=ПолучитьТаблицуПериодов(); Сотр=СоздатьОбъект("Справочник.Сотрудники"); Сотр.ВыбратьЭлементы(); Пока Сотр.ПолучитьЭлемент()=1 цикл Сотрудник=Сотр.ТекущийЭлемент(); Ном=Ном+1; ТабУ.ВывестиСекцию("Строка|Основа"); ТабПериодов.ВыбратьСтроки(); Пока ТабПериодов.ПолучитьСтроку()=1 цикл Стр=""; Период=ТабПериодов.ОтчетныйПериод; Пока ТабДанных.НайтиЗначение(Сотрудник,Стр,"Сотрудник") =1 цикл ТабДанных.ПолучитьСтрокуПоНомеру(Стр); Если ТабДанных.ОтчетныйПериод=Период тогда ТабУ.ПрисоединитьСекцию("Строка|Период"); КонецЕсли; Если (Стр+1)<=ТабПринятыхДанных.КоличествоСтрок() тогда Стр=Стр+1; Иначе Прервать; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; после того, как находит первого сотра до последней строки сотрудник уже не меняется, т.е. по внешнему циклц не переходит, хотя ТабДанных.Сотрудник = выдает совсем другого сотра... | |
10
- 13.03.2013 - 18:47
| ищется всегда! первое! вхождение. поэтому обычно ТЗ сначала сортируем, а после нахождения первого значения уходим в перебор пока не получим другого сотра | |
11
- 13.03.2013 - 18:48
| можно попробовать ещё удалять строку найденную из ТЗ | |
12
- 13.03.2013 - 18:50
| и про пиво чот не понял... проспорила? | |
13
- 13.03.2013 - 18:51
| 10-Зелёный тролль > переменная "Стр" после первого нахождения должна принять конкретное значение. далее идет Стр=Стр+1 и должно искать уже по конкретному значению строки. таблицы отсортированы | |
14
- 13.03.2013 - 18:54
| 13-Buhta > не должно, если указан номер строки конкретный, тогда обнуляй переменную с именем колонки и проверяй её. а если имя колонки указано, то будет искаться первая строка ТЗ с искомым значением в указанной колонке. | |
15
- 13.03.2013 - 18:55
|
почему у меня выдает тупо ТабДанных.НайтиЗначение(Сотрудник,20,"Сотрудник") =1 а после перехода к 20-й строке ТабДанных.Сотрудник<>Сотрудник? | |
16
- 13.03.2013 - 18:57
| "<Строка> - идентификатор переменной, куда возвращается номер найденной строки. Если при вызове метода передать в этот параметр номер строки, то поиск будет осуществляться только по указанной строке." я что-то не так читаю? | |
17
- 13.03.2013 - 18:58
| чему равен номер строки после того как = 1? | |
18
- 13.03.2013 - 19:02
| 17-Зелёный тролль >тот, который Стр? с Стр все в порядке | |
19
- 13.03.2013 - 19:12
| Сортировка | |
20
- 13.03.2013 - 19:30
| Пока ТабДанных.НайтиЗначение(Сотрудник,Стр,"Сотрудник") =1 цикл Если (Стр+1)<=ТабПринятыхДанных.КоличествоСтрок() тогда Стр=Стр+1; Иначе Прервать; КонецЕсли; с меня пиво | |
21
- 13.03.2013 - 19:33
| 19-Helen1986 > на 25 релизе работает | |
22
- 13.03.2013 - 19:52
|
20-Зелёный тролль > ерунда. не исправила при копировании. читай ТабДанных. Стр честно увеличивается. и ситуация (15) никуда не девается... 19-Helen1986 > куда? | |
23
- 13.03.2013 - 20:01
| а на 27? что-то у мну кажись 25-го уже не найдется... если только однопользовательский. сейчас поищу... хотя мну воткнуть его только в старый комп можно... | |
24
- 13.03.2013 - 20:05
| мда, нашла аж 20-й:) | |
25
- 13.03.2013 - 20:10
|
19-Helen1986 >22-Buhta > гыы. работает только если отсортирована ТЗ по колонке. с меня два пива походу. | |
26
- 13.03.2013 - 20:11
|
Перем тз; //******************************************* Процедура Сформировать() зн = 2; Стр = ""; Пока тз.НайтиЗначение(зн,стр,"Зн") = 1 Цикл тз.получитьстрокупономеру(стр); Сообщить("Стр = " + Стр + " зн = " + тз.зн + " номерстроки = " + тз.НомерСтроки); стр = стр + 1; КонецЦикла; КонецПроцедуры //******************************************* Процедура ПриОТкрытии() тз = СоздатьОбъект("ТаблицаЗначений"); тз.НоваяКОлонка("Зн"); тз.НоваяКОлонка("Зн"); тз.новаяСтрока(); тз.зн = 1; тз.новаяСтрока(); тз.зн = 2; тз.новаяСтрока(); тз.зн = 1; тз.новаяСтрока(); тз.зн = 2; тз.новаяСтрока(); тз.зн = 2; КонецПроцедуры Стр = 2 зн = 2 номерстроки = 2 | |
27
- 13.03.2013 - 20:12
| что в общем то логично | |
28
- 13.03.2013 - 20:19
|
25-Зелёный тролль > ТабДанных.Свернуть("Сотрудник,ОтчетныйПериод",""); ТабДанных.Сортировать("Сотрудник,ОтчетныйПериод") - это не? не подходит? | |
29
- 13.03.2013 - 20:31
| 28-Buhta > значит аура у тебя не та, тренируй ауру. я вот как клиентам захожу так у них сразу всё работать начинает, даже ещё и к компу подойти не успеваю. | |
30
- 14.03.2013 - 08:37
|
Ну не знаю, что у меня с аурой... ну да ладно, есть и обходные пути. а нет ли какого-нить метода, может недокументированного, чтоб соответствие по нескольким колонкам искать? или только через "Ключ"? ЗЫ: это вообще все к тому, что 1С-ка неправильно понимает многочисленные корректировки данных ПФ по одному и тому-же сотруднику за один и тот же период, т.к. глПереписатьИзТаблицыВТаблицу тупо дополняет таблицу с корректировками... | |
31
- 14.03.2013 - 08:55
| Все корректировки делаю только в специализированных прогах ПФР. А из 1Ски что выгрузилось - то и выгрузилось, сырец, заготовка. | |
32
- 14.03.2013 - 09:07
| 31-Ткачик > да в принципе этим можно пользоваться:) если корректировки не накладываются, то все распределяется вполне прилично. последний год по всем клиентам пользують только типовыми механизмами и никаких проблем не возникало. но вот тут сильно мощщные корректировщики попались:) корректируют и корректируют - не остановить:) у ПФ крыша аж поехала и программа повисла - у них тоже многочисленные корректировки не воспринимаются:) вот и решила проверочку написать и посмотреть куда и как ложится и что с этим теперь делать... | |
33
- 14.03.2013 - 09:15
|
30-Buhta > Если хочешь иметь временную таблицу с полным функционалом по выборке, то придется отказаться от ТЗ, и применить "настоящий" формат временной таблицы. Для скуля, естественно, родные временные таблицы, для дбф-ной базы - дбф, само собой. И здесь можешь насладится всей прелестью составных индексов. Нескольких даже. Можно даже не цеплять драйверы фокспро: встроенный функционал работы с дбф по выборке и сортировке шире, чем с ТЗ изначально. P.S. Несложный фокус поможет загнать в поле дбф даже id агрегатного объекта (чтоб легко было достать стандартными способами). | |
34
- 14.03.2013 - 09:17
| +33 дбф быстрее тз в разы. | |
35
- 14.03.2013 - 09:24
|
33-VZ > да ладно, мне уж не настолько скучно:))) ЗЫ: наверно пока переписывать механизм заполнения таблицы принятых данных не имеет смысла. но пред. корректировки (или строки с корректируемыми сотрами) из загруженных данных необходимо удалять... | |
36
- 14.03.2013 - 09:26
| + а насчет сабжа - я так и не поняла, почему метод не отрабатывается:( багофича 27 релиза или все-таки аура? | |
37
- 14.03.2013 - 11:26
|
почему стр = ""? Должно быть стр = 0 | |
38
- 14.03.2013 - 11:27
| И почему упорно игнорируется вопрос типа (4)? | |
39
- 14.03.2013 - 11:43
|
37-victuan > так тоже пробовала - не помогает. Стр после поиска так и остается, как и должно быть, т.е. напр первый раз нашло в Стр=5, потом Стр=Стр+1 ТабДанных.НайтиЗначение(Сотрудник,Стр,"Сотрудник") =1 Стр=6 и т.п. | |
| Интернет-форум Краснодарского края и Краснодара |