Имя: Пароль:
1C
1С v8
Штрихкоды и 17 тысяч накладных.
0 Crimscon
 
13.08.18
10:59
Есть документ "Рейсовая накладная". В этом документе имеется табличная часть "Документы Рейса", где прописываются данные о реализации товара, контрагент, сумма документа и штрихкод точки доставки с учетом даты рейсовой накладной (нужно для сканеров). Запись штрихкода табличной части осуществляется при заполнении формы документа (1С 8.2 УПП).

Проблема в том, что в самом документе может быть в районе 20 реализаций, а из-за формирования штрихкода постоянно создаются новые пустые строки, которые заполнены только штрихкодом, и чем дольше открыт документ - тем больше строк (я дошел случайно до 17 тысяч). Создается по 300 строк в секунду примерно, поэтому удалять их не вариант.

Этот же штрихкод формируется при печатании документа (суть в том, что человек сканирует штрихкод документа на бумаге, ему выдается наименование контрагента и открываются реализации по этому контрагенту уже в формах сканера).

Так вот. При печати все выводится нормально, а вот при формировании данных формы - нет, хотя прошелся отладчиком - попадают одни и те же данные. Почему не работает?

Код формирования штрихкода:

Функция   СформироватьШтрихкодТД(ТочкаДоставки) Экспорт
    ВнутреннийКод   = 21;
    Стр = ДокументыРейса.Добавить();
    СокрКодТД       = Прав(СокрЛП(ТочкаДоставки.Код), 4) + Прав(Номер, 5);
    КодТД           = Прав("0000000000", 10-СтрДлина(СокрКодТД)) + СокрКодТД;
    СтрокаШтрихкода = "" + ВнутреннийКод + КодТД;
    КонтрСимвол     = КонтрольныйСимволEAN13ТО(СтрокаШтрихкода);
    СтрокаШтрихкода = СтрокаШтрихкода + КонтрСимвол;
    Стр.НевидимыйШтрихкод = СтрокаШтрихкода;
    Возврат СтрокаШтрихкода;    
КонецФункции


Код заполнения данных в форме:
Процедура ДокументыРейсаПриПолученииДанных(Элемент, ОформленияСтрок)
    ФорматКолонки = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(50));
    ЭлементыФормы.ДокументыРейса.Колонки.ТочкаДоставки.УстановитьЭлементУправления(Тип("ПолеВвода"));
    ЭлементыФормы.ДокументыРейса.Колонки.Статус.УстановитьЭлементУправления(Тип("ПолеВвода"));
    ЭлементыФормы.ДокументыРейса.Колонки.Прим.УстановитьЭлементУправления(Тип("ПолеВвода"));
    ЭлементыФормы.ДокументыРейса.Колонки.ТочкаДоставки.ЭлементУправления.ТипЗначения = ФорматКолонки;
    ЭлементыФормы.ДокументыРейса.Колонки.Статус.ЭлементУправления.ТипЗначения        = ФорматКолонки;
    ЭлементыФормы.ДокументыРейса.Колонки.Прим.ЭлементУправления.ТипЗначения = ФорматКолонки;
    
    

    
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
       Документ = ОформлениеСтроки.ДанныеСтроки.Документ;    
    Если ЗначениеЗаполнено(Документ) Тогда
        
            СформироватьШтрихкодТД(Документ.ТочкаДоставки);        
               ОформлениеСтроки.Ячейки.ТочкаДоставки.Значение = Документ.ТочкаДоставки;
            ОформлениеСтроки.Ячейки.Сумма.Значение         = Документ.СуммаДокумента;
            Забрать                                        = РасчетКолонкиЗабрать(Документ);
            ОформлениеСтроки.Ячейки.Забрать.Значение       = Забрать;
            ОформлениеСтроки.Ячейки.Статус.Значение        = МелисаОбщийМодуль.ВернутьПоследныйСтатусДокумента(Документ)[0];
            ОформлениеСтроки.Ячейки.Прим.Значение            = Документ.Комментарий;            
            
            
            Если Не ЗначениеЗаполнено(ОформлениеСтроки.ДанныеСтроки.Контрагент) Тогда
                ОформлениеСтроки.ДанныеСтроки.Контрагент   = ОформлениеСтроки.ДанныеСтроки.Документ.Контрагент;
                ОформлениеСтроки.ДанныеСтроки.Проект       = ОформлениеСтроки.ДанныеСтроки.Документ.Проект;
            КонецЕсли;
        КонецЕсли;    
        
КонецЦикла;
КонецПроцедуры