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