При работе с конфигурацией «Бухгалтерия государственного учреждения 2.0» (БГУ 2.0) в облачных сервисах (например, 1С:Фреш) пользователи и администраторы часто сталкиваются с критической остановкой процесса обновления. Одной из наиболее специфических проблем является ошибка при вычислении источника данных в функции ПеремещениеМеждуСчетамиНФА. Ситуация осложняется тем, что в облаке стандартная серверная отладка зачастую недоступна, а точка останова в общем модуле просто игнорируется системой. Разберем подробно, как диагностировать и устранить эту проблему несколькими способами.
Прежде чем переходить к активным действиям, проанализируем ситуацию. В БГУ 2.0 механизм типовых операций основан на динамическом вычислении проводок. Ошибка в функции ПеремещениеМеждуСчетамиНФА обычно сигнализирует о том, что при попытке программного формирования источника данных для новой проводки (в процессе обновления данных или конфигурации) алгоритм обращается к объекту, счету или реквизиту, который отсутствует или заполнен некорректно.
Основные причины могут быть следующими:
ТиповыеОперации, которые не соответствуют новой структуре метаданных.Если отладка на сервере невозможна, мы можем применить метод «хирургического вмешательства» через механизм расширений. Это позволит нам запустить базу, пропустить проблемный шаг обновления, а затем разобраться с причиной в пользовательском режиме.
Рассмотрим по шагам, как модифицировать поведение системы:
УправлениеОсновнымиСредствами), в котором находится проблемная функция.&Вместо для функции ВнутреннееПеремещениеМеждуСчетамиНФА.Пример кода, который можно применить в расширении, чтобы функция возвращала пустую таблицу значений и не блокировала вход в базу:
&Вместо("ВнутреннееПеремещениеМеждуСчетамиНФА")
Функция Расш1_ВнутреннееПеремещениеМеждуСчетамиНФА(Параметры)
// Вместо выполнения ошибочного кода возвращаем пустую таблицу
// Это позволит обновлению завершиться без падения по ошибке вычисления
Возврат Новый ТаблицаЗначений;
КонецФункции
После того как расширение будет подключено и база успешно обновится, необходимо:
Если метод с расширением кажется слишком рискованным или не дает результата, проанализируем ситуацию более глубоко через локальную копию. В облаке 1С:Фреш выгрузка базы в формате .dt не всегда доступна, но всегда есть возможность выгрузить данные для локальной версии.
Рассмотрим процесс выгрузки и загрузки:
data_dump.zip..cf файл через конфигуратор.data_dump.zip.Теперь, когда база находится на локальном компьютере, мы можем включить полноценную отладку. Установим точку останова в функции ПеремещениеМеждуСчетамиНФА. Проанализируем содержимое переменных в момент возникновения ошибки. Скорее всего, мы увидим, что какой-то запрос к справочнику ТиповыеОперации возвращает Неопределено или пустое значение там, где ожидается ссылка на объект.
Выясним причину, почему обновление «спотыкается» именно на этой функции. Часто это происходит при попытке системы автоматически обновить настройки проводок. Мы можем попробовать временно запретить обновление конкретных типовых операций.
Разберем, как это реализовать через расширение модуля обработки ИмпортЭкспортТиповыхОперацийВФормате20. В процедуре ЗагрузитьТиповыеОперации можно добавить условие, которое будет пропускать загрузку операции «Внутреннее перемещение»:
&Вместо("ЗагрузитьТиповыеОперации")
Процедура Расш1_ЗагрузитьТиповыеОперации(ПараметрыЗагрузки)
// Здесь можно программно модифицировать список загружаемых операций
// Или добавить попытку исключения (Попытка...Исключение) для обхода ошибки
Попытка
ПродолжитьВызов(ПараметрыЗагрузки);
Исключение
ЗаписьЖурналаРегистрации("Обновление.ТиповыеОперации",
УровеньЖурналаРегистрации.Ошибка,,,
"Пропущена ошибка при загрузке: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Важно: Использование блока Попытка...Исключение в процедурах обновления — это крайняя мера. Мы должны обязательно убедиться, что данные после такого «пропуска» остались консистентными.
Если ошибка связана с вычислением источника, проанализируем состояние плана счетов и регистров учета НФА. Рекомендуется выполнить следующие действия (лучше всего в локальной копии перед попыткой повторного обновления):
Тестирование и исправление с включенными опциями проверки логической и ссылочной целостности.Мы рассмотрели несколько путей решения проблемы. Оптимальный алгоритм действий выглядит так:
ПеремещениеМеждуСчетамиНФА, чтобы завершить обновление конфигурации.Помните, что работа в облаке накладывает ограничения на инструменты разработчика, поэтому владение механизмами расширений и навыками переноса данных между облаком и локальной версией является ключевым для успешного администрирования БГУ 2.0.