В процессе обновления нетиповых или доработанных конфигураций 1С разработчики нередко сталкиваются с ошибками вида «Неверный параметр 2» или «Неверный параметр 3». Подобные исключения часто возникают при выполнении служебных обработчиков обновления, процедур БСП, формировании очередей регистрации изменений или пересчете прав доступа. Проанализируем природу этой неполадки, разберем отладку метаданных и рассмотрим способы устранения сбоя.
Выясним причину возникновения ошибки в отладчике
Рассмотрим типовую ситуацию: во время обновления информационной базы при динамическом формировании параметров запросов или структур возникает исключение. Если перейти к месту ошибки в отладчике, можно увидеть вызов создания структуры по списку полей, например:
СтруктураПараметров = Новый Структура(СтрокаИменПолей, Значение1, Значение2, Значение3);
Конструктор объекта Структура требует строгого соответствия: количество имен полей, перечисленных через запятую в первой строке, должно в точности совпадать с количеством переданных далее параметров. Если алгоритм программы собирает имена колонок на основе состава стандартных реквизитов таблицы (например, регистра бухгалтерии), а значения передает исходя из текущих настроек метаданных (или наоборот), возникает несоответствие аргументов. В результате платформа генерирует исключение «Неверный параметр N».
Исследуя состав коллекции СтандартныеРеквизиты проблемного регистра бухгалтерии в отладчике, можно обнаружить аномалию: среди полей появляются реквизиты вида Субконто4, Субконто5, Субконто6, даже если в текущих свойствах плана счетов свойство «Максимальное количество субконто» установлено, например, равным 3.
Это происходит по следующим причинам:
Ранее выполненное уменьшение количества субконто: если в истории конфигурации максимальное количество субконто когда-то составляло 6, а затем было программно или интерактивно уменьшено до 3 без полной очистки данных, в базе могли остаться «хвосты» метаданных или записей в физических таблицах СУБД.
Пользовательские субконто на счетах: если в режиме предприятия на определенных счетах были привязаны виды субконто с индексами выше нового лимита, платформа не всегда способна корректно выполнить реструктуризацию таблицы движений и итогов.
Рассинхронизация физической схемы СУБД и дерева конфигурации: при сбоях динамического обновления или прерванной реструктуризации системные таблицы описания схемы продолжают хранить ссылки на удаленные колонки.
Способ 1. Быстрое устранение (возврат максимального количества субконто)
Если обновление требуется завершить срочно, а разбираться с архивами движений нет времени, применим быстрый обходной путь. Восстановим прежнюю размерность аналитики плана счетов:
Откроем конфигуратор и перейдем к целевому объекту ПланСчетов.
В палитре свойств найдем параметр «Максимальное количество субконто».
Увеличим значение до того количества, на которое указывают фантомные поля (в рассматриваемом случае установим значение 6).
Обновим конфигурацию базы данных по клавише F7.
Повторно запустим процедуру обновления данных в режиме «1С:Предприятие».
После расширения лимита субконто программный код, опрашивающий состав метаданных регистра бухгалтерии, получает согласованное количество полей и значений, благодаря чему обновление успешно завершается.
Способ 2. Корректное сжатие аналитики и очистка «фантомных» данных
Если оставлять завышенное количество субконто нежелательно (например, требуется поддерживать чистую типовую конфигурацию с тремя субконто), разберем правильный алгоритм приведения базы к исходному состоянию.
Проверка и очистка видов субконто на счетах: в режиме «1С:Предприятие» проверим все элементы плана счетов (включая помеченные на удаление и предопределенные). Если на счетах заданы субконто на позициях 4, 5 или 6, удалим эти строки из табличной части счетов.
Очистка движений регистра бухгалтерии: напишем или используем внешнюю обработку, которая найдет все записи регистра с заполненными значениями в удаляемых субконто, очистит их и перезапишет наборы записей.
Уменьшение лимита в конфигураторе: вернем свойство «Максимальное количество субконто» к целевому числу (например, 3) и применим изменения в информационной базе.
Тестирование и исправление: запустим утилиту через меню «Администрирование» > «Тестирование и исправление...». Обязательно выставим флаги:
В процессе реструктуризации платформа физически удалит неиспользуемые колонки из таблиц СУБД.
Сброс кэша и перезапуск: очистим серверный и локальный кэш конфигурации, чтобы исключить чтение устаревшей структуры метаданных клиентскими и серверными сеансами.