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

# НЕ ЗАКОНЧЕНО

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

[Подробнее про настройку серий в ERP](https://efsol.ru/manuals/serial-accounting-1c-erp/?ysclid=mepv3es1ej787928552)

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

Для поля `Серия` устанавливаем связи параметров выбора:
![Изображение](/erp/serii-nomenklatury/1.png)

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

Несмотря на то, что поле `СтатусУказанияСерий` служебное, его рекомендуется создавать на уровне **объекта**, а не **формы**. На форму выводится как `Поле картинки` с картинкой значений `СтатусыУказанияСерий`
![Изображение](/erp/serii-nomenklatury/2.png)

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

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

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

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

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

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

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

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

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

```

<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
<summary style="font-weight: bold; cursor: pointer;">Пример реализации параметров учета серий в документе "Приобретение товаров и услуг</summary>
    
```bsl
// Возвращает параметры указания серий для товаров, указанных в документе
//
// Параметры:
//   Объект - Структура - структура значений реквизитов объекта, необходимых для заполнения параметров указания серий.
//
// Возвращаемое значение:
//  Структура - см. НоменклатураКлиентСервер.ПараметрыУказанияСерий.
//
Функция ПараметрыУказанияСерий(Объект) Экспорт
	
	ПараметрыУказанияСерий = НоменклатураКлиентСервер.ПараметрыУказанияСерий();
	ПараметрыУказанияСерий.ПолноеИмяОбъекта = "Документ.ПриобретениеТоваровУслуг";
	
	ПараметрыСерийСклада = СкладыСервер.ИспользованиеСерийНаСкладе(Объект.Склад, Истина);
	
	ЗакупкаУПоставщикаПоРеглУчету = (Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаРеглУчет);
	
	Если ЗакупкаУПоставщикаПоРеглУчету Тогда
		ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры  = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;
		ПараметрыУказанияСерий.УчитыватьСебестоимостьПоСериям = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;
		ПараметрыУказанияСерий.ТолькоСерииДляСебестоимости    = Истина;
	Иначе
		ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры  = 
						(ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры И Не СкладыСервер.ИспользоватьОрдернуюСхемуПриПоступлении(Объект.Склад, Объект.Дата, Истина))
						Или ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;
		ПараметрыУказанияСерий.УчитыватьСебестоимостьПоСериям = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;
		ПараметрыУказанияСерий.ТолькоСерииДляСебестоимости    = Ложь;
		ПараметрыУказанияСерий.СерииПриПланированииОтгрузкиУказываютсяВТЧСерии = Истина;
	КонецЕсли;
	
	ПараметрыУказанияСерий.СкладскиеОперации.Добавить(Перечисления.СкладскиеОперации.ПриемкаОтПоставщика);
	ПараметрыУказанияСерий.ПоляСвязи.Добавить("Склад");
	ПараметрыУказанияСерий.ПоляСвязи.Добавить("Назначение");
	ПараметрыУказанияСерий.ЭтоНакладная = Истина;
	ПараметрыУказанияСерий.Дата = Объект.Дата;
	
	ПараметрыУказанияСерий.ИменаПолейСтатусУказанияСерий.Добавить("СтатусУказанияСерий");
	
	ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("Ссылка");
	ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("Соглашение");
	ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("Договор");
	ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("ПоступлениеПоЗаказам");
	ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("Товары_ЗаказПоставщику");
	ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("ВариантПриемкиТоваров");
	ПараметрыУказанияСерий.ОперацияДокумента = Объект.ХозяйственнаяОперация;
	
	ОперацииВПути = Новый Массив();
	ОперацииВПути.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаТоварыВПути);
	ОперацииВПути.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуТоварыВПути);
	ОперацииВПути.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСТоварыВПути);
	
	ОперацииНеотфактуровки = Новый Массив();
	ОперацииНеотфактуровки.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаФактуровкаПоставки);
	ОперацииНеотфактуровки.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСФактуровкаПоставки);
	
	ХозОперацияТоварыВПутиИНеотфактуровка = ОперацииВПути.Найти(Объект.ХозяйственнаяОперация) <> Неопределено
		Или ОперацииНеотфактуровки.Найти(Объект.ХозяйственнаяОперация) <> Неопределено;
	ЭтоТоварыВПути = ОперацииВПути.Найти(Объект.ХозяйственнаяОперация) <> Неопределено;
	
	ПараметрыУказанияСерий.ПараметрыЗапроса.Вставить("ЭтоТоварыВПути", ЭтоТоварыВПути);
	ПараметрыУказанияСерий.ПараметрыЗапроса.Вставить("ХозОперацияТоварыВПутиИНеотфактуровка", ХозОперацияТоварыВПутиИНеотфактуровка);
	
	Возврат ПараметрыУказанияСерий;
	
КонецФункции
```

</details>

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

```bsl

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

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


