Есть ТЧ Запасы с реквизитами номенклатура/характеристика/пария
реквизит партия это справочник партии номенклатуры
нужно чтоб для каждой строки проставлялась партия если она не заполнена и каждая партия имеет свой уникальный номер

номер формируется как номер документа(дата документа)уникальный номер.

Подскажите как сделать генерацию номеров?

пока сделал только чтоб партия просто создавалась и заполнялась а вот как сделать проверку уникальности и генерации номеров чтот хз

```1c
    &НаСервере
    Процедура АМ_СгенерироватьПартииНаСервере()
    ВладелецПартии = Неопределено;
    СтатусПартии = Перечисления.СтатусыПартий.СобственныеЗапасы;

    НомерДок = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Объект.Номер, Истина, Истина);
    ДатаДок = СокрЛП(Формат(Объект.Дата,"ДФ=ddMMyyyy"));

    НаименованиеПартий = НомерДок+"("+ДатаДок+")";

    Если Не ЗначениеЗаполнено(СокрЛП(НаименованиеПартий))
    Тогда
    НаименованиеПартий = "Партия создана автоматически";
    КонецЕсли;

    НачатьТранзакцию();

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

    Для каждого Строка Из ИзменяемыеСтроки Цикл

    Если ЗначениеЗаполнено(Строка.Номенклатура)
    Тогда

    НоваяПартия = СоздатьПартиюНоменклатуры(Строка.Номенклатура, ВладелецПартии, СтатусПартии, НаименованиеПартий);

    Если ЗначениеЗаполнено(НоваяПартия)
    Тогда
    Строка.Партия = НоваяПартия;
    //Строка.ИспользоватьПартии = Истина;
    Иначе
    ОтменитьТранзакцию();
    Возврат
    КонецЕсли;
    КонецЕсли;

    КонецЦикла;

    ЗафиксироватьТранзакцию();

    Модифицированность= Истина;
    КонецПроцедуры

    &НаСервере
    Функция СоздатьПартиюНоменклатуры(Номенклатура, ВладелецПартии, СтатусПартии, НаименованиеПартий)

    НоваяПартия = Справочники.ПартииНоменклатуры.СоздатьЭлемент();
    НоваяПартия.Владелец = Номенклатура;
    НоваяПартия.ВладелецПартии = ВладелецПартии;
    НоваяПартия.Статус = СтатусПартии;
    НоваяПартия.Наименование = НаименованиеПартий;

    Если Не Номенклатура.ИспользоватьПартии
    Тогда
    ОбъектНоменклатура = Номенклатура.ПолучитьОбъект();
    ОбъектНоменклатура.ИспользоватьПартии = Истина;
    Попытка
    ОбъектНоменклатура.Записать();
    Исключение
    ТекстСообщения = НСтр("ru = 'При устновке признака - Использовать партии, для номенклатуры: " + Номенклатура.Наименование +" произошла ошибка!
    |Дополнительное описание: %ДополнительноеОписание%'");
    ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ДополнительноеОписание%", ОписаниеОшибки());
    ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
    Возврат Неопределено;
    КонецПопытки;

    КонецЕсли;

    Попытка
    НоваяПартия.Записать();
    Исключение
    ТекстСообщения = НСтр("ru = 'При создании партии для номенклатуры: " + Номенклатура.Наименование +" произошла ошибка!
    |Дополнительное описание: %ДополнительноеОписание%'");
    ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ДополнительноеОписание%", ОписаниеОшибки());
    ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
    Возврат Неопределено;
    КонецПопытки;

    Возврат НоваяПартия.Ссылка;

    КонецФункции
```
---
Вы в правильном направлении. Только в справочник серии добавьте реквизит "Партия" с типом значения ссылка на Ваш документ, который генерирует партии. И все случиться
---
Вы зачем проверку делать будете на наименование? Надо будет искать документ партии - иначе говоря партия и владелец. А наименование формируйте после записи документа. Вчера сделали документ вчерашним числом, сегодня его же исправили на завтра.
---
```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    | ПартииНоменклатуры.Наименование
    |ИЗ
    | Справочник.ПартииНоменклатуры КАК ПартииНоменклатуры
    |ГДЕ
    | ПартииНоменклатуры.Владелец = &ЗаказКлиентаВладелец И
    | ПартииНоменклатуры.ПометкаУдаления = ЛОЖЬ
    | И ПартииНоменклатуры.Наименование ПОДОБНО ""+СтрокаШаблона+""
    |
    |УПОРЯДОЧИТЬ ПО
    | Наименование УБЫВ";

    Запрос.УстановитьПараметр("ЗаказКлиентаВладелец", Владелец);
    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();

    Если Выборка.Количество()=0 Тогда
    ОписаниеТипаЧисла = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(8, 0, ДопустимыйЗнак.Неотрицательный));
    ЗначениеКодаЧислом = ОписаниеТипаЧисла.ПривестиЗначение(Выборка.Наименование);
    Иначе
    ЗначениеКодаЧислом = НомерПартииПоШаблону(Выборка.Наименование, ШаблонНомераПартииСтрокой);
    КонецЕсли;

    Возврат ЗначениеКодаЧислом;
```

