Имя: Пароль:
1C
1С v8
Проверка дублей номенклатуры в ТабЧасти документа
,
0 Tihon_aka_kot
 
08.09.16
15:55
на приемке товара (кадастровые доки, по 6тыщ в день принимают) человек со сканером пикает штришкод и вносит номенклатуру в табчасть документа ПриходнаяНакладная. Иногда эти штрихкоды дублируются. Нужно гдето (наверно в модуле формы) написать код, да такой, чтоб оперативно, каждый пик сканера проверял табЧасть: есть ли в ней уже такая номенклатура с таким же названием. если есть - то выводил сообщение (ном строки. + Номенклатура. + "уже есть такое").

Подозрение на Процедура НомеклатураПриИзменении() на форме. Но тяжко с клинСерверными штуками мне приходится, запрос на сервере, отработать на клиенте итп. торможу, но учусь потихонечку... Спасибо этому форуму!

Может кто делал похожее, не прошу чтобы в лоб решение тыкали, а хотяб намек или наводку какую дали... куда копать то?
1. Докуемнт получается еще не записан, как к табЧасти обратиться?
2. В каком модуле и в какой процедуре писать код?
3. Структура примерно какая?? (запрос-обработка-сообщить, или чз ТЗ встречал старинные решения которые на 8.3 уже не отрабатывают)
Конфа УТ 11.2   8.3
1 aleks_default
 
08.09.16
16:07
Ты хотя бы пойми какую процедуру вызывает штрихкодирование.
2 aleks_default
 
08.09.16
16:08
И дальше уже можно будет разговаривать...
3 Tihon_aka_kot
 
09.09.16
09:35
(2) так может мне не нужна процедура штрихкодирования. МНе нужен момент добавления номенклатуры в табчасть. Вдруг вручную будут вводить, вдруг сканер умрет итп.

Процедуру штрихкодирования я видел в модуле формы.
Давай дальше разговаривать!)
4 aleks_default
 
09.09.16
09:38
(3) Ну так найди этот момент. Я именно про это и писал в (1).
5 Tihon_aka_kot
 
09.09.16
10:05
(4) отладчик говорит что когда мы взаимодействуем со строками табЧасти сразу включается
Процедура ТоварыПриАктивизацииЯчейки(Элемент)
вот с ней я хочу помудрить.

думаю пока так:
выше нее
&НаСервере
Функция ПолучитьТЗ ()
ТЗ = Объект.Товары.Выгрузить();
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка",ТЗ);
Запрос.Текст = "ВЫБРАТЬ
               |    ПоступлениеТоваровУслугТовары.Номенклатура.Код,
               |    КОЛИЧЕСТВО(ПоступлениеТоваровУслугТовары.Номенклатура.Наименование) КАК НоменклатураНаименование
               |ИЗ
               |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
               |ГДЕ
               |    ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка
               |
               |СГРУППИРОВАТЬ ПО
               |    ПоступлениеТоваровУслугТовары.Номенклатура.Код";
РезультатЗапроса = Запрос.Выполнить().Выгрузить();


а потом на клиенте помудрить с результатом запроса в
Процедура ТоварыПриАктивизацииЯчейки(Элемент)
6 Serg_1960
 
09.09.16
10:17
Во-первых код не нужно анализировать, достаточно Номенклатуры(ссылка). Во-вторых редактируемый документ ещ не записан в базу, нет смысла анализировать что-либо по его ссылке - её может и не быть (для нового документа). Продолжайте учиться, успехов :)
7 aleks_default
 
09.09.16
10:18
У меня результат штрихкодирования (найденная позиция) обрабатывается в ОбработкаОповещения. Найденная позиция  простым поиском НайтиСтроки() ищется в таб. части документа, если не находится, то добавляется новая строка.
Как это сделано у тебя, я не знаю.
8 CMblCL
 
09.09.16
10:51
(0) Если абстрагироваться от сканера штрихкодирования, то при изменении поля "номенклатура" табличной части провести поиск по тч этой номенклатуры и анализировать результаты этого поиска
9 Tihon_aka_kot
 
09.09.16
10:56
(6) Спасибо!
10 Tihon_aka_kot
 
09.09.16
10:58
(7) Да все так.  в модуле формы дока есть
// Неизвестные штрихкоды
    Если Источник = "ПодключаемоеОборудование"
        И ИмяСобытия = "НеизвестныеШтрихкоды"
        И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
        
        КэшированныеЗначения.Штрихкоды.Очистить();
        ДанныеШтрихкодов = Новый Массив;
        Для Каждого ПолученныйШтрихкод Из Параметр.ПолученыНовыеШтрихкоды Цикл
            ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
        КонецЦикла;
        Для Каждого ПолученныйШтрихкод Из Параметр.ЗарегистрированныеШтрихкоды Цикл
            ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
        КонецЦикла;
        
        ОбработатьШтрихкоды(ДанныеШтрихкодов);
        
    КонецЕсли;

ща попробую пройтись в цикле найти строки() если нашли - то сообщить("")
Независимо от того, куда вы едете — это в гору и против ветра!