Загрузка товаров из внешних файлов в произвольный документ (УТ11, КА2, ERP; Розница 2)

13.01.23

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Речь пойдет о том, как типовой механизм "Загрузки из внешнего файла" прикрутить к, по сути, любому документу, где есть табличная часть Товары. Пример приведен на Перемещении товаров, и с каждым документом может быть своя специфика, но общий механизм совпадет. В приложенном готовом варианте расширения механизм подключен еще к двум документам - Списаниям и Оприходованиям.

На Инфостарте (да и в интернете) предлагают различные способы загрузки из внешних файлов. Это действительно часто помогает пользователям (если, конечно, файл имеет какую-то повторяющуюся структуру).

И - иногда люди хотят видеть именно загрузку из Excel-файла, а иногда .. привыкают к тому механизму, который уже реализовала 1с (но, почему-то, далеко не во всех документах).

Так случилось и в этот раз - пользователи обратились с пожеланием, чтобы в "Перемещении товаров" был такой же механизм, как и в поступлении ("Заполнить - Загрузить из внешнего файла").

 

Итак.

Механизм задействует две ключевые вещи:

1. Запуск обработки с формы документа - "Обработка.ЗагрузкаДанныхИзВнешнихФайлов";

2. Заполнение документа по данным обработки через событие формы "Обработка выбора".

**Обновлено 25.04.2020

Протестировано на 1С:Комплексная автоматизация 2 (2.4.11.65)

Код подходит для документов Оприходование Излишков Товаров и Списание Недостач Товаров, кроме вот этой строки

//специфика перемещения ++
   СтрокаТЧТовары.КодСтроки=0;//код строки заказа
//специфика перемещения --

**Обновлено 23.12.2020

1. Протестировано на УТ 11.4.13

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

**Обновлено 09.01.2022

1. Для Розницы тоже подходит (но листинг несколько отличается). Добавлено отдельное расширение под Розницу.
2. Протестировано на Розница 8, редакция 2.3 (2.3.10.36)

**Обновлено 28 .07.2022

Протестировано на 1С:Комплексная автоматизация 2 (2.5.8.232)

**Обновлено 24.08.2022

Внесена небольшая правка в Перемещение (Версии для КА,УТ,ERP)

**Обновлено 13.01.2023

Внесена небольшая правка во "Внутреннее потребление" (Версии для КА 2.5.10,УТ,ERP) [изменено имя метаданных в поставке]

Протестировано на  1С:Комплексная автоматизация 2 (2.5.10.52) 

Реализация

1. Забираем в расширение форму документа "Перемещение товаров".

2. Создаем новую команду - "ЗагрузитьИзВнешнегоФайла", и создаем такой обработчик

&НаКлиенте
Процедура ЗагрузитьИзВнешнегоФайла(Команда)
	
    ОтборТовар = Новый Массив(1);
    ОтборТовар[0] = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Товар");
    
    ПараметрыФормы = Новый Структура();
    ПараметрыФормы.Вставить("ЗагружатьКоличество", Истина);
    ПараметрыФормы.Вставить("ЗагружатьЦены", Ложь);
    ПараметрыФормы.Вставить("ЗагружатьСуммы", Ложь);
    ПараметрыФормы.Вставить("ЦенаВключаетНДС", ложь);
    //ПараметрыФормы.Вставить("Партнер", Объект.Партнер);
    //ПараметрыФормы.Вставить("СопоставлятьПоНоменклатуреПоставщиков", Истина);
    ПараметрыФормы.Вставить("ЗагружатьГТД", Ложь);
    
    ПараметрыФормы.Вставить("ЗагружатьЗапасы",           Ложь);
    ПараметрыФормы.Вставить("ЗагружатьСкидки",           Ложь);
    ПараметрыФормы.Вставить("ЗагружатьУпаковочныеЛисты", Ложь);
    
    ПараметрыФормы.Вставить("ПересчитыватьСуммы", Истина);
    ПараметрыФормы.Вставить("ЦенаВключаетНДС",    Истина);
    ПараметрыФормы.Вставить("Организация",        Неопределено);
    ПараметрыФормы.Вставить("НалогообложениеНДС",
        ПредопределенноеЗначение("Перечисление.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС"));
    
    ПараметрыФормы.Вставить("ОтборПоТипуНоменклатуры", Новый ФиксированныйМассив(ОтборТовар));
    ПараметрыФормы.Вставить("ИмяТЧ", "Товары");
    ПараметрыФормы.Вставить("ЗагружатьСкидки", Ложь);
    ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Загрузка товаров из внешних файлов'"));
    ПараметрыФормы.Вставить("ПараметрыОтбора", Новый Структура);
    ПараметрыФормы.Вставить("ДатаЗаполнения",     '00010101');
    
    
    Оповещение = Новый ОписаниеОповещения("ЗагрузитьИзВнешнегоФайлаЗавершение", ЭтотОбъект, "Товары");
    РаботаСТабличнымиЧастямиКлиент.ПоказатьФормуЗагрузкиНоменклатуры(ПараметрыФормы, Оповещение);

	
КонецПроцедуры

3. Создаем оповещение, на которое мы сослались в предпоследней строке

4. Из него вызовем функцию "ПолучитьЗагруженныеТоварыИзХранилища", которую тут же и опишем. Сделано по аналогии с функцией в "Приобретении товаров и услуг", но выброшена часть кода.

&НаКлиенте
Процедура ЗагрузитьИзВнешнегоФайлаЗавершение(АдресЗагруженныхДанных, ДополнительныеПараметры) Экспорт

    Если ЗначениеЗаполнено(АдресЗагруженныхДанных) Тогда
        ПолучитьЗагруженныеТоварыИзХранилища(АдресЗагруженныхДанных, ДополнительныеПараметры);
    КонецЕсли;

КонецПроцедуры


&НаСервере
Процедура ПолучитьЗагруженныеТоварыИзХранилища(АдресТоваровВХранилище, ИмяТЧ)

	ТоварыИзХранилища = ПолучитьИзВременногоХранилища(АдресТоваровВХранилище);
    
    КэшированныеЗначения = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
    
    СтруктураДействий = Новый Структура;
    //СтруктураДействий.Вставить("ЗаполнитьНоменклатуруПоставщикаПоНоменклатуре", Объект.Партнер);
        
    Для Каждого СтрокаТоваров Из ТоварыИзХранилища Цикл
        СтрокаТЧТовары = Объект[ИмяТЧ].Добавить();
        ЗаполнитьЗначенияСвойств(СтрокаТЧТовары, СтрокаТоваров);
        Если ИмяТЧ = "Товары" Тогда
            ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаТЧТовары, СтруктураДействий, КэшированныеЗначения);
        КонецЕсли;
                //специфика перемещения ++
                СтрокаТЧТовары.КодСтроки=0;//код строки заказа
                //специфика перемещения --
    КонецЦикла;


КонецПроцедуры

Если есть желание поскорее окунуться в работу (и доработку механизма для своих задач), во вложении - готовое расширение.

Проверено на следующих конфигурациях и релизах:

  • 1С:Комплексная автоматизация 2, релизы 2.5.22.149, 2.5.10.93, 2.5.8.378, 2.4.9.82
  • Розница, редакция 2.3, релизы 2.3.20.38

Вступайте в нашу телеграмм-группу Инфостарт

обработка загрузка excel таблица табличный внешний файл