Как объединить 2 отчета в 1с

Обновлено: 06.07.2024

Войдите как ученик, чтобы получить доступ к материалам школы

Язык запросов 1С 8.3 для начинающих программистов: объединение

Автор уроков и преподаватель школы: Владимир Милькин

Объединение в запросах

В языке запросов имеется возможность объединять несколько запросов. При этом записи, полученные с помощью каждого из объединяемых запросов, будут собраны в один результат запроса.

Как всегда начнём с примера.

Пусть требуется написать запрос, который возвращает все названия цветов и вкусов в одной таблице.

Цвета мы умеем выбирать так:

А вот, чтобы объединить эти два результата в один как раз и потребуется операция объединения:

Обратите внимание на то, что операция объединения вовсе не гарантирует, что элементы будут идти в каком-то определённом порядке. В общем случае они могут следовать друг за другом как угодно, поэтому если важен порядок необходимо как и всегда указывать его явно (через секцию УПОРЯДОЧИТЬ).

Требования к запросам, участвующим в объединении

У объединяемых запросов должно быть одинаковое количество полей . Иначе мы получим такую ошибку:

26

В объединяемых запросах соответствующие друг другу (по порядку) поля должны иметь одинаковый тип . Но это требование, в отличие от предыдущего, не является обязательным. Если соответствующие друг другу поля имеют разный тип, то поле результата будет иметь СОСТАВНОЙ тип, который разбирался нами на одном из прошлых уроков:

Несмотря на то, что поле первого запроса имеет тип СТРОКА, а второго ЧИСЛО, нам удалось объединить их в одну таблицу. Но тип результатирующего поля стал составным и нам придётся учитывать это в дальнейшем. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Кстати, вы заметили, что поле итоговой таблицы (после объединения) называется Наименование, а не Калорийность? Эта такое правило : поля итоговой таблицы всегда имеют названия совпадающие с именами описанными в первом из объединяемых запросов.

Объединение более двух запросов

При объединении каждый запрос собирает данные независимо, а уже затем результаты объединяются в один. Количество объединяемых запросов не ограничено.

Напишем объединение трёх запросов:

Повторяющиеся строки

Давайте объединим один и тот же запрос сам с собой:

Обратите внимание на то, что мы объединили две одинаковые таблицы цветов, а в результате каждый цвет встречается ровно один раз.

Всё потому, что по умолчанию при объединении запросов полностью одинаковые строки в результате запроса, заменяются одной. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Если требуется, чтобы были оставлены в том числе одинаковые строки (дубли), необходимо указать ключевое слово ВСЕ:

Упорядочивание при объединении

Пытаться отдельно упорядочивать результаты запросов, участвующих в объединении не имеет смысла. Поэтому при попытке написать:

31

Упорядочивать можно только результат объединения :

Обратите внимание на то, что секция УПОРЯДОЧИТЬ ПО в данном случае относится не к последнему запросу, а уже к результату объединения запросов.

Подведение итогов при объединении

Пытаться отдельно подводить итоги по запросам, участвующим в объединении, также не имеет смысла. Поэтому при попытке написать:

33

Подводить итоги можно только по результату объединения :

Обратите внимание на то, что секция ИТОГИ ПО в данном случае относится не к последнему запросу, а уже к результату объединения запросов.

Рабочий пример

Давайте решим такую задачу. Требуется вывести для каждого элемента справочника Еда закупленное и проданное количество за весь период.

Поступление еды у нас в базе происходит документом ПоступлениеЕды. У документа есть табличная часть Еда, с реквизитами Номенклатура и Количество.

Сначала выберем все строки табличной части Еда из всех поступлений:

Теперь сгруппируем этот результат по еде с суммированием количества:

Аналогичным образом получим продажу еды из документов ПродажаЕды:

Осталось объединить эти два запроса:

Обратите внимание на то, как мы дополнили оба запроса ещё одним полем СУММА(0). Мы вынуждены были сделать это, так как оба запроса содержат по два поля, а объединение запросов должно содержать три поля. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Если бы мы не сделали этого, а написали просто:

(20) Трудноизмеримое = "мы сами не понимаем, зачем оно нам".

