Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Переход к следующей строке во внешнем событии

v7: Переход к следующей строке во внешнем событии
Я
   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
(11),(12): блин. еще раз. какой нафиг номерстроки??? там должнно быть тстр, которое на момент поиска равно нулю - тогда при успешном поиске в тстр будет искомй номер строки.
читать документацию - срочно!
(по НайтиЗначение в частности)
   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) Согласен, буду лазить, все равно спасибо))


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.