В начало

Загрузка с ФТП в формате JSON

 

Листинг. Общий модуль регламентного задания

&НаСервере

Функция ПолучитьСсылкуНаФизЛицо(Знач ФИО, Знач ЛС)

           

            Запрос = Новый Запрос;

            Запрос.Текст =

                        "ВЫБРАТЬ

                        |           Партнеры.УК_ФизЛицо КАК Ссылка

                        |ИЗ

                        |           Справочник.Партнеры КАК Партнеры

                        |ГДЕ

                        |           Партнеры.УК_ЛицевойСчетЕИРЦ = &ЛС

                        |           И Партнеры.УК_ФизЛицо.Наименование = &ФИО";

           

            Запрос.УстановитьПараметр("ЛС", ЛС);

            Запрос.УстановитьПараметр("ФИО", ФИО);

           

            Результат = Запрос.Выполнить();

            Выборка = Результат.Выбрать();

           

            Если  Выборка.Следующий() Тогда

                        Возврат Выборка.Ссылка;

            Иначе

                        Возврат Неопределено;

            КонецЕсли;

           

КонецФункции//ПолучитьСсылкуНаФизЛицо

 

Функция ДатаИзСтрокиГГГГММДД(Знач ДатаСтрока)   

           

            Если ДатаСтрока = "" Тогда

                        Возврат Дата(1,1,1);

            КонецЕсли;

 

            МассивДат = СтрРазделить(ДатаСтрока, "-");

           

            ДатаПреобразованная = Дата(1,1,1);

           

            Результат = Дата(1,1,1);

           

            Если МассивДат.Количество()=3 Тогда

                       

                        Попытка

                                  

                                   Год      = Число(МассивДат[0]);

                                   Месяц             = Число(МассивДат[1]);

                                   День   = Число(МассивДат[2]);

                                  

                                   Если Год < 3999 Тогда

                                              

                                               //   для записей вида 01.02.21

                                               если Год < 100 Тогда

                                                           Год  = Год + 2000;   

                                               КонецЕсли;

                                              

                                               ДатаПреобразованная = Дата(Год,  Месяц, День);

                                              

                                   КонецЕсли;

                                  

                        исключение

                                  

                                   Возврат Результат;

                                  

                        КонецПопытки;

                       

                        Результат = ДатаПреобразованная;

                       

            КонецЕсли;

           

            Возврат Результат;   

 

КонецФункции

 

 

Процедура ПрочитатьJSONфайл(ПолноеИмяФайла)

 

            ЧтениеJSON = Новый ЧтениеJSON;

            ЧтениеJSON.ОткрытьФайл(ПолноеИмяФайла);

            Попытка

                        мПаспорт = ПрочитатьJSON(ЧтениеJSON);

                        ЧтениеJSON.Закрыть();                                         

            Исключение

            КонецПопытки;

           

            Если ЗначениеЗаполнено(мПаспорт) Тогда

                        Для Каждого Эл Из мПаспорт Цикл

                                   ФИО = СокрЛП(Эл.fullName);

                                   мЛС = Эл.residentIds;

                                  

                                   Если ЗначениеЗаполнено(мЛС) Тогда

                                               Для Каждого ЛС Из мЛС Цикл

                                                           ссФизЛицо = ПолучитьСсылкуНаФизЛицо(ФИО, ЛС);

                    дДатаВыдачи = ДатаИзСтрокиГГГГММДД(Эл.issueDate);

                                                          

                                                           //========================

                                                           //Добавить документ в РС

                                                           //========================

                                                           Если ЗначениеЗаполнено(ссФизЛицо) Тогда

                                                                      

                                                                       МЗ = РегистрыСведений.ДокументыФизическихЛиц.СоздатьМенеджерЗаписи();

                                                                      

                                                                       МЗ.Физлицо = ссФизЛицо;//Измерение

                                                                       МЗ.ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ;//Измерение                                                               

                                                                       МЗ.Период = ТекущаяДата();

                                                                      

                                                                       Если ЗначениеЗаполнено(дДатаВыдачи) Тогда

                                                                                  МЗ.ДатаВыдачи = дДатаВыдачи;//Дата

                                                                       КонецЕсли;

                                                                      

                                                                       МЗ.КемВыдан =  Эл.issuedBy;

                                                                       МЗ.КодПодразделения = Эл.unitCode;

                                                                       МЗ.Номер = Эл.number;

                                                                       МЗ.Серия = Эл.series;                  

                                                                       МЗ.УК_ИсточникДанных = Перечисления.УК_ИсточникиДанных.Недолжник;

                                                                       МЗ.ЯвляетсяДокументомУдостоверяющимЛичность = Истина;

                                                                       МЗ.СсылкаНаСкан = Эл.image;

                                                                      

                                                                       Попытка

                                                                                  МЗ.Записать();         

                                                                       Исключение

                                                                       КонецПопытки;

                                                           КонецЕсли;

                                                           //------------------------

                                                          

                                               КонецЦикла;//мЛС

                                   КонецЕсли;

                                  

                        КонецЦикла;//мПаспорт     

            КонецЕсли;

           