1. Время на обновление - решается обновлятором (мы так обновляем пару сотен баз на сервере)
2. Подготовка и сверка отчетности - делается одна внешняя обработка, которая по очереди открывает нужные базы и дергает из них нужную информацию, а затем обобщает и выдает в виде отчета
3. Прочие пункты также можно решить по образцу п.2

У нас отдел ведения учета, базы разных бенефициаров, объединять в одну смысла нет. Но при этом нужны инструменты работы сразу со всеми базами (поиск ошибок ведения учета, анализ регламентированных отчетов, все расписывать не буду).

Решили так - по каждой задаче делается внешний отчет или обработка. С единым программным интерфейсом, экспортными процедурами в модуле отчета/обработки.
И есть так называемый центр управления - обработка, которая поочередно открывает базы по COM-соединению и выполняет нужную внешнюю отчет/обработку. Результаты сохраняет, обобщает, выдает в виде единого отчета.

Пример - создание и выгрузка отчетов СЗВ-М в зарплатных базах. Создает отчеты, выгружает в один каталог, потом в СБИС грузим все файлы из этого каталога и отправляем одной кнопкой, экономится масса времени. Заодно выполняется анализ отчетов, благо, что отчет достаточно простой и формируется по понятным правилам.

Видел ветку. где ругали ком-соединение как устаревшее, но нам, в общем. пофиг, так как сервер достаточно шустрый и скорость работы устраивает.

(21) Ну, и нахер тратить время и деньги на обновлятор? Писать склеивающие обработки, когда можно совершенствовать сами отчеты? Через сколько после обнаруженной ошибки консолидированный отчет поправится? А формирование отчетности по заранее неизвестным фильтрам по неполному списку филиалов в любой момент времени и из любой точки мира? Можно конечно жить и по вашему принципу, но тогда отчет исправленный в течение часа сложно получить. А торговая сессия на бирже два-три часа всего.
Про регламентированный учет я написал уже своё мнение.

Условия в (21) перечитайте. Базы разных бенефициаров. Теоретически, все данные можно вести в одной базе, но иногда клиенты уходят и забирают свои данные себе. Выделить из общей базы только данные клиента - задача тоже непростая.

У вас вид деятельности не такой, как у нас, и вам наши методы не подходят, но посмотрите шире немного.Я поделился своим опытом, применимым к нашему виду деятельности, вы - к вашему.

(20) Это иллюзия. В сухом остатке профита будет немного и спорного, а проблем - ведром не вычерпать.
(21) А бекапы всех этих многочисленных баз вы делаете? Если делаете с какой глубиной? Проверки бекапов методом восстановления делаются?
+25, наверное в этом случае удобнее купить/сделать свой фреш, где данные в базе разделяются, и нет проблем потом с него "съехать", в случае необходимости.
(25) Конечно делаем, это же базы наших клиентов. Храним в течение года. Проверки бэкапов методом восстановления - не очень понял, о чем вы, и зачем это делать. Не админю.
(26) Возможно, но нам как-то удобнее на своем сервере все хранить.

Приходят клиенты со своими базами, кидать их во фреш в ту же базу? Не понял, в чем тут удобство.
Часть клиентов работает у себя и те проверки, о которых я писал в (21), легко применимы и к ним тоже.
(28) он просто вообразил, что с этими базами в конфигураторе никаких изменений не может происходить - что в типовом решении общем для всех клиентов сделали, то и будет. А что у разных баз разные доработки бывают нужны - об этом в этой ветке сейчас не вспоминают.
И еще предлагающие всех в одну базу загнать - а монопольное насилие над данными клиента как тогда проводить? Всем остальным ждать? В общем, аргументы в пользу решения "загнать всех в одну базу, под одну гребенку". это слабенькие аргументы.

(29) В нашем случае, все базы клиентов в отделе ведения учета - типовые без изменений и даже без расширений. Поэтому их легко обновлятором обновлять.

Но они никак понять не могут настоящую причину, по которой мы их не сливаем - это не наши базы!
В любой момент клиент может затребовать их копию себе и уйти. Вести учет либо в своей бухгалтерии, либо в другой фирме / у частника.
Также в любой момент может прийти новый клиент со своими данными.

Что будто бы много баз неудобно обновлять - давно уже миф с тех пор, как появился обновлятор за смешные для фирмы деньги с вечной лицензией.

риб не поможет в данном случае? и слить потом номенклатуру-контрагентов?

