Почему в идентичных базах 1С запросы к регистрам расчета возвращают разные данные?

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

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

Этап 1: Проверка целостности данных и движений документа

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

Воспользуемся Режимом технического специалиста. Откроем список записей регистра, который формирует документ-регистратор. Если в двух базах данные для одного и того же документа отличаются, сравним состав записей. Часто бывает так, что в рабочей базе случайно возникло задвоение записей (например, из-за ошибки в логике проведения или нескольких проведенных документов), что приводит к умножению результатов в Левом соединении.

Этап 2: Анализ виртуальной таблицы ДанныеГрафика

В приведенном примере запрос обращается к виртуальной таблице РегистрРасчета.ОсновныеНачисления.ДанныеГрафика. Если при идентичном коде мы получаем разные результаты, значит, внешние данные, на которые опирается эта таблица, не совпадают.

Разберем структуру запроса:


ВЫБРАТЬ
    ОсновныеНачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки,
    ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ДнейПятидневкиФактическийПериодДействия, 0) КАК ДнейОтпуска,
    ЕСТЬNULL(ОсновныеНачисленияБазаОсновныеНачисления.РезультатБаза, 0) + ЕСТЬNULL(ОсновныеНачисленияБазаДополнительныеНачисления.РезультатБаза, 0) КАК БазаНачислений,
    ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ДнейБазовыйПериод, 0) КАК БазаРабочихДней
ИЗ
    РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
            Регистратор = &Регистратор
                И ВидРасчета В (&ВидыРасчета)) КАК ОсновныеНачисленияДанныеГрафика

Виртуальная таблица ДанныеГрафика не является жестко «зашитой» в документ. Она вычисляет значения на основе Графиков работы. Основная причина расхождений в 90% случаев кроется в том, что в справочнике или регистре сведений графиков работы для одной и той же организации/сотрудника установлены разные параметры (например, разное количество рабочих дней в периоде, использование разных производственных календарей или графиков типа «шестидневка» против «пятидневки»).

Этап 3: Проверка связей с графиками работы

В ходе разбора ситуации мы выяснили, что причиной стало отсутствие или неверное задание связи с графиком работы в настройках учета или регистре сведений. 1С требует точного соответствия записи в регистре сведений, которая определяет, какой график привязан к конкретному сотруднику или начислению.

Рекомендуем выполнить следующие действия:

  1. Проверьте регистр сведений, который хранит историю графиков работы сотрудников. Сравните записи по конкретному периоду в обеих базах. Даже незначительное отличие в периоде действия записи или самом графике приведет к тому, что запрос ДанныеГрафика вернет другие числа.
  2. Проанализируйте настройки начислений. Убедитесь, что параметры &ВидыРасчета и &Измерения, передаваемые в запрос, одинаковы в обеих конфигурациях.
  3. Изолируйте запрос. Если данные все еще не совпадают, временно исключите из запроса все ЛЕВЫЕ СОЕДИНЕНИЯ. Выполните чистую выборку только из ДанныеГрафика. Если даже на этом этапе цифры расходятся, вы точно знаете, что проблема находится на уровне настроек графиков, а не в логике объединения таблиц.

Этап 4: Выводы и профилактика

Если код не менялся, а результат изменился, ищите изменения в Нормативно-справочной информации (НСИ). В рассматриваемом случае решение заключалось в корректировке связи с графиком. Когда связь с графиком была исправлена, расчетные показатели (количество дней отпуска и база рабочих дней) пришли в соответствие с эталоном.

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

← На главную