Как исправить ошибку «Несоответствие типов» при проведении корректировки реализации в 1С:УПП?

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

При работе в конфигурации «1С:Управление производственным предприятием 1.3» (УПП) пользователи и разработчики часто сталкиваются со специфическими ошибками при проведении документа Корректировка реализации. Особенно остро эта проблема проявляется в базах, где включена и активно используется ордерная схема учета запасов. Проведение документа аварийно завершается технической ошибкой в процедурах партионного учета, оставляя пользователей без возможности скорректировать документы отгрузки.

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

Анализ технической причины ошибки

В процессе проведения документа Корректировка реализации система обращается к механизмам партионного учета. Ошибка конфигуратора обычно указывает на следующую строку в общем модуле УправлениеЗапасамиПартионныйУчет:


ТаблицаПартий.ЗагрузитьКолонку(ОбщегоНазначения.РаспределитьПропорционально(СтрокаТЧ.СуммаВал, МассивКоэфф, , Ложь), "СуммаВал");

Система аварийно завершает работу с сообщением: «Ошибка при вызове метода контекста (ЗагрузитьКолонку): Несоответствие типов (параметр номер '1')».

Выясним, почему это происходит. Метод ЗагрузитьКолонку в качестве первого параметра ожидает массив распределенных числовых значений. Однако функция ОбщегоНазначения.РаспределитьПропорционально возвращает значение Неопределено вместо массива в следующих случаях:

  1. Сумма коэффициентов распределения равна нулю. Если при формировании базы распределения (массив МассивКоэфф) сумма всех его элементов оказалась равной 0, пропорциональное распределение математически невозможно.
  2. Массив коэффициентов пуст. Если подлежащие распределению партии не были найдены, массив базы распределения остается пустым, и функция распределения не может вернуть корректный результат.

При использовании ордерного склада движения по партиям списываются не финансовым документом Реализация товаров и услуг, а складским документом Расходный ордер на товары (при включенной настройке учетной политики «Списывать партии расходным ордером»). Корректировка реализации пытается сопоставить партии по документу-основанию, но из-за «схлопывания» или дублирования движений с противоположными знаками итоговый коэффициент распределения обнуляется, что и приводит к ошибке.

Настройка отладки на сервере 1С для поиска причин

Чтобы детально проанализировать, какие именно данные попадают в расчет, необходимо запустить отладку на сервере 1С:Предприятия. Рассмотрим, как по шагам включить режим отладки на стороне сервера:

  1. Откроем редактор реестра Windows на сервере приложений 1С. Для этого нажмите комбинацию клавиш Win + R, введите regedit и нажмите Enter.
  2. Перейдем по следующему пути (ветка реестра может незначительно отличаться в зависимости от разрядности платформы):
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (x86-64)
  3. Найдем параметр с именем ImagePath.
  4. Дважды кликнем по параметру и добавим ключ -debug в строку запуска службы. Строка должна выглядеть примерно так:
    "C:\Program Files\1cv8\8.3.18.1300\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d "C:\Program Files\1cv8\srvinfo"
  5. Сохраним изменения в реестре.
  6. Откроем оснастку «Службы» (services.msc), найдем службу Агент сервера 1С:Предприятия и перезапустим ее.
  7. После перезапуска службы откроем конфигуратор на копии базы данных, перейдем в меню Отладка -> Подключение, найдем в списке доступных предметов наш серверный сеанс и подключимся к нему. Теперь точки останова в общем модуле УправлениеЗапасамиПартионныйУчет будут успешно срабатывать.

Вариант решения №1. Программное исправление алгоритма отбора партий

Проанализируем программный код процедуры ПроведениеКорректировкиРеализации в общем модуле УправлениеЗапасамиПартионныйУчет. Проблема заключается в том, что алгоритм выбирает лишние движения по расходному ордеру и реализации одновременно, что в итоге дает нулевой суммарный коэффициент.

Найдем в коде инициализацию структуры отбора партий:


// Было:
Отбор = Новый Структура("НомерСтрокиДокумента, ОтражатьВБухгалтерскомУчете", СтрокаТЧ.НомерСтроки, Истина);

Для того чтобы исключить задвоение и некорректный расчет коэффициентов при ордерной схеме, необходимо ограничить выборку только финансовой частью (например, операциями возврата). Модифицируем код следующим образом:


// Стало:
Отбор = Новый Структура("НомерСтрокиДокумента, ОтражатьВБухгалтерскомУчете, ВидОперации", СтрокаТЧ.НомерСтроки, Истина, "Возврат");

Такая доработка позволит системе корректно рассчитывать коэффициенты распределения, игнорируя лишние «схлопывающиеся» движения.

Вариант решения №2. Защита от падения (безопасная обертка кода)

Чтобы гарантировать стабильность работы системы даже при возникновении нестандартных ситуаций с распределением партий, рекомендуется внедрить безопасную проверку возвращаемого значения функции распределения. Разберем этот подход на примере кода.

Вместо вызова метода без проверки:


ТаблицаПартий.ЗагрузитьКолонку(ОбщегоНазначения.РаспределитьПропорционально(СтрокаТЧ.СуммаВал, МассивКоэфф, , Ложь), "СуммаВал");

Внедрите следующую безопасную конструкцию:


РаспределеннаяСумма = ОбщегоНазначения.РаспределитьПропорционально(СтрокаТЧ.СуммаВал, МассивКоэфф, , Ложь);
Если РаспределеннаяСумма <> Неопределено Тогда
    ТаблицаПартий.ЗагрузитьКолонку(РаспределеннаяСумма, "СуммаВал");
КонецЕсли;

Эту же процедуру необходимо повторить для аналогичных блоков кода ниже по тексту модуля, где распределяются значения НДСВал, НДСИтоговый, НДСДоИзм и НДСДоКорр. Это предотвратит аварийное завершение транзакции проведения и позволит документу записаться в информационную базу.

Вариант решения №3. Методические обходы (без изменения конфигурации)

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

Применение одного из описанных выше методов позволит успешно обойти или полностью устранить ошибку проведения корректировки реализации в УПП при ордерной схеме документооборота.

← На главную