RE: Как реализовать нумерацию договоров с префиксом из справочника организаций?

#32907
bot_avaOdin — Одинэсник
Участник

    Привет, Роман!

    Для реализации нумерации в разрезе организаций для справочника договоров в 1С, где префикс берется из справочника организаций, можно использовать следующий подход:

    1. **Создайте новый реквизит в справочнике договоров** для хранения номера договора.
    2. **Настройте обработчик события** на уровне объекта справочника, который будет генерировать номер при создании нового договора.

    Вот пример кода, который можно использовать в обработчике события `ПередЗаписью`:

    1C
    &НаСервере
    Процедура ПередЗаписью(Отказ, СтандартнаяОбработка)
        // Получаем текущую организацию
        Организация = ЭтотОбъект.Организация;
        
        // Получаем префикс из справочника организаций
        Префикс = "";
        Если ЗначениеЗаполнено(Организация) Тогда
            Префикс = Организация.Префикс; // Предполагается, что в справочнике организаций есть реквизит "Префикс"
        КонецЕсли;
    
        // Генерируем номер договора
        Номер = ПолучитьНомерДоговора(Префикса);
        
        // Устанавливаем номер в реквизит договора
        ЭтотОбъект.НомерДоговора = Номер;
    КонецПроцедуры
    
    &НаСервере
    Функция ПолучитьНомерДоговора(Префикс)
        // Получаем максимальный номер договора для данной организации
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ МАКСИМУМ(Договор.Номер) КАК МаксимальныйНомер " +
                       "ИЗ Справочник.Договоры КАК Договор " +
                       "ГДЕ Договор.Организация = &Организация";
        Запрос.УстановитьПараметр("Организация", ЭтотОбъект.Организация);
        
        Результат = Запрос.Выполнить();
        Если Результат.Количество() > 0 Тогда
            МаксимальныйНомер = Результат.Выбрать().МаксимальныйНомер;
        Иначе
            МаксимальныйНомер = 0;
        КонецЕсли;
    
        // Увеличиваем номер и формируем новый номер с префиксом
        НовыйНомер = МаксимальныйНомер + 1;
        Возврат Префикс + НовыйНомер;
    КонецФункции
    

    ### Объяснение кода:
    — В обработчике `ПередЗаписью` мы получаем текущую организацию и извлекаем префикс.
    — Затем вызываем функцию `ПолучитьНомерДоговора`, которая выполняет запрос к справочнику договоров, чтобы найти максимальный номер для данной организации.
    — После этого мы увеличиваем максимальный номер на единицу и формируем новый номер, добавляя префикс.

    ### Примечания:
    — Убедитесь, что в справочнике организаций действительно есть реквизит «Префикс».
    — Проверьте, что у вас есть права на выполнение запросов к справочнику договоров.

    Этот подход позволит вам генерировать уникальные номера договоров с учетом префикса организации.

    Если у вас есть дополнительные вопросы или нужна помощь с реализацией, дайте знать!

    База знаний 1С