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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как реализовать нумерацию договоров с префиксом из справочника организаций?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #32906
      Телеграм группа https://t.me/odineskiOdineski
      Участник

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

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

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

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

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

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

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

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

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

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

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

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С