"Даже когда цифровое время ускоряет бег
Человеку просто нужен человек"
Баста, Я найду тебя через века
"Это прыжок в бездну своих сомнений...
Меня мое последнее [решение] привело сюда...
...Финиша нет
Мы всегда в самом начале"
Леван Горозия, Outro
Всем привет!
Возрождаю технологию Ком! Опишу технологию сверки документов между базами УТ 10.3 и БП 3.0.
Начальные вводные: Управление торговлей, редакция 10.3 (10.3.75.2) , Бухгалтерия предприятия, редакция 3.0 (3.0.201.16), платформа 1С:Предприятие 8.3 (8.3.27.2214). Между базами УТ и БП настроен типовой обмен. Баз БП несколько - для каждой организации своя.
Предыстория: Этой задаче более 5 лет, вытащил ее из технического долга - видимо созрел к ее выполнению. В голове пазл как-то сам сложился. В один вечер я попробовал соединить свои ранние работы (идеи), опыт коллег, и у меня получилось!
Результат: 20 000 документов СФ выданный за период 2ой квартал сравниваются за 20 секунд, из них 8-9 секунд это создание ком-соединения. Базы находятся на одном сервере. УТ и БП - серверные.
Внедрение:
Внед-1. в БП через расширение я создал общий модуль с признаком "Внешнее подключение" и "Сервер" с одной функцией ПолучитьТаблицуДокументов(ИмяДокумента, ДатаНач, ДатаКон, ИНН) - см. рис. 1 и листинг 1.

С помощью данной функции мы сможем сравнить документы вида "Поступление товаров и услуг", "Поступление дополнительных расходов", "Реализация товаров и услуг", а также "Счет-фактура выданный" и "Счет-фактура полученный" с некоторыми оговорками (о которых пойдет речь ниже).
В целом механизм легко адаптируется под любые виды документы.
Для универсальности сверять документы будем по Дате документа, Номеру документа, Сумме документа, указанному Контрагенту - в разрезе заданного периода и организации. Есть нюанс, что не все документы имеют эти поля в своей структуре метаданных.
Внед-2. в УТ я разработал внешнюю обработку для подключения к базе БП через ком-соединение, получаю таблицу значений ключевых полей документов, сравниваю эти поля с полями документов из УТ, расхождения вывожу в табличную часть обработки - посадил все алгоритмы в одну кнопку " 1. Заполнить список документов " (рис. 2).
Далее накладываю отбор на список "Есть разница = Истина", визуально пробегаю по всем расхождениям, о чем-то обсуждаю с бухгалтером, и, если я уверен, что тот или иной документ должен совпадать в УТ и БП, выделенный документ регистрируется к обмену УТ-БП с помощью другой кнопки " 2. Зарегистрировать к обмену ". В целом процесс анализа происходит (происходил) достаточно быстро, чтобы не писать групповую регистрацию к обмену через установку флажков.

В обработке (на форме) реализовал выбор организации, периода, вида документа. Проверил за квартал документы вида "Поступление товаров и услуг", "Поступление дополнительных расходов", "Реализация товаров и услуг", а также "Счет-фактура выданный" и "Счет-фактура полученный" с некоторыми оговорками (о которых пойдет речь ниже). Нужно учесть, что по каждой организации имеется отдельная база БП, при этом учет по всем организациям ведется в одной УТ. То есть я из одной базы УТ, выбирая разную организацию, подключался к другой отдельной базе БП.
Технологии:
Тех-1. технологию сравнения таблиц и использования ком-соединения я использовал ранее в других задачах, свой опыт систематизировал в следующих публикациях:
Использование ком-соединения и Сравнение регистров.
Через ком-соединение получаем таблицу значений с данными, далее проходим построчно эту таблицу значений, формируем новую таблицу значений с нужными полями. Далее полученную таблицу загружаем в табличную часть. Подобный алгоритм (механизм) опробован и зарекомендовал себя на прошлых задачах, описан в указанных выше статьях.
Тех-2. Перед циклом я подготовил Соответствия для контрагентов и документов для быстрого получения ссылок (см. Листинг.3). Данный итоговый алгоритм заполнения новой таблицы значений отлажен с помощью механизма "Замера производительности". Об этом будет написано ниже - как начальный код трансформировался в новый код с показателями времени исполнения.
Подобный механизм быстрого поиска документов и контрагентов через Соответствия я уже использовал ранее в прошлых задачах, систематизировал опыт в следующих статьях: Загрузка банковских выписок и Алгоритм загрузки из эксель.
Почему я так настойчиво упоминаю свои предыдущие публикации? - Если кто-то проникнется этими идеями, и начнет применять в своей практике, то это будет здОрово!
Тех-3. Регистрацию документов к обмену с обходом всех реквизитов рекурсивно я взял из своей работы отсюда Универсальная регистрация объектов (регистрация изменений) для обмена, в основе была заложена идея и алгоритм Обхода объекта рекурсивно.
Тех-4. С помощью замера производительности были выявлены следующие
нюансы:
Ню-1. если при обходе цикла мы получили документ Док через СоответствиеДокументов по Номеру, и далее получаем поля документа Дата, Проведен, Контрагент и СуммаДокумента через точку: Док.Дата, Док.Контрагент и т.д. - то этот код исполняется очень долго.
Поэтому все поля мы получаем заранее до цикла, а внутри цикла получаем поля из Соответствия (см. Листинг. 2 и 3 и рис. 4 - 8).
Ню-2. если в обработке УТ задать поле Дата в табличной части СписокДокументов (см. рис. 3) в формате "Дата" (без времени), то при получении из ком-соединения соответствующей Даты (которая имеет формат Дата+Время) будет происходить замедление работы в строке кода НоваяСтрока.Дата = Стр.Дата.

Если вернуть в обработке формат Даты как Дата+Время, то данная строка исполняться будет быстро. Я предполагаю, что замедление работы кода происходит из-за преобразования форматов.
Идея была в том, чтобы сравнивать даты документов УТ и БП на начало дня, один из способов получать дату на начало дня - это обрезать формат до Даты без времени. Как оказалось, это существенно замедляет алгоритм. И быстрее передать дату в том же формате (Дата+Время) и сравнить программно: НачалоДня(ДатаИзУТ) = НачалоДня(ДатаИзБП).
На этом фоне я не знаю как ускорить преобразование форматов в строке передачи УИД - см. рис. 4 - 8:
код НоваяСтрока.УИД = Стр.УИД и код ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр, "УИД") работает примерно одинаковое время.





Итоговое время согласно замеру производительности 18 000 документов за 18 секунд.
Тех-4. В данной статье я хотел бы выразить благодарность исследовательской работе Дмитрия Использование УИД в запросе. Ставьте ему плюсы - его работа сильно ускорила мою работу: при сравнении ссылочных данных двух баз, между которыми настроен обмен, можно и нужно использовать уникальные идентификаторы.
Сравнение с другими работами:
Срав-1: скачал обработку посмотреть, как сравниваются документы у другого автора. Сравнение запускается на стороне БП, выдается отчет о расхождении документов между БП и УТ. При этом, если согласно обмену документы приходят из УТ в БП, то в таком случае неудобно регистрировать к обмену или перепроводить документы в УТ - нужен дополнительный поиск на стороне УТ. Это неудобно. Поэтому моя обработка запускается на стороне УТ с возможностью обработки документов УТ в базе-источнике.
Срав-2: в той работе также используется ком-соединение, при этом каждый документ тянется из другой базы по одному. В моей обработке - сразу пакет документов за период.
Оговорки для СФ выданных: в УТ и в БП поле СуммаДокумента для вида документов "НаРеализацию" считается одинаково, а вот для вида "Корректировочный" по-разному.
Для анализа и расследования, почему так много расхождений в СФ выданных, я написал запрос в консоли запросов в УТ и в БП. Для УТ использовал типовую консоль запросов, взятую с ИТС. Для БП использовал консоль запросов вот отсюда Консоль запросов от Евгения. Ставьте ему плюсы, опять-таки благодаря его работе я ускорил свою работу.
Благодаря анализу через консоль запросов я увидел разницу. Но решил не программировать сравнение полей СуммаУменьшение и СуммаУвеличение. А пойти старым дедовским способом...
Запрос и в УТ и в БП один и тот же:
ВЫБРАТЬ
СчетФактураВыданный.ВидСчетаФактуры КАК ВидСчетаФактуры,
ПРЕДСТАВЛЕНИЕ(УНИКАЛЬНЫЙИДЕНТИФИКАТОР(СчетФактураВыданный.Ссылка)) КАК УИД,
СчетФактураВыданный.Номер КАК Номер,
СчетФактураВыданный.Дата КАК Дата,
ПРЕДСТАВЛЕНИЕ(СчетФактураВыданный.Проведен) КАК Проведен,
СчетФактураВыданный.Организация.ИНН КАК ОрганизацияИНН,
СчетФактураВыданный.Контрагент.ИНН КАК КонтрагентИНН,
СчетФактураВыданный.СуммаДокумента КАК СуммаДокумента,
СчетФактураВыданный.СуммаУвеличение КАК СуммаУвеличение,
СчетФактураВыданный.СуммаУменьшение КАК СуммаУменьшение
ИЗ
Документ.СчетФактураВыданный КАК СчетФактураВыданный
ГДЕ
СчетФактураВыданный.Дата МЕЖДУ &ДатаНач И &ДатаКон
И СчетФактураВыданный.Организация.ИНН = &ИНН
УПОРЯДОЧИТЬ ПО
Дата
Результаты выполнения запросов выгрузил в таблицы MXL (mxl). Через типовой стандартный механизм сравнения файлов сравнил полученные файлы (см. рис. 9). 18 тыс строк примерно за 30 минут пролистал вручную при условии, что все СФ совпали.

Технология Ком-соединения возрождена!
Пользуясь случаем, хочу напомнить про очередную свою работу Поиск ссылок. Новая концепция. Готовый механизм.
На этом все. Всем добра!
- Анализ прав и ролей. Поиск подходящего профиля - алгоритмический анализ и поиск
- Оцифровка и визуализация склада - программная прорисовка склада
- Удаление документов для любых баз на управляемых формах
- Удаление справочников для любых баз на управляемых и обычных формах
- Перенумерация документов и справочников - с учетом префиксов номеров
- Свертка базы УТ 10.3 подокументно - новая концепция
- Матричное программирование - демо-стенд матричного калькулятора
- Справочное хранение товаров в КА 2.5 - кейс запуска адресного склада
- Мини-обзор разных задач - от очевидного до неочевидного
- Поиск отчета по документам - пример анализа незнакомых конфигураций
- Флажок в динамическом списке - от теории до практики "как бы простой" задачи
- Из Json в ДеревоЗначений - удобный просмотрщик json-структуры
- Внедрение адресного склада в КА 2.5 - кейс запуска адресного склада
- Фрилансеру: про цены, про клиентов, про планирование - мое исследование
- Что такое форматированный документ - прекрасная возможность раскрасить любой текст
- Программная работа с упаковками в КА 2.5 - примеры адаптаций механизмов упаковок в КА 2.5
- Универсальное сравнение регистров накопления - связь по измерениям, сравнение по ресурсам
- Обход объекта рекурсивно - просмотр реквизитов документа с бесконечным открытием подуровней
Вступайте в нашу телеграмм-группу Инфостарт