0
- 13.03.2013 - 16:43
|
Решила тут покодить немного от скуки, чтоб в памяти освежить... Вопчем есть таблица значений, у которой есть колонка "Сотрудник". Задаю конкретного сотрудника, конкретный номер строки и колонку "Сотрудник". Почему мне НайтиЗначение выдает =1, если в этой строке совсем другой сотрудник? или все-таки он не только по этой строке ищет? | |
41
- 14.03.2013 - 13:06
| Нет смысла в методе НайтиЗначение при Стр<>0. | |
42
- 14.03.2013 - 13:55
| 41-victuan > вопрос не в смысле, а в том, что не соответствует описанию... | |
43
- 14.03.2013 - 13:59
| 42-Buhta >соответствует. | |
44
- 14.03.2013 - 17:23
|
СП купить еще не предлагали? Странно... <Строка> - идентификатор переменной, куда возвращается номер найденной строки. Если при вызове метода передать в этот параметр номер строки, то поиск будет осуществляться только по указанной строке. То есть: после "Стр=5, потом Стр=Стр+1" поиск будет осуществляться только в 6-й строке. И "Стр=6" при этом выглядит вполне логично. | |
45
- 14.03.2013 - 17:35
|
объясните, зачем искать, например, значение в 5-ой строке, в колонке "Контрагент" ? какого результата вы ждёте от поиска? зачем искать то, что итак лежит известно где? | |
46
- 14.03.2013 - 17:40
| 44-Ткачик > это кому? если мне, то я там и читаю, см (16) и абсолютно не спорю с тем, что Стр=6:) это тут некоторые уже и про пиво спорили и т.п... меня как раз смущает тот факт, что "поиск будет осуществляться только по указанной строке" и при этом поиск выдает =1, хотя сотрудник в строке 6 совсем уже другой... | |
47
- 14.03.2013 - 17:46
| 45-Ирли Бёрд > опять про смысл? ну хотела таким образом перебор строк сделать до того момента, когда сменится сотрудник, т.к. таблица отсортирована. т.е. предполагалось, что в момент смены сотрудника в очередной строке таблицы внутренний цикл прервется... но в очередной строке сотр меняется, а поиск как-бы находит старого сотра:) | |
48
- 14.03.2013 - 18:57
| 47-Buhta >Так не получится. НайтиЗначение ищет только первое вхождение искомого значения. Но либо среди всех строк, либо среди всех колонок. Поиск по заданной строке и заданной колонке не работает | |
49
- 14.03.2013 - 19:13
|
47-Buhta > ТекСотрудник = ""; i=0; Пока i < ТЗ.КоличествоСтрок() Цикл i=i+1; Если ТЗ.ПолучитьЗначение(i, "Сотрудник") <> ТекСотрудник Тогда Сообщить("Сменился сотрудник в строке "+i); КонецЕсли; КонецЦикла; | |
50
- 14.03.2013 - 20:10
| 49-Ирли Бёрд > большое спасибо:) но мне как-бы просто было интересно почему не работает так, как написано в книжке и СП:) | |
51
- 14.03.2013 - 20:14
|
а у меня работает. может на тебя кто-то порчу навел?.. | |
52
- 14.03.2013 - 20:15
| 51-Cthulhu > не исключено:) | |
53
- 14.03.2013 - 22:00
|
"поиск выдает =1, хотя сотрудник в строке 6 совсем уже другой..." - врет, как бухгалтер программисту! Элементарный код для проверки: ТЗ=СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Код","Число",1,0); ТЗ.НоваяКолонка("Имя","Строка",3,0); ТЗ.НоваяСтрока(); ТЗ.Код=1; ТЗ.Имя="ААА"; ТЗ.НоваяСтрока(); ТЗ.Код=2; ТЗ.Имя="БББ"; ТЗ.НоваяСтрока(); ТЗ.Код=1; ТЗ.Имя="ВВВ"; Стр=0; Сообщить("Стр=0; ТЗ.НайтиЗначение(""ААА"",Стр,""Имя"")="+ТЗ.НайтиЗн ачение("ААА",Стр,"Имя")+"; Стр="+Стр); Стр=0; Сообщить("Стр=0; ТЗ.НайтиЗначение(""БББ"",Стр,""Имя"")="+ТЗ.НайтиЗн ачение("БББ",Стр,"Имя")+"; Стр="+Стр); Стр=0; Сообщить("Стр=0; ТЗ.НайтиЗначение(""ВВВ"",Стр,""Имя"")="+ТЗ.НайтиЗн ачение("ВВВ",Стр,"Имя")+"; Стр="+Стр); Стр=1; Сообщить("Стр=1; ТЗ.НайтиЗначение(""ААА"",Стр,""Имя"")="+ТЗ.НайтиЗн ачение("ААА",Стр,"Имя")+"; Стр="+Стр); Стр=2; Сообщить("Стр=2; ТЗ.НайтиЗначение(""БББ"",Стр,""Имя"")="+ТЗ.НайтиЗн ачение("БББ",Стр,"Имя")+"; Стр="+Стр); Стр=3; Сообщить("Стр=3; ТЗ.НайтиЗначение(""ААА"",Стр,""Имя"")="+ТЗ.НайтиЗн ачение("ААА",Стр,"Имя")+"; Стр="+Стр); Стр=3; Сообщить("Стр=3; ТЗ.НайтиЗначение(""БББ"",Стр,""Имя"")="+ТЗ.НайтиЗн ачение("БББ",Стр,"Имя")+"; Стр="+Стр); Стр=1; Сообщить("Стр=1; ТЗ.НайтиЗначение(""ВВВ"",Стр,""Имя"")="+ТЗ.НайтиЗн ачение("ВВВ",Стр,"Имя")+"; Стр="+Стр); Заодно, чтобы два раза не бегать - для проверки "почему стр = ""? Должно быть стр = 0" добавляем: Стр=""; Сообщить("Стр=""""; ТЗ.НайтиЗначение(""ВВВ"",Стр,""Имя"")="+ТЗ.НайтиЗн ачение("ВВВ",Стр,"Имя")+"; Стр="+Стр); Ну, и если не баловаться с переменной, а указывать номер строки явно: Сообщить("ТЗ.НайтиЗначение(""ААА"",1,""Имя"")="+ТЗ .НайтиЗначение("ААА",1,"Имя")); Сообщить("ТЗ.НайтиЗначение(""БББ"",2,""Имя"")="+ТЗ .НайтиЗначение("БББ",2,"Имя")); Сообщить("ТЗ.НайтиЗначение(""ВВВ"",1,""Имя"")="+ТЗ .НайтиЗначение("ВВВ",1,"Имя")); Сообщить("ТЗ.НайтиЗначение(""ААА"",2,""Имя"")="+ТЗ .НайтиЗначение("ААА",2,"Имя")); Выводы пусть каждый сделает сам - по описанию оно работает или нет. | |
54
- 14.03.2013 - 23:05
|
(53): Сообщить("Стр="+Стр+"(Тип="+ТипЗначенияСтр(Стр)+") : ... | |
55
- 15.03.2013 - 07:52
| (0) тут не дети. выкладывай обработку, давай ссылку на неё и номер её строки. | |
56
- 15.03.2013 - 09:03
|
(54) Кэп, это эквивалентно: Сообщить("Номер строки ТЗ может быть только числом!") | |
57
- 15.03.2013 - 10:14
|
код (53) работает. со справочником - нет (по крайней мере у меня). вот код с сотрудниками: //взять небольшую ЗИК или Бух с кол-вом сотрудников >5. строк много для надежности:) //******************************************* Процедура Сформировать() ТЗ=СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Сотрудник","Справочник.Сотрудники "); ТЗ.НоваяКолонка("Код","Число",1,0); Н=0; Сотр=СоздатьОбъект("Справочник.Сотрудники"); Сотр.ВыбратьЭлементы(); Пока Сотр.ПолучитьЭлемент()=1 цикл Сотрудник=Сотр.ТекущийЭлемент(); Если Н<6 тогда ТЗ.НоваяСтрока(); ТЗ.Сотрудник=Сотрудник; ТЗ.Код=1; ТЗ.НоваяСтрока(); ТЗ.Сотрудник=Сотрудник; ТЗ.Код=2; ТЗ.НоваяСтрока(); ТЗ.Сотрудник=Сотрудник; ТЗ.Код=3; Н=Н+1; Иначе Прервать КонецЕсли; КонецЦикла; //На всякий случай, чтоб вопросов не возникало, отсортируем и будем использовать другие переменные: ТЗ.Сортировать("Сотрудник,Код"); Н1=0; Сотр1=СоздатьОбъект("Справочник.Сотрудники"); Сотр1.ВыбратьЭлементы(); Пока Сотр1.ПолучитьЭлемент()=1 цикл Сотрудник1=Сотр1.ТекущийЭлемент(); Стр1=0; Сообщить("Стр1=0; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+?(ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Со трудник")=1," Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник"), "Сотрудник не найден")); Стр1=1; Сообщить("Стр1=1; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+" Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник")); Стр1=2; Сообщить("Стр1=2; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+" Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник")); Стр1=3; Сообщить("Стр1=3; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+" Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник")); Стр1=4; Сообщить("Стр1=4; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+" Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник")); Стр1=5; Сообщить("Стр1=5; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+" Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник")); Стр1=6; Сообщить("Стр1=6; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+" Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник")); Стр1=7; Сообщить("Стр1=7; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+" Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник")); //Заодно, чтобы два раза не бегать - для проверки "почему стр = ""? Должно быть стр = 0" добавляем: Стр1=""; Сообщить("Стр1=""""; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+?(ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Со трудник")=1," Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник"), "Сотрудник не найден")); Стр1=1; Сообщить("Стр1=1; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+" Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник")); Стр1=2; Сообщить("Стр1=2; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+" Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник")); Стр1=3; Сообщить("Стр1=3; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+" Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник")); Стр1=4; Сообщить("Стр1=4; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+" Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник")); Стр1=5; Сообщить("Стр1=5; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+" Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник")); Стр1=6; Сообщить("Стр1=6; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+" Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник")); Стр1=7; Сообщить("Стр1=7; ТЗ.НайтиЗначение("+Сотрудник1+",Стр1,""Сотрудник"" )="+ТЗ.НайтиЗначение(Сотрудник1,Стр1,"Сотрудник")+ "; Стр1="+Стр1+" Сотрудник в строке: "+ТЗ.ПолучитьЗначение(Стр1,"Сотрудник")); //Ну, и если не баловаться с переменной, а указывать номер строки явно: Сообщить("ТЗ.НайтиЗначение("+Сотрудник1+",1,""Сотр удник"")="+ТЗ.НайтиЗначение(Сотрудник1,1,"Сотрудни к")+"; Сотрудник в строке: "+ТЗ.ПолучитьЗначение(1,"Сотрудник")); Сообщить("ТЗ.НайтиЗначение("+Сотрудник1+",2,""Сотр удник"")="+ТЗ.НайтиЗначение(Сотрудник1,2,"Сотрудни к")+"; Сотрудник в строке: "+ТЗ.ПолучитьЗначение(2,"Сотрудник")); Сообщить("ТЗ.НайтиЗначение("+Сотрудник1+",3,""Сотр удник"")="+ТЗ.НайтиЗначение(Сотрудник1,3,"Сотрудни к")+"; Сотрудник в строке: "+ТЗ.ПолучитьЗначение(3,"Сотрудник")); Сообщить("ТЗ.НайтиЗначение("+Сотрудник1+",4,""Сотр удник"")="+ТЗ.НайтиЗначение(Сотрудник1,4,"Сотрудни к")+"; Сотрудник в строке: "+ТЗ.ПолучитьЗначение(4,"Сотрудник")); Сообщить("ТЗ.НайтиЗначение("+Сотрудник1+",5,""Сотр удник"")="+ТЗ.НайтиЗначение(Сотрудник1,5,"Сотрудни к")+"; Сотрудник в строке: "+ТЗ.ПолучитьЗначение(5,"Сотрудник")); Сообщить("ТЗ.НайтиЗначение("+Сотрудник1+",6,""Сотр удник"")="+ТЗ.НайтиЗначение(Сотрудник1,6,"Сотрудни к")+"; Сотрудник в строке: "+ТЗ.ПолучитьЗначение(6,"Сотрудник")); Сообщить("ТЗ.НайтиЗначение("+Сотрудник1+",7,""Сотр удник"")="+ТЗ.НайтиЗначение(Сотрудник1,7,"Сотрудни к")+"; Сотрудник в строке: "+ТЗ.ПолучитьЗначение(7,"Сотрудник")); Если Н1<6 тогда Н1=Н1+1; Иначе Прервать КонецЕсли; КонецЦикла; //Выводы пусть каждый сделает сам - по описанию оно работает или нет. :) КонецПроцедуры | |
58
- 15.03.2013 - 10:47
| на 25-м релизе та-же фигня | |
59
- 15.03.2013 - 11:18
| Ладно, я пошла к детям:) | |
60
- 15.03.2013 - 13:05
| Ну и? у кого код (57) соответствует описанию, т.е. тому, что "только по указанной строке."? или у всех тоже порча?;) | |
61
- 15.03.2013 - 15:44
|
люди!!! (или не люди?) снимите порчу! восстановите ауру! а то мну даже тут на работу в качестве астролога/телепатки и специалиста по другим интимным вопросам не берут:( ЗЫ: у мну не работает, т.е. не соответствует описанию в конкретном случае, поэтому честно, в сответствии с некоторыми заявленными постами, я позволила купить себе пиво... | |
62
- 15.03.2013 - 17:01
|
(61)(поводя манипуляторами)снимаю с тебя порчу у меня сегодня тоже писалось, что то подобное для справочника контрагенов поиск по ИНН+КПП, получилось после удаления найденной строки в ТЗ;) ну и кстати может кто подскажет: две ТЗ на форме обработки, одна на одной закладке заполняется и отображается, а на вторй закладке в процедуре вижу что заполняется, а на форме пустая :() | |
63
- 15.03.2013 - 17:28
|
"Снимаю. Порчу. Дорого" (с) Авторы движка 1С, похоже, руководствовались здравым смыслом: НайтиЗначение() надо использовать именно для поиска, что можно искать в одной строке? Тем более, в одной ячейке - это что, дамская сумочка, что ли? Но несмотря на это, поиск по простым типам данных работает как описано, хотя описание наверняка составляли совсем другие люди, не программисты. Можно еще с документами и перечислениями поэкспериментировать, но без пива что-то лениво... | |
64
- 15.03.2013 - 17:29
| во первых - при работе с ТЗ, которые еще и лежат на форме - надо очень аккуратно. | |
65
- 15.03.2013 - 17:30
|
лена, там где у тебя неправильно нашлось - выведи на печать ТЗ типа ПечатьТЗ(ТЗдляпечати) и посмотри... ну что-то сильно уменя сомнения, что в 6 строке у тебя Петров, а находит там иванова... | |
66
- 15.03.2013 - 17:56
| (64) а что там с аккуратность с ТЗ на форме? | |
67
- 15.03.2013 - 18:06
| ну как наступишь на грабли - вспомни! | |
68
- 15.03.2013 - 18:21
|
ну так я уже писал: две ТЗ на форме обработки, одна на одной закладке заполняется и отображается, а на вторй закладке в процедуре вижу что заполняется, а на форме пустая :() | |
69
- 15.03.2013 - 18:47
|
65-Чучундер > ну вот счас все совсем брошу и еще на печать буду выводить:) Ну даже по коду (57) не может там быть Иванова, когда туда честно Петров записан! Просто скопипасть в обработку код (57) и выводи какие захочешь таблицы на печать:) я же на уникальность своих/твоих данных не претендую;) кста, а обсудить есть что;) 63-Ткачик > Спасибо, мил. человек! Что порчу снял:) С документами и перечислениями мне тоже уже лениво, т.к. пиво кончилось:) пойду лучше что-нить поищу в своей "дамской сумочке";) | |
70
- 15.03.2013 - 18:51
|
(68) надо смотреть, что вы там "видите" и что вы там отображаете. как вариант - "в процедуре вижу что заполняется, а на форме пустая" вставить Форма.Обновить(); | |
71
- 15.03.2013 - 19:13
|
(70) Спасибо за пинок, признаваться что было даже стыдно! сосредоточился на поиске, а перед выбором в редыдущей ТЗ не поставил ТЗ.ВыбратьСтроки() ''':( Поыпаю пеплом центральный процессор | |
72
- 15.03.2013 - 19:22
|
(71)+ Хотя когда я вызов этой процедуры вешал на кнопку на форме она отрабатывала заполнение :( | |
73
- 15.03.2013 - 19:35
|
(57) а что за идентификатор колонки "Со трудник" . ???? | |
74
- 15.03.2013 - 19:39
|
73-Чучундер > билин, а что нельзя? какое-то тайное сочетание символов? или пробелы форума убрать не можешь?;) ТЗ=СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Сотрудник","Справочник.Сотрудники "); ТЗ.НоваяКолонка("Код","Число",1,0); | |
75
- 15.03.2013 - 19:44
| (69) исследую, занятно... | |
76
- 15.03.2013 - 22:31
| (74) да хз, что ты там откопала еще в особенностях функционирования ;-) может пробел несет тайный смысл? ;-0 | |
77
- 15.03.2013 - 22:32
| я на эту фичу и не натыкался ни разу.. бо видимо не дорос до таких извращений... ;-) | |
78
- 15.03.2013 - 22:32
|
а вообще - задолбюало меня програмимить за 30 лет. еще сегодня узнал - близкий товарищ умер. капец полный. просто жпс. | |
79
- 15.03.2013 - 22:41
| (78) Думаешь, что-то другое за 30 лет не задолбало бы? | |
80
- 15.03.2013 - 22:45
|
(79) ну конечно если каждый день... . главное. чтобы смысл в этом был. а я когда работу делаю, смысла которой не вижу - я зверею. особенно когда ошибку делает один муй, а ипсравлять приходится другому мую, т.е. мне ;-) эти смыслы у меня вышимбают охоту работать раз в 10 сильнее... а раз работать неоохота раз в 10 сильнее - т мотивация сделать это д.б. нехреновая.. но всем ПОХРЕН. | |
| Интернет-форум Краснодарского края и Краснодара |