В начало

Отчет «Сверка документа ПРС»

 

            Нужно сверить поля документа «Поступление на расчетный счет» из базы «1С БП» с данными регистра сведений «РезультатОбменаЧерезСервисДЗФЛ» из базы «1С CRM». Данные в регистр сведений «Результат обмена через сервис ДЗФЗ» попадают в результате обмена.

 

Рис. Регистр сведений в базе «1С CRM»

 

            Регистр сведений из базы «1С CRM» имеет ряд реквизитов, которые можно сравнить с реквизитами документа «Поступление на расчетный счет» из базы «1С БП»:

1) Дата документа (Тип «Дата»)

2) Номер документа (Тип «Строка, 11»)

3) Сумма документа (Тип «Число»)

4) Дата СП (Тип «Дата»)

5) Номер СП (Тип «Строка, 50»)

6) Номер судебного участка (Тип «Строка, 11»)

7) Организация (Тип «Строка, 50»)

8) Проведен (Тип «Булево»)

 

Рис. Несколько записей в регистре сведений для сравнения с базой «1С БП»

 

            Для сравнения данных документа «ПРС» и данных из регистра сведений создадим внешний отчет. Отчет будем запускать из базы «1С CRM».

            Данные документа «ПРС» будем тянуть из базы «БП» через HTTP-сервис.

            Далее переходим в модуль объекта внешнего отчета и в обработчике «При компановке результата» будем формировать вывод отчета.

            На основной схеме компоновки данных создаем набор данных типа «объект», т.к. не все данные у нас находятся в базе «CRM».

Рис. Закладка «Наборы данных» в СКД

 

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

                                     

Функция ТЗизБП()

           

            Выборка = Справочники.ПараметрыПодключенияКСервисуДЗФЛ.Выбрать();

           

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

                        Если Выборка.ПометкаУдаления = Ложь Тогда

                                   Соединение = Новый HTTPСоединение(Выборка.АдресПубликации, Выборка.Порт, Выборка.Логин, Выборка.Пароль,,30,,);

                                  

                                   ДатаНачала = НачалоГода(ТекущаяДата());

                                   ДатаОкончания = ТекущаяДата();

                                  

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

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

                                                                      

                                   Запрос = Новый HTTPЗапрос("/" + Выборка.Наименование + "/hs/DZFL/tz/" + ДатаНачала + "/" + ДатаОкончания, Заголовки);

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

                                  

                                  

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

                                               ТЗ = ЗначениеИзСтрокиВнутр(Результат2.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));

                                   Иначе 

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

                                   КонецЕсли;                                                             

                        КонецЕсли;

            КонецЦикла;

           

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

                        Возврат ТЗ;

            Иначе

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

            КонецЕсли;   

           

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

 

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

 

            СтандартнаяОбработка = Ложь;  

           

            ДатаДокументаНачало = Дата(1,1,1);

            ДатаДокументаКонец = Дата(1,1,1);

                                  

            СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");  

            Настройки = КомпоновщикНастроек.ПолучитьНастройки();    

           

            ПараметрКомпоновкиДанныхДатаДокументаНачало = Новый ПараметрКомпоновкиДанных("ДатаДокументаНачало");

            ПараметрКомпоновкиДанныхДатаДокументаКонец = Новый ПараметрКомпоновкиДанных("ДатаДокументаКонец");

           

            Для Каждого СтрЭлемент из КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл 

                       

                        //Параметры

                        Если СтрЭлемент.Использование = Истина И

                                    Тип(СтрЭлемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных")  Тогда

                                   Если СтрЭлемент.Параметр = ПараметрКомпоновкиДанныхДатаДокументаНачало Тогда

                                               ДатаДокументаНачало = СтрЭлемент.Значение.Дата;   

                                   ИначеЕсли СтрЭлемент.Параметр = ПараметрКомпоновкиДанныхДатаДокументаКонец Тогда

                                               ДатаДокументаКонец = СтрЭлемент.Значение.Дата;

                                   КонецЕсли;                                                             

                        КонецЕсли;     

                       

                        //Отборы

                        Если  СтрЭлемент.Использование = Истина И   

                                     Тип(СтрЭлемент) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда    

                                     ыыы=1;

                        КонецЕсли;              

            КонецЦикла;  

           

           

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

           

            МойЗапрос.Текст = "ВЫБРАТЬ

                              |     1 КАК ДокЕсть,

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

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

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

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

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

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

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

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

                              |ПОМЕСТИТЬ втБП

                              |ИЗ

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

                              |ГДЕ

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

                              |     И ПоступлениеНаРасчетныйСчет.ДатаДокумента <= &ДатаДокументаКонец

                              |;

                              |

                              |////////////////////////////////////////////////////////////////////////////////

                              |ВЫБРАТЬ

                              |     1 КАК ДокЕсть,

                              |     РезультатОбменаЧерезСервисДЗФЛ.ДатаДокумента КАК ДатаДокумента,

                              |     РезультатОбменаЧерезСервисДЗФЛ.НомерДокумента КАК НомерДокумента,

                              |     РезультатОбменаЧерезСервисДЗФЛ.СуммаДокумента КАК СуммаДокумента,

                              |     РезультатОбменаЧерезСервисДЗФЛ.НомерСП КАК НомерСП,

                              |     РезультатОбменаЧерезСервисДЗФЛ.ДатаСП КАК ДатаСП,

                              |     РезультатОбменаЧерезСервисДЗФЛ.НомерСудебногоУчастка КАК НомерСудебногоУчастка,

                              |     РезультатОбменаЧерезСервисДЗФЛ.Проведен КАК Проведен,

                              |     РезультатОбменаЧерезСервисДЗФЛ.Организация КАК Организация

                              |ПОМЕСТИТЬ втДЗФЗ

                              |ИЗ

                              |     РегистрСведений.РезультатОбменаЧерезСервисДЗФЛ КАК РезультатОбменаЧерезСервисДЗФЛ

                              |ГДЕ

                              |     РезультатОбменаЧерезСервисДЗФЛ.ДатаДокумента >= &ДатаДокументаНачало

                              |     И РезультатОбменаЧерезСервисДЗФЛ.ДатаДокумента <= &ДатаДокументаКонец

                              |;

                              |

                              |////////////////////////////////////////////////////////////////////////////////

                              |ВЫБРАТЬ

                              |     ЕСТЬNULL(втБП.ДокЕсть, 0) КАК ДокЕстьБД,

                              |     ЕСТЬNULL(втДЗФЗ.ДокЕсть, 0) КАК ДокЕстьДЗФЗ,

                              |     втБП.ДатаДокумента КАК ДатаДокумента,

                              |     втБП.НомерДокумента КАК НомерДокумента,

                              |     ЕСТЬNULL(втБП.СуммаДокумента, 0) КАК Сумма,

                              |     втБП.НомерСП КАК НомерСП,

                              |     втБП.ДатаСП КАК ДатаСП,

                              |     втБП.НомерСудебногоУчастка КАК НомерСудебногоУчастка,

                              |     втБП.Проведен КАК Проведен,

                              |     втБП.Организация КАК Организация

                              |ПОМЕСТИТЬ срСуммы

                              |ИЗ

                              |     втБП КАК втБП

                              |                 ЛЕВОЕ СОЕДИНЕНИЕ втДЗФЗ КАК втДЗФЗ

                              |                 ПО втБП.ДатаДокумента = втДЗФЗ.ДатаДокумента

                              |                            И втБП.НомерДокумента = втДЗФЗ.НомерДокумента

                              |                            И втБП.СуммаДокумента = втДЗФЗ.СуммаДокумента

                              |                            И втБП.НомерСП = втДЗФЗ.НомерСП

                              |                            И втБП.ДатаСП = втДЗФЗ.ДатаСП

                              |                            И втБП.НомерСудебногоУчастка = втДЗФЗ.НомерСудебногоУчастка

                              |                            И втБП.Организация = втДЗФЗ.Организация

                              |                            И втБП.Проведен = втДЗФЗ.Проведен

                              |

                              |ОБЪЕДИНИТЬ

                              |

                              |ВЫБРАТЬ

                              |     ЕСТЬNULL(втБП.ДокЕсть, 0),

                              |     ЕСТЬNULL(втДЗФЗ.ДокЕсть, 0),

                              |     втДЗФЗ.ДатаДокумента,

                              |     втДЗФЗ.НомерДокумента,

                              |     ЕСТЬNULL(втДЗФЗ.СуммаДокумента, 0),

                              |     втДЗФЗ.НомерСП,

                              |     втДЗФЗ.ДатаСП,

                              |     втДЗФЗ.НомерСудебногоУчастка,

                              |     втДЗФЗ.Проведен,

                              |     втДЗФЗ.Организация

                              |ИЗ

                              |     втБП КАК втБП

                              |                 ПРАВОЕ СОЕДИНЕНИЕ втДЗФЗ КАК втДЗФЗ

                              |                 ПО втБП.ДатаДокумента = втДЗФЗ.ДатаДокумента

                              |                            И втБП.НомерДокумента = втДЗФЗ.НомерДокумента

                              |                            И втБП.СуммаДокумента = втДЗФЗ.СуммаДокумента

                              |                            И втБП.НомерСП = втДЗФЗ.НомерСП

                              |                            И втБП.ДатаСП = втДЗФЗ.ДатаСП

                              |                            И втБП.НомерСудебногоУчастка = втДЗФЗ.НомерСудебногоУчастка

                              |                            И втБП.Организация = втДЗФЗ.Организация

                              |                            И втБП.Проведен = втДЗФЗ.Проведен

                              |;

                              |

                              |////////////////////////////////////////////////////////////////////////////////

                              |ВЫБРАТЬ РАЗЛИЧНЫЕ

                              |     ВЫБОР

                              |                 КОГДА срСуммы.ДокЕстьБД = 1

                              |                            ТОГДА ""БД""

                              |                 КОГДА срСуммы.ДокЕстьДЗФЗ = 1

                              |                            ТОГДА ""ДЗФЗ""

                              |     КОНЕЦ КАК База,

                              |     срСуммы.ДатаДокумента КАК ДатаДокумента,

                              |     срСуммы.НомерДокумента КАК НомерДокумента,

                              |     срСуммы.Сумма КАК Сумма,

                              |     срСуммы.НомерСП КАК НомерСП,

                              |     срСуммы.ДатаСП КАК ДатаСП,

                              |     срСуммы.НомерСудебногоУчастка КАК НомерСудебногоУчастка,

                              |     срСуммы.Проведен КАК Проведен,

                              |     срСуммы.Организация КАК Организация

                              |ИЗ

                              |     срСуммы КАК срСуммы

                              |ГДЕ

                              |     срСуммы.ДокЕстьБД <> срСуммы.ДокЕстьДЗФЗ";     

           

           

            МойЗапрос.УстановитьПараметр("ПРС", ТЗизБП());

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

            МойЗапрос.УстановитьПараметр("ДатаДокументаКонец", ДатаДокументаКонец);

           

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

           

            Если Результат.Пустой() Тогда

                        Возврат;

            КонецЕсли;    

                       

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

           

            ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

            КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);    

           

            ВнешнийНаборДанных = Новый Структура("НаборДанных1", Выгрузка);

            ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;

            ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки);     

           

            ДокументРезультат.Очистить();

            ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

            ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

            ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

           

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

 

 

 

            В запросе помещаем документ из базы «БП» во временную таблицу «втБП», а данные из регистра сведений в таблицу «втДЗФЗ». Затем создаем объединений левых соединений двух таблиц, при этом соединяем в левом соединении две таблицы по сравниваемым полям. После чего результат помещаем во временную таблицу «срСуммы».

 

Рис. Связи 2-х таблиц при объединении

 

            На закладке «Настройки» в СКД создаем структуру отчета и выбираем нужные поля для сравнения данных

Рис. Закладка «Настройки» в СКД

 

            Далее все сохраняем и проверяем отчет, предварительно изменив тестовые данные, так, чтобы они отличались, например, «НомерСП».

Рис. Изменение реквизита «Номер СП» для тестирования

 

            Далее запускаем 1С в пользовательском режиме и проверяем отчет «Сверка документа ПРС…».

Рис. Результат сверки