Имя: Пароль:
1C
1С v8
КД: Добавить запись регистра при переносе.
0 SMakcik
 
09.11.12
14:01
Всем привет!

Стоит такая задача, при переносе данных с УТ в Розницу если у товара и характеристики не существует штрихкода, то его нужно сформировать виртуально и отправить в приемник.

Делаю так:


КоллекцияОбъектов = Новый ТаблицаЗначений;
КоллекцияОбъектов.Колонки.Добавить("Номенклатура");
КоллекцияОбъектов.Колонки.Добавить("Количество");
КоллекцияОбъектов.Колонки.Добавить("КоличествоУпаковок");
КоллекцияОбъектов.Колонки.Добавить("Характеристика");

МенеджерШтрихкодов = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
Отбор = Новый ТаблицаЗначений;
Отбор.Колонки.Добавить("Использование");
Отбор.Колонки.Добавить("Имя");
Отбор.Колонки.Добавить("Значение");

Для Каждого СтрокаТаблицыТоваров ИЗ Источник.Товары Цикл
   
   МенеджерШтрихкодов.Отбор.Владелец.Установить(СтрокаТаблицыТоваров.Номенклатура);
   Если СтрокаТаблицыТоваров.Номенклатура.ВестиУчетПоХарактеристикам Тогда
       МенеджерШтрихкодов.Отбор.ХарактеристикаНоменклатуры.Установить(СтрокаТаблицыТоваров.ХарактеристикаНоменклатуры);
   Иначе    
       МенеджерШтрихкодов.Отбор.ХарактеристикаНоменклатуры.Установить(Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
   КонецЕсли;
   
   МенеджерШтрихкодов.Прочитать();
   Если МенеджерШтрихкодов.Количество() > 0 Тогда
       ИсходящиеДанные = Новый Структура;
       ИсходящиеДанные.Вставить("Штрихкод", МенеджерШтрихкодов[0].Штрихкод);
       
       // Установим характеристику для штрихкода
       Если СтрокаТаблицыТоваров.Номенклатура.ВестиУчетПоХарактеристикам Тогда
           ИсходящиеДанные.Вставить("Характеристика", СтрокаТаблицыТоваров.ХарактеристикаНоменклатуры);
       Иначе
           ИсходящиеДанные.Вставить("Характеристика", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
           // Запомним штрихкод с пустой характеристикой
           ШтрихкодСПустойХарактеристикой = "";
           ШтрихкодСПустойХарактеристикой = МенеджерШтрихкодов[0].Штрихкод;
       КонецЕсли;
       
       ИсходящиеДанные.Вставить("ПредставлениеШтрихкода", "");
       ИсходящиеДанные.Вставить("ТипШтрихкода", ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13);
       ИсходящиеДанные.Вставить("Владелец", СтрокаТаблицыТоваров.Номенклатура);
       
       Отбор.Очистить();
       СтрокаОтбора = Отбор.Добавить();
       СтрокаОтбора.Использование = Истина;
       СтрокаОтбора.Имя = "Владелец";
       СтрокаОтбора.Значение = СтрокаТаблицыТоваров.Номенклатура;
       
       ИсходящиеДанные.Вставить("Отбор", Отбор);
       
       //Отбор.Очистить();
       //ЭлементОтбора = Отбор.Добавить("");
       
       ВыгрузитьРегистр(ИсходящиеДанные, Правила["Штрихкоды"], ИсходящиеДанные, , , "Штрихкоды");
       //ВыгрузитьПоПравилу(ИсходящиеДанные, , ИсходящиеДанные, , "Штрихкоды");
   КонецЕсли;    
   
   Если СтрокаТаблицыТоваров.Номенклатура.ВестиУчетПоРазмерам Тогда
       Для к = 1 ПО глОбщееКоличествоРазмеров Цикл
           Если СтрокаТаблицыТоваров["КоличествоРазмер" + Строка(к)] > 0 Тогда
               НоваяСтрока = КоллекцияОбъектов.Добавить();
               НоваяСтрока.Номенклатура = СтрокаТаблицыТоваров.Номенклатура;
               НоваяСтрока.Характеристика = СтрокаТаблицыТоваров["Размер" + Строка(к)];
               НоваяСтрока.Количество = СтрокаТаблицыТоваров["КоличествоРазмер" + Строка(к)];
               НоваяСтрока.КоличествоУпаковок = СтрокаТаблицыТоваров["КоличествоРазмер" + Строка(к)];
               
               МенеджерШтрихкодов.Отбор.ХарактеристикаНоменклатуры.Установить(СтрокаТаблицыТоваров["Размер" + Строка(к)]);
               МенеджерШтрихкодов.Прочитать();
               
               // В том случае если существует штрихкод для размера, то выгрузим его
               // В противном случае сформируем виртуальный штрихкод
               Если МенеджерШтрихкодов.Количество() > 0 Тогда
                   ИсходящиеДанные = Новый Структура;
                   ИсходящиеДанные.Вставить("Штрихкод", МенеджерШтрихкодов[0].Штрихкод);
                   ИсходящиеДанные.Вставить("ПредставлениеШтрихкода", "");
                   ИсходящиеДанные.Вставить("Характеристика", СтрокаТаблицыТоваров["Размер" + Строка(к)]);
                   ИсходящиеДанные.Вставить("ТипШтрихкода", ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13);
                   ИсходящиеДанные.Вставить("Владелец", СтрокаТаблицыТоваров.Номенклатура);
                   
                   Отбор.Очистить();
                   СтрокаОтбора = Отбор.Добавить();
                   СтрокаОтбора.Использование = Истина;
                   СтрокаОтбора.Имя = "Владелец";
                   СтрокаОтбора.Значение = СтрокаТаблицыТоваров.Номенклатура;
                   
                   //СтрокаОтбора = Отбор.Добавить();
                   СтрокаОтбора.Использование = Истина;
                   СтрокаОтбора.Имя = "Характеристика";
                   СтрокаОтбора.Значение = СтрокаТаблицыТоваров["Размер" + Строка(к)];
                   
                   ИсходящиеДанные.Вставить("Отбор", Отбор);
                   
                   ВыгрузитьРегистр(ИсходящиеДанные, Правила["Штрихкоды"], ИсходящиеДанные, , , "Штрихкоды");
                   //ВыгрузитьПоПравилу(ИсходящиеДанные, , ИсходящиеДанные, , "Штрихкоды");
               Иначе    
                   ШтрихкодДляВыгрузки = "";
                   ШтрихкодДляВыгрузки = ШтрихкодСПустойХарактеристикой;
                   ШтрихкодДляВыгрузки = Лев(СокрЛП(СтрокаТаблицыТоваров["Размер" + Строка(к)].Наименование), 2) + Сред(ШтрихкодДляВыгрузки, 3, 10);
                   ШтрихкодДляВыгрузки = ШтрихкодДляВыгрузки + РаботаСТорговымОборудованием.КонтрольныйСимволEAN(ШтрихкодДляВыгрузки, ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13);
                   
                   ИсходящиеДанные = Новый Структура;
                   ИсходящиеДанные.Вставить("Штрихкод", ШтрихкодДляВыгрузки);
                   ИсходящиеДанные.Вставить("ПредставлениеШтрихкода", "");
                   ИсходящиеДанные.Вставить("Характеристика", СтрокаТаблицыТоваров["Размер" + Строка(к)]);
                   ИсходящиеДанные.Вставить("ТипШтрихкода", ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13);
                   ИсходящиеДанные.Вставить("Владелец", СтрокаТаблицыТоваров.Номенклатура);
                   
                   Отбор.Очистить();
                   СтрокаОтбора = Отбор.Добавить();
                   СтрокаОтбора.Использование = Истина;
                   СтрокаОтбора.Имя = "Владелец";
                   СтрокаОтбора.Значение = СтрокаТаблицыТоваров.Номенклатура;
                   
                   //СтрокаОтбора = Отбор.Добавить();
                   СтрокаОтбора.Использование = Истина;
                   СтрокаОтбора.Имя = "Характеристика";
                   СтрокаОтбора.Значение = СтрокаТаблицыТоваров["Размер" + Строка(к)];
                   
                   ИсходящиеДанные.Вставить("Отбор", Отбор);

                   ВыгрузитьРегистр(ИсходящиеДанные, Правила["Штрихкоды"], ИсходящиеДанные, , , "Штрихкоды");
                   //ВыгрузитьПоПравилу(ИсходящиеДанные, , ИсходящиеДанные, , "Штрихкоды");
               КонецЕсли;    
           КонецЕсли;
       КонецЦикла;    
   Иначе
       
       НоваяСтрока = КоллекцияОбъектов.Добавить();
       НоваяСтрока.Номенклатура = СтрокаТаблицыТоваров.Номенклатура;
       НоваяСтрока.Характеристика = СтрокаТаблицыТоваров.ХарактеристикаНоменклатуры;
       НоваяСтрока.Количество = СтрокаТаблицыТоваров.Количество;
       НоваяСтрока.КоличествоУпаковок = СтрокаТаблицыТоваров.Количество;

   КонецЕсли;    
   
КонецЦикла    

Ничего не выходит. Может кто наталкнет на мысль
1 SMakcik
 
09.11.12
14:07
Написанный код располагается в обработчике ПередВыгрузкой табличной части "Товары" документа
2 Wobland
 
09.11.12
14:08
что-то многовато кода для формирования ШК
3 SMakcik
 
09.11.12
14:12
Ну я пытался разными способами подсунуть виртуальный штрихкод, но никак не получается.

Много потому-что формируется исходящие данные.

В источнике хранится один штрихкод (без характеристики. но возможно и хранение штрихкода для характеристикой), а в приемник нужно передать штрихкода на все характеристики.
4 SMakcik
 
09.11.12
14:13
Источник не хочется захламлять ненужной информацией