Хитрости использования дополнительных реквизитов в сериях номенклатуры УТ, КА, ERP
Во многих проектах в сериях номенклатуры нужно хранить дополнительную информацию, например вес нетто, партию, номер катушки и т.д. Можно обойтись без изменений конфигурации и использовать готовый функционал, который в разы ускорит время доработки. Если же все вынести в расширение, это сильно упростит последующие обновления.
Для примера создадим два дополнительных реквизита для серий номенклатур. Для этого откроем справочник Виды номенклатуры и в нем нажмем кнопку Добавить в окне доп. характеристик серий:
Создайте реквизит "Номер катушки" с типом значения число (10,0) и "Вес НЕТТО" с типом значения число (15,3):
Не забудьте сохранить в любой файл имя в разделе для разработчиков, нам оно еще не раз понадобится:
НомерКатушки_8196dc3d9b1645f5a6971b3e5ff5550f
ВесНЕТТО_eba97ccf16f14149b3d826ec7fa81648
В конфигурациях ERP,УТ,КА работа с сериями в табличной части зависит от политики учета серий, которая задается в настройках для вида номенклатуры:
Политика может быть задана как общая, так и для каждого склада индивидуальная. Для нашего примера важно, что при учете по себестоимости в разрезе серий,
1 серия задается в каждой строке ТЧ:
В остальных случаях работа ведется через кнопку "Указать серии", тогда открывается обработка "Подбор серий номенклатуры":
В обработке можно ввести новый серии номенклатуры и удобно заполнить дополнительные реквизиты серий, которые мы задали в виде номенклатуры.
Допустим, работа с сериями готовой продукции осуществляется только из документа производство без заказа, через кнопку "Указать серии".
Если нам что-то нужно передать в обработку регистрации серий, то это лучше делать в процедуре формы документа "ОткрытьПодборСерий":
//....
ПараметрыФормыУказанияСерий = ПараметрыФормыУказанияСерий(ИмяТЧ, ТекущиеДанныеИдентификатор);
#Вставка
//Вставляем наши данные
ПараметрыФормыУказанияСерий.Вставить("мо_Партия",Объект.Ссылка);
#КонецВставки
//....
В обработке "ПодборСерийВДокументы" добавляем реквизит "мо_партия"для формы "РегистрацияИПодборСерийПоОднойСтрокеТоваров" на закладке реквизиты. Он послужит для хранения переданного значения. Аналогично добавляем реквизит мо_МаксНомерКатушки, он будет хранить последний из имеющихся номеров.
Проинициализируем реквизиты в процедуре "ПриСозданииНаСервере":
//...........
#Вставка
Если Параметры.Свойство("мо_партия") Тогда
мо_партия=Параметры.мо_партия;
мо_МаксНомерКатушки=ПолучитьПоследнийНомерКатушки();
КонецЕсли;
#КонецВставки
КонецПроцедуры
При создании новой серии в ТЧ, нам нужно будет заполнить наш реквизит мо_МаксНомерКатушки. Модифицируем процедуру "СерииПриНачалеРедактирования"
&НаКлиенте
Процедура СерииПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
ТекущиеДанные = Элемент.ТекущиеДанные;
ТекущаяДатаПроизводства = ТекущиеДанные.ДатаПроизводства;
Если Копирование Тогда
ТекущееКоличество = 0;
Иначе
ТекущееКоличество = ТекущиеДанные.КоличествоУпаковок;
КонецЕсли;
#Вставка
Если НоваяСтрока Тогда
ПолеНомерКатушки=ПолучитьПолеДополнительногоРеквизитаНаФорме("НомерКатушки_8196dc3d9b1645f5a6971b3e5ff5550f","Объект_Серии");
Если ЗначениеЗаполнено(ПолеНомерКатушки) Тогда
УстановитьЗначениеДополнительногоРеквизитаНаФорме(ПолеНомерКатушки,мо_МаксНомерКатушки+1);
мо_МаксНомерКатушки=мо_МаксНомерКатушки+1;
КонецЕсли;
КонецЕсли;
#КонецВставки
КонецПроцедуры
&НаСервере
Функция ПолучитьПолеДополнительногоРеквизитаНаФорме(ИмяРеквизита, ПрефиксТЧ="")
СписокСвойств = ЭтаФорма[ПрефиксТЧ+"Свойства_ОписаниеДополнительныхРеквизитов"];
Свойство=ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя",ИмяРеквизита);
Если ЗначениеЗаполнено(Свойство) Тогда
НайденныеСтроки =СписокСвойств.НайтиСтроки(Новый Структура("Свойство",Свойство));
Если НайденныеСтроки.Количество()>0 Тогда
Возврат НайденныеСтроки[0].ИмяРеквизитаЗначение;
КонецЕсли;
КонецЕсли;
Возврат "";
КонецФункции
&НаСервере
Процедура УстановитьЗначениеДополнительногоРеквизитаНаФорме(ПолеДополнительногоРеквизитаНаФорме,ЗначениеРеквизита)
Если НЕ ПолеДополнительногоРеквизитаНаФорме = Неопределено Тогда
Элементы.Серии.ТекущиеДанные[ПолеДополнительногоРеквизитаНаФорме]= ЗначениеРеквизита;
КонецЕсли;
КонецПроцедуры
Остается только сохранить последний введенный номер катушки. Для этого модифицируем функцию "СохранитьСериюПоСтроке"
//.....
СправочникОбъект.Записать();
#Вставка
СохранитьМаксНомерКатушки(мо_МаксНомерКатушки);
#КонецВставки
//.....
Что в итоге. Несколько десятков строк кода и нас есть не модифицированный код основной конфигурации и рабочий функционал работы с дополнительными данными в сериях номенклатуры, который легко переносится на любые новые релизы.
Предупреждение: Метод получения нового номера катушки сильно упрощен и служит только для демонстрации способа работы с доп. реквизитами. В реальной жизни, если два человека будут одновременно заводить серии, могут появиться дубли.
Полезные ссылки:
Если есть необходимость печатать этикетки для серий номенклатуры с учетом данных доп. реквизитов, или использовать расширенные возможности штрихкодирования не меняя конфигурации, рекомендую: Подсистема штрихкодирования серий номенклатуры для 1С:УТ 11.4/11.5 КА, ERP 2.4/2.5
Кстати о конфигурациях ERP,УТ,КА, вы уже добавили новые ставки НДС 5 и 7%? Если нет, то рекомендую Добавление ставок НДС 2025 - 5% и 7% - в старую ERP 2.4, 2.5, УТ 11.4, 11.5, КА 2.4, 2.5
Другие этюды по программированию и другие публикации автора : //infostart.ru/profile/48714/