Использование типовой загрузки данных из табличного документа для загрузки номенклатуры в БП 3.0 УФ

Посмотрел все обработки для загрузки номенклатуры. Ни одна не подошла, поэтому пришлось использовать старую добрую загрузку из табличного документа. Рассказываю, как это сделал и делюсь настройками.

Анализ готовых решений

 

Готовые обработки переноса были слишком простыми и не совсем заточены под Бухгалтерию и Розницу, большинство было под УТ11. К тому же, мне нужно было перенести папку, полное наименование и страну.

 

Вот эта https://infostart.ru/public/256317 не могла грузить полное наименование и страну.

 

Смотрел еще https://infostart.ru/public/96398, https://infostart.ru/public/424406.

 

Были еще платные решения, но на них у меня не было денег.

 

Поэтому пошел своим путем.

Выгрузка из 7.7

 

Выгрузку номенклатуры делал через Refprint, слегка допиленный, скачал с Инфостарта.

 

Получил номенклатуру в плоском табличном виде с наименованиями групп:

 

Данные в Excel перенес через буфер обмена, на больших обменах сохранение в Excel умирает. Теперь нужно было загрузить это добро в БП3.

Запуск 1С в режиме обычного приложения

 

Для работы с типовой обработкой по загрузке из табличного документа нужно было запустить 1С в режиме обычного приложения, для этого я прописал параметр запуска 1С RunModeOrdinaryApplication.

Загрузка данных в БП 3.0

 

В запущенной в режиме обычного приложения 1С открыл обработку и через буфер обмена скопировал таблицу из Excel в 1С:

 

Выбрал загрузку в справочник «Номенклатура».

 

На странице настроек указал ручной порядок нумерации колонок и сделал настройку соответствий:

 

 

Код по кнопке «События» указал такой (нумерация колонок в коде соответствует нумерации колонок в таблице):

 

Сообщить("Объект: " + Объект);
ИскЗн = ТекстыЯчеек[11];
Если
ИскЗн <> "" Тогда
 
Иск = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ИскЗн, истина);
 Если Не
ЗначениеЗаполнено(Иск) Тогда
 
ИскО = Справочники.КлассификаторЕдиницИзмерения.СоздатьЭлемент();
 
ИскО.Наименование = ИскЗн;
 
ИскО.ОбменДанными.Загрузка = истина;
 
ИскО.Записать();
 
Иск = ИскО.Ссылка;
 КонецЕсли;
 
Объект.ЕдиницаИзмерения = Иск;
КонецЕсли;
Сообщить("  Единица: " + Объект.ЕдиницаИзмерения + ":" + ИскЗн);
ИскЗн = ТекстыЯчеек[5];
Если
ИскЗн <> "" Тогда
 
Иск = Справочники.Номенклатура.НайтиПоНаименованию(ИскЗн, истина);
 Если Не
ЗначениеЗаполнено(Иск) Тогда
 
ИскО = Справочники.Номенклатура.СоздатьГруппу();
 
ИскО.Наименование = ИскЗн;
 
ИскО.Записать();
 
Иск = ИскО.Ссылка;
 КонецЕсли;
 
Объект.Родитель = Иск;
КонецЕсли;
Сообщить("  Родитель: " + Объект.Родитель + ":" + ИскЗн);
ИскЗн = ТекстыЯчеек[25];
Если
ИскЗн <> "" Тогда
 
Иск = Справочники.Номенклатура.НайтиПоНаименованию(ИскЗн, истина);
 Если Не
ЗначениеЗаполнено(Иск) Тогда
 
ИскО = Справочники.СтраныМира.СоздатьЭлемент();
 
ИскО.Наименование = ИскЗн;
 
ИскО.ОбменДанными.Загрузка = истина;
 
ИскО.Записать();
 
Иск = ИскО.Ссылка;
 КонецЕсли;
 
Объект.СтранаПроисхождения = Иск;
КонецЕсли;
Сообщить("  Страна происхождения: " + Объект.СтранаПроисхождения + ":" + ИскЗн);

 

После этого запустил загрузку и всё загрузилось по папочкам, с единицами по количеству в упаковке и со странами мира. Примерно 3 000 позиций в данном конкретном случае.

 

 

 

 

Загрузка для Розницы 2.2

Внезапно этот же клиент, игнорируя мои увещевания по настройке обмена, попросил загрузить эту же номенклатуру и в розницу.

 

Пришлось повторить тот же трюк и в рознице, только без единиц.

 

Настройка колонок для Розницы:

 

Код по загрузке аналогичный БП 3.0, только без единиц:

ИскЗн = ТекстыЯчеек[5];
Если
ИскЗн <> "" Тогда
 
Иск = Справочники.Номенклатура.НайтиПоНаименованию(ИскЗн, истина);
 Если Не
ЗначениеЗаполнено(Иск) Тогда
 
ИскО = Справочники.Номенклатура.СоздатьГруппу();
 
ИскО.Наименование = ИскЗн;
 
ИскО.Записать();
 
Иск = ИскО.Ссылка;
 КонецЕсли;
 
Объект.Родитель = Иск;
КонецЕсли;
Сообщить("  Родитель: " + Объект.Родитель + ":" + ИскЗн);

ИскЗн = ТекстыЯчеек[25];
Если
ИскЗн <> "" Тогда
 
Иск = Справочники.Номенклатура.НайтиПоНаименованию(ИскЗн, истина);
 Если Не
ЗначениеЗаполнено(Иск) Тогда
 
ИскО = Справочники.СтраныМира.СоздатьЭлемент();
 
ИскО.Наименование = ИскЗн;
 
ИскО.ОбменДанными.Загрузка = истина;
 
ИскО.Записать();
 
Иск = ИскО.Ссылка;
 КонецЕсли;
 
Объект.СтранаПроисхождения = Иск;
КонецЕсли;
Сообщить("  Страна происхождения: " + Объект.СтранаПроисхождения + ":" + ИскЗн);

К статье прикладываю файлы настроек для загрузки из табличного документа для БП3 и Розницы.

Скачать