По требованиям ЕГИССО необходимы: ФИО, дата рождения, СНИЛС, пол. Меры назначаются
на основании родительских отношений. То есть получателем является родитель, лицом являющимся основанием назначения меры является ребенок. По требованиям ПФР выгрузка должна быть максимально полной - паспортные сведения, адреса, свидетельства о рождении являются обязательными (хотя временно можно загружать без них).
Данная разработка является единственной в своем роде и позволяет сформировать максимально полную выгрузку на основе имеющихся, данных. При этом обработка сама проверяет корректность снилса, правильность набивки свидетельства и паспорта, наличие даты рождения и формирует протокол выгрузки с указанием найденных ошибок по детям и родителям.
Перед началом работы требуется определить свой код меры и код ее локальной категории с помощью портала ЕГИССО и вставить его в код обработки (модуль объекта, строки 844 и 845)
Также необходимо в настройки каждого учреждения в разделе адреса добавить поле "Другая информация".
Тестировалась обработка на релизе Бухгалтерия государственного учреждения, редакция 2.0 (2.0.93.42) , но без проблем должна работать и на более ранних.
Перед началом работы сформируйте в КПИ ЕГИССО тестовый файл выгрузки для определения кодов меры.
Они прописаны жестко в коде модуля обработки:
ЕГИССО1.ДобавитьСтроку("<ns2:lmszId>46a9d517-b941-43aa-8c4e-b6d3708f7b33</ns2:lmszId>");
ЕГИССО1.ДобавитьСтроку("<ns2:categoryId>e6fdadda-4e93-4f8d-b169-45081d332215</ns2:categoryId>");
Форму вы можете разработать сами под ваши требования, либо скачав нашу обработку.
Основная идея кода - распарсить все имеющиеся данные, обработать ошибки, сформировать выгрузку и протокол.
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.РедактироватьКакИнтервал = Истина;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
Если НастройкаПериода.Редактировать() Тогда
НачПериода = НастройкаПериода.ПолучитьДатуНачала();
КонПериода = НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;
КонецПроцедуры
Функция ПолучитьТолькоЦифры2(Строка) Экспорт
Строка2 = "";
Строка2 = СтрЗаменить(Строка, "-", "");
Строка2 = СтрЗаменить(Строка2, " ", "");
Возврат Строка2;
КонецФункции
// Если передено число - то истина, иначе ложь
Функция ЯвляетсяЧислом(Значение) Экспорт
Если ТипЗнч(Значение) = Тип("Число") Тогда
Возврат Истина
Иначе
Если ТипЗнч(Значение) = Тип("Строка") Тогда
Если Значение = "" Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Попытка
Р = Число(Значение);
Исключение
Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецЕсли;
КонецФункции
Функция ПроверкаДанныхСтрока(Значение)
Если Значение="" тогда
Возврат "НЕТДАННЫХ";
иначе
Возврат СокрЛП(СтрЗаменить(СтрЗаменить(Значение,"_","-"),"¶",""));
конецесли
КонецФункции
Функция ПроверкаДанныхДата(Значение)
Если Значение=Дата('00010101') или Значение='0001.01.01' или Значение="" тогда
Возврат Дата('19000101');
иначе
попытка
если Дата(Значение)>Дата('19000101') и Дата(Значение)<ТекущаяДата() тогда
Возврат Значение;
иначе
Возврат Дата('19000101');
конецесли;
исключение
Возврат Дата('19000101');
конецпопытки
конецесли
КонецФункции
Функция ПроверкаДанныхДата2(Значение)
Если Значение=Дата('00010101') или Значение='0001.01.01' или Значение="" тогда
Возврат Дата('19000101');
иначе
попытка
если Дата(Значение)>Дата('19000101') и Дата(Значение)<ТекущаяДата() тогда
Возврат Значение;
иначе
Возврат Дата('19000101');
конецесли;
исключение
Возврат Дата('19000101');
конецпопытки
конецесли
КонецФункции
Функция АнглТоРусВсвид(Значение)
Зн = СтрЗаменить(Значение," ","");
Правая = ВРЕГ(Прав(Зн,2));
//англ на русск
Правая = СтрЗаменить(Правая,"A","А");
Правая = СтрЗаменить(Правая,"E","Е");
Правая = СтрЗаменить(Правая,"T","Т");
Правая = СтрЗаменить(Правая,"O","О");
Правая = СтрЗаменить(Правая,"P","Р");
Правая = СтрЗаменить(Правая,"H","Н");
Правая = СтрЗаменить(Правая,"K","К");
Правая = СтрЗаменить(Правая,"X","Х");
Правая = СтрЗаменить(Правая,"C","С");
Правая = СтрЗаменить(Правая,"B","В");
Правая = СтрЗаменить(Правая,"M","М");
Правая = СтрЗаменить(Правая,"Y","У");
Правая = СтрЗаменить(Правая,"N","И");
Левая = ВРЕГ(ЛЕВ(Зн,СтрДлина(Зн)-2));
//русские на англ
Левая = СтрЗаменить(Левая,"А","A");
Левая = СтрЗаменить(Левая,"Е","E");
Левая = СтрЗаменить(Левая,"Т","T");
Левая = СтрЗаменить(Левая,"О","O");
Левая = СтрЗаменить(Левая,"Р","P");
Левая = СтрЗаменить(Левая,"Н","H");
Левая = СтрЗаменить(Левая,"К","K");
Левая = СтрЗаменить(Левая,"Х","X");
Левая = СтрЗаменить(Левая,"С","C");
Левая = СтрЗаменить(Левая,"В","B");
Левая = СтрЗаменить(Левая,"М","M");
Левая = СтрЗаменить(Левая,"У","Y");
Левая = СтрЗаменить(Левая,"И","N");
Возврат Левая+Правая;
КонецФункции
Функция КонтрольСвид(Значение)
Зн = СтрЗаменить(Значение," ","");
Строки=СтрЗаменить(Зн,"-",Символы.ПС);
Если СтрЧислоСтрок(Строки)=2 тогда
если СтрДлина(СтрПолучитьСтроку(Строки,2))=2 тогда
Возврат Истина;
иначе
Возврат Ложь;
конецесли
иначе
Возврат Ложь;
конецесли;
КонецФункции
Функция ТолькоЧисла(СтрокаРазличныеСимволы)
Если СтрДлина(СтрокаРазличныеСимволы) = 0 Тогда
Возврат "";
КонецЕсли;
РезультатЧисло = "";
Для а = 1 по СтрДлина(СтрокаРазличныеСимволы) Цикл
Символ = Сред(СтрокаРазличныеСимволы, а, 1);
Если Найти("0123456789", Символ) = 0 Тогда
Продолжить;
КонецЕсли;
РезультатЧисло = "" + РезультатЧисло + Символ;
КонецЦикла;
Возврат РезультатЧисло;
КонецФункции
Функция КонтрольНомераСвид(Значение)
Зн = ТолькоЧисла(Значение);
если СтрДлина(Зн)=6 тогда
Возврат Зн;
иначе
Возврат "";
конецесли
КонецФункции
//Проверяет номер страхового свидетельства на соответствие требованиям ПФР
Функция СтраховойНомерПФРСоответствуетТребованиям(СтраховойНомер) Экспорт
Результат = Истина;
СтрокаЦифр=СтрЗаменить(Лев(СтраховойНомер,11),"-","");
Если ПустаяСтрока(СтрокаЦифр) Тогда
Возврат Ложь;
КонецЕсли;
Попытка
П1 = Число(СтрокаЦифр);
КонтрольноеЧисло=Число(Прав(СтраховойНомер,2));
Исключение
Возврат Ложь;
КонецПопытки;
Если Число(Лев(СтрокаЦифр,9)) > 1001998 Тогда
Всего=0;
Для Сч = 1 По 9 Цикл
Всего=Всего+Число(Сред(СтрокаЦифр,10-Сч,1))*Сч
КонецЦикла;
Остаток=Всего%101;
Остаток=?(Остаток=100,0,Остаток);
Если Остаток<>КонтрольноеЧисло Тогда
Результат = Ложь;
КонецЕсли;
КонецЕсли;
если СтрДлина(ПолучитьТолькоЦифры2(СтраховойНомер))<>11 тогда
Результат = Ложь;
конецесли;
Возврат Результат;
КонецФункции
// Функция определяет пол работника по его отчеству
Функция ПолучитьПол(ОтчествоРаботника) Экспорт
Если Прав(ОтчествоРаботника, 2) = "ич" Тогда
Возврат "Male";
ИначеЕсли Прав(ОтчествоРаботника, 2) = "на" Тогда
Возврат "Female";
КонецЕсли;
Возврат "";
КонецФункции // ПолучитьПол()
Функция КонтрольФиоДаты(Фам,Имя,Отч,ДатаП)
если Фам="" тогда
Возврат Ложь;
конецесли;
если Имя="" тогда
Возврат Ложь;
конецесли;
если Отч="" тогда
Возврат Ложь;
конецесли;
если ПроверкаДанныхДата2(ДатаП)=Дата('19000101') тогда
Возврат Ложь;
конецесли;
Возврат Истина;
конецфункции
Процедура ОсновныеДействияФормыДействие(Кнопка)
// Вставить содержимое обработчика.
ЧислоСтрок1=0;
ЕГИССО1 = Новый ТекстовыйДокумент;
ЕГИССО1.УстановитьТипФайла(КодировкаТекста.UTF8);
ЕГИССО1.Очистить();
ОшибкиПоЛюдям = Новый ТекстовыйДокумент;
ОшибкиПоЛюдям.УстановитьТипФайла(КодировкаТекста.ANSI);
ОшибкиПоЛюдям.Очистить();
ЕГИССО1.ДобавитьСтроку("<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>");
ЕГИССО1.ДобавитьСтроку("<ns7:data xmlns=""urn://egisso-ru/types/package-RAF/1.0.9"" xmlns:ns2=""urn://egisso-ru/types/assignment-fact/1.0.8"" xmlns:ns3=""urn://egisso-ru/types/prsn-info/1.0.4"" xmlns:ns4=""urn://x-artefacts-smev-gov-ru/supplementary/commons/1.0.1"" xmlns:ns5=""urn://egisso-ru/types/basic/1.0.8"" xmlns:ns6=""urn://egisso-ru/types/prsn-basis/1.0.2"" xmlns:ns7=""urn://egisso-ru/msg/10.06.S/1.0.8"">");
ЕГИССО1.ДобавитьСтроку("<package>");
гуид = Новый УникальныйИдентификатор();
ЕГИССО1.ДобавитьСтроку("<packageId>"+гуид+"</packageId>");
ЕГИССО1.ДобавитьСтроку("<elements>");
Выборка = Документы.РП_РасчетКомпенсацииРодительскойПлаты.Выбрать(НачПериода,КонПериода);
Пока Выборка.Следующий() Цикл
Док = Выборка.Ссылка.ПолучитьОбъект();
//Сообщить(Док.Учреждение);
Если Док.Проведен=Истина и Док.ПометкаУдаления=Ложь и Док.Учреждение=Организация тогда
Для каждого Стр из Док.РасчетКомпенсации Цикл
сум=сокрлп(строка(цел(стр.СуммаКомпенсации)));
кл= Найти(сум," ");
л=стрдлина(сум);
сум1=лев(сум,кл-1)+прав(сум,л-кл);
коп=строка((стр.СуммаКомпенсации-цел(стр.СуммаКомпенсации))*100);
если стрдлина(коп)<2 тогда
коп="0"+коп;
конецесли;
сум=сум1+","+коп;
если сум <> "0,00" тогда
к1=КонтрольФиоДаты(Стр.Плательщик.Фамилия,Стр.Плательщик.Имя,Стр.Плательщик.Отчество,РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Плательщик, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.ДатаРождения)).ЗначениеХарактеристики);
к2=КонтрольФиоДаты(Стр.Ребенок.Контрагент.Фамилия,Стр.Ребенок.Контрагент.Имя,Стр.Ребенок.Контрагент.Отчество,РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Ребенок.Контрагент, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.ДатаРождения)).ЗначениеХарактеристики);
если к1 и к2 тогда
если СтраховойНомерПФРСоответствуетТребованиям(Стр.Плательщик.СтраховойНомерПФР) и СтраховойНомерПФРСоответствуетТребованиям(Стр.Ребенок.Контрагент.СтраховойНомерПФР) тогда
ЕГИССО1.ДобавитьСтроку("<fact>");
ЕГИССО1.ДобавитьСтроку("<ns2:oszCode>"+ПолеВвода1+"</ns2:oszCode>");
ЕГИССО1.ДобавитьСтроку("<ns2:mszReceiver>");
ЕГИССО1.ДобавитьСтроку("<ns3:SNILS>"+ПолучитьТолькоЦифры2(Стр.Плательщик.СтраховойНомерПФР)+"</ns3:SNILS>");
ЕГИССО1.ДобавитьСтроку("<ns4:FamilyName>"+СокрЛП(Стр.Плательщик.Фамилия)+"</ns4:FamilyName>");
ЕГИССО1.ДобавитьСтроку("<ns4:FirstName>"+СокрЛП(Стр.Плательщик.Имя)+"</ns4:FirstName>");
ЕГИССО1.ДобавитьСтроку("<ns4:Patronymic>"+ПроверкаДанныхСтрока(СокрЛП(Стр.Плательщик.Отчество))+"</ns4:Patronymic>");
если ПолучитьПол(Стр.Плательщик.Отчество)="" тогда
если Строка(РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Плательщик, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.Пол)).ЗначениеХарактеристики)="Мужской" тогда
ЕГИССО1.ДобавитьСтроку("<ns3:Gender>Male</ns3:Gender>");
иначе
ЕГИССО1.ДобавитьСтроку("<ns3:Gender>Female</ns3:Gender>");
конецесли;
иначе
ЕГИССО1.ДобавитьСтроку("<ns3:Gender>"+ПолучитьПол(Стр.Плательщик.Отчество)+"</ns3:Gender>");
конецесли;
стрдат=РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Плательщик, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.ДатаРождения)).ЗначениеХарактеристики;
ЕГИССО1.ДобавитьСтроку("<ns3:BirthDate>"+Формат(ПроверкаДанныхДата(стрдат),"ДФ=yyyy-MM-dd")+"+03:00</ns3:BirthDate>");
ЕГИССО1.ДобавитьСтроку("<ns3:BirthPlace>"+ПроверкаДанныхСтрока(СокрЛП(РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Плательщик, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.МестоРождения)).ЗначениеХарактеристики))+"</ns3:BirthPlace>");
ЕГИССО1.ДобавитьСтроку("<ns3:Citizenship>"+"643"+"</ns3:Citizenship>");
//Сообщить(Стр.ПроцентКомпенсации);
//Сообщить(Стр.СуммаКомпенсации);
//Сообщить(Стр.Плательщик.Фамилия+" "+Стр.Плательщик.Имя+" "+Стр.Плательщик.Отчество);
//Сообщить(ПолучитьТолькоЦифры2(Стр.Плательщик.СтраховойНомерПФР));
//Сообщить(РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Плательщик, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.Пол)).ЗначениеХарактеристики);
//Сообщить(РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Плательщик, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.ДатаРождения)).ЗначениеХарактеристики);
//Сообщить(РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Плательщик, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.МестоРождения)).ЗначениеХарактеристики);
ФильтрПаспорт = Новый Структура("ФизЛицо",Стр.Плательщик);
Результат = РегистрыСведений.ПаспортныеДанныеФизЛиц.ПолучитьПоследнее(ТекущаяДата(),ФильтрПаспорт);
//Сообщить(Результат["ДокументВид"]);
//Сообщить(Результат["ДокументСерия"]);
//Сообщить(Результат["ДокументНомер"]);
//Сообщить(Результат["ДокументКемВыдан"]);
//Сообщить(Результат["ДокументДатаВыдачи"]);
ЕГИССО1.ДобавитьСтроку("<ns3:IdentityDoc>");
Если Результат["ДокументВид"].Наименование = "Паспорт гражданина России" или Результат["ДокументВид"].Наименование = "Паспорт гражданина Российской Федерации" тогда
ЕГИССО1.ДобавитьСтроку("<ns5:PassportRF>");
контрольсерии = ТолькоЧисла(Результат["ДокументСерия"]);контрольномера = ТолькоЧисла(Результат["ДокументНомер"]);
Если СтрДлина(контрольсерии)=4 и СтрДлина(контрольномера)=6 тогда
ЕГИССО1.ДобавитьСтроку("<ns5:Series>"+контрольсерии+"</ns5:Series>");
ЕГИССО1.ДобавитьСтроку("<ns5:Number>"+контрольномера+"</ns5:Number>");
иначе
ЕГИССО1.ДобавитьСтроку("<ns5:Series>"+"1234"+"</ns5:Series>");
ЕГИССО1.ДобавитьСтроку("<ns5:Number>"+"123456"+"</ns5:Number>");
ТекстТ = ОшибкиПоЛюдям.ПолучитьТекст();
если Найти(ТекстТ,"Проблема ПАСПОРТА плательщика "+Стр.Плательщик.Код)=0 тогда
ОшибкиПоЛюдям.ДобавитьСтроку("Проблема ПАСПОРТА плательщика "+Стр.Плательщик.Код);
конецесли;
конецесли;
ЕГИССО1.ДобавитьСтроку("<ns5:IssueDate>"+Формат(ПроверкаДанныхДата(Результат["ДокументДатаВыдачи"]),"ДФ=yyyy-MM-dd")+"+03:00</ns5:IssueDate>");
ЕГИССО1.ДобавитьСтроку("<ns5:Issuer>"+ПроверкаДанныхСтрока(Результат["ДокументКемВыдан"])+"</ns5:Issuer>");
ЕГИССО1.ДобавитьСтроку("</ns5:PassportRF>");
иначе
ЕГИССО1.ДобавитьСтроку("<ns5:ForeignPassport>");
ЕГИССО1.ДобавитьСтроку("<ns5:Series>"+ПроверкаДанныхСтрока(Результат["ДокументСерия"])+"</ns5:Series>");
ЕГИССО1.ДобавитьСтроку("<ns5:Number>"+ПроверкаДанныхСтрока(Результат["ДокументНомер"])+"</ns5:Number>");
ЕГИССО1.ДобавитьСтроку("<ns5:IssueDate>"+Формат(ПроверкаДанныхДата(Результат["ДокументДатаВыдачи"]),"ДФ=yyyy-MM-dd")+"+03:00</ns5:IssueDate>");
ЕГИССО1.ДобавитьСтроку("<ns5:Issuer>"+ПроверкаДанныхСтрока(Результат["ДокументКемВыдан"])+"</ns5:Issuer>");
ЕГИССО1.ДобавитьСтроку("</ns5:ForeignPassport>");
конецесли;
ЕГИССО1.ДобавитьСтроку("</ns3:IdentityDoc>");
//
НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
УправлениеКонтактнойИнформацией.ПрочитатьКонтактнуюИнформацию(НаборЗаписей, Стр.Плательщик);
//Сообщить(НаборЗаписей[0].Представление);
Строки = СтрЗаменить(НаборЗаписей[0].Представление,",",Символы.ПС);
КоличествоСтрок = СтрЧислоСтрок(Строки);
деревня = "";
область = "";
район = "";
дом = "дом";
город = "";
село = "";
поселок = "";
квартира = "";
корпус = "";
улица = "ул";
индекс = "654321";
Если КоличествоСтрок>1 Тогда
Для А = 1 По КоличествоСтрок Цикл
подстрока1 = СтрПолучитьСтроку(Строки, А);
подстрока1 = СтрЗаменить(подстрока1,".",". ");
подподстроки=СтрЗаменить(подстрока1," ",Символы.ПС);
КоличествоПодПодСтрок = СтрЧислоСтрок(подподстроки);
Для Б = 1 По КоличествоПодПодСтрок Цикл
илимент = СтрПолучитьСтроку(подподстроки, Б);
Если илимент<>"" тогда
Если ЯвляетсяЧислом(илимент) И КоличествоПодПодСтрок=1 тогда
//Сообщить("Вроде индекс "+илимент);
индекс = илимент;
иначе
//Сообщить("Что то другое "+илимент);
Если илимент="обл" или илимент="обл." или илимент="область" тогда
//Сообщить("Нашли область "+подстрока1);
область = подстрока1;
конецесли;
Если илимент="р-н" или илимент="район" или илимент="р-н."или илимент="округ" тогда
//Сообщить("Нашли район "+подстрока1);
район = подстрока1;
конецесли;
Если илимент="г" или илимент="г." или илимент="гор"или илимент="гор." тогда
//Сообщить("Нашли город "+подстрока1);
город = подстрока1;
конецесли;
Если илимент="п" или илимент="пос." или илимент="п." или илимент="пос" или илимент="поселение"или илимент="гп"или илимент="сп."или илимент="рп" тогда
//Сообщить("Нашли поселок "+подстрока1);
поселок = подстрока1;
конецесли;
Если илимент="с" или илимент="село" или илимент="с." тогда
//Сообщить("Нашли село "+подстрока1);
село = подстрока1;
конецесли;
Если илимент="д" или илимент="деревня" или илимент="д." или илимент="дер" или илимент="дер." тогда
если деревня = "" и город = ""и поселок = "" тогда
//Сообщить("Нашли деревню "+подстрока1);
деревня = подстрока1;
иначе
//Сообщить("Нашли дом "+подстрока1);
дом = подстрока1;
конецесли;
конецесли;
Если илимент="ул" или илимент="улица" или илимент="ул." или илимент="проезд" или илимент= "пр-кт"или илимент= "проспект"или илимент= "мкр"или илимент= "квартал"или илимент= "шоссе" тогда
//Сообщить("Нашли улицу "+подстрока1);
улица = подстрока1;
конецесли;
Если илимент="дом" тогда
//Сообщить("Нашли дом "+подстрока1);
дом = подстрока1;
конецесли;
Если илимент="корпус" или илимент="корп." или илимент="корп" тогда
//Сообщить("Нашли корпус "+подстрока1);
корпстр = СтрЗаменить(подстрока1," ",Символы.ПС);
корпус = СтрПолучитьСтроку(корпстр,СтрЧислоСтрок(корпстр));
конецесли;
Если илимент="кв" или илимент="кв." или илимент="квартира" тогда
//Сообщить("Нашли квартиру "+подстрока1);
квстроки=СтрЗаменить(подстрока1," ",Символы.ПС);
квартира = СтрПолучитьСтроку(квстроки,СтрЧислоСтрок(квстроки));//подстрока1;
конецесли;
конецесли
конецесли
КонецЦикла
КонецЦикла;
Иначе
поселок=НаборЗаписей[0].Представление;
КонецЕсли;
//Сообщить(индекс+" "+область+" "+район+" "+город+" "+село+" "+поселок+" "+деревня+" "+улица+" "+дом+" "+корпус+" "+квартира);
если СтрДлина(индекс)<>6 тогда индекс = "654321"; конецесли;
если СтрДлина(дом)>10 тогда дом = Прав(дом,10); конецесли;
если СтрДлина(квартира)>10 тогда квартира = Прав(квартира,10); конецесли;
ЕГИССО1.ДобавитьСтроку("<ns3:Address>");
ЕГИССО1.ДобавитьСтроку("<ns3:PermanentResidence>");
ЕГИССО1.ДобавитьСтроку("<ns5:OKSMCode>643</ns5:OKSMCode>");
ЕГИССО1.ДобавитьСтроку("<ns5:PostIndex>"+индекс+"</ns5:PostIndex>");
ЕГИССО1.ДобавитьСтроку("<ns5:Region>"+область+"</ns5:Region>");
ЕГИССО1.ДобавитьСтроку("<ns5:District>"+район+"</ns5:District>");
ЕГИССО1.ДобавитьСтроку("<ns5:City>"+город+" "+село+" "+поселок+" "+деревня+"</ns5:City>");
ЕГИССО1.ДобавитьСтроку("<ns5:Street>"+улица+"</ns5:Street>");
ЕГИССО1.ДобавитьСтроку("<ns5:House>"+дом+"</ns5:House>");
ЕГИССО1.ДобавитьСтроку("<ns5:Housing>"+СокрЛП(корпус)+"</ns5:Housing>");
ЕГИССО1.ДобавитьСтроку("<ns5:Apartment>"+квартира+"</ns5:Apartment>");
ЕГИССО1.ДобавитьСтроку("</ns3:PermanentResidence>");
ЕГИССО1.ДобавитьСтроку("</ns3:Address>");
ЕГИССО1.ДобавитьСтроку("</ns2:mszReceiver>");
//
//Сообщить(Стр.Ребенок.Контрагент.Фамилия+" "+Стр.Ребенок.Контрагент.Имя+" "+Стр.Ребенок.Контрагент.Отчество);
//Сообщить(ПолучитьТолькоЦифры2(Стр.Ребенок.Контрагент.СтраховойНомерПФР));
//
//Сообщить(РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Ребенок.Контрагент, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.Пол)).ЗначениеХарактеристики);
//Сообщить(РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Ребенок.Контрагент, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.ДатаРождения)).ЗначениеХарактеристики);
//Сообщить(РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Ребенок.Контрагент, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.МестоРождения)).ЗначениеХарактеристики);
//
ЕГИССО1.ДобавитьСтроку("<ns2:reasonPersons>");
ЕГИССО1.ДобавитьСтроку("<ns6:basisPerson>");
ЕГИССО1.ДобавитьСтроку("<ns3:prsnInfo>");
ЕГИССО1.ДобавитьСтроку("<ns3:SNILS>"+ПолучитьТолькоЦифры2(Стр.Ребенок.Контрагент.СтраховойНомерПФР)+"</ns3:SNILS>");
ЕГИССО1.ДобавитьСтроку("<ns4:FamilyName>"+СокрЛП(Стр.Ребенок.Контрагент.Фамилия)+"</ns4:FamilyName>");
ЕГИССО1.ДобавитьСтроку("<ns4:FirstName>"+СокрЛП(Стр.Ребенок.Контрагент.Имя)+"</ns4:FirstName>");
ЕГИССО1.ДобавитьСтроку("<ns4:Patronymic>"+ПроверкаДанныхСтрока(СокрЛП(Стр.Ребенок.Контрагент.Отчество))+"</ns4:Patronymic>");
если ПолучитьПол(Стр.Ребенок.Контрагент.Отчество)="" тогда
если Строка(РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Ребенок.Контрагент, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.Пол)).ЗначениеХарактеристики)="Мужской" тогда
ЕГИССО1.ДобавитьСтроку("<ns3:Gender>Male</ns3:Gender>");
иначе
ЕГИССО1.ДобавитьСтроку("<ns3:Gender>Female</ns3:Gender>");
конецесли;
иначе
ЕГИССО1.ДобавитьСтроку("<ns3:Gender>"+ПолучитьПол(Стр.Ребенок.Контрагент.Отчество)+"</ns3:Gender>");
конецесли;
стрдат2=РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Ребенок.Контрагент, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.ДатаРождения)).ЗначениеХарактеристики;
ЕГИССО1.ДобавитьСтроку("<ns3:BirthDate>"+Формат(ПроверкаДанныхДата(стрдат2),"ДФ=yyyy-MM-dd")+"+03:00</ns3:BirthDate>");
ЕГИССО1.ДобавитьСтроку("<ns3:BirthPlace>"+ПроверкаДанныхСтрока(СокрЛП(РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Ребенок.Контрагент, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.МестоРождения)).ЗначениеХарактеристики))+"</ns3:BirthPlace>");
ЕГИССО1.ДобавитьСтроку("<ns3:Citizenship>643</ns3:Citizenship>");
ФильтрПаспорт = Новый Структура("ФизЛицо",Стр.Ребенок.Контрагент);
Результат = РегистрыСведений.ПаспортныеДанныеФизЛиц.ПолучитьПоследнее(ТекущаяДата(),ФильтрПаспорт);
//Сообщить(Результат["ДокументВид"]);
//Сообщить(Результат["ДокументСерия"]);
//Сообщить(Результат["ДокументНомер"]);
//Сообщить(Результат["ДокументКемВыдан"]);
//Сообщить(Результат["ДокументДатаВыдачи"]);
ЕГИССО1.ДобавитьСтроку("<ns3:IdentityDoc>");
если Результат["ДокументВид"].Наименование="Свидетельство о рождении" тогда
резконтролясвид=КонтрольНомераСвид(Результат["ДокументНомер"]);
если не КонтрольСвид(СокрЛП(Результат["ДокументСерия"])) или резконтролясвид="" тогда
ТекстТ=ОшибкиПоЛюдям.ПолучитьТекст();
резконтролясвид="123456";
если Найти(ТекстТ,"Проблема СВИДЕТЕЛЬСТВА "+Стр.Ребенок.Контрагент.Код)=0 тогда
ОшибкиПоЛюдям.ДобавитьСтроку("Проблема СВИДЕТЕЛЬСТВА "+Стр.Ребенок.Контрагент.Код);
конецесли;
конецесли;
ЕГИССО1.ДобавитьСтроку("<ns5:BirthCertificate>");
ЕГИССО1.ДобавитьСтроку("<ns5:Series>"+АнглТоРусВсвид(СокрЛП(Результат["ДокументСерия"]))+"</ns5:Series>");
ЕГИССО1.ДобавитьСтроку("<ns5:Number>"+резконтролясвид+"</ns5:Number>");
ЕГИССО1.ДобавитьСтроку("<ns5:IssueDate>"+Формат(ПроверкаДанныхДата(Результат["ДокументДатаВыдачи"]),"ДФ=yyyy-MM-dd")+"+03:00</ns5:IssueDate>");
ЕГИССО1.ДобавитьСтроку("<ns5:Issuer>"+ПроверкаДанныхСтрока(Результат["ДокументКемВыдан"])+"</ns5:Issuer>");
ЕГИССО1.ДобавитьСтроку("</ns5:BirthCertificate>");
иначе
ЕГИССО1.ДобавитьСтроку("<ns3:OtherDocument>");
ЕГИССО1.ДобавитьСтроку("<ns5:Series>"+ПроверкаДанныхСтрока(Результат["ДокументСерия"])+"</ns5:Series>");
ЕГИССО1.ДобавитьСтроку("<ns5:Number>"+ПроверкаДанныхСтрока(Результат["ДокументНомер"])+"</ns5:Number>");
ЕГИССО1.ДобавитьСтроку("<ns5:IssueDate>"+Формат(ПроверкаДанныхДата(Результат["ДокументДатаВыдачи"]),"ДФ=yyyy-MM-dd")+"+03:00</ns5:IssueDate>");
ЕГИССО1.ДобавитьСтроку("<ns5:Issuer>"+ПроверкаДанныхСтрока(Результат["ДокументКемВыдан"])+"</ns5:Issuer>");
ЕГИССО1.ДобавитьСтроку("</ns3:OtherDocument>");
конецесли;
ЕГИССО1.ДобавитьСтроку("</ns3:IdentityDoc>");
//ФильтрПаспорт = Новый Структура("ФизическоеЛицо",Стр.Ребенок.Контрагент);
//Результат = РегистрыСведений.ГражданствоФизическихЛиц.ПолучитьПоследнее(ТекущаяДата(),ФильтрПаспорт);
//Сообщить(Результат["Страна"]); //Справочники.КлассификаторСтранМира.РОССИЯ
НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
УправлениеКонтактнойИнформацией.ПрочитатьКонтактнуюИнформацию(НаборЗаписей, Стр.Ребенок.Контрагент);
//Сообщить(НаборЗаписей[0].Представление);
Строки = СтрЗаменить(НаборЗаписей[0].Представление,",",Символы.ПС);
КоличествоСтрок = СтрЧислоСтрок(Строки);
деревня = "";
область = "";
район = "";
дом = "дом";
город = "";
село = "";
поселок = "";
квартира = "";
корпус = "";
улица = "ул";
индекс = "654321";
Если КоличествоСтрок>1 Тогда
Для А = 1 По КоличествоСтрок Цикл
подстрока1 = СтрПолучитьСтроку(Строки, А);
подстрока1 = СтрЗаменить(подстрока1,".",". ");
подподстроки=СтрЗаменить(подстрока1," ",Символы.ПС);
КоличествоПодПодСтрок = СтрЧислоСтрок(подподстроки);
Для Б = 1 По КоличествоПодПодСтрок Цикл
илимент = СтрПолучитьСтроку(подподстроки, Б);
Если илимент<>"" тогда
Если ЯвляетсяЧислом(илимент) И КоличествоПодПодСтрок=1 тогда
//Сообщить("Вроде индекс "+илимент);
индекс = илимент;
иначе
//Сообщить("Что то другое "+илимент);
Если илимент="обл" или илимент="обл." или илимент="область" тогда
//Сообщить("Нашли область "+подстрока1);
область = подстрока1;
конецесли;
Если илимент="р-н" или илимент="район" или илимент="р-н."или илимент="округ" тогда
//Сообщить("Нашли район "+подстрока1);
район = подстрока1;
конецесли;
Если илимент="г" или илимент="г." или илимент="гор"или илимент="гор." тогда
//Сообщить("Нашли город "+подстрока1);
город = подстрока1;
конецесли;
Если илимент="п" или илимент="пос." или илимент="п." или илимент="пос" или илимент="поселение"или илимент="гп"или илимент="сп."или илимент="рп" тогда
//Сообщить("Нашли поселок "+подстрока1);
поселок = подстрока1;
конецесли;
Если илимент="с" или илимент="село" или илимент="с." тогда
//Сообщить("Нашли село "+подстрока1);
село = подстрока1;
конецесли;
Если илимент="д" или илимент="деревня" или илимент="д." или илимент="дер" или илимент="дер." тогда
если деревня = "" и город = ""и поселок = "" тогда
//Сообщить("Нашли деревню "+подстрока1);
деревня = подстрока1;
иначе
//Сообщить("Нашли дом "+подстрока1);
дом = подстрока1;
конецесли;
конецесли;
Если илимент="ул" или илимент="улица" или илимент="ул." или илимент="проезд" или илимент= "пр-кт"или илимент= "проспект"или илимент= "мкр"или илимент= "квартал"или илимент= "шоссе" тогда
//Сообщить("Нашли улицу "+подстрока1);
улица = подстрока1;
конецесли;
Если илимент="дом" тогда
//Сообщить("Нашли дом "+подстрока1);
дом = подстрока1;
конецесли;
Если илимент="корпус" или илимент="корп." или илимент="корп" тогда
//Сообщить("Нашли корпус "+подстрока1);
корпстр = СтрЗаменить(подстрока1," ",Символы.ПС);
корпус = СтрПолучитьСтроку(корпстр,СтрЧислоСтрок(корпстр));
конецесли;
Если илимент="кв" или илимент="кв." или илимент="квартира" тогда
//Сообщить("Нашли квартиру "+подстрока1);
квстроки=СтрЗаменить(подстрока1," ",Символы.ПС);
квартира = СтрПолучитьСтроку(квстроки,СтрЧислоСтрок(квстроки));//подстрока1;
конецесли;
конецесли
конецесли
КонецЦикла
КонецЦикла;
Иначе
поселок=НаборЗаписей[0].Представление;
КонецЕсли;
//Сообщить(индекс+" "+область+" "+район+" "+город+" "+село+" "+поселок+" "+деревня+" "+улица+" "+дом+" "+корпус+" "+квартира);
если СтрДлина(индекс)<>6 тогда индекс = "654321"; конецесли;
если СтрДлина(дом)>10 тогда дом = Прав(дом,10); конецесли;
если СтрДлина(квартира)>10 тогда квартира = Прав(квартира,10); конецесли;
ЕГИССО1.ДобавитьСтроку("<ns3:Address>");
ЕГИССО1.ДобавитьСтроку("<ns3:PermanentResidence>");
ЕГИССО1.ДобавитьСтроку("<ns5:OKSMCode>643</ns5:OKSMCode>");
ЕГИССО1.ДобавитьСтроку("<ns5:PostIndex>"+индекс+"</ns5:PostIndex>");
ЕГИССО1.ДобавитьСтроку("<ns5:Region>"+область+"</ns5:Region>");
ЕГИССО1.ДобавитьСтроку("<ns5:District>"+район+"</ns5:District>");
ЕГИССО1.ДобавитьСтроку("<ns5:City>"+город+село+поселок+деревня+"</ns5:City>");
ЕГИССО1.ДобавитьСтроку("<ns5:Street>"+улица+"</ns5:Street>");
ЕГИССО1.ДобавитьСтроку("<ns5:House>"+дом+"</ns5:House>");
ЕГИССО1.ДобавитьСтроку("<ns5:Housing>"+СокрЛП(корпус)+"</ns5:Housing>");
ЕГИССО1.ДобавитьСтроку("<ns5:Apartment>"+квартира+"</ns5:Apartment>");
ЕГИССО1.ДобавитьСтроку("</ns3:PermanentResidence>");
ЕГИССО1.ДобавитьСтроку("</ns3:Address>");
ЕГИССО1.ДобавитьСтроку("</ns3:prsnInfo>");
если ПолучитьПол(Стр.Ребенок.Контрагент.Отчество)="" тогда
если Строка(РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Ребенок.Контрагент, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.Пол)).ЗначениеХарактеристики)="Мужской" тогда
ЕГИССО1.ДобавитьСтроку("<ns6:kinshipTypeCode>0411011</ns6:kinshipTypeCode>");
иначе
ЕГИССО1.ДобавитьСтроку("<ns6:kinshipTypeCode>0421011</ns6:kinshipTypeCode>");
конецесли;
иначе
если ПолучитьПол(Стр.Ребенок.Контрагент.Отчество)="Male" тогда
ЕГИССО1.ДобавитьСтроку("<ns6:kinshipTypeCode>0411011</ns6:kinshipTypeCode>");
иначе
ЕГИССО1.ДобавитьСтроку("<ns6:kinshipTypeCode>0421011</ns6:kinshipTypeCode>");
конецесли;
конецесли;
ЕГИССО1.ДобавитьСтроку("</ns6:basisPerson>");
ЕГИССО1.ДобавитьСтроку("</ns2:reasonPersons>");
ЕГИССО1.ДобавитьСтроку("<ns2:lmszId>46a9d517-b941-43aa-8c4e-b6d3708f7b33</ns2:lmszId>");
ЕГИССО1.ДобавитьСтроку("<ns2:categoryId>e6fdadda-4e93-4f8d-b169-45081d332215</ns2:categoryId>");
ЕГИССО1.ДобавитьСтроку("<ns2:decisionDate>"+Формат(НачалоМесяца(Док.Дата),"ДФ=yyyy-MM-dd")+"+03:00</ns2:decisionDate>");
ЕГИССО1.ДобавитьСтроку("<ns2:dateStart>"+Формат(НачалоМесяца(Док.Дата),"ДФ=yyyy-MM-dd")+"+03:00</ns2:dateStart>");
ЕГИССО1.ДобавитьСтроку("<ns2:dateFinish>"+Формат(КонецМесяца(Док.Дата),"ДФ=yyyy-MM-dd")+"+03:00</ns2:dateFinish>");
ЕГИССО1.ДобавитьСтроку("<ns2:documents>");
ЕГИССО1.ДобавитьСтроку("<ns2:document>");
ЕГИССО1.ДобавитьСтроку("<ns2:title>"+ДокПраво+"</ns2:title>");
ЕГИССО1.ДобавитьСтроку("<ns2:series>"+СерияДок+"</ns2:series>");
ЕГИССО1.ДобавитьСтроку("<ns2:number>"+НомерДок+"</ns2:number>");
ЕГИССО1.ДобавитьСтроку("<ns2:issueDate>"+ДатаДок+"+03:00</ns2:issueDate>");
ЕГИССО1.ДобавитьСтроку("<ns2:authority>"+ДокОрган+"</ns2:authority>");
ЕГИССО1.ДобавитьСтроку("<ns2:startDate>"+ДатаДок+"+03:00</ns2:startDate>");
ЕГИССО1.ДобавитьСтроку("</ns2:document>");
ЕГИССО1.ДобавитьСтроку("</ns2:documents>");
ЕГИССО1.ДобавитьСтроку("<ns2:needsCriteria>");
ЕГИССО1.ДобавитьСтроку("<ns2:usingSign>false</ns2:usingSign>");
ЕГИССО1.ДобавитьСтроку("</ns2:needsCriteria>");
ЕГИССО1.ДобавитьСтроку("<ns2:assignmentInfo>");
ЕГИССО1.ДобавитьСтроку("<ns2:exemptionForm>");
ЕГИССО1.ДобавитьСтроку("<ns2:amount>"+Стр.ПроцентКомпенсации+"</ns2:amount>");
ЕГИССО1.ДобавитьСтроку("<ns2:measuryCode>05</ns2:measuryCode>");
ЕГИССО1.ДобавитьСтроку("<ns2:monetization>true</ns2:monetization>");
ЕГИССО1.ДобавитьСтроку("<ns2:comment>выгрузка из 1С 8.3 БГУ</ns2:comment>");
ЕГИССО1.ДобавитьСтроку("<ns2:equivalentAmount>"+СтрЗаменить(сум,",",".")+"</ns2:equivalentAmount>");
ЕГИССО1.ДобавитьСтроку("</ns2:exemptionForm>");
ЕГИССО1.ДобавитьСтроку("</ns2:assignmentInfo>");
гуид = Новый УникальныйИдентификатор();
ЕГИССО1.ДобавитьСтроку("<uuid>"+гуид+"</uuid>");
ЕГИССО1.ДобавитьСтроку("</fact>");
//Сообщить("---------------------------------------------");
ЧислоСтрок1=ЧислоСтрок1+1;
Сообщить(ЧислоСтрок1);
иначе
ТекстТ = ОшибкиПоЛюдям.ПолучитьТекст();
если Найти(ТекстТ,Стр.Плательщик.Код)=0 и Найти(ТекстТ,Стр.Ребенок.Контрагент.Код)=0 тогда
если СтраховойНомерПФРСоответствуетТребованиям(Стр.Плательщик.СтраховойНомерПФР)=Ложь тогда
ОшибкиПоЛюдям.ДобавитьСтроку("Проблема снилса плательщика "+Стр.Плательщик.СтраховойНомерПФР+" "+Стр.Плательщик.Код+" "+Стр.Плательщик);
конецесли;
если СтраховойНомерПФРСоответствуетТребованиям(Стр.Ребенок.Контрагент.СтраховойНомерПФР)=Ложь тогда
ОшибкиПоЛюдям.ДобавитьСтроку("Проблема снилса ребенка "+Стр.Ребенок.Контрагент.Код+" "+Стр.Ребенок.Контрагент.СтраховойНомерПФР+" "+Стр.Ребенок);
конецесли;
конецесли;
конецесли;
иначе
//ошибка первичных данных плательщика или ребенка
ТекстТ = ОшибкиПоЛюдям.ПолучитьТекст();
если Найти(ТекстТ,"Ошибка пер. данных плательщика "+Стр.Плательщик.Код)=0 и Найти(ТекстТ,"Ошибка пер. данных ребенка "+Стр.Ребенок.Контрагент.Код)=0 тогда
если не к1 тогда
ОшибкиПоЛюдям.ДобавитьСтроку("Ошибка пер. данных плательщика "+Стр.Плательщик.Код+" "+Стр.Плательщик.Фамилия+"-"+Стр.Плательщик.Имя+"-"+Стр.Плательщик.Отчество+" "+РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Плательщик, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.ДатаРождения)).ЗначениеХарактеристики);
конецесли;
если не к2 тогда
ОшибкиПоЛюдям.ДобавитьСтроку("Ошибка пер. данных ребенка "+Стр.Ребенок.Контрагент.Код+" "+Стр.Ребенок.Контрагент.Фамилия+"-"+Стр.Ребенок.Контрагент.Имя+"-"+Стр.Ребенок.Контрагент.Отчество+" "+РегистрыСведений.ХарактеристикиКонтрагентов.Получить(Новый Структура("Контрагент, ВидХарактеристики", Стр.Ребенок.Контрагент, ПланыВидовХарактеристик.ВидыХарактеристикКонтрагентов.ДатаРождения)).ЗначениеХарактеристики);
конецесли;
конецесли;
конецесли;
конецесли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
ЕГИССО1.ДобавитьСтроку("</elements>");
ЕГИССО1.ДобавитьСтроку("</package>");
ЕГИССО1.ДобавитьСтроку("</ns7:data>");
ЕГИССО1.Записать(Файл+"1057774318-10.06.S-"+Формат(ТекущаяДата(),"ДФ=yyyy-MM-ddTчч-мм-сс")+".xml");
ОшибкиПоЛюдям.Записать(Файл+"ошибки-10.06.S-"+Формат(ТекущаяДата(),"ДФ=yyyy-MM-ddTчч-мм-сс")+".txt");
КонецПроцедуры
Процедура ПриОткрытии()
// Вставить содержимое обработчика.
ПолеВвода1 = "0398.000001";
ДокОрган = "Государственная Дума Российской Федерации";
ДатаДок = "2012-12-29";
ДокПраво = "Закон Об образовании в Российской Федерации";
НомерДок = "273-ФЗ";
КонецПроцедуры
Пожелания по развитию продукта принимаются через комментарии к публикации.
Если пожелания будут массово востребованы среди пользователей продукта, мы их реализуем в продукте для всех.
Фоновая работа реализована через БСП, требуется регистрация обработки стандартным способом через администрирование в дополнительных отчётах и обработках.
После регистрации запуск возможен любым удобным способом.
Итог работы:
Вид протокола:
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия государственного учреждения, релизы 3.1.22.80