Как добавить сообщение при проведении документа в 1С:БГУ 2.0?

Бухгалтер 1С v8.3 (Управляемые формы) Бухгалтерский учет
← На главную

В процессе работы с программой «1С:Бухгалтерия государственного учреждения 8», редакция 2.0 (БГУ 2.0) бухгалтеры часто сталкиваются с рутинными операциями. Для экономии времени новые документы нередко создаются путем копирования старых. Однако у этого быстрого способа есть серьезный минус: пользователи регулярно забывают перезаполнять вкладку «Денежные обязательства». В результате сумма документа не соответствует сумме созданного обязательства, что приводит к искажению регламентированной отчетности.

В этой статье мы подробно разберем, как решить данную проблему. Мы рассмотрим как встроенные инструменты программы, доступные обычному пользователю без программирования (No-code решения), так и более гибкие варианты разработки через механизм расширений, которые сможет внедрить штатный специалист или администратор.

---

Вариант 1. Настройка проверки через «Типовые операции» (Решение без программирования)

Многие пользователи и даже начинающие специалисты ошибочно полагают, что любые проверки при проведении документов требуют обязательного изменения кода программы в конфигураторе. В 1С:БГУ 2.0 разработчиками уже заложен мощный стандартный инструмент контроля, настраиваемый непосредственно в режиме 1С:Предприятие.

Давайте разберем по шагам, как настроить проверку в справочнике «Типовые операции»:

  1. Откроем справочник «Типовые операции» и выберем операцию, используемую для оформления документа Поступление МЗ (например, «Поступление через счет 105»).
  2. Перейдем к настройкам проведения и обратим внимание на табличную часть или форму настройки проводок по денежным обязательствам.
  3. Найдем поле «Условие». В данном поле мы можем прописать формулу проверки. Нам необходимо сопоставить общую сумму документа и сумму формируемого денежного обязательства. Формула должна возвращать логическое значение (Истина или Ложь).
  4. Заполним поле «Текст сообщения при ошибке». Сюда мы впишем понятный для пользователей текст. Например: «Внимание! Сумма сформированного денежного обязательства не совпадает с общей суммой документа Поступление МЗ. Пожалуйста, перезаполните вкладку Денежные обязательства!».

Как работает этот механизм: в момент проведения документа система анализирует прописанное в операции условие. Если условие не выполняется (возвращается «Ложь»), программа автоматически прерывает проведение, блокирует запись транзакции и выводит на экран подготовленный нами текст ошибки. Документ не будет проведен до тех пор, пока пользователь не исправит суммы.

---

Вариант 2. Использование встроенного «Контроля расходов по обязательствам»

Если нам необходимо системно контролировать корректность отражения обязательств и не допускать расхождений, мы можем задействовать еще одну стандартную подсистему БГУ 2.0, о которой часто забывают.

Проанализируем шаги для включения автоматического контроля:

  1. Перейдем в раздел «Администрирование».
  2. Выберем пункт «Настройка параметров учета», далее перейдем в подраздел «Ведение учета».
  3. Найдем и активируем опцию «Контроль расходов по обязательствам».

После активации этого флага программа начнет автоматически сверять суммы первичных документов с суммами принятых обязательств. При обнаружении несоответствий или превышений лимитов система выдаст подробный протокол расхождений в специальном диалоговом окне и приостановит проведение некорректного документа. Этот вариант идеален, так как он поддерживается вендором и обновляется автоматически.

---

Вариант 3. Программный вывод сообщения через расширение конфигурации (Low-code)

Бывают ситуации, когда жесткая блокировка проведения неудобна, и нам требуется лишь мягко предупредить пользователя сообщением на экране, не препятствуя записи документа. В таком случае мы можем использовать механизм расширений. Это абсолютно безопасно: программа не снимается с поддержки, а конфигурация продолжает обновляться в штатном режиме.

Для реализации этой логики мы добавим обработчик события проведения. Посмотрим на пример кода, который необходимо разместить в модуле объекта документа ПоступлениеМЗ внутри нашего расширения:


&После("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведенияПосле(Отказ, РежимПроведения)
    
    // Получаем общую сумму документа
    СуммаДокумента = ЭтотОбъект.СуммаДокумента;
    СуммаДенежныхОбязательств = 0;
    
    // Обходим табличную часть денежных обязательств и суммируем их
    Для Каждого СтрокаОбязательства Из ЭтотОбъект.ДенежныеОбязательства Цикл
        СуммаДенежныхОбязательств = СуммаДенежныхОбязательств + СтрокаОбязательства.Сумма;
    КонецЦикла;
    
    // Сравниваем полученные значения
    Если СуммаДокумента <> СуммаДенежныхОбязательств Тогда
        
        // Формируем интерактивное сообщение для пользователя
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Внимание! Сумма документа (" + СуммаДокумента + 
                          ") отличается от суммы денежных обязательств (" + СуммаДенежныхОбязательств + 
                          "). Проверьте вкладку 'Денежные обязательства'!";
        
        // Привязываем сообщение к конкретному полю на форме для удобства пользователя
        Сообщение.Поле = "ДенежныеОбязательства";
        Сообщение.УстановитьДанные(ЭтотОбъект);
        Сообщение.Сообщить();
        
        // Если требуется жестко запретить проведение, раскомментируйте строку ниже:
        // Отказ = Истина;
        
    КонецЕсли;

КонецПроцедуры

В данном примере мы использовали объект СообщениеПользователю. Метод Сообщить() выводит информацию непосредственно в интерфейс программы. Использование свойства Поле позволяет пользователю кликнуть по сообщению и сразу перейти к проблемной табличной части документа.

Если вы хотите сделать код более универсальным и чистым, можно использовать стандартные функции БСП (Библиотеки стандартных подсистем), например, вызвать метод ОбщегоНазначенияКлиентСервер.СообщитьПользователю().

---

Резюме и рекомендации

Мы разобрали три эффективных метода контроля сумм при проведении документов в 1С:БГУ 2.0. Подведем итог, какой метод выбрать в зависимости от ваших задач:

← На главную