КонецПроцедуры//ПрочитатьJSONфайл

 

&НаСервере

Функция ЗагрузитьФайлыСФТП(Каталог, ИмяФайла, Сервер, Порт, Пользователь, Пароль, SSL)

           

            Попытка

                        Если SSL Тогда

                                   ЗащСоед = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);

                                   FTPСоединение = Новый FTPСоединение(Сервер, Порт, Пользователь, Пароль, Неопределено, Истина, 0, ЗащСоед);

                        Иначе

                                   FTPСоединение = Новый FTPСоединение(Сервер, Порт, Пользователь, Пароль, Неопределено, Истина, 0);

                        КонецЕсли;

            Исключение

                        Возврат Неопределено;

            КонецПопытки;      

 

            FTPСоединение.УстановитьТекущийКаталог("/");          

            КаталогТемп = КаталогВременныхФайлов();    

            МассивФайлов =  FTPСоединение.НайтиФайлы(Каталог, ИмяФайла, Ложь);

 

            Если МассивФайлов.Количество() = 0 Тогда     

                        Возврат Неопределено;                  

            КонецЕсли;

 

            Для Каждого Фл из МассивФайлов Цикл

 

                        ТемпФайл = КаталогВременныхФайлов() + Фл.Имя;

                       

                        Попытка                              

                                   FTPСоединение.Получить(Фл.ПолноеИмя, ТемпФайл);

                                   ПрочитатьJSONфайл(ТемпФайл);

                        Исключение

                        КонецПопытки;

 

                        УдалитьФайлы(ТемпФайл);//Удаляем временный файл

                        FTPСоединение.Удалить(Фл.ПолноеИмя);//Удаляем файл на ФТП

 

            КонецЦикла;

 

            FTPСоединение = Неопределено;

КонецФункции//ЗагрузитьФайлыСФТП

                       

&НаСервере    

Функция ПрочитатьНастройки()

                       

            Запрос = Новый Запрос;

            Запрос.Текст =

                        "ВЫБРАТЬ

                        |           НастройкиДляЗагрузкиСФТП.Ссылка КАК Ссылка,

                        |           НастройкиДляЗагрузкиСФТП.ПометкаУдаления КАК ПометкаУдаления,

                        |           НастройкиДляЗагрузкиСФТП.Наименование КАК Наименование,

                        |           НастройкиДляЗагрузкиСФТП.Сервер КАК Сервер,

                        |           НастройкиДляЗагрузкиСФТП.Порт КАК Порт,

                        |           НастройкиДляЗагрузкиСФТП.Логин КАК Логин,

                        |           НастройкиДляЗагрузкиСФТП.Пароль КАК Пароль,

                        |           НастройкиДляЗагрузкиСФТП.Каталог КАК Каталог,

                        |           НастройкиДляЗагрузкиСФТП.SSL КАК SSL

                        |ИЗ

                        |           Справочник.НастройкиДляЗагрузкиСФТП КАК НастройкиДляЗагрузкиСФТП

                        |ГДЕ

                        |           НастройкиДляЗагрузкиСФТП.ПометкаУдаления = ЛОЖЬ

                        |           И НастройкиДляЗагрузкиСФТП.Наименование = ""Загрузка паспортов""";

 

           

            Результат = Запрос.Выполнить();  

            Выборка = Результат.Выбрать();

                       

            Пока Выборка.Следующий() Цикл

                        ЗагрузитьФайлыСФТП(Выборка.Каталог, "*.json", Выборка.Сервер, Выборка.Порт, Выборка.Логин, Выборка.Пароль, Выборка.SSL);

            КонецЦикла;

           

КонецФункции

 

 

////////////////////////////////////////////

Функция ДляРегламентногоЗадания() Экспорт

            ПрочитатьНастройки();

КонецФункции