//Все настройки выведены сверху для удобства редактирования
НаименованиеНоменклатуры = СокрЛП(ТекстыЯчеек[2]);
Штрихкод = СокрЛП(ТекстыЯчеек[1]);
НомАртикул = СокрЛП(ТекстыЯчеек[3]);
ВидНоменклатуры = справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
ГруппаНоменклатуры = "Новая номенклатура";
СтранаПроизводства = СокрЛП(ТекстыЯчеек[5]);
Производитель = СокрЛП(ТекстыЯчеек[4]);
ДопРеквизитСтранаПроизводства = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Страна",Истина);
ДопРеквизитПроизводитель = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Производитель",Истина);
Размер = СокрЛП(ТекстыЯчеек[7]);
Цвет = СокрЛП(ТекстыЯчеек[6]);
НаменованиеХарактеристики =""+Размер+", "+Цвет;
ДопРеквизитРазмер = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Размер",Истина);
ДопРеквизитЦвет = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Цвет",Истина);
//Сперва ищем соотвтствие номенклатуры по Штрихкоду (можно так же искать по Артикулу если он у всех есть)
лТекст =
"ВЫБРАТЬ
| ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод,
| ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура,
| ШтрихкодыНоменклатуры.Характеристика КАК Характеристика
|ИЗ
| РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
|ГДЕ
| ШтрихкодыНоменклатуры.Штрихкод = &Штрихкод";
лЗапрос = Новый Запрос(лТекст);
лЗапрос.УстановитьПараметр("Штрихкод", Штрихкод);
лВыборка = лЗапрос.Выполнить().Выбрать();
если лВыборка.Следующий() тогда
//Номенклатура по Штрихкоду найдена. Подбираем ее.
Результат = лВыборка.Номенклатура;
иначе
//По Штрихкоду нет соответствия номенклатуры - ищем по наименованию (можно и по Артикулу в этом месте искать, если будет оптимально)
Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ЛОЖЬ
| И Номенклатура.Наименование = &Наименование";
Запрос = Новый Запрос(Текст);
Запрос.УстановитьПараметр("Наименование", НаименованиеНоменклатуры);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() тогда
//Нашли соответствие номенклатуры по Наименованию, но поскольку Штрихкода и характеритискики у нее нет - добавим Штрихкод с характеристикой
лТекст = "ВЫБРАТЬ
| ХарактеристикиНоменклатуры.Ссылка КАК Ссылка,
| ХарактеристикиНоменклатуры.Владелец КАК Владелец,
| ХарактеристикиНоменклатуры.Наименование КАК Наименование
|ИЗ
| Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
|ГДЕ
| ХарактеристикиНоменклатуры.Владелец = &Владелец
| И ХарактеристикиНоменклатуры.Наименование = &Наименование";
лЗапрос = Новый Запрос(лТекст);
лЗапрос.УстановитьПараметр("Владелец", Выборка.Ссылка);
лЗапрос.УстановитьПараметр("Наименование", НаменованиеХарактеристики);
хВыборка = лЗапрос.Выполнить().Выбрать();
Если хВыборка.Следующий() тогда
//Если характеристика уже существует для номенклатуры - используем ее
новСпрХарКа = хВыборка.Ссылка;
Иначе
//Создадим новую характеристику с заполнением свойств
ПоискХарактеристики = справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(НаменованиеХарактеристики);
Если ПустаяСтрока(ПоискХарактеристики) Тогда
НовСвойствоРазмер = ""; НовСвойствоЦвет = "";
уТекст =
"ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Ссылка КАК Ссылка,
| ЗначенияСвойствОбъектов.ВерсияДанных КАК ВерсияДанных,
| ЗначенияСвойствОбъектов.ПометкаУдаления КАК ПометкаУдаления,
| ЗначенияСвойствОбъектов.Владелец КАК Владелец,
| ЗначенияСвойствОбъектов.Наименование КАК Наименование
|ИЗ
| Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Владелец = &Владелец
| И ЗначенияСвойствОбъектов.Наименование = &Наименование";
уЗапрос = Новый Запрос(уТекст);
уЗапрос.УстановитьПараметр("Владелец", ДопРеквизитРазмер);
уЗапрос.УстановитьПараметр("Наименование", Размер);
жВыборка = уЗапрос.Выполнить().Выбрать();
Если жВыборка.Следующий() тогда
НовСвойствоРазмер=жВыборка.Ссылка;
Иначе
СвойстваОбъектов = справочники.ЗначенияСвойствОбъектов;
НовСвойствоРазмер = СвойстваОбъектов.СоздатьЭлемент();
НовСвойствоРазмер.Наименование = Размер;
НовСвойствоРазмер.Владелец = ДопРеквизитРазмер;
НовСвойствоРазмер.Записать();
КонецЕсли;
уТекст =
"ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Ссылка КАК Ссылка,
| ЗначенияСвойствОбъектов.ВерсияДанных КАК ВерсияДанных,
| ЗначенияСвойствОбъектов.ПометкаУдаления КАК ПометкаУдаления,
| ЗначенияСвойствОбъектов.Владелец КАК Владелец,
| ЗначенияСвойствОбъектов.Наименование КАК Наименование
|ИЗ
| Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Владелец = &Владелец
| И ЗначенияСвойствОбъектов.Наименование = &Наименование";
уЗапрос = Новый Запрос(уТекст);
уЗапрос.УстановитьПараметр("Владелец", ДопРеквизитЦвет);
уЗапрос.УстановитьПараметр("Наименование", Цвет);
нВыборка = уЗапрос.Выполнить().Выбрать();
Если нВыборка.Следующий() тогда
НовСвойствоЦвет=нВыборка.Ссылка;
Иначе
СвойстваОбъектов = справочники.ЗначенияСвойствОбъектов;
НовСвойствоЦвет = СвойстваОбъектов.СоздатьЭлемент();
НовСвойствоЦвет.Наименование = Цвет;
НовСвойствоЦвет.Владелец = ДопРеквизитЦвет;
НовСвойствоЦвет.Записать();
КонецЕсли;
//Создаем характеристику
новСпрХарКа = справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
новСпрХарКа.Наименование = НаменованиеХарактеристики;
новСпрХарКа.Владелец = Выборка.Ссылка;
ДопРекв10 = новСпрХарКа.ДополнительныеРеквизиты.Добавить();
ДопРекв10.Свойство=ДопРеквизитРазмер;
ДопРекв10.Значение = НовСвойствоРазмер;
ДопРекв11 = новСпрХарКа.ДополнительныеРеквизиты.Добавить();
ДопРекв11.Свойство=ДопРеквизитЦвет;
ДопРекв11.Значение = НовСвойствоЦвет;
новСпрХарКа.Записать();
Иначе
//Характеристика уже была создана-выберем его
новСпрХарКа = ПоискХарактеристики.Ссылка;
КонецЕсли;
КонецЕсли;
//После создания характеристики - создаем ШК с характеристикой
Если Не ПустаяСтрока(Штрихкод) Тогда
НаборЗаписей = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей();
НоваяЗапись = НаборЗаписей.Добавить();
НаборЗаписей.Отбор.Штрихкод.Установить(Штрихкод);
НоваяЗапись.Штрихкод = Штрихкод;
НоваяЗапись.Характеристика = новСпрХарКа.Ссылка;
НоваяЗапись.Номенклатура = Выборка.Ссылка;
НаборЗаписей.Записать();
КонецЕсли;
Результат = Выборка.Ссылка;
Иначе
//Нет соответствия по наименованию номенклатуры - будем создавать Номенклатуру с доп значениями, и Штрихкод с Характеристиками
//Сперва создадим доп значения
НовСвойствоСтранаПроизводства = "";
НовСвойствоПроизводитель = "";
уТекст =
"ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Ссылка КАК Ссылка,
| ЗначенияСвойствОбъектов.ВерсияДанных КАК ВерсияДанных,
| ЗначенияСвойствОбъектов.ПометкаУдаления КАК ПометкаУдаления,
| ЗначенияСвойствОбъектов.Владелец КАК Владелец,
| ЗначенияСвойствОбъектов.Наименование КАК Наименование
|ИЗ
| Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Владелец = &Владелец
| И ЗначенияСвойствОбъектов.Наименование = &Наименование";
уЗапрос = Новый Запрос(уТекст);
уЗапрос.УстановитьПараметр("Владелец", ДопРеквизитСтранаПроизводства);
уЗапрос.УстановитьПараметр("Наименование", СтранаПроизводства);
шВыборка = уЗапрос.Выполнить().Выбрать();
Если шВыборка.Следующий() тогда
НовСвойствоСтранаПроизводства = шВыборка.Ссылка;
Иначе
СвойстваОбъектов = справочники.ЗначенияСвойствОбъектов;
НовСвойствоСтранаПроизводства = СвойстваОбъектов.СоздатьЭлемент();
НовСвойствоСтранаПроизводства.Наименование = СтранаПроизводства;
НовСвойствоСтранаПроизводства.Владелец = ДопРеквизитСтранаПроизводства;
НовСвойствоСтранаПроизводства.Записать();
КонецЕсли;
уТекст =
"ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Ссылка КАК Ссылка,
| ЗначенияСвойствОбъектов.ВерсияДанных КАК ВерсияДанных,
| ЗначенияСвойствОбъектов.ПометкаУдаления КАК ПометкаУдаления,
| ЗначенияСвойствОбъектов.Владелец КАК Владелец,
| ЗначенияСвойствОбъектов.Наименование КАК Наименование
|ИЗ
| Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Владелец = &Владелец
| И ЗначенияСвойствОбъектов.Наименование = &Наименование";
уЗапрос = Новый Запрос(уТекст);
уЗапрос.УстановитьПараметр("Владелец", ДопРеквизитПроизводитель);
уЗапрос.УстановитьПараметр("Наименование", Производитель);
рВыборка = уЗапрос.Выполнить().Выбрать();
Если рВыборка.Следующий() тогда
НовСвойствоПроизводитель = рВыборка.Ссылка;
Иначе
СвойстваОбъектов = справочники.ЗначенияСвойствОбъектов;
НовСвойствоПроизводитель = СвойстваОбъектов.СоздатьЭлемент();
НовСвойствоПроизводитель.Наименование = Производитель;
НовСвойствоПроизводитель.Владелец = ДопРеквизитПроизводитель;
НовСвойствоПроизводитель.Записать();
КонецЕсли;
//Создадим номенклатуру
ЕдИзмКлассификатор = справочники.УпаковкиЕдиницыИзмерения;
новаяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
новаяНоменклатура.Артикул = НомАртикул;
новаяНоменклатура.Наименование = НаименованиеНоменклатуры;
новаяНоменклатура.ЕдиницаИзмерения = ЕдИзмКлассификатор.НайтиПоНаименованию("шт");
новаяНоменклатура.ВидНоменклатуры = ВидНоменклатуры;
новаяНоменклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
новаяНоменклатура.СтавкаНДС = перечисления.СтавкиНДС.БезНДС;
новаяНоменклатура.Качество = перечисления.ГрадацииКачества.Новый;
новаяНоменклатура.ВариантОформленияПродажи = перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
новаяНоменклатура.ИспользованиеХарактеристик = перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры;
//Для номенклатуры группу заполним
лТекст ="ВЫБРАТЬ
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ИСТИНА
| И Номенклатура.Наименование = &Наименование";
лЗапрос = Новый Запрос(лТекст);
лЗапрос.УстановитьПараметр("Наименование", СокрЛП(ГруппаНоменклатуры));
тВыборка = лЗапрос.Выполнить().Выбрать();
Если тВыборка.Следующий() тогда
//Группа существует - выберем ее
новаяНоменклатура.Родитель = тВыборка.Ссылка;
Иначе
НовЭлемент = Справочники.Номенклатура.СоздатьГруппу();
НовЭлемент.Наименование = СокрЛП(ГруппаНоменклатуры);
НовЭлемент.Записать();
новаяНоменклатура.Родитель = НовЭлемент.Ссылка;
КонецЕсли;
//Заполним доп свойства
ДопРекв6 = новаяНоменклатура.ДополнительныеРеквизиты.Добавить();
ДопРекв6.Свойство = ДопРеквизитСтранаПроизводства;
ДопРекв6.Значение = НовСвойствоСтранаПроизводства;
ДопРекв8 = новаяНоменклатура.ДополнительныеРеквизиты.Добавить();
ДопРекв8.Свойство = ДопРеквизитПроизводитель;
ДопРекв8.Значение = НовСвойствоПроизводитель;
новаяНоменклатура.Записать();
//СОЗДАДИМ ХАРАКТЕРИСТИКУ
//Сперва свойства создадим
НовСвойствоРазмер = ""; НовСвойствоЦвет = "";
уТекст =
"ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Ссылка КАК Ссылка,
| ЗначенияСвойствОбъектов.ВерсияДанных КАК ВерсияДанных,
| ЗначенияСвойствОбъектов.ПометкаУдаления КАК ПометкаУдаления,
| ЗначенияСвойствОбъектов.Владелец КАК Владелец,
| ЗначенияСвойствОбъектов.Наименование КАК Наименование
|ИЗ
| Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Владелец = &Владелец
| И ЗначенияСвойствОбъектов.Наименование = &Наименование";
уЗапрос = Новый Запрос(уТекст);
уЗапрос.УстановитьПараметр("Владелец", ДопРеквизитРазмер);
уЗапрос.УстановитьПараметр("Наименование", Размер);
кВыборка = уЗапрос.Выполнить().Выбрать();
Если кВыборка.Следующий() тогда
НовСвойствоРазмер=кВыборка.Ссылка;
Иначе
СвойстваОбъектов = справочники.ЗначенияСвойствОбъектов;
НовСвойствоРазмер = СвойстваОбъектов.СоздатьЭлемент();
НовСвойствоРазмер.Наименование = Размер;
НовСвойствоРазмер.Владелец = ДопРеквизитРазмер;
НовСвойствоРазмер.Записать();
КонецЕсли;
уТекст =
"ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Ссылка КАК Ссылка,
| ЗначенияСвойствОбъектов.ВерсияДанных КАК ВерсияДанных,
| ЗначенияСвойствОбъектов.ПометкаУдаления КАК ПометкаУдаления,
| ЗначенияСвойствОбъектов.Владелец КАК Владелец,
| ЗначенияСвойствОбъектов.Наименование КАК Наименование
|ИЗ
| Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Владелец = &Владелец
| И ЗначенияСвойствОбъектов.Наименование = &Наименование";
уЗапрос = Новый Запрос(уТекст);
уЗапрос.УстановитьПараметр("Владелец", ДопРеквизитЦвет);
уЗапрос.УстановитьПараметр("Наименование", Цвет);
нВыборка = уЗапрос.Выполнить().Выбрать();
Если нВыборка.Следующий() тогда
НовСвойствоЦвет=нВыборка.Ссылка;
Иначе
СвойстваОбъектов = справочники.ЗначенияСвойствОбъектов;
НовСвойствоЦвет = СвойстваОбъектов.СоздатьЭлемент();
НовСвойствоЦвет.Наименование = Цвет;
НовСвойствоЦвет.Владелец = ДопРеквизитЦвет;
НовСвойствоЦвет.Записать();
КонецЕсли;
новСпрХарКа = справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
новСпрХарКа.Наименование = НаменованиеХарактеристики;
новСпрХарКа.Владелец = новаяНоменклатура.Ссылка;
ДопРекв10 = новСпрХарКа.ДополнительныеРеквизиты.Добавить();
ДопРекв10.Свойство=ДопРеквизитРазмер;
ДопРекв10.Значение = НовСвойствоРазмер;
ДопРекв11 = новСпрХарКа.ДополнительныеРеквизиты.Добавить();
ДопРекв11.Свойство=ДопРеквизитЦвет;
ДопРекв11.Значение = НовСвойствоЦвет;
новСпрХарКа.Записать();
//Создадим ЩК
Если Не ПустаяСтрока(Штрихкод) Тогда
НаборЗаписей = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей();
НоваяЗапись = НаборЗаписей.Добавить();
НаборЗаписей.Отбор.Штрихкод.Установить(Штрихкод);
НоваяЗапись.Штрихкод = Штрихкод;
НоваяЗапись.Характеристика = новСпрХарКа.Ссылка;
НоваяЗапись.Номенклатура = новаяНоменклатура.Ссылка;
НаборЗаписей.Записать();
КонецЕсли;
Результат = новаяНоменклатура.Ссылка;
КонецЕсли;
КонецЕсли;
Супер!
Файл настройки полученный в текущей публикации
примерно тоже самое перед Новым годом писал — правда на обычных формах
А можно ли создавать Группы (папки) для номенклатуры помощью универсальной обработки?
(4) Да. Код кстати присутствует в данной статье где «Номенклатура»:
…….
//Для номенклатуры группу заполним
лТекст =»ВЫБРАТЬ
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ИСТИНА
| И Номенклатура.Наименование = &Наименование»;
лЗапрос = Новый Запрос(лТекст);
лЗапрос.УстановитьПараметр(«Наименование», СокрЛП(ГруппаНоменклатуры));
тВыборка = лЗапрос.Выполнить().Выбрать();
Если тВыборка.Следующий() тогда
//Группа существует — выберем ее
новаяНоменклатура.Родитель = тВыборка.Ссылка;
Иначе
НовЭлемент = Справочники.Номенклатура.СоздатьГруппу();
НовЭлемент.Наименование = СокрЛП(ГруппаНоменклатуры);
НовЭлемент.Записать();
новаяНоменклатура.Родитель = НовЭлемент.Ссылка;
КонецЕсли;
…….
Только надо запустить обработку и выбрать загрузку не в «Табличную часть», а в «Справочник». С экселя вставить колонку с номенклатурой и напротив колонку с группой номенклатуры.
В настройках в реквизите «Номенклатура» — разместить примерно этот код, допилив его под себя.
По моему мнению, для такой обработки не хватает:
1. Возможности загрузки нескольких документов. Например, нужно 100 и более.
2. Кода для поиска элементов по приоритету — помечен на удаление или нет, при наличии дублей
3. Универсальных функций поиска и преобразования и вывод сообщений о невозможности преобразования в число или дату и т.п.
4. Поиска по GUID и присвоения его новой ссылке.
Ну и вообще в целом для больших задач загрузки/миграции данных она слабовата.
Но плюсик поставил) Подобным уже много маялся.
(6)
Возможно и правы, а возможно:
1. Загрузка сотни документов — достаточная редкая задача. Для этого конечно можно придумать свой велосипед.
2. Поскольку в обработке работают те же функции — что и при программировании в конфигураторе, то при определенном труде можно реализовать поиск, проверку на удаление, на дубли, а так же проверку преобразования строки в дату и множество других необходимых вещей.
(6) Все давно придуманоhttps://infostart.ru/public/284674/
(8) Это публикация больше для программистов, чем для обычных пользователей, а уже программисты могут готовую настройку ставить пользователям. Ну и все это бесплатно, и работает не только для управляемых форм. А функционал в основном одинаковый.
(9) Так и Olenevod программист, а не обычный пользователь) хотя код вида
тоже сложно назвать для «обычных пользователей»))
(10) Товариш просто не разобрался
Добрый день. Скачал сайта 1с модуль ЗагрузкаДанныхИзТабличногоДокумента. По версией 1С:Комплексная автоматизация 2 (2.4.7.147).
Интерфейс Такси отключал.
ЗагрузкаДанныхИзТабличногоДокумента_УФ_v2 — открывается. Спасибо.
Сделайте пожалуйста — прочитать из табличной части документа
чтобы потом уже разом отредактировать и записать