(32) тут нужно конкретизировать - что именно через РИБ предлагается в данном случае?

а вообще, попытки слияния с использованием РИБ и на Мисте в том числе были озвучены. Не удовлетворительные результаты оказались. Грубо говоря, трудоемкость не соответствует стоимости результата.

(34) Просто сейчас собираюсь тоже самое со своими базами провернуть, но там 2 базы почти чистых, просто надо на аудит отдать 2 компании. Создам потом свою тему с вопросами.

> Но они никак понять не могут настоящую причину, по которой мы их не сливаем - это не наши базы!

да это ясно, что базы не ваши, и что вы работаете в так называемой "аудиторской" компании.

Я считаю, что у каждого способа есть свои плюсы и минусы, и надо пользоваться тем, который удобнее.
А спорить, что лучше - все равно что спорить с какой стороны правильно разбивать яйца.

Войдите как ученик, чтобы получить доступ к материалам школы

Система компоновки данных 1С 8.3 для начинающих: объединяем наборы данных

Автор уроков и преподаватель школы: Владимир Милькин

На прошлом уроке мы познакомились с соединением наборов данных. Сегодня же мы научимся объединять различные наборы данных в один набор.

Ставим цель

  • Создать новый отчёт, в котором будут выводиться закупки (дата, поставщик) и продажи (дата, клиент) одновременно.
  • Для этого сделаем два отдельных набора данных с выборкой из таблиц документов "ПоступлениеЕды" и "ПродажаЕды", а затем объединим их в один набор.

Создаем новый отчет

Открываем базу "Гастроном" в конфигураторе и через главное меню "Файл->Новый. " создаём отчёт:

Вид документа - "Внешний отчет":

В форме нового отчёта указываем имя "Урок7" и нажимаем кнопку "Открыть схему компоновки данных":


Соглашаемся с именем макета по умолчанию:

Создаем первый набор данных

Создаём новый набор данных - запрос (через зелёный плюсик), выделяем его и вызываем конструктор запроса:


Делаем выборку из таблицы документов "ПоступлениеЕды" следующих полей:

Вот он, текст нашего запроса к таблице по закупкам:


Создаем второй набор данных

Выделяем мышкой пункт "Наборы данных".


. и добавляем ещё один набор данных - запрос:


Выделяем его и вызываем конструктор запроса:


Делаем выборку из таблицы документов "ПродажаЕды" следующих полей:

Текст запроса будет таким:


Сделаем имена более читабельными. Для этого двойным щелчком переименуем "НаборДанных1" в "Покупки" и поле "Дата" в "ДатаПокупки":


Второй же набор "НаборДанных2" переименуем в "Продажи", а поле "Дата" переименуем в "ДатаПродажи":


Мы получили два набора данных. В первом - информация по покупкам (дата покупки и поставщик), во втором- информация по продажам (дата продажи и клиент). Давайте попробуем теперь вывести всё это в отчет.

Проверяем результат

Переходим на закладку "Настройки" и нажимаем волшебную палочку для вызова конструктора:


Тип отчета - "Список. ":

Выбираем поля для отчёта из обоих наборов:

Сохраняем отчёт и формируем в режиме пользователя:


Получилось не совсем то, что ожидали. Получилось перекрёстное соединение одного набора данных с другим. А нам нужно именно объединение. Исправим.

Создаем объединение наборов данных

Для этого переходим на закладку "Наборы данных".

Снова выделяем мышкой пункт "Наборы данных".


. и добавляем туда набор данных - объединение:

Видим, что этот набор добавился и у него совершенно другая картинка (не таблица, как у двух других, а два объединяющихся круга):


Затем перетаскиваем мышкой наборы "Покупки" и "Продажи" в "НаборДанных1":


Вот это и значит, что теперь "Покупки" и "Продажи" будут не соединяться, а именно объединяться в отчёте.

Сохраним отчёт и сформируем в режиме пользователя:


Отлично. То, что надо.

А давайте зададимся целью объединить столбцы "Поставщик" и "Клиент" в один? И пусть этот новый столбец будет называться "Контрагент".

Для этого заходим на закладку "Наборы данных" и меняем имя поля "Поставщик" в наборе "Покупки" на имя "Контрагент":


Затем в наборе "Продажи" меняем имя поля "Клиент" на имя "Контрагент":


