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) Тогда
Если Не Та.Подразделение.Пустая() Тогда
Подразделение = ПодрОрг.НайтиПоКоду(Та.Подразделение.Код);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Порядок работы:
— по кнопке «Путь расположения ЗУП» определяем место расположение ЗУП
— по кнопке «Синхронизация с Подрядчиком» текущее физлицо создается в Подрядчике. В приведенном
примере копируется Бабенко
— при попытке перенести физлицо, уже существующее в Подрядчике, выдается предупреждение и перенос не осуществляется
Почему не использовали правила конвертации?
Так получится меньше изменений в самой конфигурации.
В БП нам не нужны, за редким исключением, сотрудники. Этот обмен и написан на это самое редкое исключение (подотчетные лица, водители, ответственные лица). Текучка рабочего персонала значительна. Переносить всех, так просто вредно.
Почему всех, можно же выборочно переносить. Например сделать внешнюю обработку для справочника, в которой через правила конвертации выгружать текущий элемент справочника, во второй конфигурации подобную обработку, только для загрузки полученного файла.
PS: сам пока не пробовал, но вроде как у в новых конфигурациях сейчас еще и веб сервис запустили, для правил обмена. Так что можно вообще выгружать данные без промежуточного файла.
Я подумывал над вариантом, о котором Вы говорите, но этот мне показался более удобным в эксплуатации. Как и с физлицами, у меня сделан перенос номенклатурных групп (только наоборот Подрядчик->ЗУП), с регламентированием ведения этого справочника в обеих конфигурациях. Работает уже давно, все довольны. Еще тогда я хотел сделать через Правила, но как-то «коряво» получалось. А ЗУП практически от этого не страдает. ФормаСписка1 все равно остается основной. ЗУП, к сожалению, все равно править приходится: формаТ61(расч.при ув.) при некоторых обстоятельствах кривые начисления показывает; по отмене проведения СдельногоНаряда вопросики; запись документа ОтражениеЗарплатыВРеглУчете правил и еще есть правки, но все по подписке на события и новыми объектами. Накатываю обновления без проблем.
Вообще-то при использовании конвертации данных не нужно вносить никаких изменений в конфигурации, и даже внешнюю обработку писать не надо — Универсальный обмен XML с диска ИТС прекрасно справляется. Готовых правил конвертации для переноса физлиц на Инфостарте полно.
Возможно, в вашем частном случае это решение и имеет право на жизнь, но тогда не понятно, зачем публиковать его здесь. На универсальность такой вариант не претендует.
Пользуюсь и Конфигурацией «Конвертация данных» и Универсальным обменом и все равно приходится, как в обсуждаемом случае, писать самому. Это связано с необходимостью обработки данных при переносе. Например: Организация, на тот момент, когда я начал с ней работать, больше половины года дублировала учет, ведя его и в 7.7 и 8.2. При этом никаких обменов не было. Справочники и документы создавались и там и там в ручную (разные коды, наименования, иерархии, состав документов, в 7-ке было то чего не было в 8-ке и наоборот и т.д.). Начинать год с «чистой 8-ки» они категорически отказывались (долго объяснять почему). Я думаю, специалисту все ясно. Я все выровнял и сейчас забыли про 7.7. Это моя первая публикация, хотел немного $m заработать, Вы наверное правы в отношении места публикации, я пока в этом слабо ориентируюсь.
(1) vasiliy_b,
а зачем они здесь вообще нужны?
Перенос физлица потребовал изменений в конфигурации? Внешние обработки уже не в почете?
(3) vasiliy_b,
Для правил вообще не нужна своя уникальная ВО. Как и правила обмена — для своей ВО.
(5) Doomino,
Совершенно верно. Но народу надо поиграться ))