Разработка и Конфигурация · 11 мин
Интерактивное проведение в 1С: как определить режим и проверить его
Что такое интерактивное проведение в 1С, как определить режим проведения документа, где смотреть свойства и как программно проверить способ проведения.
Интерактивное проведение — это режим, при котором документ в 1С проводится непосредственно пользователем из формы документа или списка: нажатием кнопки «Провести», «Провести и закрыть» или командой контекстного меню. Ему противопоставляется программное проведение, когда метод Записать() с режимом проведения вызывается из кода — обработки, регламентного задания или другого документа. Различие принцициально, потому что многие механизмы конфигурации ведут себя по-разному в зависимости от того, кто инициировал проведение.
Определить, каким способом проводится документ, нужно в нескольких типовых ситуациях: когда проведение «молча» не выполняется, когда обработчик события должен сработать только при ручном проведении, когда требуется запретить интерактивное проведение для отдельных видов документов или, наоборот, разрешить его только вручную. Ниже разобраны прикладные способы определения режима — и со стороны пользователя, и со стороны разработчика.
Что такое интерактивное проведение и чем оно отличается от программного
В платформе 1С:Предприятие 8 предусмотрены два режима проведения документа. Интерактивный — пользователь сам нажимает кнопку проведения в форме. Неинтерактивный (программный) — проведение инициирует код: обработка группового перепроведения, обмен данными, фоновое задание, вызов ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение) из другого модуля.
Разница важна практически. При интерактивном проведении платформа может выводить пользователю вопросы и сообщения, а типовые конфигурации часто выполняют дополнительные проверки «на лету» — например, контроль остатков с выдачей понятного диалога. При программном проведении диалоги невозможны: код работает в фоне, и любая попытка показать модальное окно приведёт к ошибке. Поэтому логику, завязанную на интерактивность, нужно явно разделять.
Как определить режим проведения в конфигураторе
Первое место, где определяется допустимость интерактивного проведения, — свойства документа в конфигураторе. Откройте дерево конфигурации, найдите нужный вид документа, вызовите палитру свойств и обратите внимание на свойство «Проведение»: значение «Разрешить» или «Запретить». Если проведение запрещено, документ работает в режиме простой записи, и вопрос интерактивности не возникает вовсе.
Далее смотрите модуль объекта документа — обработчик ОбработкаПроведения(Отказ, РежимПроведения). Параметр РежимПроведения имеет тип РежимПроведенияДокумента и принимает значения Оперативный или Неоперативный. Важно не путать: это свойство определяет оперативность (проверку остатков на текущую дату), а не интерактивность. Настройка оперативного проведения задаётся в палитре свойств отдельно — «Оперативное проведение: Разрешить/Запретить».
Как программно определить интерактивное проведение
В обработчике ОбработкаПроведения параметр РежимПроведения в ряде конфигураций и механизмов принимает значение РежимПроведенияДокумента.Неинтерактивный, когда документ проводится программно. Это позволяет построить ветвление логики: например, подробные сообщения пользователю выводить только при ручном проведении, а при фоновом — писать в журнал регистрации.
Типовой приём выглядит так:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Если РежимПроведения = РежимПроведенияДокумента.Неинтерактивный Тогда
// Проведение запущено из кода: не показываем диалоги,
// ошибки фиксируем в журнале регистрации
Иначе
// Интерактивное проведение: можно выводить сообщения пользователю
КонецЕсли;
КонецПроцедуры
Дополнительно определить контекст помогает функция ПолучитьТекущийСеансИнформационнойБазы() и анализ фоновых заданий: если проведение выполняется в фоновом сеансе без пользовательского интерфейса, оно по определению неинтерактивное. В клиент-серверном коде также можно проверить, доступен ли клиентский контекст, — но опора на параметр РежимПроведения остаётся самым прямым и надёжным способом.
Если РежимПроведения = РежимПроведенияДокумента.Неинтерактивный Тогда
ЗаписьЖурналаРегистрации("Проведение", УровеньЖурналаРегистрации.Информация,,, "Программное проведение");
КонецЕсли;Как определить интерактивное проведение при отложенном проведении
В конфигурациях на основе БСП (УТ, ERP, КА и другие) используется механизм отложенного проведения: документ записывается, а движения по регистрам выполняет регламентное задание. Здесь есть отдельный признак — ИнтерактивнаяПостановкаВОчередь в структуре дополнительных свойств объекта. Он показывает, что документ поставлен в очередь отложенного проведения именно в результате действий пользователя, а не обмена или фоновой обработки.
Проверить постановку в очередь можно через регистр сведений очереди отложенного проведения (в типовых — «Отложенное проведение документов» или аналог). Откройте документ, посмотрите его статус: если проведение отложено, в форме обычно выводится соответствующая надпись, а фактические движения появятся после отработки регламентного задания. Для диагностики полезно открыть список регламентных заданий и убедиться, что задание отложенного проведения активно и не завершается ошибкой.
Движения видны в регистрах сразу после нажатия «Провести»
Проверить очередь отложенного проведения и регламентное задание
Проверить роли пользователя и свойство «Проведение» в конфигураторе
В обработчике РежимПроведения = Неинтерактивный
Как разрешить или запретить интерактивное проведение
Запрет ручного проведения настраивается через роли и подписки на события. Прямого флага «запретить интерактивное проведение» в свойствах документа нет, поэтому применяют два подхода. Первый — ограничение прав: убрать у роли право интерактивного изменения документа или настроить RLS. Второй — подписка на событие ОбработкаПроведения, в которой при интерактивном режиме выставляется отказ:
Если РежимПроведения <> РежимПроведенияДокумента.Неинтерактивный Тогда
Отказ = Истина;
ОбщегоНазначения.СообщитьПользователю("Ручное проведение запрещено. Используйте обработку закрытия периода.");
КонецЕсли;
Обратная задача — разрешить только ручное проведение — решается зеркально: в подписке при неинтерактивном режиме выставляется отказ. Это бывает нужно, когда документ требует обязательного визуального контроля пользователем, например при контроле отрицательных остатков с принятием решения человеком.
Типичные проблемы и их диагностика
Частая жалоба: «документ не проводится интерактивно, хотя обработкой проводится». Причины обычно такие: у пользователя нет права на интерактивное проведение (проверьте роли через «Администрирование — Пользователи»), в подписке стоит отказ для интерактивного режима, либо включён механизм дат запрета изменения данных — тогда проведение блокируется по дате документа, а сообщение выглядит как обычная ошибка.
Обратная ситуация — при ручном проведении всё работает, а регламентное задание или обмен завершаются ошибкой. Здесь почти всегда виновата логика, рассчитанная на интерактив: вывод сообщений через клиентские методы, обращение к форме, модальные вызовы. Диагностируется это по журналу регистрации: отфильтруйте события по сеансу фонового задания и посмотрите текст ошибки.
Как проверить результат
После настройки убедитесь, что поведение соответствует ожиданиям. Проведите документ вручную и программно (например, простой обработкой с вызовом Записать(РежимЗаписиДокумента.Проведение)) и сравните: движения по регистрам, сообщения, записи в журнале регистрации. Для отложенного проведения проверьте, что документ появился в очереди и после отработки задания получил движения.
Как проверить результат
Записи в регистрах появляются сразу или после отработки задания
Документ проведён, но движений нет и в очереди его нет
Нет ошибок при обоих способах проведения
Ошибки только при фоновом проведении — признак интерактивной логики в коде
Кнопка «Провести» доступна и работает у целевой роли
Кнопка есть, но проведение отклоняется подпиской без понятного сообщения
Что важно запомнить
Интерактивное проведение определяется параметром РежимПроведения в ОбработкеПроведения и признаком ИнтерактивнаяПостановкаВОчередь при отложенном проведении. Не путайте его с оперативным проведением, избегайте клиентских вызовов в серверном коде проведения и всегда проверяйте журнал регистрации при расхождениях поведения.
Частые вопросы
Чем интерактивное проведение отличается от оперативного?
Это независимые понятия. Интерактивность описывает источник проведения (пользователь или код), оперативность — момент контроля остатков: оперативное проведение проверяет остатки на текущее время и запрещает проведение «задним числом» без перепроведения последующих документов. Документ может проводиться интерактивно и при этом неоперативно.
Почему кнопка «Провести» неактивна у пользователя?
Наиболее вероятные причины: у роли нет права на проведение данного вида документов, документ находится в периоде даты запрета изменения данных, либо в конфигурации для документа установлено свойство «Проведение: Запретить». Проверяйте в указанном порядке, начиная с ролей.
Можно ли узнать в коде, кто именно провёл документ интерактивно?
Да. Внутри ОбработкиПроведения доступна функция ПользователиИнформационнойБазы.ТекущийПользователь() (или аналог из БСП — Пользователи.ТекущийПользователь()). При программном проведении из фонового задания это будет пользователь, под которым работает задание. Факт проведения фиксируется и в журнале регистрации.
Как запретить проведение документа только из обработки группового перепроведения?
В подписке на ОбработкуПроведения проверьте, что РежимПроведения равен Неинтерактивный, и выставьте Отказ = Истина. Учтите, что это заблокирует любое программное проведение, включая обмены и регламентные задания, поэтому при необходимости добавьте исключения через дополнительные свойства объекта.
Что делать, если отложенное проведение «зависло»?
Откройте очередь отложенного проведения и журнал регистрации: найдите ошибку по конкретному документу, устраните причину (обычно это данные документа или блокировки), затем перезапустите регламентное задание или снимите и заново поставьте документ в очередь. Не удаляйте записи очереди вручную без анализа — документ останется без движений.
Влияет ли режим проведения на скорость работы?
Косвенно — да. Интерактивное проведение с оперативным контролем остатков выполняет дополнительные запросы к регистрам в момент нажатия кнопки, а отложенное проведение переносит нагрузку на фоновое задание. При массовом вводе документов отложенный режим обычно даёт более отзывчивый интерфейс, но требует контроля очереди.