В начало

Обмен данными через HTTP-сервис

 

Рис. HTTP-сервис со стороны бухгалтерской базы

 

Листинг. Содержимое модуля HTTP-сервиса

Функция PingGET(Запрос)                           

             //Строка для браузера

             //http://localhost:8080/bp_reu6_test/hs/DZ/ping

             Ответ = Новый HTTPСервисОтвет(200);

             Ответ.УстановитьТелоИзСтроки("OK");

             Возврат Ответ;

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

 

 

Функция ПолучитьДокиGET(Запрос)                                    

            //Строка для браузера:

            //http://localhost:8080/bp_reu6_test/hs/DZFL/doki/20240125/20240126

            ДатаНачала = Дата(Запрос.ПараметрыURL["DataNachala"]);

            ДатаОкончания = Дата(Запрос.ПараметрыURL["DataOkonchaniya"]);

           

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

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

                        "ВЫБРАТЬ

                        |           ПоступлениеНаРасчетныйСчет.Ссылка КАК Ссылка,

                        |           ПоступлениеНаРасчетныйСчет.Дата КАК Дата,

                        |           ПоступлениеНаРасчетныйСчет.Номер КАК Номер,

                        |           ПоступлениеНаРасчетныйСчет.ВидОперации КАК ВидОперации,

                        |           ПоступлениеНаРасчетныйСчет.ДатаВходящегоДокумента КАК ДатаВходящегоДокумента,

                        |           ПоступлениеНаРасчетныйСчет.ДЗФЛ_ДатаСП КАК ДЗФЛ_ДатаСП,

                        |           ПоступлениеНаРасчетныйСчет.ДЗФЛ_НомерСП КАК ДЗФЛ_НомерСП,

                        |           ПоступлениеНаРасчетныйСчет.ДЗФЛ_НомерСудебногоУчастка КАК ДЗФЛ_НомерСудебногоУчастка,

                        |           ПоступлениеНаРасчетныйСчет.ДоговорКонтрагента КАК ДоговорКонтрагента,

                        |           ПоступлениеНаРасчетныйСчет.Комментарий КАК Комментарий,

                        |           ПоступлениеНаРасчетныйСчет.НазначениеПлатежа КАК НазначениеПлатежа,

                        |           ПоступлениеНаРасчетныйСчет.НомерВходящегоДокумента КАК НомерВходящегоДокумента,

                        |           ПоступлениеНаРасчетныйСчет.Организация КАК Организация,

                        |           ПоступлениеНаРасчетныйСчет.Ответственный КАК Ответственный,

                        |           ПоступлениеНаРасчетныйСчет.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредств,

                        |           ПоступлениеНаРасчетныйСчет.СуммаДокумента КАК СуммаДокумента,

                        |           ПоступлениеНаРасчетныйСчет.СчетБанк КАК СчетБанк,

                        |           ПоступлениеНаРасчетныйСчет.СчетОрганизации КАК СчетОрганизации

                        |ИЗ

                        |           Документ.ПоступлениеНаРасчетныйСчет КАК ПоступлениеНаРасчетныйСчет

                        |ГДЕ

                        |           ПоступлениеНаРасчетныйСчет.Дата >= &ДатаНачала

                        |           И ПоступлениеНаРасчетныйСчет.Дата <= &ДатаОкончания";

           

            Запрос2.УстановитьПараметр("ДатаНачала", ДатаНачала);

            Запрос2.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончания));

           

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

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

           

    МассивСтруктур = Новый Массив;

           

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

                         струкДок = Новый Структура;

                         

                         струкДок.Вставить("Дата", Выборка.Дата);

                         струкДок.Вставить("Номер", Выборка.Номер);

                         струкДок.Вставить("ДЗФЛ_ДатаСП", Выборка.ДЗФЛ_ДатаСП);

                         струкДок.Вставить("ДЗФЛ_НомерСП", Выборка.ДЗФЛ_НомерСП);

                         струкДок.Вставить("ДЗФЛ_НомерСудебногоУчастка", Выборка.ДЗФЛ_НомерСудебногоУчастка);

                         струкДок.Вставить("СуммаДокумента", Выборка.СуммаДокумента);

                         

                         МассивСтруктур.Добавить(струкДок);

    КонецЦикла;

           

           

            ЗаписьJSON = Новый ЗаписьJSON;

            ЗаписьJSON.УстановитьСтроку();

            ЗаписатьJSON(ЗаписьJSON, МассивСтруктур);

            СтрокаДляОтвета = ЗаписьJSON.Закрыть();

                   

            Ответ = Новый HTTPСервисОтвет(200);   

            Ответ.Заголовки.Вставить("Content-type", "application/json;  charset=utf-8");

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

           

            Возврат Ответ;

           

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

 

 

 

            Для приема данных в базе-приемнике можно создать регистр сведений.     

Рис. Непериодический независимый регистр сведений в базе CRM

 

Листинг. Модуль внешней обработки

&НаСервере

Процедура ЗаписатьРезультатОбменаВРегистр(Знач МассивСтатистики)

           

            Для Каждого Эл Из МассивСтатистики Цикл

                                              

                        Если НЕ ЗначениеЗаполнено(Эл.Номер) ИЛИ

                                    НЕ ЗначениеЗаполнено(Эл.Дата) Тогда

                                   Продолжить;

                        КонецЕсли;

                       

                        МЗ = РегистрыСведений.РезультатОбменаЧерезСервисДЗФЛ.СоздатьМенеджерЗаписи();

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

                        МЗ.Дата = XMLЗначение(Тип("Дата"), Эл.Дата);

        МЗ.Прочитать();

                       

                        Если НЕ МЗ.Выбран() Тогда//Нет такой записи

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

                                   МЗ.Дата = XMLЗначение(Тип("Дата"), Эл.Дата);

                                   МЗ.СуммаДокумента = Эл.СуммаДокумента;

                                   МЗ.ДЗФЛ_ДатаСП = XMLЗначение(Тип("Дата"), Эл.ДЗФЛ_ДатаСП);

                                   МЗ.ДЗФЛ_НомерСП = Эл.ДЗФЛ_НомерСП;

                                   МЗ.ДЗФЛ_НомерСудебногоУчастка = Эл.ДЗФЛ_НомерСудебногоУчастка;

                                  

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

                        Иначе

                                   Если МЗ.СуммаДокумента <> Эл.СуммаДокумента ИЛИ//Не все данные совпадают

                                               МЗ.ДЗФЛ_ДатаСП <> XMLЗначение(Тип("Дата"), Эл.ДЗФЛ_ДатаСП) ИЛИ

                                               МЗ.ДЗФЛ_НомерСП <> Эл.ДЗФЛ_НомерСП ИЛИ

                                               МЗ.ДЗФЛ_НомерСудебногоУчастка <> Эл.ДЗФЛ_НомерСудебногоУчастка Тогда

                                              

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

                                               МЗ.Дата = XMLЗначение(Тип("Дата"), Эл.Дата);

                                               МЗ.СуммаДокумента = Эл.СуммаДокумента;               

                                               МЗ.ДЗФЛ_ДатаСП = XMLЗначение(Тип("Дата"), Эл.ДЗФЛ_ДатаСП);

                                               МЗ.ДЗФЛ_НомерСП = Эл.ДЗФЛ_НомерСП;

                                               МЗ.ДЗФЛ_НомерСудебногоУчастка = Эл.ДЗФЛ_НомерСудебногоУчастка;

 

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

                                   Иначе

                                               Продолжить;//Все данные совпадают      

                                   КонецЕсли;              

                        КонецЕсли;                          

            КонецЦикла;            

           

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

 

&НаСервере

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

 

            Адрес = "10.0.0.14";

            Соединение = Новый HTTPСоединение(Адрес,8080,,,,30,Ложь);  

 

            ДатаНачала = Дата("20240125");//Формат(ТекущаяДата() - 86400, "ДФ=гггг-ММ-ддTЧЧ:мм:сс+ЧЧ:мм");

            ДатаОкончания = Дата("20240126");//Формат(ТекущаяДата(), "ДФ=гггг-ММ-ддTЧЧ:мм:сс+ЧЧ:мм");

 

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

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

                       

            Запрос = Новый HTTPЗапрос("/bp_reu6_test/hs/DZFL/doki/" + ДатаНачала + "/" + ДатаОкончания, Заголовки);

           

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

           

                                              

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

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

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

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

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

                       

        ЗаписатьРезультатОбменаВРегистр(РезСтруктура);

            Иначе

            КонецЕсли;

           

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

 

 

&НаКлиенте

Процедура Отладка(Команда)

            ДляРегламентногоЗадания();

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

 

 

Рис. Тестовые документы в бухгалтерской базе БП

 

Рис. Перенос данных тестовых документов из базы БП в базу CRM


Рейтинг@Mail.ru