RE: Как добавить допреквизиты в документ «Счет» через БП в 1С?

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

    Владимир, чтобы добавить дополнительные реквизиты в документ «Счет» через Бизнес-процесс (БП) в 1С, можно использовать стандартный механизм дополнительных реквизитов (БСП) и расширения. Вот подробный алгоритм и пример реализации:

    1. **Создание дополнительных реквизитов через механизм БСП:**

    — В конфигураторе откройте объект «Счет» (обычно это документ или справочник).
    — В разделе «Дополнительные реквизиты» добавьте нужные реквизиты (например, «КомментарийКСчету», «ОтветственныйМенеджер» и т.п.).
    — Эти реквизиты не требуют изменения структуры базы, так как хранятся в отдельной таблице БСП.

    2. **Отображение дополнительных реквизитов на форме счета:**

    — В расширении или в модуле формы документа «Счет» используйте стандартный механизм заполнения допреквизитов на форме.
    — Для автоматического добавления допреквизитов на форму можно использовать процедуру из БСП:

    УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект);
    

    — Если нужно программно управлять расположением и значениями допреквизитов, используйте функции из вашего примера (ПолучитьПолеДополнительногоРеквизитаНаФорме, УстановитьЗначениеДополнительногоРеквизитаНаФорме и т.п.).

    3. **Заполнение дополнительных реквизитов в Бизнес-процессе:**

    — В настройках бизнес-процесса, в шаге, где создается или редактируется документ «Счет», добавьте обработчик (например, на сервере), который заполнит значения дополнительных реквизитов.

    Пример кода для заполнения допреквизита в объекте документа:

    Процедура ЗаполнитьДопРеквизиты(ОбъектСчета)
        // Пример: установить значение допреквизита "КомментарийКСчету"
        Если ОбъектСчета.Свойство("КомментарийКСчету") Тогда
            ОбъектСчета.КомментарийКСчету = "Автоматически заполнено из БП";
        КонецЕсли;
    КонецПроцедуры
    

    — Вызовите эту процедуру в нужном месте бизнес-процесса, например, после создания документа.

    4. **Проверка и валидация допреквизитов:**

    — Для проверки корректности заполнения допреквизитов используйте обработчики событий формы или объекта, например, событие «ПередЗаписью».
    — Если значение некорректно, вызовите `Отказ = Истина` и выведите сообщение пользователю:

    Процедура ПередЗаписью(Отказ)
        Если ЗначениеДопРеквизитаНекорректно(ЭтотОбъект.КомментарийКСчету) Тогда
            Сообщить("Значение дополнительного реквизита 'КомментарийКСчету' некорректно.");
            Отказ = Истина;
        КонецЕсли;
    КонецПроцедуры
    

    5. **Обновление данных на форме после записи:**

    — После записи объекта можно программно обновить форму, используя методы формы, например:

    ЭтаФорма.Обновить();
    

    — Или установить значение допреквизита на форме через функцию из вашего примера:

    УстановитьЗначениеДополнительногоРеквизитаНаФорме(ЭтаФорма, "КомментарийКСчету", "Новое значение");
    

    6. **Расположение допреквизитов на форме:**

    — Для управления расположением используйте процедуру перемещения элементов формы:

    ПереместитьДополнительныйРеквизит(ЭтаФорма, "КомментарийКСчету", "ГруппаДополнительныеРеквизиты");
    

    — Если группы нет, создайте её программно или добавьте реквизиты в существующую.

    **Итог:**
    — Добавляете допреквизиты через БСП в конфигурации.
    — Используете стандартные процедуры БСП для отображения и управления допреквизитами на форме.
    — В бизнес-процессе программно заполняете и проверяете допреквизиты.
    — Управляете расположением и обновлением данных на форме через расширения и программный код.

    Рекомендую посмотреть здесь:
    https://infostart.ru/1c/articles/867282/
    https://infostart.ru/1c/articles/540656/

    Если нужно, могу помочь с конкретным кодом для вашего бизнес-процесса.

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