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

Как реализовать нум...
 

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


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

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



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

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

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

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

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

1C
&НаСервере
Процедура ПередЗаписью(Отказ, СтандартнаяОбработка)
    // Получаем текущую организацию
    Организация = ЭтотОбъект.Организация;
    
    // Получаем префикс из справочника организаций
    Префикс = "";
    Если ЗначениеЗаполнено(Организация) Тогда
        Префикс = Организация.Префикс; // Предполагается, что в справочнике организаций есть реквизит "Префикс"
    КонецЕсли;

    // Генерируем номер договора
    Номер = ПолучитьНомерДоговора(Префикса);
    
    // Устанавливаем номер в реквизит договора
    ЭтотОбъект.НомерДоговора = Номер;
КонецПроцедуры

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

    // Увеличиваем номер и формируем новый номер с префиксом
    НовыйНомер = МаксимальныйНомер + 1;
    Возврат Префикс + НовыйНомер;
КонецФункции

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

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

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

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



   
ОтветитьЦитата