Тестировалось на БП 3.0.133. Платформа 8.3.22.
Для примера выкладываю обработку Диадок 4.29.2.
Для пользователей. При входе в документ Диадок и нажатии кнопки Создать открывается форма синхронизация Номенклатуры в которую и была добавлена кнопка Создать номенклатуру. При нажатии кнопки будет создана Номенклатура с артикулом.
Для программистов. В форму обработки СопоставлениеНоменклатурыУправляемая добавлена кнопка Создать номенклатуру. Она ищет номенклатуру по Артикулу и если не находит, то создает.
Если не хотите скачивать обработку, то вот сам код:
&НаСервере
Процедура СоздатьНоменклатуруНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Артикул КАК Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка В (&ТабАртикулы)";
ТабАртикулы = РеквизитФормыВЗначение("СписокВариантыСопоставления");
ТабАртикулы = ТабАртикулы.ВыгрузитьКолонку("Номенклатура");
Запрос.Параметры.Вставить("ТабАртикулы", ТабАртикулы);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Таб = РеквизитФормыВЗначение("ДеревоНоменклатуры");
Для Каждого СтрокаПервогоУровня Из Таб.Строки Цикл
Для Каждого СтрокаВторогоУровня Из СтрокаПервогоУровня.Строки Цикл
Если не ЗначениеЗаполнено(СтрокаВторогоУровня.Номенклатура) Тогда
Если СтрНайти(Нрег(СтрокаВторогоУровня.Наименование),"услуг") = 0 Тогда
Если РезультатЗапроса.Найти(СтрокаВторогоУровня.Код,"Артикул") = Неопределено Тогда
Ном = Справочники.Номенклатура.СоздатьЭлемент();
Ном.Артикул = СтрокаВторогоУровня.Код;
Наименование = СтрЗаменить(СтрокаВторогоУровня.Наименование, СтрокаВторогоУровня.Код, "");
Наименование = СокрЛП(Наименование);
Ном.Наименование = Наименование;
Ном.НаименованиеПолное = Наименование;
Ном.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товары");
Ном.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(СтрокаВторогоУровня.ЕдиницаИзмерения);
Ном.ВидСтавкиНДС = Перечисления.ВидыСтавокНДС.Общая;
Ном.НоменклатурнаяГруппа = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Основная номенклатурная группа");
Ном.Записать();
СтрокаВторогоУровня.Номенклатура = Ном.Ссылка;
СтрокаВторогоУровня.Характеристика = Ном.Ссылка;
Иначе
//Сообщить("Найден "+СтрокаВторогоУровня.Код);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Таб.Строки.Очистить();
ЗначениеВРеквизитФормы(Таб, "ДеревоНоменклатуры");
КонецПроцедуры
&НаКлиенте
Процедура СоздатьНоменклатуру(Команда)
СоздатьНоменклатуруНаСервере();
ЗаполнитьВариантыСопоставленияНоменклатуры();
ЗаполнитьДеревоНоменклатуры();
КонецПроцедуры