В начало

Загрузка ОСС с ФТП

 

            Нужно загрузить общие собрания собственников из ФТП папки в формате JSON.

 

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

 

Процедура ДобавитьОССвРегистр(Знач ссАдрес, Знач ДатаСоставления, Знач НомерПротокола, Знач СсылкаНаФайл)

 

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

                       

                        МЗ = РегистрыСведений.ОбщиеСобранияСобственников.СоздатьМенеджерЗаписи();

                       

                        //Измерения

                        МЗ.Адрес = ссАдрес;

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

                       

                        //Ресурсы

                        МЗ.ДатаСоставления = ДатаСоставления;

                        МЗ.НомерПротокола = НомерПротокола;

                        МЗ.СсылкаНаФайл = СсылкаНаФайл;

                       

                        Попытка

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

                        Исключение

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

            КонецЕсли;

           

КонецПроцедуры

 

&НаСервере

Функция ПолучитьКодФИАС(Знач АпиКлюч, Знач СекретныйКлюч, Знач АдресДома)

 

            Соединение = Новый HTTPСоединение("cleaner.dadata.ru",443,,, ,30, Новый ЗащищенноеСоединениеOpenSSL);  

                       

            Заголовки = Новый Соответствие;

    Заголовки.Вставить("Content-Type" , "application/json");

    Заголовки.Вставить("Authorization", "Token " + АпиКлюч);

    Заголовки.Вставить("X-Secret", СекретныйКлюч);

           

            Запрос = Новый HTTPЗапрос("api/v1/clean/address", Заголовки);

           

           

            ТелоЗапроса = "[ """ + АдресДома + """ ]";

           

            Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8);

           

            Результат = Соединение.ВызватьHTTPМетод("POST", Запрос);                      

                       

            Если Результат.КодСостояния = 200 Тогда

                       

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

                        ЧтениеJSON.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));

                        РезСтруктура = ПрочитатьJSON(ЧтениеJSON);

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

                       

                        Если ЗначениеЗаполнено(РезСтруктура) Тогда

                                   Возврат РезСтруктура[0].fias_id;

                        Иначе

                                   Возврат "";

                        КонецЕсли;

                       

            Иначе

                        Возврат "";

            КонецЕсли;   

 

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

 

&НаСервере

Функция АдресПоФИАС(Знач КодФИАС)

 

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

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

                        "ВЫБРАТЬ

                        |           F1_Дома.Ссылка КАК Ссылка

                        |ИЗ

                        |           Справочник.F1_Дома КАК F1_Дома

                        |ГДЕ

                        |           F1_Дома.КодДомаПоФИАС = &КодФИАС";

           

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

           

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

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

           

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

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

            Иначе

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

            КонецЕсли;

           

КонецФункции//АдресПоФИАС

 

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

 

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

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

            Попытка

                        мСобраний = ПрочитатьJSON(ЧтениеJSON);

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

            Исключение

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

           

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

                        Для Каждого Эл Из мСобраний Цикл

                                  

                                   Если СтрНайти(Эл.subject, "Общее собрание собственников") <> 0 И

                                                ЗначениеЗаполнено(Эл.file) И

                                                СтрНайти(Эл.file, "null") = 0 Тогда

                                              

                                               Для Каждого ТекАдрес Из Эл.address Цикл

                                                           ДатаСоздания = XMLЗначение(Тип("Дата"), Эл.date_created);

                                                           НомерПротокола = Эл.protocolNumber;

                                                           СсылкаНаФайл = Эл.file;

                                                          

                                                           Если ЗначениеЗаполнено(ТекАдрес.address_id.title) Тогда

                                                                       АпиКей = "123abc";

                                                                       СекретныйКлюч = "456def";

                                                                      

                                                                       КодФИАС = ПолучитьКодФИАС(АпиКей, СекретныйКлюч, ТекАдрес.address_id.title);

                                                                       ссАдрес = АдресПоФИАС(КодФИАС);

                                                                      

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

                                                                       ДобавитьОССвРегистр(ссАдрес, ДатаСоздания, НомерПротокола, СсылкаНаФайл);

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

                                                                      

                                                           КонецЕсли;

                                                          

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

                                              

                                   КонецЕсли;

                                  

                        КонецЦикла;//мСобраний  

            КонецЕсли;

           

КонецПроцедуры//ПрочитатьФайлСОСС

&НаСервере

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

           

            Попытка

                        Если SSL Тогда

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

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

                        Иначе

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

                        КонецЕсли;

            Исключение

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

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

 

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

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

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

 

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

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

            КонецЕсли;

 

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

 

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

                       

                        Попытка                              

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

                                  

                                   ИначеЕсли НазваниеЗагрузки = "Загрузка ОСС"  Тогда

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

                                              

                                   Иначе

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

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

                                   КонецЕсли;

                                  

                        Исключение

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

 

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

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

 

            КонецЦикла;

 

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

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

&НаСервере    

Функция ПрочитатьНастройки(Знач НазваниеЗагрузки)

                       

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

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

                        "ВЫБРАТЬ

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

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

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

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

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

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

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

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

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

                        |ИЗ

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

                        |ГДЕ

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

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

 

            Запрос.Параметры.Вставить("НазваниеЗагрузки", НазваниеЗагрузки);

           

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

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

                       

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

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

            КонецЦикла;

           

КонецФункции//ПрочитатьНастройки


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

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

            ПрочитатьНастройки("Загрузка ОСС");

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