Skip to content

Проверка серий номенклатуры в ТЧ

НЕ ЗАКОНЧЕНО

Использование серий в 1С:ERP определяется функциональной опцией НСИ и администрирование – Настройка НСИ и разделов – Номенклатура – Разрезы учета – Серии товаров. Далее серии указываются для каждого вида номенклатуры отдельно

Подробнее про настройку серий в ERP

Настройка формы

Создаем таблицу (далее - СписокНоменклатуры) с обязательными колонками

ИмяТип
НоменклатураСправочникСсылка.Номенклатура
ХарактеристикаСправочникСсылка.ХарактеристикиНоменклатуры
СерияСправочникСсылка.СерииНоменклатуры
СтатусУказанияСерийЧисло (2,0)
СкладСправочникСсылка.Склады
ХарактеристикиИспользуютсяБулево
ТипНоменклатурыПеречислениеСсылка.ТипыНоменклатуры

Для поля Серия устанавливаем связи параметров выбора: Изображение

Поле Склад обычно не выводится в таблицу, а устанавливается отдельно для всех строк ТЧ. Для этого создадим реквизит объекта Склад и разместим в шапке

Несмотря на то, что поле СтатусУказанияСерий служебное, его рекомендуется создавать на уровне объекта, а не формы. На форму выводится как Поле картинки с картинкой значений СтатусыУказанияСерий Изображение

Поля ХарактеристикиИспользуются и ТипНоменклатуры - служебные, и их создаем на уровне формы, а не объекта

Создаем реквизит формы ПараметрыУказанияСерий с типом Произвольный

Пример для случая, когда серии указываются в той же ТЧ, что и номенклатура

ПриСозданииНаСервере

Пример для случая, когда серии указываются в той же ТЧ, что и номенклатура

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

При изменении номенклатуры

&НаКлиенте
Процедура СписокНоменклатурыНоменклатураПриИзменении(Элемент)
ТекДанн = Элементы.СписокНоменклатуры.ТекущиеДанные;
// см. описание метода
ПараметрыЗаполненияСклада = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(Объект, Ложь, "Склад", "СкладНаФорме");
СтруктураДействий = Новый Структура;
// Проверяем характеристики
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекДанн.Характеристика);
// Заполняем склад в ТЧ из реквизита в шапке формы
СтруктураДействий.Вставить("ПроверитьЗаполнитьСклад", ПараметрыЗаполненияСклада);
// заполняем служебный реквизит "ТипНоменклатуры"
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
// Проверяем статус указания серий
СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", ТекДанн.Склад, ПараметрыУказанияСерий));
ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекДанн, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры