В процессе работы с конфигурацией «1С:Зарплата и Управление Персоналом» (ЗУП 3.1) пользователи могут столкнуться с неочевидным поведением системы при вводе первичных документов. Рассмотрим ситуацию, когда при создании документа Отсутствие (болезнь, прогул, неявка) программа автоматически выбирает не тот вид начисления, который мы ожидаем.
Например, при выборе причины отсутствия «Болезнь» мы рассчитываем увидеть начисление «Отсутствие по болезни (больничный еще не закрыт)», но вместо этого подставляется «Невыход в связи с окончанием БЛ» или иной вид расчета. Это приводит к путанице и необходимости ручной корректировки каждого документа. Давайте разберем детально, почему так происходит, как устроена логика программы «под капотом» и как исправить эту ситуацию без вмешательства в код конфигурации.
Для начала проанализируем, как именно система определяет, какое начисление подставить в документ. Когда пользователь выбирает причину отсутствия в форме документа, срабатывает программный механизм, который обращается к Плану Видов Расчета Начисления.
Система выполняет поиск подходящего начисления по ряду критериев. Основные из них:
ВАрхиве = Ложь).Часто в базе данных существует несколько начислений, которые удовлетворяют этим условиям одновременно. Например, у нас могут быть заведены:
Если все эти начисления активны и имеют схожие настройки вида времени, системе нужен дополнительный критерий для выбора «победителя», который и попадет в поле документа по умолчанию.
Давайте посмотрим на проблему глазами разработчика. Для выбора начисления система выполняет запрос к базе данных. В обсуждении был приведен пример типового запроса, который проливает свет на механизм выбора.
Обратим внимание на ключевую часть запроса, отвечающую за сортировку результатов:
ВЫБРАТЬ //Первые 1
Начисления.Ссылка КАК Ссылка,
Начисления.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания
ИЗ
ПланВидовРасчета.Начисления КАК Начисления
ГДЕ
// ... условия отбора по виду документа, активности и виду времени ...
УПОРЯДОЧИТЬ ПО
Начисления.РеквизитДопУпорядочивания
Здесь мы видим использование поля РеквизитДопУпорядочивания. Именно это поле является решающим фактором. Система выбирает первую запись из выборки, отсортированной по этому реквизиту.
Что такое РеквизитДопУпорядочивания?
Это стандартный реквизит платформы 1С:Предприятие для объектов, у которых задан порядок следования «пользовательский» (не по коду и не по наименованию). Он хранит числовое значение (индекс), определяющее позицию элемента в списке. Чем меньше значение этого реквизита, тем «выше» элемент находится в списке и тем выше его приоритет при автоматическом выборе в программных алгоритмах, подобных нашему.
Проблема возникает, когда порядок следования элементов в справочнике начислений изменяется. Это может произойти по нескольким причинам:
В случае, описанном в исходной задаче, начисление «Невыход в связи с окончанием БЛ» оказалось в списке выше, чем «Отсутствие по болезни (больничный еще не закрыт)». Соответственно, запрос с сортировкой по РеквизитДопУпорядочивания первым возвращал именно его.
Теперь, когда мы выяснили причину, перейдем к исправлению. Нам не нужно открывать Конфигуратор или писать внешние обработки. Управление этим скрытым реквизитом доступно непосредственно в пользовательском режиме 1С:Предприятие.
Выполним следующие шаги для восстановления корректной работы автозаполнения:
Важное примечание по настройке списка:
Если вы не видите синих стрелок в командной панели или они неактивны, возможно, у вас включена сортировка списка по какой-либо колонке (например, по «Наименованию» или «Коду»).
Чтобы стрелки заработали, необходимо сбросить принудительную сортировку:
После того как мы переместили приоритетное начисление выше по списку, система автоматически обновила значение РеквизитДопУпорядочивания в базе данных.
Теперь давайте проверим результат:
Рассмотренный механизм управления через порядок в списке влияет не только на документ «Отсутствие». Порядок элементов в Плане Видов Расчета Начисления также важен для:
Таким образом, если вы создаете собственные виды начислений, дублирующие функционал типовых (например, для разнесения затрат на разные счета учета или для особых категорий сотрудников), всегда проверяйте их позицию в общем списке. Рекомендуем размещать новые начисления рядом с их типовыми аналогами, но выше или ниже в зависимости от того, какое из них должно использоваться по умолчанию.
Этот простой метод настройки позволяет гибко управлять поведением системы без привлечения программистов и изменения кода конфигурации, используя штатные возможности платформы 1С.