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