Как перед созданием на основании одного документа задать вопрос и в зависимости от ответа пользователя заполнить второй документ данными
В стандартных механизмах «Создать на основании» в 1С документ-приемник обычно заполняется по заранее заданным, жестким алгоритмам. Однако на практике часто возникают сценарии, когда логика заполнения должна зависеть от выбора пользователя, сделанного непосредственно в момент создания. Рассмотрим пошаговую реализацию механизма, который перед созданием документа задает вопрос пользователю и динамически заполняет данные в зависимости от ответа.
В качестве примера возьмем документ-основание «Акт рекламации» и документ-приемник «Ордер на перемещение товаров».
Введение: Цель и логика процесса
Цель — модифицировать стандартный механизм создания на основании, добавив промежуточный диалог с пользователем. Его выбор будет определять, какими именно данными из документа-основания будет заполнен новый документ.
Процесс можно разбить на три ключевых этапа:
- Подготовка интерфейса: Добавление специальной кнопки на форму документа-основания и скрытие стандартного варианта создания.
- Организация диалога: Показ пользователю вопроса с вариантами выбора и обработка результата.
- Динамическое заполнение: Создание и заполнение документа-приемника по условию, зависящему от выбора пользователя.
Подготовка интерфейса документа-основания
Первым делом необходимо добавить на форму документа-основания («Акт рекламации») отдельную кнопку, которая будет запускать наш нестандартный механизм.
Чтобы избежать путаницы, стандартный вариант создания «Ордера на перемещение» через общую кнопку «Создать на основании» следует отключить. Это делается в конфигураторе, в свойствах документа-основания на вкладке «Ввод на основании», путем удаления соответствующего документа-приемника из списка.
Организация диалога выбора с пользователем
Логика работы новой кнопки будет обрабатываться в модуле формы документа-основания. В процедуре-обработчике нажатия кнопки (на клиенте) мы вызываем метод внешней обработки, которая и будет управлять всем процессом.
Далее разработка переносится во внешнюю обработку. В ней создается процедура, которая:
- Формирует вопрос для пользователя.
- Создает объект класса «ОписаниеОповещения», который указывает, какая процедура должна быть вызвана после получения ответа («ПослеЗакрытияВопроса»), и передает в нее необходимые параметры (например, ссылку на документ-основание).
- Вызывает функцию «ПоказатьВопрос», передавая в нее созданное описание, текст вопроса и список возможных ответов.
В результате пользователь увидит стандартное окно 1С с вопросом и предложенными вариантами ответов.
Динамическое создание и заполнение документа-приемника
После того как пользователь сделает выбор и нажмет кнопку «ОК», управление перейдет к процедуре «ПослеЗакрытияВопроса». В этой процедуре (уже на сервере) выполняется следующее:
- Создается новый документ-приемник («Ордер на перемещение товаров»).
- Результат выбора пользователя записывается в его свойство «ДополнительныеСвойства». Это ключевой момент, который позволяет передать контекст выбора на следующий этап.
- Вызывается стандартный метод «Заполнить», который инициирует процедуру обработки заполнения.
- Документ подключается к его форме для отображения пользователю.
В момент выполнения метода «Заполнить» система ищет и выполняет процедуру «ОбработкаЗаполнения» (или обработчик подписки на это событие). Именно в этой процедуре происходит основная магия.
Здесь мы извлекаем значение выбора пользователя из «ДополнительныеСвойства» и, в зависимости от него, заполняем документ-приемник нужными данными из документа-основания.
Например, если пользователь выбрал опцию «Переместить бракованные товары», в табличную часть «Ордера на перемещение» будут перенесены только позиции, отмеченные в акте рекламации как брак. Если же был выбран вариант «Переместить товары для утилизации», то заполнение пойдет по другому алгоритму.
Заключение
Описанный механизм позволяет гибко настраивать процесс создания связанных документов, делая его не автоматическим, а интерактивным и управляемым. Это значительно повышает удобство работы для пользователей, выполняющих сложные, неоднозначные операции, и снижает количество ошибок, так как решение о логике заполнения принимается человеком в контексте конкретной задачи.
Использование внешней обработки делает решение мобильным и легко переносимым между конфигурациями, а четкое разделение этапов на клиентские диалоги и серверную логику обеспечивает его стабильную работу.
Если вам необходима поддержка конфигурации или разработка в 1С, будем рады обсудить детали сотрудничества.







