|
1С:Предприятие
:: 1С:Предприятие 7.7 и ранее
|
|
| ||
Mafiozaa 25.01.21 - 03:38 | Приветствую, ткните носом где у меня ошибка, ибо я не понимаю в чем затык, вообщем
У меня в табличной части находится 2 колонки, номенклатура и кодмаркировки. Номенклатура заполняется путем выгрузки табличнойчасти При сканировании товара он должен позиционироваться на нужном товаре И проверять на заполненность колонку "кодмаркировки" и если заполнено переходить ниже Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные) // Процедура разбирает штрих-код, считанный сканером // и заполняет строки накладной Перем Упаковка,ТекКоличество, Спецификация; Перем ВремТовар, ВремЕдиница, ВремКоличество, ВремЦена; Перем СтрокаВозврЦена; Если Событие = "BarCodeValue" Тогда Штрихкод = СокрЛП(Данные); стр = 0; Если глПолучитьТоварПоШтрихкоду(Штрихкод, ВремТовар, ВремЕдиница, ВремКоличество) = 1 Тогда Если ТЗШКоды.НайтиЗначение(ВремТовар, стр, "Номенклатура") = 1 Тогда; АктивизироватьСтроку(стр); Если ПустоеЗначение(КодМаркировки) = 0 Тогда АктивизироватьСтроку(стр + 1); КонецЕсли; КонецЕсли; Иначе КодМаркировки = Штрихкод; КонецЕсли; глСканерПосылкаДанных(1); Иначе глОбработкаВнешнегоСобытия(Источник, Событие, Данные); КонецЕсли; При этом коде, все выполняется корректно но лишь до 2ой позиции, тоесть я пикаю товар, пикаю кодмаркировки, перешло ниже, пикаю еще раз, перешло ниже, потом пикаю и все замерло, в отладчике поймать не смог, условия все выполняются | ||
Mafiozaa 1 - 25.01.21 - 04:20 | Один косяк нашел, устранил, при каждом пике стр = 0, поменял на штатное НомерСтроки | ||
Mafiozaa 2 - 25.01.21 - 04:20 | Теперь одну позицию пикаю, все условия проходят, а вторую позицию пикаю, не проходит условие Если ТЗШКоды.НайтиЗначение(ВремТовар, стр, "Номенклатура") = 1 Тогда; АктивизироватьСтроку(стр); КонецЕсли; | ||
Mafiozaa 3 - 25.01.21 - 04:24 | ТЗШкоды.НайтиЗначение(ВремТовар, НомерСтроки, "Номенклатура") - Возвращает 0, хотя товар есть в колонке "Номенклатура" | ||
Cthulhu 4 - 25.01.21 - 04:33 | (3): какой наф НомерСтроки??? | ||
Cthulhu 5 - 25.01.21 - 04:34 | в отладчике ТЗШкоды.НайтиЗначение(ВремТовар, , "Номенклатура") что дает? | ||
Mafiozaa 6 - 25.01.21 - 04:34 | (4) НомерСтроки
Синтаксис: НомерСтроки Назначение: Доступ к номеру строки многострочной части документа. Замечание: Атрибут имеет смысл только при выбранной строке. Подробнее см. в документации, глава 'Работа с Документами' | ||
Mafiozaa 7 - 25.01.21 - 04:34 | (5) На одну позицию ворачивает 1, на другую позицию 0 | ||
Mafiozaa 8 - 25.01.21 - 04:35 | При всем при том, что обе находятся в колонке номенклатура | ||
Mafiozaa 9 - 25.01.21 - 04:38 | Тоесть 2 позиции в колонке номенклатура, одну ищет, другую нет | ||
Cthulhu 10 - 25.01.21 - 04:39 | значит нету. тип не совпадает (того что ищешь и того что там есть) | ||
Mafiozaa 11 - 25.01.21 - 04:40 | ТЗШкоды.НайтиЗначение(ВремТовар, , "Номенклатура") отладчик 1 вернул | ||
Mafiozaa 12 - 25.01.21 - 04:40 | (11) Без номерастроки | ||
Cthulhu 13 - 25.01.21 - 04:42 | |||
Mafiozaa 14 - 25.01.21 - 04:42 | (12) Но теперь нет привязки к строке, и пикая любую позицию переходит ниже | ||
Cthulhu 15 - 25.01.21 - 04:43 | если в этом параметре (номер строки) задать ненулевое значение - то поиск будет выполться только(!) в указанной строке. | ||
Mafiozaa 16 - 25.01.21 - 04:44 | (15) С стр, максимум 2 раза вниз уходит,и все | ||
Mafiozaa 17 - 25.01.21 - 04:45 | (16) Перем Стр; ПриОткрытии Стр = 0 ОбработкаВнешСобытия Если ТЗШКоды.НайтиЗначение(ВремТовар, Стр , "Номенклатура") = 1 Тогда; Находит, но всего 2 раза вниз могу уйти и привет котенку | ||
Cthulhu 18 - 25.01.21 - 04:47 | (16): как напрограммировано - так и делает. при этом находит то что есть (вопреки вашим утверждениям).
программируйте не хрензнаетчто а то что надо - и будет вам щястье. | ||
Cthulhu 19 - 25.01.21 - 04:48 | и - научитесь разговаривать не на птичьем языке. а то по вашим объяснениям - только вам самому понятно что вы имеете ввиду и что надо | ||
Mafiozaa 20 - 25.01.21 - 04:48 | (18) Я понимаю что как ему указано так он и делает, но в чем же я неправильно ему указываю | ||
Cthulhu 21 - 25.01.21 - 04:49 | (20): да хрен его знает что вам надо... | ||
Mafiozaa 22 - 25.01.21 - 04:50 | (19) Логика какая, я пикаю штрихкод товара (EAN - 13) он позиционируется на товаре, пикаю код маркировки, он заносит в соседнюю колонку.
Следом я пикаю опять EAN13 он позиционируется на след строке | ||
Cthulhu 23 - 25.01.21 - 04:51 | и - да, главное.
если вы только начинаете - не надо ковыряться в 7-ке. надо идти ковыряться в 8-ку. оставьте семерку старым пердунам вроде меня. она (7-ка) все равно после 2037-го года перестанет работать (не верите - поставьте системную дату на 2038 и попробуйте запустить 7-ку))) | ||
Cthulhu 24 - 25.01.21 - 04:53 | (22) а в тз точно ли все товары есть с теми еан-ами что вы пропикиваете? | ||
Mafiozaa 25 - 25.01.21 - 04:54 | (23) В ТЗ или табличной части? В табличной части точно, а тз щас проверю | ||
Cthulhu 26 - 25.01.21 - 04:55 | ну если у вас ТЗШКоды отличается от таб.части - то вообще нифига не должно работать... | ||
Cthulhu 27 - 25.01.21 - 04:55 | т.к. ищете в ТЗШКоды - а значение реквизита устанавливаете в таб.части | ||
Mafiozaa 28 - 25.01.21 - 04:57 | (24) А как оно может ТЗШкоды быть различным, если я в нее выгружаю табличную часть | ||
Mafiozaa 29 - 25.01.21 - 05:00 | (27)
ТЗШкоды.НайтиЗначение(ВремТовар, , "Номенклатура") = 1 ТЗШкоды.Номенклатура = Супер-клей Момент для Обуви на блистер карте 3гр. 12шт. [12;!] ТЗШкоды.КодТовара = "4600611312194" Данные = "4600611312194" С отладчика | ||
Mafiozaa 30 - 25.01.21 - 05:00 | Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)  // Процедура разбирает штрих-код, считанный сканером  // и заполняет строки накладной Перем Упаковка,ТекКоличество, Спецификация; Перем ВремТовар, ВремЕдиница, ВремКоличество, ВремЦена; Перем СтрокаВозврЦена; Если Событие = "BarCodeValue" Тогда Штрихкод = СокрЛП(Данные); Если глПолучитьТоварПоШтрихкоду(Штрихкод, ВремТовар, ВремЕдиница, ВремКоличество) = 1 Тогда Если ТЗШКоды.НайтиЗначение(ВремТовар, НомерСтроки , "Номенклатура") = 1 Тогда; АктивизироватьСтроку(НомерСтроки); Если ПустоеЗначение(КодМаркировки) = 0 Тогда Сообщить(ПустоеЗначение(КодМаркировки)); АктивизироватьСтроку(НомерСтроки + 1); КонецЕсли; Иначе Если ТЗШКоды.НайтиЗначение(ВремТовар, Стр , "Номенклатура") = 1 Тогда; АктивизироватьСтроку(Стр); Если ПустоеЗначение(КодМаркировки) = 0 Тогда Сообщить(ПустоеЗначение(КодМаркировки)); АктивизироватьСтроку(Стр + 1); КонецЕсли; КонецЕсли; КонецЕсли; Иначе КодМаркировки = Штрихкод; КонецЕсли; глСканерПосылкаДанных(1); Иначе глОбработкаВнешнегоСобытия(Источник, Событие, Данные); КонецЕсли; КонецПроцедуры// ОбработкаВнешнегоСобытия() Вот такой код работает, более менее правильно Рекламное место пустует | ||
Cthulhu 31 - 25.01.21 - 05:03 | (30) то за говнокод? Если ТЗШКоды.НайтиЗначение(ВремТовар, НомерСтроки , "Номенклатура") = 1 Тогдавыполнится ТОЛЬКО ели раньше была активизирована строка таб.части, в которой стоит тот товар, который только что пропикали. хрень какая-то вместо поиска. но если вас устраивает - то вперед. удачи. | ||
Mafiozaa 32 - 25.01.21 - 05:04 | Не это фигня какая то, не то пальто | ||
Mafiozaa 33 - 25.01.21 - 05:05 | (31) А разве он активизирует строку не при условии что находит это значение в ТЗШкоды? | ||
Cthulhu 34 - 25.01.21 - 05:05 | (31): и даже не так, а ещё кривее. только если в той же (по номеру) строке, которая активна в таб.части, та же самая номенклатура, что в тз. если таб.часть и тз синхронные - то это уловие будет выполняться всегда. если не синхронны - то не будет выполняться никогда. | ||
Cthulhu 35 - 25.01.21 - 05:06 | (33): еслинаходит в строке(!) тз с тем же номером. что активна в таб.части. | ||
Mafiozaa 36 - 25.01.21 - 05:07 | (34) Хорошо, как мне нужно это все переделать? | ||
Cthulhu 37 - 25.01.21 - 05:08 | (36) за вас сделать работу?
потому что все подсказки уже вроде дали. и то именно неясно - не понятно. | ||
Mafiozaa 38 - 25.01.21 - 05:10 | (37) Нет, за меня делать ничего не нужно, спасибо за отклик | ||
Bigbro 39 - 25.01.21 - 05:10 | Если ТЗШКоды.НайтиЗначение(ВремТовар, НомерСтроки , "Номенклатура") = 1 Тогда; это надо убрать, вторую часть оставить, но стр =0 добавить, не вижу где она обнуляется. | ||
Mafiozaa 40 - 25.01.21 - 05:13 | (39) Так она тогда при каждом пике будет обнулятся | ||
Mafiozaa 41 - 25.01.21 - 05:18 | (39) Ну, дальше второй позиции не ухожу | ||
hhhh 42 - 25.01.21 - 05:19 | (40) тебе нужно перед каждым пиком обнулять: стр = 0. Сначала это было, а потом ты выкинул. | ||
Mafiozaa 43 - 25.01.21 - 05:21 | (42) Я вернул, обнуляю каждый пиком стр, и дальше второй строки не ухожу | ||
Mafiozaa 44 - 25.01.21 - 05:23 | (43) Но на другую позицию прыгает, и так же не более двух строк вниз | ||
Mafiozaa 45 - 25.01.21 - 05:27 | (42) Нашел строку -> Активизировал -> КодМаркировки заполнен -> Активизировал +1 и все, а дальше ничего | ||
Bigbro 46 - 25.01.21 - 05:31 | (43) тебе и надо обнулять на каждом.
у тебя событие случилось - ты по новой ищешь код если не находишь дальше 2й строки - может у тебя в данных ерунда. попробуй впереди этих строк 1-2 которые находятся вставить другие строки. | ||
Mafiozaa 47 - 25.01.21 - 05:35 | (46) Ну данные то одни и те же, если находит первую строку, вторую строку, почему не находит 7,10? | ||
Mafiozaa 48 - 25.01.21 - 05:38 | |||
Mafiozaa 49 - 25.01.21 - 05:39 | Это вот, дохожу до второй строки, дальше не иду, пикаю другую позицию прыгает на 12 строку, и дальше тоже мрем | ||
Bigbro 50 - 25.01.21 - 05:43 | так у тебя одинаковая номенклатура, она у тебя и находится, что не так?
по какому принципу у тебя должна найтись не 1я строка? | ||
Mafiozaa 51 - 25.01.21 - 05:44 | (50) По заполненности кодамаркировки | ||
Mafiozaa 52 - 25.01.21 - 05:44 | (50) Смотрю вижу что в этой строке код маркировки заполнен, перейти к следущей | ||
Cthulhu 53 - 25.01.21 - 05:45 | [1с]
// ВНИМАНИЕ!!! ПЕРЕД ТЕМ КАК НАЧИНАТЬ ПРОПИКИВАТЬ - надо в том месте, где создается // ТЗШКоды, в самый конец уэе заполненной в соответствии с таб.частью тз - добавить // вустую чтроку! тупо вот так: ТЗШКоды.НоваяСтрока(); // чтобы запоминать ошибку поиска ШК Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные) // Процедура разбирает штрих-код, считанный сканером и заполняет строки накладной Перем Упаковка,ТекКоличество, Спецификация; Перем ВремТовар, ВремЕдиница, ВремКоличество, ВремЦена; Перем СтрокаВозврЦена; Если Событие = "BarCodeValue" Тогда Штрихкод = СокрЛП(Данные); Если глПолучитьТоварПоШтрихкоду(Штрихкод, ВремТовар, ВремЕдиница, ВремКоличество) = 1 Тогда тСтр = 0; Если ТЗШКоды.НайтиЗначение(ВремТовар, тСтр , "Номенклатура") = 1 Тогда; АктивизироватьСтроку(тСтр); Сообщить("по ШК("+Штрихкод+") товар """ +ВремТовар+""" найден в строке "+НомерСтроки+" ...","."); ТЗШКоды.ПолучитьСтрокуПоНомеру(тСтр); Иначе АктивизироватьСтроку(тСтр); Сообщить("по ШК("+Штрихкод+") товар """ +ВремТовар+""" НЕ найден документе!","!!!"); ТЗШКоды.ПолучитьСтрокуПоНомеру(ТЗШКоды.КоличествоСтрок()); КонецЕсли; ИначеЕсли ТЗШКоды.НомерСтроки<ТЗШКоды.КоличествоСтрок() Тогда Сообщить(СимволТабуляции+"... и в этой строке "+?(КодМаркировки =0,"устоновлен Код маркировки ","Код маркировки "+КодМаркировки+" заменен на ")+Штрихкод,""); КодМаркировки = Штрихкод; Иначе Сообщить(СимволТабуляции+"(непонятно куда всунуть Код маркировки "+Штрихкод+"...","!"); КонецЕсли; глСканерПосылкаДанных(1); Иначе глОбработкаВнешнегоСобытия(Источник, Событие, Данные); КонецЕсли; КонецПроцедуры// ОбработкаВнешнегоСобытия() [/1С] | ||
Mafiozaa 54 - 25.01.21 - 05:49 | (53) Красавчик конечно, спасибо, но если дублей небыло бы, было бы сказочно | ||
hhhh 55 - 25.01.21 - 05:55 | (54) так тебе нужно просто сформировать список дублей, а потом спокойно их в цикле их обработать. Нахрена тут найти каждый раз? | ||
Cthulhu 56 - 25.01.21 - 06:15 | (54) совсем ленивый?
ИначеЕсли ТЗШКоды.НомерСтроки<ТЗШКоды.КоличествоСтрок() Тогда тСтр=НомерСтроки; Пока Номерклатура=ТЗШКоды.Номерклатура Цикл Сообщить(СимволТабуляции+"в строке "+НомерСтроки+" для """+Номерклатура+"""" +?(КодМаркировки=0,"устоновлен Код маркировки ","Код маркировки "+КодМаркировки +" заменен на ")+Штрихкод,""); КодМаркировки = Штрихкод; тСтр=тСтр+1; Если тСтр>КоличествоСтрок() Тогда Прервать Иначе АктивизироватьСтроку(тСтр) КонецЕсли; КонецЦикла; Сообщить("=== Всего по номенклатуре """+ТЗШКоды.Номенклатура+""" Код маркировки " +Штрихкод+" установлен в "+(тСтр-ТЗШКоды.НомерСтроки)+" строках.","i"); | ||
Bigbro 57 - 25.01.21 - 06:55 | а когда закончатся строки в таблице с незаполненными Маркировками и придет событие с тем же штрихом - что делать? | ||
Mafiozaa 58 - 25.01.21 - 07:01 | (56) Не ленивый, а не соображающий, ну не идет у меня)) | ||
Mafiozaa 59 - 25.01.21 - 07:12 | (56) Не выходит | ||
Bigbro 60 - 25.01.21 - 07:18 | у тебя в 0 почти рабочий код только вместо вот этого Если ПустоеЗначение(КодМаркировки) = 0 Тогда АктивизироватьСтроку(стр + 1); КонецЕсли; сделай цикл по таблице начиная с стр и до конца таблицы.в цикле проверяй ПустоеЗначение(КодМаркировки) чтобы найти очередную пустую строку и дополнительно проверяй ВремТовар на равенство, чтобы не закончились пустые строки и ты не начал писать штрихи в другой товар. и все. Рекламное место пустует | ||
Mafiozaa 61 - 25.01.21 - 07:47 | (60) Пробую, отпишусь | ||
Mafiozaa 62 - 25.01.21 - 08:10 | (60) По пустой строке разобрался, но если пикаю другой товар, то переходит ниже, а не позиционнируется на пикнутой позиции | ||
Bigbro 63 - 25.01.21 - 08:19 | ну значит снова где то накуролесил)отладчик в зубы и вперед. задача то простая. | ||
Mafiozaa 64 - 25.01.21 - 08:23 | (63) Согласен, буду лазить, все равно спасибо)) |
|
Список тем форума |