gifts2017

Перенос физического лица из ЗУП в БП

Опубликовал Виталий Жиляев (VitRu) в раздел Программирование - Практика программирования

Когда регламентированная зарплата переносится из ЗУП в БП без разреза по сотрудникам, то в БП приходится вручную повторять ввод физического лица, ранее уже введенного в ЗУПе. Я немного дописал ЗУП и нужных людей (подотчётники, водители и проч.) можно переносить из ЗУПа в БП. Названия переменных и функций объясняются тем, что в организации, для которой это написано, бухгалтерский учет ведется в отраслевой конфигурации Подрядчик строительства на базе БП.

 1. Добавляем константу ПоПуть, тип строка.

2. Создаем общую форму ПоПуть, для ввода значения константы ПоПуть.

3. У справочника ФизическиеЛица, копированеим формы ФормаСписка, создаем форму ФормаСписка1, делаем ее основной формой списка.

    Создание новой формы обусловлено желанием не усложнять обновление релизов ЗУПа. 

4. В ФормаСписка1:

       - объявляем две пересенные: Перем Подрядчик, Подразделение;

       - добавляем две кнопки с процедурами:

Процедура УстановитьПоПуть(Кнопка)
 ОткрытьФорму("ОбщаяФорма.ПоПуть");
КонецПроцедуры

     и

Процедура ПодСинхронизация(Кнопка)
 
 Попытка V82 = Новый COMОбъект("V82.ComConnector");
 Исключение Предупреждение("Нет V8"); Возврат;
 КонецПопытки;
 
 СтрокаПодключения = "file='"+Константы.ПоПуть.Получить()+
 "'; usr='Обменник'; pwd='19096019';";
 Подрядчик = V82.Connect(СтрокаПодключения);
 
 Фли = ЭтаФорма.ТекущийЭлемент.ТекущаяСтрока;
 Если Фли.ЭтоГруппа Тогда Возврат; КонецЕсли;
 
 Запрос = Подрядчик.NewObject("Запрос"); 
 Запрос.Текст = 
 "ВЫБРАТЬ
 | ФизическиеЛица.ИНН
 |ИЗ
 | Справочник.ФизическиеЛица КАК ФизическиеЛица
 |ГДЕ
 | ФизическиеЛица.Наименование = &Наименование
 | И ФизическиеЛица.ИНН = &ИНН";
 Запрос.УстановитьПараметр("Наименование", Фли.Наименование);
 Запрос.УстановитьПараметр("ИНН", Фли.ИНН);
 Таб = Запрос.Выполнить().Выгрузить();
 Если Таб.Количество() > 0 Тогда
  Предупреждение("Физлицо: "+Фли.Наименование+", ИНН: "+Фли.ИНН+" уже существует в Подрядчике");
  Возврат;
 КонецЕсли; 
 ЗаполнитьПодразд(Фли);
 
 Фпо = Подрядчик.Справочники.ФизическиеЛица.СоздатьЭлемент(); 
 Фпо.Наименование  = Фли.Наименование;
 Фпо.ДатаРождения  = Фли.ДатаРождения;
 Фпо.ИНН     = Фли.ИНН;
 Фпо.КодИМНС    = Фли.КодИМНС;
 Фпо.Комментарий   = Фли.Комментарий;
 Фпо.СтраховойНомерПФР = Фли.СтраховойНомерПФР;
 Если Не Фли.Пол.Пустая() Тогда
 Фпо.Пол     = Подрядчик.Перечисления.ПолФизическихЛиц.Получить(Перечисления.ПолФизическихЛиц.Индекс(Фли.Пол));
 КонецЕсли; 
 Фпо.МестоРождения  = Фли.МестоРождения;
 Фпо.Подразделение  = Подразделение;
 Фпо.Записать();
 
 Запрос = Новый Запрос( 
 "ВЫБРАТЬ
 | ФИОФизЛицСрезПоследних.Фамилия,
 | ФИОФизЛицСрезПоследних.Имя,
 | ФИОФизЛицСрезПоследних.Отчество
 |ИЗ
 | РегистрСведений.ФИОФизЛиц.СрезПоследних КАК ФИОФизЛицСрезПоследних
 |ГДЕ
 | ФИОФизЛицСрезПоследних.ФизЛицо = &ФизЛицо"
 );
 Запрос.УстановитьПараметр("ФизЛицо", Фли);
 Таб = Запрос.Выполнить().Выгрузить();
 Если Таб.Количество() > 0 Тогда
 
  НаборЗаписей = Подрядчик.РегистрыСведений.ФИОФизЛиц.СоздатьНаборЗаписей();
  НаборЗаписей.Отбор.ФизЛицо.Установить(Фпо.Ссылка);

  НовЗапись = НаборЗаписей.Добавить();
  НовЗапись.ФизЛицо = Фпо.Ссылка;
  НовЗапись.Период = ТекущаяДата();
  НовЗапись.Фамилия = Таб[0].Фамилия;
  НовЗапись.Имя  = Таб[0].Имя; 
  НовЗапись.Отчество = Таб[0].Отчество;
  
  НаборЗаписей.Записать(Истина);
 
 КонецЕсли;
 
КонецПроцедуры

       - добавляем процедуру ЗаполнитьПодразд (вызывается из процедуры ПодСинхронизация):

