Как восстановить порядок видов времени в Табеле ЗУП 3.1 после обновления платформы?

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

При работе в программе 1С:Зарплата и Управление Персоналом (ЗУП) редакции 3.1 многие пользователи привыкли к быстрому и удобному вводу рабочего времени в документе «Табель». Расчетчики часто используют метод ввода только числа часов (например, 8) в ячейку табеля, после чего, по нажатию клавиши Enter, автоматически подставляется вид времени, который находится первым в выпадающем списке. Для многих таким видом времени является «Явка», что значительно ускоряет процесс заполнения табеля.

Однако, как показала практика, после обновления платформы 1С:Предприятие, например, с версии 8.3.17 на 8.3.19 или 8.3.20, порядок следования видов времени в этом выпадающем списке может измениться. В результате вид времени «Явка» может оказаться в конце списка, и автоматическая подстановка перестанет работать должным образом, что приводит к увеличению времени на заполнение табелей и недовольству пользователей.

Давайте разберем эту проблему подробнее и рассмотрим возможные пути ее решения, основываясь на опыте пользователей и технических возможностях платформы 1С.

Влияние обновления платформы на порядок видов времени

Выясним причину такого изменения. Пользователи заметили, что на платформе 8.3.17 список видов времени, открывающийся при вводе числа часов в ячейку табеля, выводил «Явку» на первом месте. После принудительного перехода на платформы 8.3.19 или 8.3.20 (а также при тестировании на 8.3.20) порядок вывода изменился, и «Явка» оказалась практически в самом конце списка. Примечательно, что даже использование старого релиза конфигурации ЗУП, но с новой версией платформы, приводило к аналогичному изменению порядка. При возвращении на старую платформу поведение восстанавливалось.

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

Особенности работы с выпадающими списками в 1С

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

Разработчики могут программно управлять сортировкой, используя объекты КомпоновщикНастроек и Порядок для задания нужных условий. Если стандартные настройки не обеспечивают желаемый порядок, может потребоваться программная доработка. Сам справочник ВидыРабочегоВремени содержит предопределенные элементы, и их внутренний порядок (например, по коду или наименованию) может влиять на отображение в списках, если не задана иная сортировка. Однако, прямого пользовательского механизма для изменения приоритета элементов в выпадающих списках обычно нет.

Альтернативные способы ввода времени и почему они не всегда подходят

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

  1. Ввод с буквы и числа (например, «Я 8»): Мы можем вводить вид времени, начиная с его первой буквы, а затем количество часов. Например, для «Явки» можно ввести «Я 8». Это позволит подставить нужный вид времени. Однако, для расчетчиков, привыкших просто вводить число и нажимать Enter, это является дополнительным действием и замедляет работу.
  2. Использование документарного учета вместо табельного: Некоторые пользователи рекомендуют максимально уходить от ручного ввода табелей и использовать документы-основания для учета рабочего времени (например, Отпуск, Больничный лист, СверхурочнаяРабота). Документ Табель в ЗУП 3.1 обычно заполняется автоматически на основании графиков и отклонений. Мы можем вводить внутрисменные невыходы, сверхурочные и праздничные часы другими документами. Однако, бывают ситуации, когда без ручного ввода или корректировки табеля обойтись невозможно, и пользователи настаивают на сохранении привычного им способа работы.
  3. Выбор Явки один раз: Некоторые предполагают, что после однократного выбора «Явки» она закрепится в начале списка выбора, как это бывает с другими полями выбора, запоминающими последние использованные значения. Однако, в данном конкретном выпадающем списке это не работает; порядок остается неизменным даже после многократного выбора «Явки».

Эти предложения, хотя и являются функциональными, не решают проблему восстановления привычного и быстрого процесса ввода, к которому привыкли расчетчики.

Пути решения проблемы

Рассмотрим несколько подходов к решению данной проблемы, от простого к более сложному.

1. Откат к предыдущей версии платформы (временное решение)

Наиболее простое и подтвержденное пользователями решение, хотя и временное, — это откат к предыдущей версии платформы 1С:Предприятие, на которой наблюдалось желаемое поведение. В нашем случае это версия 8.3.17.

  1. Выясним текущую версию платформы: Мы можем узнать текущую версию платформы, открыв программу и посмотрев информацию «О программе» (обычно через меню «Справка» -> «О программе»).
  2. Установим старую версию платформы: Нам потребуется скачать и установить дистрибутив платформы версии 8.3.17 с официального портала 1С:ИТС.
  3. Изменим версию запуска базы: В свойствах информационной базы в списке баз 1С:Предприятия мы должны указать путь к исполняемому файлу (1cv8.exe) именно старой версии платформы.

Преимущества:

Недостатки:

2. Программная доработка через расширение конфигурации

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

