Дозагрузка кадровых документов в ЗУП 3.1 из ЗУП 2.5 в интерактивном режиме (загрузка в документы списком)

Публикация № 901823

Обмен - Перенос данных из 1C8 в 1C8

Переход ЗУП 2.5 ЗУП 3.1 перенос данных перенос документов перенос физлиц интерактивное заполнение формы COM-соединение

14
При переходе с ЗУП 2.5 на ЗУП 3.1, иногда по тем или иным причинам требуется ручной перенос кадровых документов за период. Это помощник ручного создания кадровых документов в ЗУП 3.1, который пытается по максимуму заполнить открываемую форму данными из ЗУП 2.5 (через COM-соединение), попутно создает сотрудников и физлиц, если их нет. Основано на публикации rilmir https://infostart.ru/public/793479/ , которое было местами переписано заново, почищено, отлажено, и все равно там еще есть что переделать и оптимизировать, и которое в свою очередь было когда то чьим-то еще творением, видимо для более глобальных целей.

Это помощник ручного создания кадровых документов в ЗУП 3.1, который пытается по максимум заполнить открываемую форму данными из ЗУП 2.5 (через COM-соединение), попутно создает сотрудников и физлиц, если их нет.
Основано на публикации rilmir //infostart.ru/public/793479/

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

Протестирована на Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.6.54)  и Зарплата и управление персоналом КОРП, редакция 2.5 (2.5.133.1) .
Должно работать и на не КОРП версиях.

Некоторые рекомендации и замечания:

- Если в базах используется РЛС, то пользователь 3.1 с РЛС, использующий данную обработку, например кадровик из филиала, должен подключаться к базе 2.5 под аналогичным кадровиком филиала с таким же ограничениями на просмотр документов и сотрудников (у последнего должна быть в правах включена галочка Внешнее соединение). Т.е. не прописывать подключение под администратором в филиалах :)

- Перед переносом документов желательно должно быть заведено Штатное расписание. Подразделения, должности, графики не переносятся этой обработкой. Физлица и Сотрудники создаются, причем при переносе документа любого типа, но нужно все равно проверить перенесенные данные. Например, перенос адреса хоть и улучшен, но номер квартиры так и не открывается в полях адресного классификатора.

- Можно использовать теперь отбор переносимого по виду документов (флажки).

- Тип документа 3.1, в который будет переносится документ 2.5 и который заполняется автоматически при нажатии на кнопку "Прочитать", можно отредактировать вручную, если вы считаете, что должен быть например КадровоеПеремещениеСписком, а не ИзменениеГрафикаСписком.

- ИзменениеГрафикаСписком определяется наличием одного графика для всех на один период и простым быстрым способом - по комментарию (он должен содержать слова "график", "смена режима", "Внутренний временный перевод"), для моей рабочей базы это было достаточно. Желающим можно извратиться и дописать сравнение графиков и начислений до и после перевода.

- Теперь можно переносить отпуска, не только в документ Отпуск, но и помимо ОтпускаСотрудников в ОтпускБезСохраненияОплаты и ОтпускБезСохраненияОплатыСотрудников. Без сохранения оплаты определяется в запросе по документам следующим образом (максимум по всей табличной части РаботникиОрганизации документа в ЗУП 2.5)

|МАКСИМУМ(ВЫБОР КОГДА ОтпускаОрганизацийРаботникиОрганизации.ПричинаОтсутствия = ЗНАЧЕНИЕ(Перечисление.ПричиныОтсутствияНаРаботеВОрганизации.ОтпускБезСохраненияЗарплаты) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ) КАК ЭтоОтпускБезСохраненияЗарплаты,

- Хоть и были использованы некоторые процедуры формы при изменении тех или иных реквизитов. Но в кадровом переводе списком, возможно нужно иногда заходить в строку по сотруднику, в открывшемся окне (там все перенесено) включать выключать какую-нибудь галочку, чтобы при возврате в строке появлялась запись типа "изменен график работы" и т.п.

- Есть возможность переноса нетиповых добавленных в конфигураторе дополнительных реквизитов (например, флажков) из 2.5 в типовой механизм Дополнительных реквизитов, заводимых в режиме Предприятия в 3.1. Оставлено в обработке закомментированным для примера, подробнее описано здесь //infostart.ru/public/901654/ 

- Мне требовались только кадровые Приемы (списками), Перемещения (списками) и Увольнения (без списков), все остальное тоже переделано для загрузки в документы списками и работает, но оно меньше тестировались. Увольнение списком сделано только базово, без начислений (у одиночного Увольнения расчет начислений в 3.1 был сделан еще предыдущим автором) Заполнение больничного прежнее, без начислений, исправлена выдаваемая ранее ошибка при прочтении: "{ВнешняяОбработка.РаботаСКадрами_из_ЗУП25.МодульОбъекта(1270)}: Значение не является значением объектного типа (Пустая) Если НС.Ссылка.Пустая() И НЕ НС.Сотрудник.Пустая() Тогда" 

- В моей рабочей базе коды начислений в 2.5 и 3.1 унифицированы и в целом совпадают. Для типовой оставлен такой вариант с кодами начислений для приема и перемещений:

//Не будем переносить районный коэффициент
Если СокрЛП(КодНачисления) = "00070" ИЛИ СокрЛП(ОснНачисление.ВидРасчета.Description) = "Районный коэффициент" Тогда
  Продолжить;
КонецЕсли;

//добавить нужные доплаты при приеме при необходимости
Если СокрЛП(ОснНачисление.ВидРасчета.Description) = "Месячная премия" Тогда
  КодНачисления = "ПРЕМП";
ИначеЕсли СокрЛП(КодНачисления) = "00001" Тогда
  КодНачисления = "ОКЛ";
ИначеЕсли СокрЛП(КодНачисления) = "00002" Тогда
  КодНачисления = "ОКЛЧС";
ИначеЕсли СокрЛП(КодНачисления) = "00003" Тогда
  КодНачисления = "ТРФЧС";
КонецЕсли;
				
СтруктураНачисленийСотрудника.Вставить("ОснНачисление" + СокрЛП(а), ПланыВидовРасчета.Начисления.НайтиПоКоду(КодНачисления));

и такой поиск для отпусков, командировок и больничных:

//начисления ищем по кодам для типовой, учебный и дополнительный ежегодный - попытка найти по имени, нужно поправить на наименование или код в базе
ПричинаОтсутствияТам = БазаТам.String(РаботникОрганизации.ПричинаОтсутствия);
Если ПричинаОтсутствияТам = "Отпуск ежегодный" Тогда
  РеквизитыДокумента25.Вставить("РаботникиОрганизацииВидОтпуска" + СокрЛП(к), Справочники.ВидыОтпусков.Основной);
  РеквизитыДокумента25.Вставить("РаботникиОрганизацииВидОтпускаНачисление" + СокрЛП(к), ПланыВидовРасчета.Начисления.НайтиПоКоду("ОТ")); //Отпуск основной
