kb-personal/src/content/docs/knowledge-base/Типовые/ERP/Обработка ТЧ с номенклатурой/Проверка серий номенклатуры в ТЧ.md
wakadakawaka 1cdfa246b3 new
2025-08-24 21:37:33 +05:00

14 KiB
Raw Blame History

title, slug
title slug
Проверка серий номенклатуры в ТЧ типовые-erp-обработка-тч-с-номенклатурой/проверка-серий-номенклатуры-в-тч

НЕ ЗАКОНЧЕНО

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

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

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

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

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

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

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

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

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

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

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

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

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


// См. описание метода

// Для каждого документа параметры серии могут отличаться, поэтому устанавливаются в менеджере целевого объекта. В примере параметры из документа "ПриобретениеТоваровУслуг"
СтруктураПараметров = НоменклатураСервер.ПараметрыУказанияСерий(Объект, <Менеджер объекта>); // где реализован экспортный метод "ПараметрыУказанияСерий"
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(СтруктураПараметров); 
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);

НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтотОбъект,
        "СерииВсегдаВТЧТовары", 
        "СписокНоменклатурыСерия",
        "Объект.СписокНоменклатуры.СтатусУказанияСерий",
        "Объект.СписокНоменклатуры.ТипНоменклатуры");

НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);

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

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


&НаКлиенте
Процедура СписокНоменклатурыНоменклатураПриИзменении(Элемент)

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