Процедура ЗаполнитьПодразд(Физлицо)
 ПодрОрг = Подрядчик.Справочники.ПодразделенияОрганизаций;
 Подразделение = ПодрОрг.ПустаяСсылка();
 Запрос = Новый Запрос( 
 "ВЫБРАТЬ
 | СотрудникиОрганизаций.ТекущееПодразделениеОрганизации КАК Подразделение,
 | СотрудникиОрганизаций.ДатаУвольнения
 |ИЗ
 | Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
 |ГДЕ
 | СотрудникиОрганизаций.Физлицо = &Физлицо"
 ); 
 Запрос.УстановитьПараметр("Физлицо", Физлицо);
 Таб = Запрос.Выполнить().Выгрузить();
 Для каждого Та Из Таб Цикл
  Если Та.ДатаУвольнения = Дата(1,1,1) Тогда
   Если Не Та.Подразделение.Пустая() Тогда
    Подразделение = ПодрОрг.НайтиПоКоду(Та.Подразделение.Код);
   КонецЕсли; 
  КонецЕсли; 
 КонецЦикла; 
КонецПроцедуры

 

           Порядок работы:

       - по кнопке "Путь расположения ЗУП" определяем место расположение ЗУП

      

       - по кнопке "Синхронизация с Подрядчиком" текущее физлицо создается в Подрядчике. В приведенном

         примере копируется Бабенко

       

 

       - при попытке перенести физлицо, уже существующее в Подрядчике, выдается предупреждение и перенос не осуществляется

 

 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Василий Зайцев (vasiliy_b) 27.11.14 09:53
Почему не использовали правила конвертации?
Так получится меньше изменений в самой конфигурации.
Puk2; Doomino; davdykin; +3 Ответить 1
2. Виталий Жиляев (VitRu) 27.11.14 15:40
В БП нам не нужны, за редким исключением, сотрудники. Этот обмен и написан на это самое редкое исключение (подотчетные лица, водители, ответственные лица). Текучка рабочего персонала значительна. Переносить всех, так просто вредно.
3. Василий Зайцев (vasiliy_b) 28.11.14 11:13
Почему всех, можно же выборочно переносить. Например сделать внешнюю обработку для справочника, в которой через правила конвертации выгружать текущий элемент справочника, во второй конфигурации подобную обработку, только для загрузки полученного файла.
PS: сам пока не пробовал, но вроде как у в новых конфигурациях сейчас еще и веб сервис запустили, для правил обмена. Так что можно вообще выгружать данные без промежуточного файла.
4. Виталий Жиляев (VitRu) 28.11.14 12:32
Я подумывал над вариантом, о котором Вы говорите, но этот мне показался более удобным в эксплуатации. Как и с физлицами, у меня сделан перенос номенклатурных групп (только наоборот Подрядчик->ЗУП), с регламентированием ведения этого справочника в обеих конфигурациях. Работает уже давно, все довольны. Еще тогда я хотел сделать через Правила, но как-то "коряво" получалось. А ЗУП практически от этого не страдает. ФормаСписка1 все равно остается основной. ЗУП, к сожалению, все равно править приходится: формаТ61(расч.при ув.) при некоторых обстоятельствах кривые начисления показывает; по отмене проведения СдельногоНаряда вопросики; запись документа ОтражениеЗарплатыВРеглУчете правил и еще есть правки, но все по подписке на события и новыми объектами. Накатываю обновления без проблем.
5. Doomino (Doomino) 03.12.14 10:21
Вообще-то при использовании конвертации данных не нужно вносить никаких изменений в конфигурации, и даже внешнюю обработку писать не надо - Универсальный обмен XML с диска ИТС прекрасно справляется. Готовых правил конвертации для переноса физлиц на Инфостарте полно.

Возможно, в вашем частном случае это решение и имеет право на жизнь, но тогда не понятно, зачем публиковать его здесь. На универсальность такой вариант не претендует.
6. Виталий Жиляев (VitRu) 03.12.14 12:34
Пользуюсь и Конфигурацией "Конвертация данных" и Универсальным обменом и все равно приходится, как в обсуждаемом случае, писать самому. Это связано с необходимостью обработки данных при переносе. Например: Организация, на тот момент, когда я начал с ней работать, больше половины года дублировала учет, ведя его и в 7.7 и 8.2. При этом никаких обменов не было. Справочники и документы создавались и там и там в ручную (разные коды, наименования, иерархии, состав документов, в 7-ке было то чего не было в 8-ке и наоборот и т.д.). Начинать год с "чистой 8-ки" они категорически отказывались (долго объяснять почему). Я думаю, специалисту все ясно. Я все выровнял и сейчас забыли про 7.7. Это моя первая публикация, хотел немного $m заработать, Вы наверное правы в отношении места публикации, я пока в этом слабо ориентируюсь.
7. Алекс Ю (AlexO) 16.12.14 10:36
(1) vasiliy_b,
Почему не использовали правила конвертации?
а зачем они здесь вообще нужны?
Так получится меньше изменений в самой конфигурации.

Перенос физлица потребовал изменений в конфигурации? Внешние обработки уже не в почете?
(3) vasiliy_b,
Например сделать внешнюю обработку для справочника, в которой через правила конвертации выгружать текущий элемент справочника

Для правил вообще не нужна своя уникальная ВО. Как и правила обмена - для своей ВО.
(5) Doomino,
и даже внешнюю обработку писать не надо

Совершенно верно. Но народу надо поиграться ))
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа