Как исправить ошибку «ПеремещениеМеждуСчетамиНФА» при обновлении БГУ 2.0 в облаке

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

При работе с конфигурацией «Бухгалтерия государственного учреждения 2.0» (БГУ 2.0) в облачных сервисах (например, 1С:Фреш) пользователи и администраторы часто сталкиваются с критической остановкой процесса обновления. Одной из наиболее специфических проблем является ошибка при вычислении источника данных в функции ПеремещениеМеждуСчетамиНФА. Ситуация осложняется тем, что в облаке стандартная серверная отладка зачастую недоступна, а точка останова в общем модуле просто игнорируется системой. Разберем подробно, как диагностировать и устранить эту проблему несколькими способами.

Анализ причины возникновения ошибки

Прежде чем переходить к активным действиям, проанализируем ситуацию. В БГУ 2.0 механизм типовых операций основан на динамическом вычислении проводок. Ошибка в функции ПеремещениеМеждуСчетамиНФА обычно сигнализирует о том, что при попытке программного формирования источника данных для новой проводки (в процессе обновления данных или конфигурации) алгоритм обращается к объекту, счету или реквизиту, который отсутствует или заполнен некорректно.

Основные причины могут быть следующими:

  1. Конфликт кастомизации: В базе существуют измененные пользователем (кастомизированные) элементы справочника ТиповыеОперации, которые не соответствуют новой структуре метаданных.
  2. Проблемы с КБК: Наличие остатков на счетах учета нефинансовых активов (НФА) с устаревшими или неактуальными классификационными признаками счетов.
  3. Логическая ошибка в данных: Функция пытается обработать данные, где, например, не заполнен счет дебета или кредита в настройках по умолчанию для операции внутреннего перемещения.

Способ 1. Использование расширения для обхода ошибки

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

Рассмотрим по шагам, как модифицировать поведение системы:

  1. Создадим новое расширение в конфигураторе (если есть доступ к конфигуратору облачной области в режиме разработчика) или в локальной копии, чтобы потом загрузить его в облако.
  2. В расширение необходимо добавить общий модуль (например, УправлениеОсновнымиСредствами), в котором находится проблемная функция.
  3. Используем аннотацию &Вместо для функции ВнутреннееПеремещениеМеждуСчетамиНФА.

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


&Вместо("ВнутреннееПеремещениеМеждуСчетамиНФА")
Функция Расш1_ВнутреннееПеремещениеМеждуСчетамиНФА(Параметры)
    // Вместо выполнения ошибочного кода возвращаем пустую таблицу
    // Это позволит обновлению завершиться без падения по ошибке вычисления
    Возврат Новый ТаблицаЗначений;
КонецФункции

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

Способ 2. Локальная отладка через выгрузку данных (data_dump)

Если метод с расширением кажется слишком рискованным или не дает результата, проанализируем ситуацию более глубоко через локальную копию. В облаке 1С:Фреш выгрузка базы в формате .dt не всегда доступна, но всегда есть возможность выгрузить данные для локальной версии.

Рассмотрим процесс выгрузки и загрузки:

  1. Выгрузка из облака: В личном кабинете сервиса или непосредственно из приложения (если в него удается зайти хотя бы под другим пользователем или до момента падения) перейдем в Администрирование — Выгрузить данные в локальную версию. Будет сформирован архив data_dump.zip.
  2. Подготовка конфигурации (CF): Это критически важный момент. Поскольку архив содержит только данные (XML), нам нужна идентичная конфигурация. Посмотрим версию в окне «О программе» (если это возможно). Если версия БГУ 2.0.XX.YY, нам нужно найти именно этот дистрибутив на портале ИТС.
  3. Загрузка в пустую базу:
    • Создаем пустую информационную базу в локальном кластере.
    • Загружаем в нее полученный .cf файл через конфигуратор.
    • Запускаем базу в режиме «Предприятие».
    • В открывшемся мастере (или через Администрирование — Загрузка данных из сервиса) выбираем наш файл data_dump.zip.

Теперь, когда база находится на локальном компьютере, мы можем включить полноценную отладку. Установим точку останова в функции ПеремещениеМеждуСчетамиНФА. Проанализируем содержимое переменных в момент возникновения ошибки. Скорее всего, мы увидим, что какой-то запрос к справочнику ТиповыеОперации возвращает Неопределено или пустое значение там, где ожидается ссылка на объект.

Способ 3. Модификация загрузки типовых операций

Выясним причину, почему обновление «спотыкается» именно на этой функции. Часто это происходит при попытке системы автоматически обновить настройки проводок. Мы можем попробовать временно запретить обновление конкретных типовых операций.

Разберем, как это реализовать через расширение модуля обработки ИмпортЭкспортТиповыхОперацийВФормате20. В процедуре ЗагрузитьТиповыеОперации можно добавить условие, которое будет пропускать загрузку операции «Внутреннее перемещение»:


&Вместо("ЗагрузитьТиповыеОперации")
Процедура Расш1_ЗагрузитьТиповыеОперации(ПараметрыЗагрузки)
    // Здесь можно программно модифицировать список загружаемых операций
    // Или добавить попытку исключения (Попытка...Исключение) для обхода ошибки
    Попытка
        ПродолжитьВызов(ПараметрыЗагрузки);
    Исключение
        ЗаписьЖурналаРегистрации("Обновление.ТиповыеОперации", 
            УровеньЖурналаРегистрации.Ошибка,,, 
            "Пропущена ошибка при загрузке: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Важно: Использование блока Попытка...Исключение в процедурах обновления — это крайняя мера. Мы должны обязательно убедиться, что данные после такого «пропуска» остались консистентными.

Дополнительные рекомендации по проверке данных

Если ошибка связана с вычислением источника, проанализируем состояние плана счетов и регистров учета НФА. Рекомендуется выполнить следующие действия (лучше всего в локальной копии перед попыткой повторного обновления):

Итоги

Мы рассмотрели несколько путей решения проблемы. Оптимальный алгоритм действий выглядит так:

  1. Попытаться создать расширение для временного обхода функции ПеремещениеМеждуСчетамиНФА, чтобы завершить обновление конфигурации.
  2. Если это не помогает, выполнить выгрузку data_dump и развернуть базу локально для детальной отладки.
  3. После входа в базу обязательно обновить настройки типовых операций из поставляемых данных, чтобы привести их в соответствие с новым релизом.

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

← На главную