8.х ЗУП хитрая нумерация документов

Тема в разделе ""1С:Зарплата и управление персоналом ЗУП"", создана пользователем dimao, 13 фев 2020 в 10:54.

  1. TopicStarter Overlay
    dimao
    Offline

    dimao Опытный в 1С

    Регистрация:
    15 сен 2008
    Сообщения:
    185
    Симпатии:
    0
    Баллы:
    26
    Добрый день!
    Поступила хотелка от кадровиков:
    для приказов:Приказы о приеме, увольнении, переводе, работе в
    выходные и праздничные дни, отпуск без сохранения, по уходу за
    ребенком, выход из отпуска по уходу за ребенком, материальная помощь,
    изменение фамилии, номера сквозные, индекс Л и префикс подразделения.
    Приказы:Приказы о предоставлении учебных, ежегодных оплачиваемых
    отпусков, их продлении, переносе, прерывании, отпуск по беременности и
    родам, с ИНДЕКСОМ О и так же по порядку для подразделений.

    Каждое подразделение - магазинчик.

    То есть номера будут такие:
    00ЗП-ЕЛЛ001

    00 - префикс организации (видно в настройках организации)

    ЗП - префикс программы (документ создан в Зарплате - видно в настройках
    синхронизации данных)

    ЕЛ - префикс подразделения (ЕЛ - Елец 1 - видно в свойствах подразделения)

    Л - Л или О в зависимости от вида документа - выбирается в програмном коде

    001 - номер документа данного вида

    00ЗП-ЕЛЛ001
    00ЗП-ЕЛЛ002
    00ЗП-ЕЛЛ003
    00ЗП-Е2Л001
    00ЗП-ЕЛЛ004
    00ЗП-Е2Л002
    00ЗП-ЕЛО001
    00ЗП-ЕЛО002
    00ЗП-Е2О001
    00ЗП-Е2О002

    Подскажите, как такое реализовать? Это по нумераторы или журналы документов?
  2. ТехБухПривет
    Online

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    837
    Симпатии:
    94
    Баллы:
    54
    можно как р.с., а в документах отдельный реквизит лучше в табл.часть, если нужна отдельная нумерация приказов для сотрудников...
    что надо учесть и обговорить с кадровиками:
    1. приказы без номеров(если есть - переводы),
    2. нумерация задним числом 00ЗП-ЕЛЛ002/1 (пусть хоть бьют себя в грудь и кричат, что такого никогда не было и не будет - не верьте!!! :D)
    3. нумерацию лучше привязывать к датам - проще при разборе возможных ошибок.
    4. нумерация в пределах года или нет..
    5. структуру регистра - лучше разбивать на прификсы и номера - отдельно, проше потом собирать..
    6. ну и мини гемор - печатные формы все поправить...
  3. TopicStarter Overlay
    dimao
    Offline

    dimao Опытный в 1С

    Регистрация:
    15 сен 2008
    Сообщения:
    185
    Симпатии:
    0
    Баллы:
    26
    Это слишком гибко для меня. Я вот раньше не пользовался, а теперь стал читать про Нумераторы: "Нумераторы — это прикладные объекты конфигурации. Использование нумераторов позволяет организовать сквозную нумерацию документов разных видов. Для этого всем таким документам назначается один нумератор. Контроль уникальности и присвоение нового номера будет выполняться с учетом всех документов, для которых назначен этот нумератор."
    Вот как раз то, что мне нужно! пусть групповые документы остаются как есть. Просто в конфигурации заменю типовой нумератор на свой(свои) для разных типов приказов.
  4. ТехБухПривет
    Online

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    837
    Симпатии:
    94
    Баллы:
    54
    Ну как бы запрос был на гибкую нумерацию, учет организаций..
    Дело ваше, но для начала протестируйте на копии все виды.. и дайте "поработать" заказчикам - думаю(уверен), что будут нарекания!
    ну и учтите/обсудите те нюансы, что я описал..

    P.S. Если за что-то беретесь - надо ставить "очень высокую планку", тогда результат будет выше.. А подход: "ну вроде для этого случай пойдет" - никуда не приведёт...
    P.S.S(Vanga on) А и да - времени на "высокую планку" нет всегда.... (Vanga off)
    dimao нравится это.
  5. TopicStarter Overlay
    dimao
    Offline

    dimao Опытный в 1С

    Регистрация:
    15 сен 2008
    Сообщения:
    185
    Симпатии:
    0
    Баллы:
    26
    Спасибо. Конечно тестировать только на копии. И очень ценны пункты о том, что обсудить с кадровиками!

    ЗЫ: пока придумал такую схему : создать нумератор с нужными параметрами (строка, 11 знаков) и в основной конфигурации присвоить его нужным типам документов.
    потом перехватить для этих типов документов событие "ПриУстановкеНовогоНомера". Там вычислять префикс для каждого документа по подразделению сотрудника.

    Вот я только не уверен, как будет обновляться такой документ? каждый раз нужно будет следить, чтобы не перетерся нумератор? или он не будет перетираться обновлением?
    Последнее редактирование: 13 фев 2020 в 17:16
  6. TopicStarter Overlay
    dimao
    Offline

    dimao Опытный в 1С

    Регистрация:
    15 сен 2008
    Сообщения:
    185
    Симпатии:
    0
    Баллы:
    26
    Вот такое , на первый взгляд, работает:
    0) у нас в справочнике подразделений каждому подразделению назначен доп.реквизит с префиксом.
    1)создан нумератор "НумераторПриказов". Строка, 11 символов фиксированной блины с нумерацией в пределах года.
    2)он указан для нужных документов-приказов.
    3)перехвачено событие "ПриУстановкеНовогоНомера" для нужных приказов (у меня в примере ДокументОбъект.РаботаВВыходныеИПраздничныеДни, ДокументОбъект.РаботаСверхурочно, ДокументОбъект.ОтпускБезСохраненияОплаты, ДокументОбъект.ПриемНаРаботу, ДокументОбъект.Увольнение, ДокументОбъект.ОтпускПоУходуЗаРебенком)
    4) обработчик перехваченного события выделен в общий модуль:
    Код:
    Процедура ПриказыНумерацияПриУстановкеНовогоНомера(Источник, СтандартнаяОбработка, Префикс) Экспорт
        Индекс="*";
    
        Если ТипЗнч(Источник) = Тип("ДокументОбъект.ПриемНаРаботу") Тогда
            ДатаДок=Источник.ДатаПриема;
            Индекс="Л";
        ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.Увольнение") Тогда
            ДатаДок=Источник.ДатаУвольнения;
            Индекс="Л";
        ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.КадровыйПеревод") Тогда
            ДатаДок=Источник.ДатаНачала;
            Индекс="Л";
        ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.РаботаВВыходныеИПраздничныеДни") Тогда
            ДатаДок=Источник.ДатаНачалаСобытия;
            Индекс="Л";
        ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.ОтпускБезСохраненияОплаты") Тогда
            ДатаДок=Источник.ДатаНачала;
            Индекс="Л";
        ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.ОтпускПоУходуЗаРебенком") Тогда
            ДатаДок=Источник.ДатаНачала;
            Индекс="Л";
        ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.УведомлениеОПрекращенииОтпускаПоУходуЗаРебенком") Тогда
            ДатаДок=Источник.ДатаПриказа;
            Индекс="Л";
           
        Иначе
            ДатаДок=ТекущаяДата();
        КонецЕсли;
       
       
    Сотр1= КадровыйУчетРасширенный.ОсновнойСотрудникФизЛица(Источник.Сотрудник.ФизическоеЛицо, Источник.Организация, ДатаДок, Ложь);
    Если НЕ Сотр1=Неопределено Тогда
        подразделение = ПодразделениеСотрудникаИзКадровыхДанных(Сотр1);
        Если подразделение=null или подразделение=Неопределено тогда
            подразделение=Источник.Подразделение;
        КонецЕсли;
       
           
            Префикс =Префикс+ ПолучитьПрефиксПодразделения(Подразделение)+Индекс;
    иначе
        Префикс =Префикс+ "__"+Индекс;
    КонецЕсли;
       
    КонецПроцедуры
    
    Функция ПодразделениеСотрудникаИзКадровыхДанных(знач Сотрудник)
        мСотрудники = Новый Массив;
        мСотрудники.Добавить(Сотрудник);
        табКадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, мСотрудники, "Подразделение", ТекущаяДата());
        Возврат табКадровыеДанные[0].Подразделение;
    КонецФункции
    
    //получить свойство ПВХ ДополнительныеРеквизитыИСведения
    //описывающее префикс организации
    Функция СвойствоПрефиксПодразделения()
        запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1
                |    ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка
                |ИЗ
                |    ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
                |ГДЕ
                |    ДополнительныеРеквизитыИСведения.Имя = ""прнПрефиксПодразделенияДляКадровыхДокументов""");
       
        выб = запрос.Выполнить().Выбрать();
        рез = Неопределено;
        Если выб.Следующий() Тогда
            рез = выб.Ссылка;
        КонецЕсли;
       
        Возврат рез;
    КонецФункции
    
    //определяет префикс подразделения указанный в дополнительных реквизитах
    Функция ПолучитьПрефиксПодразделения(знач Подразделение)
        свойство = СвойствоПрефиксПодразделения();
       
        запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1
                |    ПодразделенияОрганизацийДополнительныеРеквизиты.Значение КАК Значение
                |ИЗ
                |    Справочник.ПодразделенияОрганизаций.ДополнительныеРеквизиты КАК ПодразделенияОрганизацийДополнительныеРеквизиты
                |ГДЕ
                |    ПодразделенияОрганизацийДополнительныеРеквизиты.Ссылка = &Подразделение
                |    И ПодразделенияОрганизацийДополнительныеРеквизиты.Свойство = &Свойство");
       
        запрос.УстановитьПараметр("Подразделение", Подразделение);
        запрос.УстановитьПараметр("Свойство", Свойство);
       
        выб = запрос.Выполнить().Выбрать();
        рез = "00";
        Если выб.Следующий() Тогда
            рез = выб.Значение;
        КонецЕсли;
       
        Возврат рез;
    КонецФункции
    
    попробовал тестировать с разными документами - нумеруются как нужно. Все приказы в рамках подразделения имеют сквозную нумерацию.
  7. ТехБухПривет
    Online

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    837
    Симпатии:
    94
    Баллы:
    54
    А теперь покажите кадровикам печатные формы и спросите: будет нормально один номер приказа на всех (если они будут вводить списком сотрудников..)
    ну и введите задним числом приказ и им покажите последовательность...

    На счет обновления, конечно - обновление не типовой конфигурации - сравнение и объединение и проверяете, что изменилось.
    Если изменилось в функции где поменяли - шестеренка напротив модуля и править... информации много главное комментируйте, например:
    //+ фио дд.мм.гг задача такая-то или для того-то
    ......
    //- фио дд.мм.гг задача такая-то или для того-то
    А то потом умаетесь вспоминать, а если кто другой - просто затрет...;)
    dimao нравится это.
  8. TopicStarter Overlay
    dimao
    Offline

    dimao Опытный в 1С

    Регистрация:
    15 сен 2008
    Сообщения:
    185
    Симпатии:
    0
    Баллы:
    26
    кстати, спасибо за идею построения комментариев "+" и "-" для начала и конца измененного блока! длинно комментировал "начало" и "конец" ;-)
  9. ТехБухПривет
    Online

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    837
    Симпатии:
    94
    Баллы:
    54
    Эх, вот почему все любят усложнять себе жизнь?))
    Конфигуратор → Сервис → Шаблоны текста → Изменить(на корне каталога)
    добавляем с начало папку "Моя прелесть:)D - называйте как хотите)" в ней добавляете шаблоны:
    /+ ; / ; /-
    (соответственно для комментариев начало; просто одна строка и конец) а в шаблонах пишем:
    //+Ф.И.О-> <?"", ДатаВремя, "ДФ=dd.MM.yyyy">
    //Ф.И.О-> <?"", ДатаВремя, "ДФ=dd.MM.yyyy">
    //-Ф.И.О-> <?"", ДатаВремя, "ДФ=dd.MM.yyyy">

    И теперь когда вы будете в коде ставить /+ или / или /- , а потом нажмете Ctrl + Q будет подтягиваться необходимый шаблон..
    А вообще совет: посмотреть уже готовые шаблоны и подгрузить, протестировать - найти оптимальный, настроить под себя, добавить чего не хватает и сохранить себе, а потом когда начинаете работать в новых базах - просто подгружать свой шаблон из файла и работать быстро и комфортно...;)
    dimao нравится это.