Проверка серий номенклатуры в ТЧ
НЕ ЗАКОНЧЕНО
Использование серий в 1С:ERP определяется функциональной опцией НСИ и администрирование – Настройка НСИ и разделов – Номенклатура – Разрезы учета – Серии товаров. Далее серии указываются для каждого вида номенклатуры отдельно
Подробнее про настройку серий в ERP
Настройка формы
Создаем таблицу (далее - СписокНоменклатуры
) с обязательными колонками
Имя | Тип |
---|---|
Номенклатура | СправочникСсылка.Номенклатура |
Характеристика | СправочникСсылка.ХарактеристикиНоменклатуры |
Серия | СправочникСсылка.СерииНоменклатуры |
СтатусУказанияСерий | Число (2,0) |
Склад | СправочникСсылка.Склады |
ХарактеристикиИспользуются | Булево |
ТипНоменклатуры | ПеречислениеСсылка.ТипыНоменклатуры |
Для поля Серия
устанавливаем связи параметров выбора:
Поле Склад
обычно не выводится в таблицу, а устанавливается отдельно для всех строк ТЧ. Для этого создадим реквизит объекта Склад
и разместим в шапке
Несмотря на то, что поле СтатусУказанияСерий
служебное, его рекомендуется создавать на уровне объекта, а не формы. На форму выводится как Поле картинки
с картинкой значений СтатусыУказанияСерий
Поля ХарактеристикиИспользуются
и ТипНоменклатуры
- служебные, и их создаем на уровне формы, а не объекта
Создаем реквизит формы ПараметрыУказанияСерий
с типом Произвольный
Пример для случая, когда серии указываются в той же ТЧ, что и номенклатура
ПриСозданииНаСервере
Пример для случая, когда серии указываются в той же ТЧ, что и номенклатура
// См. описание метода
// Для каждого документа параметры серии могут отличаться, поэтому устанавливаются в менеджере целевого объекта. В примере параметры из документа "ПриобретениеТоваровУслуг"СтруктураПараметров = НоменклатураСервер.ПараметрыУказанияСерий(Объект, <Менеджер объекта>); // где реализован экспортный метод "ПараметрыУказанияСерий"ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(СтруктураПараметров);НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтотОбъект, "СерииВсегдаВТЧТовары", "СписокНоменклатурыСерия", "Объект.СписокНоменклатуры.СтатусУказанияСерий", "Объект.СписокНоменклатуры.ТипНоменклатуры");
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
Пример реализации параметров учета серий в документе "Приобретение товаров и услуг
// Возвращает параметры указания серий для товаров, указанных в документе//// Параметры:// Объект - Структура - структура значений реквизитов объекта, необходимых для заполнения параметров указания серий.//// Возвращаемое значение:// Структура - см. НоменклатураКлиентСервер.ПараметрыУказанияСерий.//Функция ПараметрыУказанияСерий(Объект) Экспорт
ПараметрыУказанияСерий = НоменклатураКлиентСервер.ПараметрыУказанияСерий(); ПараметрыУказанияСерий.ПолноеИмяОбъекта = "Документ.ПриобретениеТоваровУслуг";
ПараметрыСерийСклада = СкладыСервер.ИспользованиеСерийНаСкладе(Объект.Склад, Истина);
ЗакупкаУПоставщикаПоРеглУчету = (Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаРеглУчет);
Если ЗакупкаУПоставщикаПоРеглУчету Тогда ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям; ПараметрыУказанияСерий.УчитыватьСебестоимостьПоСериям = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям; ПараметрыУказанияСерий.ТолькоСерииДляСебестоимости = Истина; Иначе ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры = (ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры И Не СкладыСервер.ИспользоватьОрдернуюСхемуПриПоступлении(Объект.Склад, Объект.Дата, Истина)) Или ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям; ПараметрыУказанияСерий.УчитыватьСебестоимостьПоСериям = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям; ПараметрыУказанияСерий.ТолькоСерииДляСебестоимости = Ложь; ПараметрыУказанияСерий.СерииПриПланированииОтгрузкиУказываютсяВТЧСерии = Истина; КонецЕсли;
ПараметрыУказанияСерий.СкладскиеОперации.Добавить(Перечисления.СкладскиеОперации.ПриемкаОтПоставщика); ПараметрыУказанияСерий.ПоляСвязи.Добавить("Склад"); ПараметрыУказанияСерий.ПоляСвязи.Добавить("Назначение"); ПараметрыУказанияСерий.ЭтоНакладная = Истина; ПараметрыУказанияСерий.Дата = Объект.Дата;
ПараметрыУказанияСерий.ИменаПолейСтатусУказанияСерий.Добавить("СтатусУказанияСерий");
ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("Ссылка"); ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("Соглашение"); ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("Договор"); ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("ПоступлениеПоЗаказам"); ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("Товары_ЗаказПоставщику"); ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("ВариантПриемкиТоваров"); ПараметрыУказанияСерий.ОперацияДокумента = Объект.ХозяйственнаяОперация;
ОперацииВПути = Новый Массив(); ОперацииВПути.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаТоварыВПути); ОперацииВПути.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуТоварыВПути); ОперацииВПути.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСТоварыВПути);
ОперацииНеотфактуровки = Новый Массив(); ОперацииНеотфактуровки.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаФактуровкаПоставки); ОперацииНеотфактуровки.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСФактуровкаПоставки);
ХозОперацияТоварыВПутиИНеотфактуровка = ОперацииВПути.Найти(Объект.ХозяйственнаяОперация) <> Неопределено Или ОперацииНеотфактуровки.Найти(Объект.ХозяйственнаяОперация) <> Неопределено; ЭтоТоварыВПути = ОперацииВПути.Найти(Объект.ХозяйственнаяОперация) <> Неопределено;
ПараметрыУказанияСерий.ПараметрыЗапроса.Вставить("ЭтоТоварыВПути", ЭтоТоварыВПути); ПараметрыУказанияСерий.ПараметрыЗапроса.Вставить("ХозОперацияТоварыВПутиИНеотфактуровка", ХозОперацияТоварыВПутиИНеотфактуровка);
Возврат ПараметрыУказанияСерий;
КонецФункции
При изменении номенклатуры
&НаКлиентеПроцедура СписокНоменклатурыНоменклатураПриИзменении(Элемент)
ТекДанн = Элементы.СписокНоменклатуры.ТекущиеДанные;
// см. описание метода ПараметрыЗаполненияСклада = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(Объект, Ложь, "Склад", "СкладНаФорме");
СтруктураДействий = Новый Структура; // Проверяем характеристики СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекДанн.Характеристика); // Заполняем склад в ТЧ из реквизита в шапке формы СтруктураДействий.Вставить("ПроверитьЗаполнитьСклад", ПараметрыЗаполненияСклада); // заполняем служебный реквизит "ТипНоменклатуры" СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры")); // Проверяем статус указания серий СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", ТекДанн.Склад, ПараметрыУказанияСерий));
ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекДанн, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры