Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 окт 2021, 23:19

Сравнение двух документов из разных баз

Автор LES, 12 июн 2017, 13:10

0 Пользователей и 1 гость просматривают эту тему.

LES

Здравствуйте
Есть два документа, которые берутся из разных баз при помощи запросов. Результат выборки записывается в табличную часть Данные, а далее из этой табличной части выводится в макет ПФ. Нужно сравнить эти документы и если их номера равны, то в макете он должны выводиться в 1 строку.
Как реализовать это сравнение? Сравнение при помощи цикла не очень подходит, т.к. большое количество документов. Спасибо!

База = ПодключитьБазу();
   Запрос = База.NewObject("Запрос");
   Запрос.ТекстЗапроса =
   "ВЫБРАТЬ
   |   Док1.Ссылка,
   |   Док1.Номер,
   |   Док1.Дата
   |ИЗ
   |   Документ.Док1 КАК Док1
   |ГДЕ
   |   Док1.Дата МЕЖДУ &Дата1 И &Дата2
   |   И Док1.Проведен
   |
   |УПОРЯДОЧИТЬ ПО
   |   Дата";
   
   Запрос.УстановитьПараметр("Дата1", НачалоДня(Объект.ВыбПериод.ДатаНачала));
   Запрос.УстановитьПараметр("Дата2", КонецДня(Объект.ВыбПериод.ДатаОкончания));

   Выборка = Запрос.Выполнить().Выбрать();      

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

      НоваяСтрока = Объект.Данные.Добавить();
      НоваяСтрока.Номер       = Выборка.Номер;
      НоваяСтрока.Дата       = Выборка.Дата;
      НоваяСтрока.Ссылка       = Выборка.Ссылка;

   КонецЦикла;
   
   Запрос = Новый Запрос();   
   Запрос.Текст =
   "ВЫБРАТЬ
   |   Док2.Ссылка,
   |   Док2.Номер,
   |   Док2.Дата
   |ИЗ
   |   Документ.Док2 КАК Док2
   |ГДЕ
   |   Док2.Дата МЕЖДУ &Дата1 И &Дата2
   |   И Док2.Проведен
   |
   |УПОРЯДОЧИТЬ ПО
   |   Дата";

   Запрос.УстановитьПараметр("Дата1", НачалоДня(Объект.ВыбПериод.ДатаНачала));
   Запрос.УстановитьПараметр("Дата2", КонецДня(Объект.ВыбПериод.ДатаОкончания));
   
   Выборка2 = Запрос.Выполнить().Выбрать();

   Пока Выборка2.Следующий() Цикл
         
         НоваяСтрока = Объект.Данные.Добавить();
         НоваяСтрока.Номер       = Выборка2.Номер;
         НоваяСтрока.Дата       = Выборка2.Дата;
         НоваяСтрока.Ссылка       = Выборка2.Ссылка;      
      
   КонецЦикла;
   
   база = неопределено;
   
   ТабРезультат.Очистить();
   
   текОбъект = ЭтаФорма.РеквизитФормыВЗначение("Объект");
   Макет = текОбъект.ПолучитьМакет("Макет");   
   
   ОбластьШапка = Макет.получитьОбласть("Заголовок");
   ТабРезультат.Вывести(ОбластьШапка);
   
   Объект.Данные.Сортировать("Дата");
   
   ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

   для Каждого Строка из Объект.Данные Цикл
      
      ОбластьСтрока.Параметры.Номер       = Строка.Номер;
      ОбластьСтрока.Параметры.Дата       = Строка.Дата;

      ТабРезультат.Вывести(ОбластьСтрока);
      
   КонецЦикла;

LexaK

вы выводите номер и дату,
когда номера равны это понятно, а если у документов с одинаковыми номерами разные даты?
что в этом случае будете выводить?

а вообще после получения данных из внешней базы и помещения их таблицу Данные, просто передайте эту таблицу во второй запрос и сравнивайте номера как вам надо, при этом используйте полное соединение
примерно так

выбрать
    Таб.Номер,
    Таб.Дата
поместить Таб
из &Таблица Таб
;
выбрать
    ЕстьNull(Док.Номер,Таб.Номер) как Номер,
    Таб.Дата как Дата1,
    Док.Дата как Дата2
из Таб
полное соединение
   Документ.Док2 КАК Док
по Док.Номер = Таб.Номер
ГДЕ
   Док.Дата МЕЖДУ &Дата1 И &Дата2
   И Док.Проведен
УПОРЯДОЧИТЬ ПО
   1 //по номеру




Добавлено: 13 июн 2017, 09:33



  Запрос.УстановитьПараметр("Дата1", НачалоДня(Объект.ВыбПериод.ДатаНачала));
  Запрос.УстановитьПараметр("Дата2", КонецДня(Объект.ВыбПериод.ДатаОкончания));
  Запрос.УстановитьПараметр("Таблица", Объект.Данные);


ответ Понравился? (в смысле пригодился?)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск