При выполнении процедуры закрытия месяца в программах 1С:ERP Управление предприятием или 1С:Комплексная автоматизация 2.4 специалисты нередко сталкиваются с критической ошибкой SQL-сервера: Microsoft SQL Server Native Client 11.0: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric. Эта ошибка возникает в процессе выполнения подзапроса ОтклоненияСвободныхКоэффициентовВР и напрямую связана с механизмом решения СЛУ (Системы Линейных Уравнений), который 1С использует для распределения затрат и формирования стоимости продукции.
Рассмотрим подробно причины возникновения этой ситуации, разберем методику поиска «проблемных» данных и определим шаги, которые позволят успешно завершить расчет себестоимости.
Проанализируем механику работы системы. Для расчета себестоимости в 1С:ERP строится сложная математическая модель. Все связи между выпусками продукции и затратами представляются в виде огромной матрицы. При расчете этой матрицы (решении СЛУ) результаты записываются во временные таблицы SQL. В конфигурации 1С для этих полей жестко задан тип данных Numeric с определенной точностью (обычно 15 знаков всего и 3 после запятой).
Если в процессе вычислений система получает число, которое не помещается в эти рамки (например, значение превышает 999 999 999 999.999), SQL Server выбрасывает исключение Arithmetic overflow. Проблема не в самой платформе 1С, а в том, что входные данные в информационной базе заставляют математический алгоритм «раздувать» стоимость до бесконечности.
Выясним основные причины, которые приводят к математическим аномалиям:
Ресурсных спецификациях. Если по ошибке указано, что на производство 1 грамма продукции требуется 1000 тонн сырья, система получит гигантский стоимостный коэффициент.Первым делом попробуем изменить математический подход к решению задачи. В 1С:ERP предусмотрено два основных метода. Перейдем в раздел НСИ и администрирование — Финансовый результат и контроллинг — Учет товаров и найдем настройки расчета себестоимости.
Рассмотрим подробнее доступные варианты в поле Способ решения СЛУ:
Если смена метода не помогла, необходимо найти конкретную номенклатурную позицию или документ, вызывающий сбой. Воспользуемся встроенными инструментами анализа:
Стоимость (больше 1 000 000 000) или будем искать позиции с аномально высокой ценой единицы. Если мы видим, что копеечный гвоздь вдруг стал стоить миллиард — мы нашли узел проблемы.Петли встречного выпуска. Он наглядно показывает замкнутые цепочки производства, которые СЛУ не может разорвать самостоятельно.Остатки и обороты. Наша задача — выявить любые отрицательные остатки на конец месяца. Все «красные» строки должны быть исправлены до запуска расчета себестоимости.Разберем ситуацию, когда визуальный анализ отчетов не дает результата. В этом случае нам поможет работа с техническими данными:
Проанализируем записи регистра сведений Узлы расчета себестоимости. Ошибка часто локализована в конкретном «узле» (группе связанных затрат). Мы можем попробовать временно пометить на удаление документы распределения расходов или выпуски продукции по подозрительным подразделениям, чтобы методом исключения найти виновника.
Также стоит проверить документы Распределение расходов. Убедимся, что для статей расходов с типом распределения «На себестоимость товаров» правильно указано правило и база распределения. Если база (например, количество выпущенной продукции) равна нулю, а система пытается распределить на нее затраты, это может привести к делению на ничтожно малые числа.
Предположим, мы подозреваем конкретную спецификацию. Проверим расчет коэффициентов вручную, используя логику СЛУ. Если в системе зарегистрирован выпуск:
Продукция: Вал стальной (1 шт)
Затрата: Заготовка (1000 кг)
А в другом документе для производства заготовки требуется этот же вал, мы получаем классическую петлю. Разберем по шагам, как это исправить:
Прочие доходы и расходы или Корректировка стоимости номенклатуры), чтобы «разорвать» математическую зависимость.Numeric(15,3).Ошибка Arithmetic overflow — это всегда сигнал о логическом противоречии в данных. Для её устранения:
Следуя этим шагам, мы сможем очистить данные от математических аномалий и обеспечить корректное закрытие месяца в 1С:ERP.