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) Тогда
Если Не Та.Подразделение.Пустая() Тогда
Подразделение = ПодрОрг.НайтиПоКоду(Та.Подразделение.Код);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Порядок работы:
- по кнопке "Путь расположения ЗУП" определяем место расположение ЗУП
- по кнопке "Синхронизация с Подрядчиком" текущее физлицо создается в Подрядчике. В приведенном
примере копируется Бабенко
- при попытке перенести физлицо, уже существующее в Подрядчике, выдается предупреждение и перенос не осуществляется