Всем привет. Подскажите, пожалуйста, в 1С "Зарплата и управление персоналом, редакция 3.1 (3.1.21.15)" можно настроить нумерацию документов?
Чтобы у каждого любого документа был свой уникальный номер. Сейчас все кадровые документы уникальны в пределах одного сотрудника. То есть, например, два документа на отпуск (два разных сотрудника) будут иметь одинаковый номер.
Как сделать, чтобы номера не совпадали?
Пересмотрел кучу информации, в самой ЗуП смотрел, но так и не нашел как это сделать. Во всяком случае стандартным способов. Если не стандартным - то ковырять конфигурацию, что очень нежелательно.
Единственное, это в некоторых видах документах есть дополнительное поле "Печатать как". Но это не совсем то.
Чтобы у каждого любого документа был свой уникальный номер. Сейчас все кадровые документы уникальны в пределах одного сотрудника. То есть, например, два документа на отпуск (два разных сотрудника) будут иметь одинаковый номер.
Как сделать, чтобы номера не совпадали?
Пересмотрел кучу информации, в самой ЗуП смотрел, но так и не нашел как это сделать. Во всяком случае стандартным способов. Если не стандартным - то ковырять конфигурацию, что очень нежелательно.
Единственное, это в некоторых видах документах есть дополнительное поле "Печатать как". Но это не совсем то.
По теме из базы знаний
Найденные решения
(6) Не смогу. Не оформлял отдельным расширением, все доработки в одном.
Но выше правильно написано, либо подписка либо в каждом виде документа "Перед записью", вызывается процедура нумерации из общего модуля.
Только я не храню новый номер в регистре, а в запросе получаю все кадровые документы по этой организации и беру старший номер.
Но выше правильно написано, либо подписка либо в каждом виде документа "Перед записью", вызывается процедура нумерации из общего модуля.
Только я не храню новый номер в регистре, а в запросе получаю все кадровые документы по этой организации и беру старший номер.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(7) Можно по подробнее как вы это реализовали?
Я пока понял, что:
1. Можно создать расширение конфигурации.
2. В ней создать регистр сведений с полями типа дата, номер, название и уникальный номер.
3. Создать некий процесс/служба/демон, которая будет отлавливать изменения в БД. В даном случае на предмет создания нового документа.
4. Как только новый документ создается, то эта служба записывает данные этого документа (номер, дата, название) в регистр сведений. В поле "уникальный номер" будет генерироваться уникальный номер, чтобы он не повторялся.
5. А потом этот регистр можно будет распечатать.
Я пока понял, что:
1. Можно создать расширение конфигурации.
2. В ней создать регистр сведений с полями типа дата, номер, название и уникальный номер.
3. Создать некий процесс/служба/демон, которая будет отлавливать изменения в БД. В даном случае на предмет создания нового документа.
4. Как только новый документ создается, то эта служба записывает данные этого документа (номер, дата, название) в регистр сведений. В поле "уникальный номер" будет генерироваться уникальный номер, чтобы он не повторялся.
5. А потом этот регистр можно будет распечатать.
(13) Ну если хотите вот мой вариант получения нового номера :
//Организация единой нумерации кадровых документов
Функция ПолучитьПоследнийНомер(Организация,Дата) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПриемНаРаботу.Номер КАК Номер
|ПОМЕСТИТЬ КадровыеДокументы
|ИЗ
| Документ.ПриемНаРаботу КАК ПриемНаРаботу
|ГДЕ
| ПриемНаРаботу.Организация = &Организация
| И ПриемНаРаботу.Дата <= &ДатаК
| И ПриемНаРаботу.Дата >= &ДатаН
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Увольнение.Номер
|ИЗ
| Документ.Увольнение КАК Увольнение
|ГДЕ
| Увольнение.Организация = &Организация
| И Увольнение.Дата <= &ДатаК
| И Увольнение.Дата >= &ДатаН
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| КадровыйПеревод.Номер
|ИЗ
| Документ.КадровыйПеревод КАК КадровыйПеревод
|ГДЕ
| КадровыйПеревод.Организация = &Организация
| И КадровыйПеревод.Дата <= &ДатаК
| И КадровыйПеревод.Дата >= &ДатаН
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПриемНаРаботуСписком.Номер
|ИЗ
| Документ.ПриемНаРаботуСписком КАК ПриемНаРаботуСписком
|ГДЕ
| ПриемНаРаботуСписком.Организация = &Организация
| И ПриемНаРаботуСписком.Дата <= &ДатаК
| И ПриемНаРаботуСписком.Дата >= &ДатаН
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| УвольнениеСписком.Номер
|ИЗ
| Документ.УвольнениеСписком КАК УвольнениеСписком
|ГДЕ
| УвольнениеСписком.Организация = &Организация
| И УвольнениеСписком.Дата <= &ДатаК
| И УвольнениеСписком.Дата >= &ДатаН
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| КадровыйПереводСписком.Номер
|ИЗ
| Документ.КадровыйПереводСписком КАК КадровыйПереводСписком
|ГДЕ
| КадровыйПереводСписком.Организация = &Организация
| И КадровыйПереводСписком.Дата <= &ДатаК
| И КадровыйПереводСписком.Дата >= &ДатаН
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПеремещениеВДругоеПодразделение.Номер
|ИЗ
| Документ.ПеремещениеВДругоеПодразделение КАК ПеремещениеВДругоеПодразделение
|ГДЕ
| ПеремещениеВДругоеПодразделение.Организация = &Организация
| И ПеремещениеВДругоеПодразделение.Дата <= &ДатаК
| И ПеремещениеВДругоеПодразделение.Дата >= &ДатаН
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ ПЕРВЫЕ 1
| КадровыеДокументы.Номер КАК Номер
|ИЗ
| КадровыеДокументы КАК КадровыеДокументы
|
|УПОРЯДОЧИТЬ ПО
| КадровыеДокументы.Номер УБЫВ";
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ДатаК", КонецГода(Дата));
Запрос.УстановитьПараметр("ДатаН", НачалоГода(Дата));
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() тогда
//Возьмем префикс как он есть сейчас (2 символа Организация, 2 символа префикс ИБ)
Если Сред(Выборка.Номер,3,1) = "-" Тогда
Префикс = Лев(Выборка.Номер,3);
ИначеЕсли Сред(Выборка.Номер,5,1) = "-" Тогда
Префикс = Лев(Выборка.Номер,5);
Иначе
Префикс = "";
КонецЕсли;
//Удаляет оба префикса (Организации и информационной базы) и лидирующие нули
НомерНаПечать = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Выборка.Номер, Истина, Истина);
//Увеличиваем номер на 1 и добавляем обратно префикс и нули
Попытка
СледующийНомер = ДобавитьПрефиксИЛидирующиеНули(Число(НомерНаПечать) + 1,Префикс);
Исключение
СледующийНомер = "";
Сообщить("Не удалось сформировать новый номер");
КонецПопытки;
//Сообщить(СледующийНомер);
Иначе
//Первый номер в году
//Нужно собрать префикс из Префикса Организации + Префикс ИБ
ПрефиксОрганизации = Организация.Префикс;
ПрефиксИБ = ОбменДаннымиСервер.ПрефиксИнформационнойБазы();
Префикс = ПрефиксОрганизации + ПрефиксИБ + "-";
СледующийНомер = ДобавитьПрефиксИЛидирующиеНули(1,Префикс);
КонецЕсли;
возврат СледующийНомер;
КонецФункции // ПолучитьПоследнийНомер()
Функция ДобавитьПрефиксИЛидирующиеНули(НомерПоПорядку,Префикс)
НомерСНулями = "00000000000" + НомерПоПорядку; //длина номера документа 11 символов
НомерСНулями11 = Прав(НомерСНулями,11-СтрДлина(Префикс));
НомерСПрефиксом = Префикс + НомерСНулями11;
возврат НомерсПрефиксом;
КонецФункции // ()
А этот код в процедуру перед записью в модуле документа, или в подписку:
//Запускаем процедуру изменения номера, если документ новый, или если документ перепрыгивает в другой год
Если ЭтоНовый() ИЛИ НачалоГода(ЭтотОбъект.Дата) <> НачалоГода(ЭтотОбъект.Ссылка.Дата) Тогда
Номер = РасшХОбщийМодульСервер.ПолучитьПоследнийНомер(этотОбъект.Организация,ЭтотОбъект.Дата);
КонецЕсли;
//Организация единой нумерации кадровых документов
Функция ПолучитьПоследнийНомер(Организация,Дата) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПриемНаРаботу.Номер КАК Номер
|ПОМЕСТИТЬ КадровыеДокументы
|ИЗ
| Документ.ПриемНаРаботу КАК ПриемНаРаботу
|ГДЕ
| ПриемНаРаботу.Организация = &Организация
| И ПриемНаРаботу.Дата <= &ДатаК
| И ПриемНаРаботу.Дата >= &ДатаН
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Увольнение.Номер
|ИЗ
| Документ.Увольнение КАК Увольнение
|ГДЕ
| Увольнение.Организация = &Организация
| И Увольнение.Дата <= &ДатаК
| И Увольнение.Дата >= &ДатаН
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| КадровыйПеревод.Номер
|ИЗ
| Документ.КадровыйПеревод КАК КадровыйПеревод
|ГДЕ
| КадровыйПеревод.Организация = &Организация
| И КадровыйПеревод.Дата <= &ДатаК
| И КадровыйПеревод.Дата >= &ДатаН
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПриемНаРаботуСписком.Номер
|ИЗ
| Документ.ПриемНаРаботуСписком КАК ПриемНаРаботуСписком
|ГДЕ
| ПриемНаРаботуСписком.Организация = &Организация
| И ПриемНаРаботуСписком.Дата <= &ДатаК
| И ПриемНаРаботуСписком.Дата >= &ДатаН
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| УвольнениеСписком.Номер
|ИЗ
| Документ.УвольнениеСписком КАК УвольнениеСписком
|ГДЕ
| УвольнениеСписком.Организация = &Организация
| И УвольнениеСписком.Дата <= &ДатаК
| И УвольнениеСписком.Дата >= &ДатаН
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| КадровыйПереводСписком.Номер
|ИЗ
| Документ.КадровыйПереводСписком КАК КадровыйПереводСписком
|ГДЕ
| КадровыйПереводСписком.Организация = &Организация
| И КадровыйПереводСписком.Дата <= &ДатаК
| И КадровыйПереводСписком.Дата >= &ДатаН
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПеремещениеВДругоеПодразделение.Номер
|ИЗ
| Документ.ПеремещениеВДругоеПодразделение КАК ПеремещениеВДругоеПодразделение
|ГДЕ
| ПеремещениеВДругоеПодразделение.Организация = &Организация
| И ПеремещениеВДругоеПодразделение.Дата <= &ДатаК
| И ПеремещениеВДругоеПодразделение.Дата >= &ДатаН
|;
|
|////////////////////////////////////////////////////////////
|ВЫБРАТЬ ПЕРВЫЕ 1
| КадровыеДокументы.Номер КАК Номер
|ИЗ
| КадровыеДокументы КАК КадровыеДокументы
|
|УПОРЯДОЧИТЬ ПО
| КадровыеДокументы.Номер УБЫВ";
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ДатаК", КонецГода(Дата));
Запрос.УстановитьПараметр("ДатаН", НачалоГода(Дата));
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() тогда
//Возьмем префикс как он есть сейчас (2 символа Организация, 2 символа префикс ИБ)
Если Сред(Выборка.Номер,3,1) = "-" Тогда
Префикс = Лев(Выборка.Номер,3);
ИначеЕсли Сред(Выборка.Номер,5,1) = "-" Тогда
Префикс = Лев(Выборка.Номер,5);
Иначе
Префикс = "";
КонецЕсли;
//Удаляет оба префикса (Организации и информационной базы) и лидирующие нули
НомерНаПечать = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Выборка.Номер, Истина, Истина);
//Увеличиваем номер на 1 и добавляем обратно префикс и нули
Попытка
СледующийНомер = ДобавитьПрефиксИЛидирующиеНули(Число(НомерНаПечать) + 1,Префикс);
Исключение
СледующийНомер = "";
Сообщить("Не удалось сформировать новый номер");
КонецПопытки;
//Сообщить(СледующийНомер);
Иначе
//Первый номер в году
//Нужно собрать префикс из Префикса Организации + Префикс ИБ
ПрефиксОрганизации = Организация.Префикс;
ПрефиксИБ = ОбменДаннымиСервер.ПрефиксИнформационнойБазы();
Префикс = ПрефиксОрганизации + ПрефиксИБ + "-";
СледующийНомер = ДобавитьПрефиксИЛидирующиеНули(1,Префикс);
КонецЕсли;
возврат СледующийНомер;
КонецФункции // ПолучитьПоследнийНомер()
Функция ДобавитьПрефиксИЛидирующиеНули(НомерПоПорядку,Префикс)
НомерСНулями = "00000000000" + НомерПоПорядку; //длина номера документа 11 символов
НомерСНулями11 = Прав(НомерСНулями,11-СтрДлина(Префикс));
НомерСПрефиксом = Префикс + НомерСНулями11;
возврат НомерсПрефиксом;
КонецФункции // ()
А этот код в процедуру перед записью в модуле документа, или в подписку:
//Запускаем процедуру изменения номера, если документ новый, или если документ перепрыгивает в другой год
Если ЭтоНовый() ИЛИ НачалоГода(ЭтотОбъект.Дата) <> НачалоГода(ЭтотОбъект.Ссылка.Дата) Тогда
Номер = РасшХОбщийМодульСервер.ПолучитьПоследнийНомер(этотОбъект.Организация,ЭтотОбъект.Дата);
КонецЕсли;
(6) Не смогу. Не оформлял отдельным расширением, все доработки в одном.
Но выше правильно написано, либо подписка либо в каждом виде документа "Перед записью", вызывается процедура нумерации из общего модуля.
Только я не храню новый номер в регистре, а в запросе получаю все кадровые документы по этой организации и беру старший номер.
Но выше правильно написано, либо подписка либо в каждом виде документа "Перед записью", вызывается процедура нумерации из общего модуля.
Только я не храню новый номер в регистре, а в запросе получаю все кадровые документы по этой организации и беру старший номер.
Сейчас все кадровые документы уникальны в пределах одного сотрудника. То есть, например, два документа на отпуск (два разных сотрудника) будут иметь одинаковый номер.
Приведите пример из демобазы со скришотами, какие номера одинаковые и что хотите изменить. Либо у вас периодичность номеров установлена в пределах дня, например.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот