Содержание:
В расширении реализован поиск свободного минимального табельного номера и присваивание его сотруднику в момент записи элемента, по аналогии со стандартным алгоритмом.
Как формируются табельные номера в ЗУП?
Табельный номер сотрудника соответствует коду элемента справочника, т.е. при создании нового сотрудника, нумератор определяет максимальный код, увеличивает его на 1 и присваивает вновь-созданному элементу.
Что будет если кончаться табельные номера ЗУП?
После переноса данных из другой учетной системы, возникла ситуация, что в базе появился сотрудник с табельным номером 99899 – это означает, что через 100 приемов на работу, нумератор упрется в свой максимум и все последующие сотрудники будут иметь табельный номер 99999 (не смотря на включённый в настройках контроль уникальности табельных номеров). Для решения этой проблемы было разработано расширение по поиску и присвоению свободных табельных номеров.
Реализация получения последнего свободного табельного номера в расширении
Проверено на версии ЗУП 3.1.23.257. Реализовано, через создание эталонной таблицы из 99999 строк типа “0000-00000” и сравнение в запросе с существующими значениями:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
Функция ПолучитьПоследнийСвободныйКодСотрудника() Префикс = ""; ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации(Ссылка, Истина, Префикс); ТЗДиапазонВсехКодов = Новый ТаблицаЗначений; ТЗДиапазонВсехКодов.Колонки.Добавить("КодДиапазона", Новый ОписаниеТипов("Строка", ,Новый КвалификаторыСтроки(10))); Для Сч = 1 По 99999 Цикл СтрокаРезультат = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(СтрЗаменить(Строка(Сч), Символы.НПП, ""), 5, "0", "Слева"); НоваяСтрока = ТЗДиапазонВсехКодов.Добавить(); НоваяСтрока.КодДиапазона = Префикс+СтрокаРезультат; КонецЦикла; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТЗДиапазонВсехКодов",ТЗДиапазонВсехКодов); Запрос.Текст = "ВЫБРАТЬ | ТЗДиапазонВсехКодов.КодДиапазона КАК КодДиапазона |ПОМЕСТИТЬ ВТДиапазонВсехКодов |ИЗ | &ТЗДиапазонВсехКодов КАК ТЗДиапазонВсехКодов |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | МИНИМУМ(ВТДиапазонВсехКодов.КодДиапазона) КАК КодДиапазона |ИЗ | ВТДиапазонВсехКодов КАК ВТДиапазонВсехКодов | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники | ПО ВТДиапазонВсехКодов.КодДиапазона = Сотрудники.Код |ГДЕ | Сотрудники.Код ЕСТЬ NULL |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТДиапазонВсехКодов"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Если ВыборкаДетальныеЗаписи.Следующий() Тогда Возврат ВыборкаДетальныеЗаписи.КодДиапазона; КонецЕсли; Возврат ""; КонецФункции |
Ссылка на скачивание расширения в начале описания.