Добавил реквизит документ заказа в Партии номенклатуры
Сделал поиск максимального номера партии в радиусе заказа клиента без привязки к номенклатуре
---
Уникальность партии - и есть документ. Сделайте реквизит со ссылкой на документ, которым рождается партия. После записи документа в БД проверяйте элементы справочника "Партии". Так будет правильно
---
мне нужно сделать каждую строку уникальной
 и уникальной в пределах владельца получается

как у меня в голове кружится чтот подобное серийным номерам или штрихкодам
---
Вы в правильном направлении. Только в справочник серии добавьте реквизит "Партия" с типом значения ссылка на Ваш документ, который генерирует партии. И все случиться
---
```1c
    СтрокаШаблона = ";
    Если ШаблонСерийногоНомера=Неопределено ИЛИ НЕ ЗначениеЗаполнено(ШаблонСерийногоНомера) Тогда
    //8 цифр
    СтрокаШаблона = "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]";
    ШаблонСерийногоНомераСтрокой = "########";
    Иначе
    Для н=1 По СтрДлина(ШаблонСерийногоНомера) Цикл
    симв = Сред(ШаблонСерийногоНомера, н, 1);
    Если симв=РаботаССерийнымиНомерамиКлиентСервер.СимволЧисла() Тогда
    СтрокаШаблона = СтрокаШаблона + "[0-9]";
    Иначе
    СтрокаШаблона = СтрокаШаблона + "_";
    КонецЕсли;
    КонецЦикла;
    ШаблонСерийногоНомераСтрокой = Строка(ШаблонСерийногоНомера);
    КонецЕсли;

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    | СерийныеНомера.Наименование
    |ИЗ
    | Справочник.СерийныеНомера КАК СерийныеНомера
    |ГДЕ
    | СерийныеНомера.Владелец = &Владелец И
    | СерийныеНомера.ПометкаУдаления = ЛОЖЬ
    | И СерийныеНомера.Наименование ПОДОБНО ""+СтрокаШаблона+""
    |
    |УПОРЯДОЧИТЬ ПО
    | Наименование УБЫВ";

    Запрос.УстановитьПараметр("Владелец", Владелец);
    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();

    Если Выборка.Количество()=0 Тогда
    ОписаниеТипаЧисла = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(8, 0, ДопустимыйЗнак.Неотрицательный));
    ЗначениеКодаЧислом = ОписаниеТипаЧисла.ПривестиЗначение(Выборка.Наименование);
    Иначе
    ЗначениеКодаЧислом = СерийныйНомерЧислоПоШаблону(Выборка.Наименование, ШаблонСерийногоНомераСтрокой);
    КонецЕсли;

    Возврат ЗначениеКодаЧислом;
```

вот я вот так пытаюсь сделать как в типовом но не пойму как мне шаблон задать
---
Вы зачем проверку делать будете на наименование? Надо будет искать документ партии - иначе говоря партия и владелец. А наименование формируйте после записи документа. Вчера сделали документ вчерашним числом, сегодня его же исправили на завтра.
---
Смысл понятен?
---
да это я для примера в шаблон засунул дату
Как написано в итс я могу в унф использовать парии как серийные номера для особенностей учета.
Да реквизит- ссылка на документ я добавлю в большей степени для аналитического учета

Проверку наименования чтоб сделать уникальные наименования серийных номеров(партий)

Как уже обсуждал недавно руководителю нужно прослеживаемость продукции от заказа до продажи и чтоб у каждого экземпляра был свой номер
---
```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    | ПартииНоменклатуры.Наименование
    |ИЗ
    | Справочник.ПартииНоменклатуры КАК ПартииНоменклатуры
    |ГДЕ
    | ПартииНоменклатуры.Владелец = &ЗаказКлиентаВладелец И
    | ПартииНоменклатуры.ПометкаУдаления = ЛОЖЬ
    | И ПартииНоменклатуры.Наименование ПОДОБНО ""+СтрокаШаблона+""
    |
    |УПОРЯДОЧИТЬ ПО
    | Наименование УБЫВ";

    Запрос.УстановитьПараметр("ЗаказКлиентаВладелец", Владелец);
    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();

    Если Выборка.Количество()=0 Тогда
    ОписаниеТипаЧисла = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(8, 0, ДопустимыйЗнак.Неотрицательный));
    ЗначениеКодаЧислом = ОписаниеТипаЧисла.ПривестиЗначение(Выборка.Наименование);
    Иначе
    ЗначениеКодаЧислом = НомерПартииПоШаблону(Выборка.Наименование, ШаблонНомераПартииСтрокой);
    КонецЕсли;

    Возврат ЗначениеКодаЧислом;
```

Добавил реквизит документ заказа в Партии номенклатуры
Сделал поиск максимального номера партии в радиусе заказа клиента без привязки к номенклатуре