При работе в конфигурации «1С:Бухгалтерия государственного учреждения» (редакция 1.0) бухгалтеры нередко сталкиваются с ситуацией, когда типовых хозяйственных операций документа недостаточно. Например, требуется добавить специфические счета учета, зафиксировать аналитику или расширить список доступных кодов КОСГУ, чтобы исключить человеческий фактор при ручном заполнении документов вида «Прочие операции». Однако при попытке добавить новый вид операции стандартными средствами пользователи сталкиваются с системными ошибками, а внесенные настройки часто пропадают после первого же обновления программы. Разберем архитектурные особенности механизма видов операций и рассмотрим рабочие способы решения этой задачи.
Проанализируем архитектуру конфигурации. В БГУ 1.0 перечень операций хранится в служебном справочнике ВидыОпераций. Тем не менее этот справочник является предопределенным и жестко связан со структурой метаданных:
ВидыОпераций полностью перезаписывается значениями из типовых макетов. В результате любые пользовательские изменения удаляются.ОбработкаПроведения. Программа проверяет условие вида Если ВидОперации = ... Тогда. Простое добавление строки в справочник не создает алгоритма формирования проводок: даже если документ запишется, провести его без доработки кода конфигурации не удастся.Для модификации правил операций часто применяется внешняя обработка настройки. При попытке интерактивно создать новый элемент с ее помощью возникают следующие исключения:
Ошибка «Не определен владелец». Возникает при попытке добавить строки со счетами и параметрами в новую операцию. Причина заключается в том, что справочник параметров подчинен конкретному виду операции и документу-владельцу. Если новый вид операции еще не записан в базу данных и не получил постоянную ссылку, подчиненные табличные части не могут привязаться к пустому владельцу.
Ошибка «Значение не является значением объектного типа (Строки)». В коде обработки ошибка проявляется на строке:
ВеткаРеквизитов = Ветка.Строки.Найти(РеквизитДокумента, "РеквизитДокумента", Истина);
Выясним причину сбоя: алгоритм обработки ожидает, что структура реквизитов выбранного документа строго соответствует схеме из дерева значений. Если в документе конфигурации отсутствует ожидаемый реквизит либо его наименование не совпадает с метаданными, переменная Ветка принимает значение Неопределено, что и приводит к аварийному завершению работы формы.
Если задача заключается только в расширении доступных счетов или КОСГУ в уже существующей хозяйственной операции, разберем порядок действий без внесения глобальных правок в программный код.
НастройкаВидовОпераций_БГУРед10.epf (поставляется в составе методических материалов диска ИТС).Когда требуется принципиально новый тип хозяйственной операции с уникальной логикой формирования движений, необходимо внести доработки в структуру метаданных. Разберем по шагам, как это реализовать:
ОбработкаПроведения и добавим обработку нового вида операции. Посмотрим на типовой пример реализации:
Если ВидОперации = Перечисления.ВидыОперацийПоступлениеОС.ПоступлениеОтПоставщика Тогда
// Формирование проводок по стандартному алгоритму
ИначеЕсли ВидОперации = Перечисления.ВидыОперацийПоступлениеОС.СвойВидОперации Тогда
// Формирование проводок по новому пользовательскому алгоритму
Проводка = Движения.БухгалтерскиеПроводки.Добавить();
Проводка.Период = Дата;
Проводка.СчетДт = СчетУчета;
Проводка.СчетКт = СчетРасчетов;
Проводка.Сумма = СуммаДокумента;
КонецЕсли;
ВидОперации.Если снимать конфигурацию с поддержки нежелательно, проанализируем обходные решения, позволяющие избежать ошибок ввода данных:
ТиповыеОперации. Пользователи могут создавать собственные типовые операции непосредственно в режиме предприятия копированием существующих шаблонов без программирования, а изменения не затираются при обновлении релизов.