ИначеЕсли ПричинаОтсутствияТам = "Отпуск учебный" Тогда
  РеквизитыДокумента25.Вставить("РаботникиОрганизацииВидОтпуска" + СокрЛП(к), Справочники.ВидыОтпусков.ОтпускУчебный);
  РеквизитыДокумента25.Вставить("РаботникиОрганизацииВидОтпускаНачисление" + СокрЛП(к), ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Учебный отпуск")); //Учебный отпуск 
ИначеЕсли ПричинаОтсутствияТам = "Отпуск учебный неоплачиваемый" Тогда
  РеквизитыДокумента25.Вставить("РаботникиОрганизацииВидОтпуска" + СокрЛП(к), Справочники.ВидыОтпусков.ОтпускБезОплатыУчебный);
  РеквизитыДокумента25.Вставить("РаботникиОрганизацииВидОтпускаНачисление" + СокрЛП(к), ПланыВидовРасчета.Начисления.НайтиПоКоду("ОТПУД")); //Дополнительный учебный отпуск без оплаты
ИначеЕсли ПричинаОтсутствияТам = "Отпуск без сохранения заработной платы" Тогда
  РеквизитыДокумента25.Вставить("РаботникиОрганизацииВидОтпуска" + СокрЛП(к), Справочники.ВидыОтпусков.ОтпускБезОплатыПоТКРФ);
  РеквизитыДокумента25.Вставить("РаботникиОрганизацииВидОтпускаНачисление" + СокрЛП(к), ПланыВидовРасчета.Начисления.НайтиПоКоду("ОТПДО")); //Отпуск за свой счет
Иначе
  РеквизитыДокумента25.Вставить("РаботникиОрганизацииВидОтпуска" + СокрЛП(к), Справочники.ВидыОтпусков.ПустаяСсылка());
КонецЕсли;
//для типовой
РеквизитыДокумента25.Вставить("РаботникиОрганизацииВидРасчетаНачисление" + СокрЛП(к), ПланыВидовРасчета.Начисления.НайтиПоКоду("КОМНД")); //Командировка
//для типовой по коду
РеквизитыДокумента25.Вставить("ВидРасчета", ПланыВидовРасчета.Начисления.НайтиПоКоду("БЛН")); //Больничный
РеквизитыДокумента25.Вставить("ВидРасчетаЗаСчетРаботодателя", ПланыВидовРасчета.Начисления.НайтиПоКоду("БЛРДТ")); //Оплата больничного листа за счет работодателя
	
РеквизитыДокумента25.Вставить("ДоплачиватьДоПолногоСреднегоЗаработка", ТекДокументТам.ДоплачиватьДоПолногоСреднегоЗаработка);
//попытка найти по наименованию, поправить на наименование из рабочей базы
РеквизитыДокумента25.Вставить("ВидРасчетаДоплаты", ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Доплата до среднего заработка")); //Доплата до среднего заработка

Нужно поменять на свое, если требуется.

 

Отличия от версии 1.1 rilmir ( //infostart.ru/public/793479/ )

взято из своих же комментариев, описанные замечания исправлены.

- пришлось полностью переписать прочтение доков в таблицу, ибо все множилось зачем-то по одному и тому же документу, лишние реквизиты в запросе...
- сделаны маленькие полезняшки с отбором по типу загружаемого, с визуальным просмотром таб номеров сотрудников до и после (чтоб можно было визуально понять, например, найден точно он или он-совместитель), добавлено отображение списка сотрудников в документе 2.5 для информации. отображение комментария документов.
- полностью переписаны процедуры заполнения реквизитов документов в структуры для загрузки, с учетом того, что они могут потом использоваться для загрузки в документы списком. в том числе и начисления записываются не для одного, а всех сотрудников с возможностью потом найти чье именно.
- сделана загрузка в документы-списки, в том числе с попыткой определять, когда данные подходят для ИзменениеГрафикаСписком, ОтпускБезСохраненияОплаты и ОтпускБезСохраненияОплатыСотрудников, написана загрузка для них.
- подкорректировано дозаполнение формы в документах по одному сотруднику, типа расчета итогового ФОТ в Приеме на работу после загрузки начислений
- добавлено перенос действий Установить, Отменить и т.п. для начислений в Кадровых перемещениях, ибо переносилось все независимо от источника с предопределенным действием Установить.
- исправлены "Объект не найден" на СтрНайти(СокрЛП(НС.Ссылка),"Объект не")>0 Тогда,
именно так СокрЛП обрезает не найденную ссылку
- исправлена ошибка во всех процедурах ПолучитьРеквизиты...() :
        1. для сотрудников стояла ГУИД_Организация
        2. не надо продолжать сотрудников искать по наименованию, если код, т.е. табельный номер у них уже не равен. если такой найдется, то это он же совместитель или уволенный ранее

ГУИД_Сотрудник = БазаТам.String(РаботникОрганизации.Сотрудник.УникальныйИдентификатор());
Если СокрЛП(ГУИД_Организация) <> "00000000-0000-0000-0000-000000000000" Тогда // ПустаяСсылка
  Сотрудник = Справочники.Сотрудники.ПолучитьСсылку(Новый УникальныйИдентификатор(ГУИД_Сотрудник));
  Если СтрНайти(СокрЛП(Сотрудник), "Объект не") Тогда
    Сотрудник = Справочники.Сотрудники.НайтиПоКоду(СокрП(РаботникОрганизации.Сотрудник.Code));
    //не надо так, это другой сотрудник - он же уже уволенный или совместитель
    //Если НЕ ЗначениеЗаполнено(Сотрудник) Тогда
    // Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию(СокрЛП(РаботникОрганизации.Сотрудник.Description));
    //КонецЕсли; 
  КонецЕсли;
Иначе
  Сотрудник = Справочники.Сотрудники.ПустаяСсылка();
КонецЕсли;

- сделан поиск физлица в первую очередь по ИНН

- ошибка в загрузке физ лиц, если физлицо не военнообязанное, то ВДЗКом.ОтношениеКВоинскомуУчету - пустая ссылка в базе 2.5 и индекс по ней получить нельзя, вылетает на этой строке:

ОтношениеКВоинскомуУчетуТам = СокрЛП(БазаТам.String(ВДЗКом.ОтношениеКВоинскомуУчету));
Ном = "";
Ном = БазаТам.Перечисления.ОтношениеКВоинскомуУчету.Индекс(ВДЗКом.ОтношениеКВоинскомуУчету);

- не нужно создавать физлицо по умолчанию вместе с сотрудником, если сотрудник не найден, часто оно есть, хоть и с другим GUID и вот его как-то стоит поискать по наименованию еще дополнительно. а так дубли плодятся в базе, а по внутренним совместителям с разными физлицами потом еще и НДФЛ не соберете, если не проверите и оставите как загрузилось

- созданное физлицо, если его нет, не обновляется после создания в реквизитах (структуре РеквизитыДокумента25) для записи документа. и в этом случае в документ запишется новосозданный сотрудник и пустое физлицо.

- добавлен перенос Группы доступа физлица (очень важно для тех кто работает в филиалах с ограничением на просмотр физлиц), заполнение регистра сведений ФИО физлиц последними сведениями.

- при приеме и перемещении в начислениях районный коэффициент не нужно тянуть в табличную часть 3.1 из 2.5

- исправлена ошибка при прочтении больничного: "{ВнешняяОбработка.РаботаСКадрами_из_ЗУП25.МодульОбъекта(1270)}: Значение не является значением объектного типа (Пустая)
Если НС.Ссылка.Пустая() И НЕ НС.Сотрудник.Пустая() Тогда"

- добавлен перенос номера и даты трудового договора  при Приеме на работу

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

14

Скачать файлы

Наименование Файл Версия Размер
Дозагрузка кадровых документов в ЗУП 3.1 из ЗУП 2.5 в интерактивном режиме, версия 2.1
.epf 81,33Kb
11.09.18
115
.epf 2.1 81,33Kb 115 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Дата
14. bugtester 270 27.06.19 05:01 Сейчас в теме
(11) не проверял, но шанс есть, в любом случае можно взять за основу для правки кода под себя
13. bugtester 270 27.06.19 04:57 Сейчас в теме
(12) это оставленный код из изначальной публикации rilmir.
"Основано на публикации rilmir https://infostart.ru/public/793479/ , которое было местами переписано заново, почищено, отлажено, и все равно там еще есть что переделать и оптимизировать"
Не помню почему оставлен, возможно потому что действительно не срабатывало Пустая() или ЗначениеЗаполнено(), возможно потому что этот мелкий блок кода работает - пусть работает
12. victorkim64 88 21.06.19 07:37 Сейчас в теме
как то сложно

ГУИД_Сотрудник = БазаТам.String(РаботникОрганизации.Сотрудник.УникальныйИдентификатор());
Если СокрЛП(ГУИД_Организация) <> "00000000-0000-0000-0000-000000000000" Тогда // ПустаяСсылка

должно сработать

РаботникОрганизации.Сотрудник.Пустая()
или
БазаТам.ЗначениеЗаполнено(РаботникОрганизации.Сотрудник)
11. snogl 31.01.19 10:59 Сейчас в теме
Добрый день! Подскажите...
Необходимо выгрузить все из ЗУП (базовая), редакция 2.5 (2.5.130.2) в ЗУП (базовая), редакция 3.1 (3.1.8.246).
Данная обработка для этой цели подойдет ?
10. FReIM 13.12.18 10:40 Сейчас в теме
(8) Приём, перевод, увольнение, отпуск, отпуск без сохранения, больничный загрузились
При создании командировки появилась ошибка на картинке.

ЗУП КОРП 3.1.8.185. Платформа 8.3.13.1644. Все документы, которые к загрузке, типовые.
Прикрепленные файлы:
9. vin_lucy 4 13.12.18 06:28 Сейчас в теме
На 3.1.8.185 - Приемы на работу, отпуска - работает. (другое пока не проверяли).
Очень облегчает жизнь. Спасибо.
8. bugtester 270 13.12.18 04:37 Сейчас в теме
(7) нет, использовалась единично, нужды на последующих релизах не было.
вы нашли что-то, что на 3.1.8.185 перестало работать?
7. FReIM 12.12.18 12:28 Сейчас в теме
Добрый день.
Есть ли обновление обработки под версию ЗУПа 3.1.8.185? Платформу используем 8.3.13.1644.
6. nia72 28.11.18 08:17 Сейчас в теме
Да, очень даже работоспособная. за что автору большой респект и уважуха! Допилил в части поступлений. А именно - корректный ввод вида занятости для создаваемого сотрудника в документах приема, по документу ПриемНаРаботуСписком изменил расшифровку и отображение ставки, чтобы не заходить в каждую строку и не перекнопывать ФОТ или количество ставок. Остальное надеюсь сегодня доделать и приспособить для массовой загрузки документов по каждому сотруднику в хронологии кадровых движений.
5. bugtester 270 28.11.18 04:15 Сейчас в теме
(4) работоспособная, но не без огрехов. допилить там тоже есть что. но поменьше, чем в изначальной ссылке
4. nia72 27.11.18 17:01 Сейчас в теме
Так и не понял - обработка работоспособная?
3. васисубатор 65 14.09.18 12:47 Сейчас в теме
Его дают уже детям, используют для авторизации на госуслугах, ... в отличие от бесовского ИНН :)
2. bugtester 270 14.09.18 04:13 Сейчас в теме
(1) Работаете с ортодоктально религиозными людьми?)
В наше смутное время пенсионных реформ, скоро и СНИЛС может стать ненужным
1. васисубатор 65 13.09.18 17:02 Сейчас в теме
Полезная вещь в наше смутное время переносов. Только физлиц я обычно ищу в первую очередь по СНИЛС - ИНН не у всех есть
Оставьте свое сообщение