Пользователь какое-то время в конфигурации «1С:Управление нашей фирмой, редакция 1.6» (далее по тексту УНФ) использовал спецификации. Но когда узнал про возможность ведения в УНФ наборов, то принял волевое решение перейти на них. Включили в Администрировании «Наборы и комплекты».
После этого в карточке номенклатуры попробовали включить «Это набор/комплект», но не получилось. Проблема заключалась в том, что одновременное использование в номенклатуре спецификаций и наборов ограничено на уровне кода УНФ. Создание расширения к УНФ и внесение изменений в процедуру «МожноИзменитьПризнакНабора» решило этот вопрос:
&НаСервере
&Вместо("МожноИзменитьПризнакНабора")
Функция ДельтаНаборы_МожноИзменитьПризнакНабора()
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
Возврат Истина;
КонецЕсли;
МожноИзменять = Истина;
НовоеЗначение = Неопределено;
//дельта стало теперь НАЧАЛО
//Если Объект.ЭтоНабор И ЕстьДвиженияЗапасов(Объект.Ссылка) Тогда
// ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
// НСтр("ru = 'Номенклатура участвует в движениях, использование в качестве набора невозможно'"));
// МожноИзменять = Ложь;
// НовоеЗначение = Ложь;
//КонецЕсли;
//дельта стало теперь КОНЕЦ
Если Объект.ЭтоНабор Тогда
ПроверкаПодчиненныхСправочников = ЕстьСпецификацииПартииСерийныеНомера(Объект.Ссылка);
//дельта стало теперь НАЧАЛО
//Если ((ПолучитьФункциональнуюОпцию("ИспользоватьПодсистемуПроизводство") И Объект.ТипНоменклатуры=Перечисления.ТипыНоменклатуры.Запас)
// ИЛИ (ПолучитьФункциональнуюОпцию("ИспользоватьПодсистемуРаботы") И Объект.ТипНоменклатуры=Перечисления.ТипыНоменклатуры.Работа))
// И ПроверкаПодчиненныхСправочников.ЕстьСпецификации Тогда
// ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
// НСтр("ru = 'Для номенклатуры созданы спецификации, использование в качестве набора невозможно'"));
// МожноИзменять = Ложь;
// НовоеЗначение = Ложь;
//КонецЕсли;
//дельта стало теперь НАЧАЛО
Если ПолучитьФункциональнуюОпцию("ИспользоватьПартии") И ПроверкаПодчиненныхСправочников.ЕстьПартии Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru = 'Для номенклатуры созданы партии, использование в качестве набора невозможно'"));
МожноИзменять = Ложь;
НовоеЗначение = Ложь;
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьСерийныеНомера") И ПроверкаПодчиненныхСправочников.ЕстьСерийныеНомера Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru = 'Для номенклатуры созданы серийные номера, использование в качестве набора невозможно'"));
МожноИзменять = Ложь;
НовоеЗначение = Ложь;
КонецЕсли;
Если ПроверкаПодчиненныхСправочников.ЕстьАналоги Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru = 'Для номенклатуры заданы аналоги, использование в качестве набора невозможно'"));
МожноИзменять = Ложь;
НовоеЗначение = Ложь;
КонецЕсли;
Если ПроверкаПодчиненныхСправочников.ЕстьУправлениеЗапасами Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru = 'Для номенклатуры используется управление запасами, использование в качестве набора невозможно'"));
МожноИзменять = Ложь;
НовоеЗначение = Ложь;
КонецЕсли;
КонецЕсли;
Если НовоеЗначение<>Неопределено Тогда
Объект.ЭтоНабор = НовоеЗначение;
КонецЕсли;
Возврат МожноИзменять;
КонецФункции
После этих изменений стало возможным включать в номенклатуре реквизит «Это набор/комплект» при существующих у этой номенклатуры спецификациях.
Теперь осталось скопировать спецификации в наборы. Это можно сделать вручную путём переноса данных из спецификации в набор. Или автоматически, создав соответствующую обработку, например, такую:
В обработке необходимо выбрать те параметры, которые будут установлены в наборе. Затем следует заполнить существующими в программе спецификациями (кнопка «Заполнить»), установить пометки напротив нужной номенклатуры и создать наборы (кнопка «Создать наборы»).
Представленная обработка позволяет:
- получить список всей номенклатуры в базе УНФ, имеющей спецификации;
- пользователю выбрать только определённую номенклатуру (со спецификациями), для которой будут созданы наборы;
- установить у номенклатуры, имеющей спецификации, признак набора;
- установить способ расчета цены и вариант печати набора;
- заполнить состав набора аналогично составу указанной спецификации.
Примечание по обработке:
1) после установки признака набора работа со спецификациями номенклатуры становится недоступной;
2) если у номенклатуры уже создан набор, то новый набор из спецификации создан не будет;
3) номенклатура и спецификации, помеченные на удаление, в выборку при заполнении не попадают;
4) если у номенклатуры несколько спецификаций, то в выборку попадут все спецификации (с условием из п.3);
5) пометка в значение ИСТИНА в выборке автоматически ставится для основных спецификаций (из регистра сведений «СпецификацииПоУмолчанию», с выполнением п.3 и п.4).
Так как работа обработки подразумевает её одноразовое использование, то она не добавляется во внешние обработки, а просто запускается через меню «Файл – Открыть». Разработка и тестирование осуществлялись на базе типовой «1С:Управление нашей фирмой, редакция 3.0 (1.6.16.132)» и платформе 1С:Предприятие 8.3 (8.3.16.1063).