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