Почему перестает рассчитываться зарплата после изменения шаблонов ввода данных в 1С:ЗУП / 1С:ЗКГУ 3.1 и как это исправить?

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

При ведении учета в программе 1С:Зарплата и кадры государственного учреждения (или 1С:Зарплата и управление персоналом) версии 3.1 пользователи часто сталкиваются с необходимостью изменить схему расчета «на лету». Мы добавляем новый показатель, создаем под него шаблон ввода исходных данных, вносим эти данные, рассчитываем зарплату, а затем решаем скорректировать настройки — например, вводить показатели по разным датам или изменить формулу. После перезаписи шаблона и перепроведения документов начисление может внезапно перестать рассчитываться вовсе, а в списках выбора появляются дублирующие элементы или «фантомные» ссылки.

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

Почему двоятся шаблоны и возникают битые ссылки

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

Выясним причину такого поведения базы данных. Шаблоны ввода исходных данных хранятся в специальном справочнике под техническим названием ВидыДокументовВводДанныхДляРасчетаЗарплаты. Когда мы помечаем элемент этого справочника на удаление (нажимаем на «красный крестик»), он физически не удаляется из базы данных. Объект продолжает существовать в таблицах СУБД со своим уникальным внутренним идентификатором (GUID).

Если мы создаем новый шаблон с точно таким же наименованием, программа регистрирует абсолютно новый элемент с новым GUID. В результате на уровне интерфейса мы видим визуальное задвоение наименований. Настоящие проблемы начинаются, когда в базе остаются ссылки на старые (помеченные на удаление) элементы в регистрах перерасчетов или в проведенных документах. В этот момент возникают так называемые «битые ссылки» (визуально они могут отображаться в запросах или служебных таблицах как <Объект не найден>...).

При попытке открыть форму выбора или провести расчет по такому «косячному» элементу система обращается по старому GUID, которого физически в справочнике уже может не существовать (если было выполнено частичное удаление без контроля ссылочной целостности), что приводит к моментальному отказу алгоритма расчета.

Как правильно удалять и объединять дубликаты шаблонов

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

  1. Не удаляйте элементы «на горячую». Используйте встроенный инструмент платформы Поиск и удаление дублей (раздел «Администрирование» — «Обслуживание» — «Корректировка данных»).
  2. В поле поиска выберите справочник Шаблоны ввода исходных данных (ВидыДокументовВводДанныхДляРасчетаЗарплаты).
  3. Программа найдет элементы с одинаковыми наименованиями, позволит определить «правильный» шаблон (оригинал), а все остальные (дубли) пометит как удаляемые и автоматически перенесет ссылки со старых документов на новый рабочий элемент.
  4. Только после этого выполните операцию Удаление помеченных объектов в монопольном режиме.

Если в базе данных уже образовались «битые ссылки», нам поможет стандартная процедура Тестирования и исправления информационной базы (запускается из режима Конфигуратор):

  1. Обязательно создайте резервную копию базы данных перед началом любых работ!
  2. Перейдите в меню Администрирование — Тестирование и исправление....
  3. Установите флаги напротив проверок ссылочной целостности и проверки логической целостности базы данных.
  4. В блоке настроек «При наличии ссылок на несуществующие объекты» обязательно переставьте переключатель в положение «Создавать объекты» или «Очищать ссылки». Обратите внимание: если выбрать «Очищать ссылки», программа удалит некорректные записи из регистров, что позволит восстановить расчет. Если выбрать «Создавать объекты», программа создаст пустые элементы справочника, которые мы сможем переименовать или заменить с помощью обработки поиска дублей.

Что делает флаг «Выполнять расчет зарплаты без оптимизации»

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

Начиная с версии 3.1.9, в линейке решений 1С:ЗУП/ЗКГУ был внедрен новый высокопроизводительный движок расчета (так называемый «Менеджер расчета зарплаты»). Он активно использует временные таблицы СУБД, пакетные запросы и кэширование сложных схем расчетов в оперативной памяти сервера приложений для ускорения обработки данных на крупных предприятиях.

Когда мы меняем настройки формул или показателей в шаблонах непосредственно в разгар расчетного периода, в кэше сервера приложений 1С могут оставаться старые расчетные схемы. Возникает технический конфликт: новая структура метаданных (шаблона) не совпадает с тем планом расчета, который зафиксирован в кэшированной памяти СУБД. Из-за этого программа перестает рассчитывать конкретное начисление.

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

Важное предупреждение: держать эту галку включенной постоянно крайне не рекомендуется по следующим причинам:

Пошаговый план решения проблемы без «танцев с бубном»

Для того чтобы перенастройка шаблонов и видов расчетов в 1С:ЗКГУ 3.1 не превращалась в кошмар с постоянной очисткой кэша, рекомендуем придерживаться следующей методологии работы.

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

Шаг 1. Очистка кэша сервера приложений

Если ваша база работает в клиент-серверном варианте (SQL), обычная очистка локального кэша на компьютере пользователя часто не приносит результатов, так как расчеты выполняются на стороне сервера приложений. Администратору системы необходимо перезапустить службу сервера 1С:Предприятия (блок процессов rphost). Это полностью сбросит зависшие в памяти кэшированные схемы расчетов.

Шаг 2. Анализ регистра «Перерасчет начислений»

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

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

Шаг 3. Использование программных методов очистки (для программистов)

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


// Пример принудительного обновления вспомогательных регистров расчета
МетодыРасчета = РегистрыСведений.НастройкиДокументовВводДанныхДляРасчетаЗарплаты.СоздатьНаборЗаписей();
МетодыРасчета.Записать(); // Очистка устаревших зависших настроек
// Инициализация стандартного заполнения настроек шаблонов по умолчанию
Справочники.ВидыДокументовВводДанныхДляРасчетаЗарплаты.ЗаполнитьПредопределенныеШаблоны();

Шаг 4. Внедрение изменений через копию базы

Никогда не выполняйте эксперименты по перенастройке формул и шаблонов в рабочей базе, где в этот момент работают расчетчики. Создайте резервную копию (файловый вариант или копию на SQL), внесите изменения в настройки показателей, проверьте проведение документа Данные для расчета зарплаты и последующее заполнение документа Начисление зарплаты и взносов. Только убедившись в корректности расчетов на копии, переносите изменения в рабочую систему.

← На главную