![]() |
Нет смысла в методе [B]НайтиЗначение [/B]при Стр<>0. |
41-victuan > вопрос не в смысле, а в том, что не соответствует описанию... |
42-Buhta >соответствует. |
СП купить еще не предлагали? Странно... [b]<Строка> - идентификатор переменной, куда возвращается номер найденной строки. Если при вызове метода [u]передать в этот параметр номер строки[/u], то поиск будет осуществляться [u]только по указанной строке[/u].[/b] То есть: после "Стр=5, потом Стр=Стр+1" поиск будет осуществляться только в 6-й строке. И "Стр=6" при этом выглядит вполне логично. |
объясните, зачем искать, например, значение в 5-ой строке, в колонке "Контрагент" ? какого результата вы ждёте от поиска? зачем искать то, что итак лежит известно где? |
44-Ткачик > это кому? если мне, то я там и читаю, см (16) и абсолютно не спорю с тем, что Стр=6:) это тут некоторые уже и про пиво спорили и т.п... меня как раз смущает тот факт, что "поиск будет осуществляться [b]только по указанной строке"[/b] и при этом поиск выдает =1, хотя сотрудник в строке 6 совсем уже другой... |
45-Ирли Бёрд > опять про смысл? ну хотела таким образом перебор строк сделать до того момента, когда сменится сотрудник, т.к. таблица отсортирована. т.е. предполагалось, что в момент смены сотрудника в очередной строке таблицы внутренний цикл прервется... но в очередной строке сотр меняется, а поиск как-бы находит старого сотра:) |
47-Buhta >Так не получится. НайтиЗначение ищет только первое вхождение искомого значения. Но либо среди всех строк, либо среди всех колонок. Поиск по заданной строке и заданной колонке не работает |
47-Buhta > ТекСотрудник = ""; i=0; Пока i < ТЗ.КоличествоСтрок() Цикл i=i+1; Если ТЗ.[b]ПолучитьЗначение[/b](i, "Сотрудник") <> ТекСотрудник Тогда Сообщить("Сменился сотрудник в строке "+i); КонецЕсли; КонецЦикла; |
49-Ирли Бёрд > большое спасибо:) но мне как-бы просто было интересно почему не работает так, как написано в книжке и СП:) |
а у меня работает. может на тебя кто-то порчу навел?.. |
51-Cthulhu > не исключено:) |
"[em]поиск выдает =1, хотя сотрудник в строке 6 совсем уже другой...[/em]" - врет, как бухгалтер программисту! Элементарный код для проверки: ТЗ=СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Код","Число",1,0); ТЗ.НоваяКолонка("Имя","Строка",3,0); ТЗ.НоваяСтрока(); ТЗ.Код=1; ТЗ.Имя="ААА"; ТЗ.НоваяСтрока(); ТЗ.Код=2; ТЗ.Имя="БББ"; ТЗ.НоваяСтрока(); ТЗ.Код=1; ТЗ.Имя="ВВВ"; Стр=0; Сообщить("Стр=0; ТЗ.НайтиЗначение(""ААА"",Стр,""Имя"")="+ТЗ.НайтиЗначение("ААА",Стр,"Имя")+"; Стр="+Стр); Стр=0; Сообщить("Стр=0; ТЗ.НайтиЗначение(""БББ"",Стр,""Имя"")="+ТЗ.НайтиЗначение("БББ",Стр,"Имя")+"; Стр="+Стр); Стр=0; Сообщить("Стр=0; ТЗ.НайтиЗначение(""ВВВ"",Стр,""Имя"")="+ТЗ.НайтиЗначение("ВВВ",Стр,"Имя")+"; Стр="+Стр); Стр=1; Сообщить("Стр=1; ТЗ.НайтиЗначение(""ААА"",Стр,""Имя"")="+ТЗ.НайтиЗначение("ААА",Стр,"Имя")+"; Стр="+Стр); Стр=2; Сообщить("Стр=2; ТЗ.НайтиЗначение(""БББ"",Стр,""Имя"")="+ТЗ.НайтиЗначение("БББ",Стр,"Имя")+"; Стр="+Стр); Стр=3; Сообщить("Стр=3; ТЗ.НайтиЗначение(""ААА"",Стр,""Имя"")="+ТЗ.НайтиЗначение("ААА",Стр,"Имя")+"; Стр="+Стр); Стр=3; Сообщить("Стр=3; ТЗ.НайтиЗначение(""БББ"",Стр,""Имя"")="+ТЗ.НайтиЗначение("БББ",Стр,"Имя")+"; Стр="+Стр); Стр=1; Сообщить("Стр=1; ТЗ.НайтиЗначение(""ВВВ"",Стр,""Имя"")="+ТЗ.НайтиЗначение("ВВВ",Стр,"Имя")+"; Стр="+Стр); Заодно, чтобы два раза не бегать - для проверки "[em]почему стр = ""? Должно быть стр = 0[/em]" добавляем: Стр=""; Сообщить("Стр=""""; ТЗ.НайтиЗначение(""ВВВ"",Стр,""Имя"")="+ТЗ.НайтиЗначение("ВВВ",Стр,"Имя")+"; Стр="+Стр); Ну, и если не баловаться с переменной, а указывать номер строки явно: Сообщить("ТЗ.НайтиЗначение(""ААА"",1,""Имя"")="+ТЗ.НайтиЗначение("ААА",1,"Имя")); Сообщить("ТЗ.НайтиЗначение(""БББ"",2,""Имя"")="+ТЗ.НайтиЗначение("БББ",2,"Имя")); Сообщить("ТЗ.НайтиЗначение(""ВВВ"",1,""Имя"")="+ТЗ.НайтиЗначение("ВВВ",1,"Имя")); Сообщить("ТЗ.НайтиЗначение(""ААА"",2,""Имя"")="+ТЗ.НайтиЗначение("ААА",2,"Имя")); Выводы пусть каждый сделает сам - по описанию оно работает или нет. |
(53): Сообщить("Стр="+Стр+"(Тип="+ТипЗначенияСтр(Стр)+"): ... |
(0) тут не дети. выкладывай обработку, давай ссылку на неё и номер её строки. |
(54) Кэп, это эквивалентно: Сообщить("Номер строки ТЗ может быть только числом!") |
код (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; Иначе Прервать КонецЕсли; КонецЦикла; //Выводы пусть каждый сделает сам - по описанию оно работает или нет. :) КонецПроцедуры |
на 25-м релизе та-же фигня |
Ладно, я пошла к детям:) |
Ну и? у кого код (57) соответствует описанию, т.е. тому, что [b]"только по указанной строке."[/b]? или у всех тоже порча?;) |
люди!!! (или не люди?) снимите порчу! восстановите ауру! а то мну даже тут на работу в качестве астролога/телепатки и специалиста по другим интимным вопросам не берут:( ЗЫ: у мну не работает, т.е. не соответствует описанию в конкретном случае, поэтому честно, в сответствии с некоторыми заявленными постами, я позволила купить себе пиво... |
(61)(поводя манипуляторами)снимаю с тебя порчу у меня сегодня тоже писалось, что то подобное для справочника контрагенов поиск по ИНН+КПП, получилось после удаления найденной строки в ТЗ;) ну и кстати может кто подскажет: две ТЗ на форме обработки, одна на одной закладке заполняется и отображается, а на вторй закладке в процедуре вижу что заполняется, а на форме пустая :() |
"Снимаю. Порчу. Дорого" (с) Авторы движка 1С, похоже, руководствовались здравым смыслом: НайтиЗначение() надо использовать именно [b]для поиска[/b], что можно искать [b]в одной строке[/b]? Тем более, [b]в одной ячейке[/b] - это что, дамская сумочка, что ли? Но несмотря на это, поиск по [b]простым[/b] типам данных работает как описано, хотя описание наверняка составляли совсем другие люди, не программисты. Можно еще с документами и перечислениями поэкспериментировать, но без пива что-то лениво... |
во первых - при работе с ТЗ, которые еще и лежат на форме - надо очень аккуратно. |
лена, там где у тебя неправильно нашлось - выведи на печать ТЗ типа ПечатьТЗ(ТЗдляпечати) и посмотри... ну что-то сильно уменя сомнения, что в 6 строке у тебя Петров, а находит там иванова... |
(64) а что там с аккуратность с ТЗ на форме? |
ну как наступишь на грабли - вспомни! |
ну так я уже писал: две ТЗ на форме обработки, одна на одной закладке заполняется и отображается, а на вторй закладке в процедуре вижу что заполняется, а на форме пустая :() |
65-Чучундер > ну вот счас все совсем брошу и еще на печать буду выводить:) Ну даже по коду (57) не может там быть Иванова, когда туда честно Петров записан! Просто скопипасть в обработку код (57) и выводи какие захочешь таблицы на печать:) я же на уникальность своих/твоих данных не претендую;) кста, а обсудить есть что;) 63-Ткачик > Спасибо, мил. человек! Что порчу снял:) С документами и перечислениями мне тоже уже лениво, т.к. пиво кончилось:) пойду лучше что-нить поищу в своей "дамской сумочке";) |
(68) надо смотреть, что вы там "видите" и что вы там отображаете. как вариант - "в процедуре вижу что заполняется, а на форме пустая" вставить Форма.Обновить(); |
(70) Спасибо за пинок, признаваться что было даже стыдно! сосредоточился на поиске, а перед выбором в редыдущей ТЗ не поставил ТЗ.ВыбратьСтроки() ''':( Поыпаю пеплом центральный процессор |
(71)+ Хотя когда я вызов этой процедуры вешал на кнопку на форме она отрабатывала заполнение :( |
(57) а что за идентификатор колонки "Со трудник" . ???? |
73-Чучундер > билин, а что нельзя? какое-то тайное сочетание символов? или пробелы форума убрать не можешь?;) ТЗ=СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Сотрудник","Справочник.Сотрудники "); ТЗ.НоваяКолонка("Код","Число",1,0); |
(69) исследую, занятно... |
(74) да хз, что ты там откопала еще в особенностях функционирования ;-) может пробел несет тайный смысл? ;-0 |
я на эту фичу и не натыкался ни разу.. бо видимо не дорос до таких извращений... ;-) |
а вообще - задолбюало меня програмимить за 30 лет. еще сегодня узнал - близкий товарищ умер. капец полный. просто жпс. |
(78) Думаешь, что-то другое за 30 лет не задолбало бы? |
(79) ну конечно если каждый день... . главное. чтобы смысл в этом был. а я когда работу делаю, смысла которой не вижу - я зверею. особенно когда ошибку делает один муй, а ипсравлять приходится другому мую, т.е. мне ;-) эти смыслы у меня вышимбают охоту работать раз в 10 сильнее... а раз работать неоохота раз в 10 сильнее - т мотивация сделать это д.б. нехреновая.. но всем ПОХРЕН. |
| Текущее время: 14:53. Часовой пояс GMT +3. |