Переходим на закладку "Настройки", выделяем пункт "Отчет", переходим внизу на закладку "Выбранные поля", удаляем уже не существующие поля "Поставщик" и "Клиент" и перетаскиваем из первой колонки во вторую новое поле "Контрагент":


Должно получится вот так:


Готово

Сохраняем отчёт и проверяем в режиме пользователя:


Замечательно всё получилось.

Эталонная обработка, после выполнения всех шагов этого урока

Войдите на сайт как ученик

Для учеников

Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.

На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .

Механизм сравнения и объединения конфигураций позволяет сравнивать между собой два прикладных решения и объединять их полностью или выборочно по результатам сравнения.

Такая возможность используется, например, когда одно прикладное решение разрабатывается несколькими независимыми разработчиками, или в случае, когда в исходную конфигурацию нужно загрузить сделанные изменения.

Этот механизм обеспечивает не только сравнение общих свойств объектов прикладного решения (справочников, документов и т. д.), но и сравнение их отдельных реквизитов, табличных частей. Также выполняется сравнение форм: сравниваются тексты модулей, тексты описаний и макеты.

Все результаты сравнения можно просмотреть в детальном виде.

Установка соответствия объектов

При запуске режима сравнения система анализирует сравниваемые конфигурации и устанавливает соответствие между объектами конфигураций, исходя из их имен:

Сравнение и объединение конфигураций

Однако не исключена ситуация, когда одинаковые объекты прикладного решения будут иметь различные имена или наоборот, различные объекты будут называться одинаково. В этом случае разработчик имеет возможность отказаться от соответствий, установленных по умолчанию, и установить их вручную:

Сравнение и объединение конфигураций

Сравнение конфигураций

Результат сравнения конфигураций отображается в специальном окне:

Сравнение и объединение конфигураций

Разработчик имеет возможность настроить состав информации, отображаемой в этом окне. Возможен просмотр всех объектов прикладного решения, только отличающихся, только измененных, присутствующих только в какой-либо одной конфигурации или только неизмененных объектов.

Для каждого отличающегося объекта можно просмотреть детальную информацию об отличиях:

Сравнение и объединение конфигураций

Кроме того, информация об отличиях может быть получена в виде отчета:

Сравнение и объединение конфигураций

Объединение конфигураций

Для выполнения объединения конфигураций следует отметить те объекты прикладного решения, которые будут участвовать в объединении и установить режим объединения конфигураций.

Сравнение и объединение конфигураций

Установка режима объединения конфигураций возможна как для всей конфигурации в целом, так и для каждого элемента прикладного решения в отдельности:

Сравнение и объединение конфигураций

Варианты сравнения и объединения конфигураций

Система поддерживает сравнение и объединение различных видов конфигураций. В качестве сравниваемых конфигураций могут выступать:
  • основная конфигурация;
  • конфигурация базы данных;
  • конфигурация, сохраненная во внешнем файле;
  • конфигурация поставщика.

Таким образом, например, возможно сравнение двух конфигураций, сохраненных во внешних файлах, или сравнение основной конфигурации с конфигурацией поставщика.

Сохранение / загрузка настроек объединения конфигураций

Настройки объединения конфигураций (или настройки обновления конфигурации на поддержке) можно сохранять в xml файл. Также доступна и обратная операция — загрузка этих настроек из файла.

Пакетный режим запуска конфигуратора также поддерживает использование настроек при объединении и обновлении конфигураций. Таким образом при объединении конфигураций, содержащих большое количество изменений, когда объединение выполняется регулярно, существует возможность полностью автоматизировать операции сборки конфигураций.

Использование внешней программы

Существует целый ряд сторонних специализированных программ, с помощью которых можно выполнять объединение модулей. Если недостаточно встроенных возможностей 1С:Предприятия, или если хочется использовать одну из сторонних программ, есть возможность подключить её в настройках конфигуратора и использовать для сравнения, настройки объединения и собственно объединения модулей конфигурации.

Для самых распространённых программ в конфигураторе 1С:Предприятия уже содержатся параметры командной строки для их запуска в различных режимах:

При желании можно использовать и другие программы, которые поддерживают запуск из командной строки. Их параметры нужно добавить в настройки конфигуратора самостоятельно.

Читайте также: