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

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

 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) Тогда
Если Не Та.Подразделение.Пустая() Тогда
Подразделение = ПодрОрг.НайтиПоКоду(Та.Подразделение.Код);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры

 

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

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

      

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

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

       

 

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

 

 

7 Comments

  1. vasiliy_b

    Почему не использовали правила конвертации?

    Так получится меньше изменений в самой конфигурации.

    Reply
  2. VitRu

    В БП нам не нужны, за редким исключением, сотрудники. Этот обмен и написан на это самое редкое исключение (подотчетные лица, водители, ответственные лица). Текучка рабочего персонала значительна. Переносить всех, так просто вредно.

    Reply
  3. vasiliy_b

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

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

    Reply
  4. VitRu

    Я подумывал над вариантом, о котором Вы говорите, но этот мне показался более удобным в эксплуатации. Как и с физлицами, у меня сделан перенос номенклатурных групп (только наоборот Подрядчик->ЗУП), с регламентированием ведения этого справочника в обеих конфигурациях. Работает уже давно, все довольны. Еще тогда я хотел сделать через Правила, но как-то «коряво» получалось. А ЗУП практически от этого не страдает. ФормаСписка1 все равно остается основной. ЗУП, к сожалению, все равно править приходится: формаТ61(расч.при ув.) при некоторых обстоятельствах кривые начисления показывает; по отмене проведения СдельногоНаряда вопросики; запись документа ОтражениеЗарплатыВРеглУчете правил и еще есть правки, но все по подписке на события и новыми объектами. Накатываю обновления без проблем.

    Reply
  5. Doomino

    Вообще-то при использовании конвертации данных не нужно вносить никаких изменений в конфигурации, и даже внешнюю обработку писать не надо — Универсальный обмен XML с диска ИТС прекрасно справляется. Готовых правил конвертации для переноса физлиц на Инфостарте полно.

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

    Reply
  6. VitRu

    Пользуюсь и Конфигурацией «Конвертация данных» и Универсальным обменом и все равно приходится, как в обсуждаемом случае, писать самому. Это связано с необходимостью обработки данных при переносе. Например: Организация, на тот момент, когда я начал с ней работать, больше половины года дублировала учет, ведя его и в 7.7 и 8.2. При этом никаких обменов не было. Справочники и документы создавались и там и там в ручную (разные коды, наименования, иерархии, состав документов, в 7-ке было то чего не было в 8-ке и наоборот и т.д.). Начинать год с «чистой 8-ки» они категорически отказывались (долго объяснять почему). Я думаю, специалисту все ясно. Я все выровнял и сейчас забыли про 7.7. Это моя первая публикация, хотел немного $m заработать, Вы наверное правы в отношении места публикации, я пока в этом слабо ориентируюсь.

    Reply
  7. AlexO

    (1) vasiliy_b,

    Почему не использовали правила конвертации?

    а зачем они здесь вообще нужны?

    Так получится меньше изменений в самой конфигурации.

    Перенос физлица потребовал изменений в конфигурации? Внешние обработки уже не в почете?

    (3) vasiliy_b,

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

    Для правил вообще не нужна своя уникальная ВО. Как и правила обмена — для своей ВО.

    (5) Doomino,

    и даже внешнюю обработку писать не надо

    Совершенно верно. Но народу надо поиграться ))

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *