Как объединить 2 отчета в 1с
Войдите как ученик, чтобы получить доступ к материалам школы
Язык запросов 1С 8.3 для начинающих программистов: объединение
Автор уроков и преподаватель школы: Владимир Милькин
Объединение в запросах
В языке запросов имеется возможность объединять несколько запросов. При этом записи, полученные с помощью каждого из объединяемых запросов, будут собраны в один результат запроса.
Как всегда начнём с примера.
Пусть требуется написать запрос, который возвращает все названия цветов и вкусов в одной таблице.
Цвета мы умеем выбирать так:
А вот, чтобы объединить эти два результата в один как раз и потребуется операция объединения:
Обратите внимание на то, что операция объединения вовсе не гарантирует, что элементы будут идти в каком-то определённом порядке. В общем случае они могут следовать друг за другом как угодно, поэтому если важен порядок необходимо как и всегда указывать его явно (через секцию УПОРЯДОЧИТЬ).
Требования к запросам, участвующим в объединении
У объединяемых запросов должно быть одинаковое количество полей . Иначе мы получим такую ошибку:
В объединяемых запросах соответствующие друг другу (по порядку) поля должны иметь одинаковый тип . Но это требование, в отличие от предыдущего, не является обязательным. Если соответствующие друг другу поля имеют разный тип, то поле результата будет иметь СОСТАВНОЙ тип, который разбирался нами на одном из прошлых уроков:
Несмотря на то, что поле первого запроса имеет тип СТРОКА, а второго ЧИСЛО, нам удалось объединить их в одну таблицу. Но тип результатирующего поля стал составным и нам придётся учитывать это в дальнейшем. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Кстати, вы заметили, что поле итоговой таблицы (после объединения) называется Наименование, а не Калорийность? Эта такое правило : поля итоговой таблицы всегда имеют названия совпадающие с именами описанными в первом из объединяемых запросов.
Объединение более двух запросов
При объединении каждый запрос собирает данные независимо, а уже затем результаты объединяются в один. Количество объединяемых запросов не ограничено.
Напишем объединение трёх запросов:
Повторяющиеся строки
Давайте объединим один и тот же запрос сам с собой:
Обратите внимание на то, что мы объединили две одинаковые таблицы цветов, а в результате каждый цвет встречается ровно один раз.
Всё потому, что по умолчанию при объединении запросов полностью одинаковые строки в результате запроса, заменяются одной. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Если требуется, чтобы были оставлены в том числе одинаковые строки (дубли), необходимо указать ключевое слово ВСЕ:
Упорядочивание при объединении
Пытаться отдельно упорядочивать результаты запросов, участвующих в объединении не имеет смысла. Поэтому при попытке написать:
Упорядочивать можно только результат объединения :
Обратите внимание на то, что секция УПОРЯДОЧИТЬ ПО в данном случае относится не к последнему запросу, а уже к результату объединения запросов.
Подведение итогов при объединении
Пытаться отдельно подводить итоги по запросам, участвующим в объединении, также не имеет смысла. Поэтому при попытке написать:
Подводить итоги можно только по результату объединения :
Обратите внимание на то, что секция ИТОГИ ПО в данном случае относится не к последнему запросу, а уже к результату объединения запросов.
Рабочий пример
Давайте решим такую задачу. Требуется вывести для каждого элемента справочника Еда закупленное и проданное количество за весь период.
Поступление еды у нас в базе происходит документом ПоступлениеЕды. У документа есть табличная часть Еда, с реквизитами Номенклатура и Количество.
Сначала выберем все строки табличной части Еда из всех поступлений:
Теперь сгруппируем этот результат по еде с суммированием количества:
Аналогичным образом получим продажу еды из документов ПродажаЕды:
Осталось объединить эти два запроса:
Обратите внимание на то, как мы дополнили оба запроса ещё одним полем СУММА(0). Мы вынуждены были сделать это, так как оба запроса содержат по два поля, а объединение запросов должно содержать три поля. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Если бы мы не сделали этого, а написали просто:
Цель : не вникая в особенности логики отчетов-источников, необходимо сформировать сводный отчет, объединяющий и сопоставляющий исходные данные.
Добавим отчет СКД1. Основная схема содержит единственный набор данных получаемых простым запросом. Результат выборки - одна строка детальных записей, состоящая из двух полей: Ключ и Ресурс1.
Пояснение: на картинке ниже, имя варианта отчета равно имени отчета (аналогично типовому решению УП ЕРП)
Добавим копированием отчет СКД 2. При этом по смыслу заменим "1" на "2" в основной схеме СКД:
4. Эталонные данные.
Сохраним конфигурацию и проверим оба отчета. Полученный результат будем считать эталонными данными.
Создадим отчёт СКД 3.
Пояснение: отчет является обёрткой для единой настройки, последовательного вызова и получения данных каждого отчета-источника с последующим выводом объединенных данных, например, в разрезе общего ключа.
Схема отчета СКД3:
Набор данных содержит объединение нескольких объектов, где каждый объект - это результат очередного склеиваемого отчета, взятый как таблица значений.
В момент выполнения отчета СКД 3, перехватывается исполнение типового алгоритма. Предварительно вызывается программное исполнение каждого отчета, входящего по имени в объединенный набор СКД 3. Далее происходит программное формирование отчета СКД 3.
Реализация логики СКД3
Опишем набор данных СКД3:
- добавим группу наборов вида объединение;
- внутри группы добавим объекты с наименованием объекта, содержащего данные, по шаблону "тз"+ИмяОчередногоСклеиваемогоОтчета. Отчет должен быть включен в состав конфигурации;
- В каждом наборе опишем требуемые поля исходного отчета. Здесь можно задать свои псевдонимы полей и типы значений.
Алгоритм СКД 3 "ПриКомпоновкеРезультата"
В модуле отчета СКД 3 опишем алгоритм исполнения предопределенной процедуры "ПриКомпоновкеРезультата"
Схема универсальной логики "ПриКомпоновкеРезультата":
0. Прочитаем настройки СКД 3;
1. Определим схемы СКД используемых отчетов-источников, прочитав имена объединяемых наборов определив метаимена соответствующих отчетов;
2. Выполним СКД используемых источников программно на уровне детальных записей с заданными параметрами и отборами. Получим массив таблиц ;
примечание: здесь используются приемы программной настройки СКД:
2.1 Переформируем СКД источник, добавив новую структуру вывода "детальные данные" на основе требуемых здесь к выводу полей:
2.1.1 Выбор полей выводимой группировки на основе требуемых здесь к выводу полей;
2.1.2 Выбор полей выводимой группировки на основе вычисляемых полей;
2.1.3 Скопируем параметры СКД;
2.1.4 Скопируем отборы СКД;
2.1.5 Отключим вывод итогов;
2.2 Получим результат СКД источник в ТаблицуЗначений;
3. Выведем результат:
3.1 зададим Типовой макет оформления
3.2 выполним Программный вывод в табличный документ
Специальные предложения
За идею "+", за качество подачи материала "-". Итого, к сожалению, - "0".
Тема полезная, но когда, читая с нуля, перечитываешь текст по 2-3 раза, чтобы понять, что автор имел ввиду. тебя накрывает ощущение когнитивного диссонанса. Это как в пустыне плюнуть в сторону умирающего от жажды: технически - вроде как жидкостью поделился и это хорошо, а с этической точки зрения - ну, всё-таки плюнул же, а не попить дал.
Написано крайне небрежно, скриншоты - отдельная тема (у меня ребёнок в 6 лет аккуратнее вырезает), иллюстрации (обязательные для сложных тем полностью отсутствуют), примеры полностью синтетические (от того крайне тяжело воспринимаются).
Илья, не воспринимайте моё мнение, как попытку оскорбить лично Вас. Просто уже начинает конкретно "бомбить" (извиняюсь за блогерский сленг) от деградации качества подачи материалов на ИС (не путать с качеством самого материала). Причём больше всего бесит именно то, что понимаешь прекрасно - автор реально нормально "рубит" в теме, но в процессе чтения не покидает ощущение, что он скорее делает тебе какое-то одолжение, а не стремится поделиться полезной информацией.
Большая просьба, пересмотрите подходы к подготовке материала и, вот увидите, это обязательно положительно отразится на рейтингах Ваших статей! Делайте свои статьи так, чтобы они не только несли полезную информацию, но и читались легко и приятно, а не как сложный математический ребус.
Удачи и успехов в новых работах!
Есть 2 отчета, в каждом есть по таблице и графа итого.
Подскажите как вывести Итого = Итого 1 таблицы + Итого 2 таблицы?
Передать данные из настроек отчета в поле ввода формы отчета
Всем привет! Подскажите, пожалуйста, вот есть: Внешний отчет, реквизит ДатаНачало с типом Дата.
Формирование отчета под разными пользователями. Нет прав доступа к полю отчёта.
Добрый день! Как может быть такая штука - захожу под одним пользователем, запускаю отчёт, всё.
Заполнение макета отчета из ТЗ / удаление дублей из отчета
Добрый день. Есть отчет На выходе есть Выборка = РезультатЗапроса.Выбрать(); Далее в.
1C 8.1 Редактирование отчета созданного с помощью универсального отчета
Создал отчет с помощью универсального отчета, все работает, не получается сделать его "красивым".
Таблица с 1 отчета.
Таблица 2 отчета.
Их итог.
FoxChiffa, я смотрю вы мастер говорить загадками.
А если форма отчета с таблицой 1 будет закрыта?
Объединить несколько строк столбца отчета в одну ячейку
Добрый день! Целый день бьюсь с задачей- как объединить несколько сгруппированных строк столбца.
Реквизиты формы отчета,как правильно сделать?Формирование отчета без СКД
Народ, подскажите. Где нужно создать формы реквизит отчета (и как) без СКД, чтобы при формировании.
Обновление открытого отчета по нажатию на вкладку этого отчета
Добрый день! Подскажите пожалуйста, как сделать так, чтобы открытый отчет обновить при нажатии на.
RecordSource отчета установить при вызове отчета из формы
нужна помощь: у меня отчет вызывается из разных форм, в каждой форме есть поле ИНДЕКС и нужно.
Вытащить значение поля из отчёта сына в отчёта отца
Здравствуйте, нужно в ытащить значение поля из отчёта сына в отчёта отца Создаю в сыне: 2.
Войдите как ученик, чтобы получить доступ к материалам школы
Система компоновки данных 1С 8.3 для начинающих: объединяем наборы данных
Автор уроков и преподаватель школы: Владимир Милькин
На прошлом уроке мы познакомились с соединением наборов данных. Сегодня же мы научимся объединять различные наборы данных в один набор.
Ставим цель
- Создать новый отчёт, в котором будут выводиться закупки (дата, поставщик) и продажи (дата, клиент) одновременно.
- Для этого сделаем два отдельных набора данных с выборкой из таблиц документов "ПоступлениеЕды" и "ПродажаЕды", а затем объединим их в один набор.
Создаем новый отчет
Открываем базу "Гастроном" в конфигураторе и через главное меню "Файл->Новый. " создаём отчёт:
Вид документа - "Внешний отчет":
В форме нового отчёта указываем имя "Урок7" и нажимаем кнопку "Открыть схему компоновки данных":
Соглашаемся с именем макета по умолчанию:
Создаем первый набор данных
Создаём новый набор данных - запрос (через зелёный плюсик), выделяем его и вызываем конструктор запроса:
Делаем выборку из таблицы документов "ПоступлениеЕды" следующих полей:
Вот он, текст нашего запроса к таблице по закупкам:
Создаем второй набор данных
Выделяем мышкой пункт "Наборы данных".
. и добавляем ещё один набор данных - запрос:
Выделяем его и вызываем конструктор запроса:
Делаем выборку из таблицы документов "ПродажаЕды" следующих полей:
Текст запроса будет таким:
Сделаем имена более читабельными. Для этого двойным щелчком переименуем "НаборДанных1" в "Покупки" и поле "Дата" в "ДатаПокупки":
Второй же набор "НаборДанных2" переименуем в "Продажи", а поле "Дата" переименуем в "ДатаПродажи":
Мы получили два набора данных. В первом - информация по покупкам (дата покупки и поставщик), во втором- информация по продажам (дата продажи и клиент). Давайте попробуем теперь вывести всё это в отчет.
Проверяем результат
Переходим на закладку "Настройки" и нажимаем волшебную палочку для вызова конструктора:
Тип отчета - "Список. ":
Выбираем поля для отчёта из обоих наборов:
Сохраняем отчёт и формируем в режиме пользователя:
Получилось не совсем то, что ожидали. Получилось перекрёстное соединение одного набора данных с другим. А нам нужно именно объединение. Исправим.
Создаем объединение наборов данных
Для этого переходим на закладку "Наборы данных".
Снова выделяем мышкой пункт "Наборы данных".
. и добавляем туда набор данных - объединение:
Видим, что этот набор добавился и у него совершенно другая картинка (не таблица, как у двух других, а два объединяющихся круга):
Затем перетаскиваем мышкой наборы "Покупки" и "Продажи" в "НаборДанных1":
Вот это и значит, что теперь "Покупки" и "Продажи" будут не соединяться, а именно объединяться в отчёте.
Сохраним отчёт и сформируем в режиме пользователя:
Отлично. То, что надо.
А давайте зададимся целью объединить столбцы "Поставщик" и "Клиент" в один? И пусть этот новый столбец будет называться "Контрагент".
Для этого заходим на закладку "Наборы данных" и меняем имя поля "Поставщик" в наборе "Покупки" на имя "Контрагент":
Затем в наборе "Продажи" меняем имя поля "Клиент" на имя "Контрагент":
Переходим на закладку "Настройки", выделяем пункт "Отчет", переходим внизу на закладку "Выбранные поля", удаляем уже не существующие поля "Поставщик" и "Клиент" и перетаскиваем из первой колонки во вторую новое поле "Контрагент":
Должно получится вот так:
Готово
Сохраняем отчёт и проверяем в режиме пользователя:
Замечательно всё получилось.
Войдите на сайт как ученик
Для учеников
Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.
На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .
Механизм сравнения и объединения конфигураций позволяет сравнивать между собой два прикладных решения и объединять их полностью или выборочно по результатам сравнения.
Такая возможность используется, например, когда одно прикладное решение разрабатывается несколькими независимыми разработчиками, или в случае, когда в исходную конфигурацию нужно загрузить сделанные изменения.
Этот механизм обеспечивает не только сравнение общих свойств объектов прикладного решения (справочников, документов и т. д.), но и сравнение их отдельных реквизитов, табличных частей. Также выполняется сравнение форм: сравниваются тексты модулей, тексты описаний и макеты.
Все результаты сравнения можно просмотреть в детальном виде.
Установка соответствия объектов
При запуске режима сравнения система анализирует сравниваемые конфигурации и устанавливает соответствие между объектами конфигураций, исходя из их имен:
Однако не исключена ситуация, когда одинаковые объекты прикладного решения будут иметь различные имена или наоборот, различные объекты будут называться одинаково. В этом случае разработчик имеет возможность отказаться от соответствий, установленных по умолчанию, и установить их вручную:
Сравнение конфигураций
Результат сравнения конфигураций отображается в специальном окне:
Разработчик имеет возможность настроить состав информации, отображаемой в этом окне. Возможен просмотр всех объектов прикладного решения, только отличающихся, только измененных, присутствующих только в какой-либо одной конфигурации или только неизмененных объектов.
Для каждого отличающегося объекта можно просмотреть детальную информацию об отличиях:
Кроме того, информация об отличиях может быть получена в виде отчета:
Объединение конфигураций
Для выполнения объединения конфигураций следует отметить те объекты прикладного решения, которые будут участвовать в объединении и установить режим объединения конфигураций.
Установка режима объединения конфигураций возможна как для всей конфигурации в целом, так и для каждого элемента прикладного решения в отдельности:
Варианты сравнения и объединения конфигураций
Система поддерживает сравнение и объединение различных видов конфигураций. В качестве сравниваемых конфигураций могут выступать:
- основная конфигурация;
- конфигурация базы данных;
- конфигурация, сохраненная во внешнем файле;
- конфигурация поставщика.
Таким образом, например, возможно сравнение двух конфигураций, сохраненных во внешних файлах, или сравнение основной конфигурации с конфигурацией поставщика.
Сохранение / загрузка настроек объединения конфигураций
Настройки объединения конфигураций (или настройки обновления конфигурации на поддержке) можно сохранять в xml файл. Также доступна и обратная операция — загрузка этих настроек из файла.
Пакетный режим запуска конфигуратора также поддерживает использование настроек при объединении и обновлении конфигураций. Таким образом при объединении конфигураций, содержащих большое количество изменений, когда объединение выполняется регулярно, существует возможность полностью автоматизировать операции сборки конфигураций.
Использование внешней программы
Существует целый ряд сторонних специализированных программ, с помощью которых можно выполнять объединение модулей. Если недостаточно встроенных возможностей 1С:Предприятия, или если хочется использовать одну из сторонних программ, есть возможность подключить её в настройках конфигуратора и использовать для сравнения, настройки объединения и собственно объединения модулей конфигурации.
Для самых распространённых программ в конфигураторе 1С:Предприятия уже содержатся параметры командной строки для их запуска в различных режимах:
При желании можно использовать и другие программы, которые поддерживают запуск из командной строки. Их параметры нужно добавить в настройки конфигуратора самостоятельно.
Читайте также: