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