Процесс программной доработки будет включать следующие шаги:

  1. Создание нового расширения: Мы должны открыть конфигуратор, перейти в меню «Конфигурация» -> «Расширения конфигурации» и создать новое расширение. Присвоим ему осмысленное имя, например, ЯвкаВТабеле.

  2. Заимствование объекта формы: Нам потребуется заимствовать форму документа ТабельУчетаРабочегоВремени, а именно элемент управления, отвечающий за ввод вида времени в табличной части.

    Посмотрим на структуру документа ТабельУчетаРабочегоВремени. В табличной части, где вводятся данные, обычно присутствует поле ВидВремени. Именно это поле отвечает за выбор вида времени.

  3. Перехват события открытия списка выбора: В 1С есть возможность перехватывать события, связанные с полями ввода. Для поля выбора это может быть событие НачалоВыбора или аналогичное, которое возникает перед открытием списка выбора. В некоторых случаях мы можем влиять на сам список, который будет открыт.

    Предположим, что поле ввода вида времени в табличной части называется ЯчейкаТабеляВидВремени. Мы можем добавить обработчик к событию, которое формирует или открывает список.

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

    Пример концептуального кода для обработчика события НачалоВыбора (или подобного) в расширении:

    
    &НаКлиенте
    Процедура ЯчейкаТабеляВидВремениНачалоВыбора(Элемент, СтандартнаяОбработка)
        СтандартнаяОбработка = Ложь; // Отменяем стандартную обработку
    
        // Получаем все виды времени
        СписокВсехВидовВремени = ПолучитьСписокВидовВремениНаСервере();
    
        Если СписокВсехВидовВремени = Неопределено Тогда
            Возврат;
        КонецЕсли;
    
        // Создаем новый список значений для выбора
        НовыйСписокВыбора = Новый СписокЗначений;
    
        // Ищем Явку и добавляем ее первой
        НайденнаяЯвка = Новый СписокЗначений;
        Для Каждого ЭлементСписка Из СписокВсехВидовВремени Цикл
            Если СтрНайти(ЭлементСписка.Представление, "Явка") > 0 Тогда // Ищем по представлению
                НайденнаяЯвка.Добавить(ЭлементСписка.Значение, ЭлементСписка.Представление);
                Прервать;
            КонецЕсли;
        КонецЦикла;
    
        Если НайденнаяЯвка.Количество() > 0 Тогда
            НовыйСписокВыбора.Добавить(НайденнаяЯвка[0].Значение, НайденнаяЯвка[0].Представление);
        КонецЕсли;
    
        // Добавляем остальные виды времени, исключая Явку
        Для Каждого ЭлементСписка Из СписокВсехВидовВремени Цикл
            Если НайденнаяЯвка.Количество() > 0 И ЭлементСписка.Значение = НайденнаяЯвка[0].Значение Тогда
                Продолжить; // Пропускаем Явку, так как она уже добавлена
            КонецЕсли;
            НовыйСписокВыбора.Добавить(ЭлементСписка.Значение, ЭлементСписка.Представление);
        КонецЦикла;
    
        // Открываем созданный список для выбора
        ВыборИзСписка(НовыйСписокВыбора, Элемент);
    КонецПроцедуры
    
    &НаСервереБезКонтекста
    Функция ПолучитьСписокВидовВремениНаСервере()
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    ВидыВремени.Ссылка,
                       |    ВидыВремени.Наименование
                       |ИЗ
                       |    Справочник.ВидыВремени КАК ВидыВремени
                       |УПОРЯДОЧИТЬ ПО
                       |    ВидыВремени.Наименование"; // Можем задать начальную сортировку
    
        РезультатЗапроса = Запрос.Выполнить();
        Выборка = РезультатЗапроса.Выбрать();
    
        СписокВидовВремени = Новый СписокЗначений;
        Пока Выборка.Следующий() Цикл
            СписокВидовВремени.Добавить(Выборка.Ссылка, Выборка.Наименование);
        КонецЦикла;
    
        Возврат СписокВидовВремени;
    КонецФункции
    

    Важно: Точные имена элементов формы и процедур могут отличаться в зависимости от релиза конфигурации. Для корректной реализации необходимо анализировать конкретную форму в конфигураторе.

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

Преимущества:

Недостатки:

3. Изменение свойств элементов справочника "ВидыВремени" (крайне не рекомендуется)

Теоретически, если сортировка по умолчанию происходит по какому-либо реквизиту справочника ВидыВремени (например, по коду или наименованию), можно было бы попробовать изменить код или наименование предопределенного элемента «Явка» так, чтобы он всегда выводился первым. Например, присвоить ему код «000000001» или наименование «!Явка».

Однако, этот метод крайне не рекомендуется по следующим причинам:

Заключение

Проблема изменения порядка вывода видов рабочего времени в документе «Табель» после обновления платформы 1С является реальной и вызывает неудобства у пользователей. Если вы сталкиваетесь с данной ситуацией, рекомендуем рассмотреть следующие подходы:

  1. В качестве быстрого, но временного решения, мы можем откатиться к версии платформы 8.3.17.
  2. Для долгосрочного и корректного решения, обеспечивающего сохранение конфигурации на поддержке, мы должны обратиться к программной доработке через расширение конфигурации, которое будет управлять порядком вывода видов времени в выпадающем списке.
  3. Мы должны избегать изменения предопределенных элементов справочника ВидыВремени, так как это чревато серьезными последствиями.

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

← На главную