При работе в программе 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С:Предприятие 8 активно использует динамические списки для отображения и выбора данных. Обычно для общих списков (документов, справочников) пользователи могут интерактивно настраивать сортировку, отбор и группировку. Однако, в случае с выпадающим списком видов времени в ячейке табличной части документа, эти настройки обычно недоступны через пользовательский интерфейс для конкретной ячейки.
Разработчики могут программно управлять сортировкой, используя объекты КомпоновщикНастроек и Порядок для задания нужных условий. Если стандартные настройки не обеспечивают желаемый порядок, может потребоваться программная доработка. Сам справочник ВидыРабочегоВремени содержит предопределенные элементы, и их внутренний порядок (например, по коду или наименованию) может влиять на отображение в списках, если не задана иная сортировка. Однако, прямого пользовательского механизма для изменения приоритета элементов в выпадающих списках обычно нет.
В ходе обсуждения предлагались различные обходные пути, однако они не всегда удовлетворяют потребностям пользователей, привыкших к определенному рабочему процессу:
Enter, это является дополнительным действием и замедляет работу.Отпуск, Больничный лист, СверхурочнаяРабота). Документ Табель в ЗУП 3.1 обычно заполняется автоматически на основании графиков и отклонений. Мы можем вводить внутрисменные невыходы, сверхурочные и праздничные часы другими документами. Однако, бывают ситуации, когда без ручного ввода или корректировки табеля обойтись невозможно, и пользователи настаивают на сохранении привычного им способа работы.Эти предложения, хотя и являются функциональными, не решают проблему восстановления привычного и быстрого процесса ввода, к которому привыкли расчетчики.
Рассмотрим несколько подходов к решению данной проблемы, от простого к более сложному.
Наиболее простое и подтвержденное пользователями решение, хотя и временное, — это откат к предыдущей версии платформы 1С:Предприятие, на которой наблюдалось желаемое поведение. В нашем случае это версия 8.3.17.
1cv8.exe) именно старой версии платформы.Преимущества:
Недостатки:
Наиболее правильным и долгосрочным решением, если требуется сохранить именно такой способ ввода на актуальных платформах, является создание расширения конфигурации. Это позволит изменить поведение списка выбора без снятия конфигурации с поддержки.
Процесс программной доработки будет включать следующие шаги:
Создание нового расширения: Мы должны открыть конфигуратор, перейти в меню «Конфигурация» -> «Расширения конфигурации» и создать новое расширение. Присвоим ему осмысленное имя, например, ЯвкаВТабеле.
Заимствование объекта формы: Нам потребуется заимствовать форму документа ТабельУчетаРабочегоВремени, а именно элемент управления, отвечающий за ввод вида времени в табличной части.
Посмотрим на структуру документа ТабельУчетаРабочегоВремени. В табличной части, где вводятся данные, обычно присутствует поле ВидВремени. Именно это поле отвечает за выбор вида времени.
Перехват события открытия списка выбора: В 1С есть возможность перехватывать события, связанные с полями ввода. Для поля выбора это может быть событие НачалоВыбора или аналогичное, которое возникает перед открытием списка выбора. В некоторых случаях мы можем влиять на сам список, который будет открыт.
Предположим, что поле ввода вида времени в табличной части называется ЯчейкаТабеляВидВремени. Мы можем добавить обработчик к событию, которое формирует или открывает список.
Программное изменение сортировки списка: В обработчике события мы должны будем программно сформировать новый список значений или изменить порядок существующего списка выбора таким образом, чтобы «Явка» оказалась на первом месте. Мы можем получить список всех видов рабочего времени из справочника ВидыВремени и затем создать новый СписокЗначений, в который сначала добавим «Явку», а затем все остальные элементы в нужном порядке.
Пример концептуального кода для обработчика события НачалоВыбора (или подобного) в расширении:
&НаКлиенте
Процедура ЯчейкаТабеляВидВремениНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; // Отменяем стандартную обработку
// Получаем все виды времени
СписокВсехВидовВремени = ПолучитьСписокВидовВремениНаСервере();
Если СписокВсехВидовВремени = Неопределено Тогда
Возврат;
КонецЕсли;
// Создаем новый список значений для выбора
НовыйСписокВыбора = Новый СписокЗначений;
// Ищем Явку и добавляем ее первой
НайденнаяЯвка = Новый СписокЗначений;
Для Каждого ЭлементСписка Из СписокВсехВидовВремени Цикл
Если СтрНайти(ЭлементСписка.Представление, "Явка") > 0 Тогда // Ищем по представлению
НайденнаяЯвка.Добавить(ЭлементСписка.Значение, ЭлементСписка.Представление);
Прервать;
КонецЕсли;
КонецЦикла;
Если НайденнаяЯвка.Количество() > 0 Тогда
НовыйСписокВыбора.Добавить(НайденнаяЯвка[0].Значение, НайденнаяЯвка[0].Представление);
КонецЕсли;
// Добавляем остальные виды времени, исключая Явку
Для Каждого ЭлементСписка Из СписокВсехВидовВремени Цикл
Если НайденнаяЯвка.Количество() > 0 И ЭлементСписка.Значение = НайденнаяЯвка[0].Значение Тогда
Продолжить; // Пропускаем Явку, так как она уже добавлена
КонецЕсли;
НовыйСписокВыбора.Добавить(ЭлементСписка.Значение, ЭлементСписка.Представление);
КонецЦикла;
// Открываем созданный список для выбора
ВыборИзСписка(НовыйСписокВыбора, Элемент);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьСписокВидовВремениНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ВидыВремени.Ссылка,
| ВидыВремени.Наименование
|ИЗ
| Справочник.ВидыВремени КАК ВидыВремени
|УПОРЯДОЧИТЬ ПО
| ВидыВремени.Наименование"; // Можем задать начальную сортировку
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
СписокВидовВремени = Новый СписокЗначений;
Пока Выборка.Следующий() Цикл
СписокВидовВремени.Добавить(Выборка.Ссылка, Выборка.Наименование);
КонецЦикла;
Возврат СписокВидовВремени;
КонецФункции
Важно: Точные имена элементов формы и процедур могут отличаться в зависимости от релиза конфигурации. Для корректной реализации необходимо анализировать конкретную форму в конфигураторе.
Тестирование расширения: После создания и настройки расширения, его необходимо тщательно протестировать в тестовой базе, чтобы убедиться в корректности работы и отсутствии побочных эффектов.
Преимущества:
Недостатки:
Теоретически, если сортировка по умолчанию происходит по какому-либо реквизиту справочника ВидыВремени (например, по коду или наименованию), можно было бы попробовать изменить код или наименование предопределенного элемента «Явка» так, чтобы он всегда выводился первым. Например, присвоить ему код «000000001» или наименование «!Явка».
Однако, этот метод крайне не рекомендуется по следующим причинам:
Проблема изменения порядка вывода видов рабочего времени в документе «Табель» после обновления платформы 1С является реальной и вызывает неудобства у пользователей. Если вы сталкиваетесь с данной ситуацией, рекомендуем рассмотреть следующие подходы:
ВидыВремени, так как это чревато серьезными последствиями.Выбор оптимального решения будет зависеть от ваших ресурсов, требований к поддержке и готовности к программным доработкам.