Куперс

Бухучет и анализ

Чем отличается объединить и объединить все?

Внимание! Перед вами ознакомительная версия урока, материалы которого могут быть неполными.

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

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

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

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

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

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

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

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

ВЫБРАТЬ Наименование ИЗ Справочник.Цвета

Вкусы так:

ВЫБРАТЬ Наименование ИЗ Справочник.Вкусы

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

ВЫБРАТЬ Наименование ИЗ Справочник.Цвета ОБЪЕДИНИТЬ ВЫБРАТЬ Наименование ИЗ Справочник.Вкусы

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

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

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

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

ВЫБРАТЬ Наименование ИЗ Справочник.Цвета ОБЪЕДИНИТЬ ВЫБРАТЬ Калорийность ИЗ Справочник.Еда

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

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

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

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

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

ВЫБРАТЬ Наименование ИЗ Справочник.Цвета ОБЪЕДИНИТЬ ВЫБРАТЬ Калорийность ИЗ Справочник.Еда ОБЪЕДИНИТЬ ВЫБРАТЬ Код ИЗ Справочник.Вкусы

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

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

ВЫБРАТЬ Наименование ИЗ Справочник.Цвета ОБЪЕДИНИТЬ ВЫБРАТЬ Наименование ИЗ Справочник.Цвета

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

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

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

ВЫБРАТЬ Наименование ИЗ Справочник.Цвета ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Наименование ИЗ Справочник.Цвета

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

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

ВЫБРАТЬ Наименование ИЗ Справочник.Цвета УПОРЯДОЧИТЬ ПО Наименование ОБЪЕДИНИТЬ ВЫБРАТЬ Наименование ИЗ Справочник.Вкусы

Получим ошибку:

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

ВЫБРАТЬ Наименование ИЗ Справочник.Цвета ОБЪЕДИНИТЬ ВЫБРАТЬ Наименование ИЗ Справочник.Вкусы УПОРЯДОЧИТЬ ПО Наименование УБЫВ

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

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

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

ВЫБРАТЬ Вкус ИЗ Справочник.Еда ИТОГИ ПО Вкус ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Цвет ИЗ Справочник.Еда

Получим ошибку:

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

ВЫБРАТЬ Вкус ИЗ Справочник.Еда ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Цвет ИЗ Справочник.Еда ИТОГИ ПО Вкус

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

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

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

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

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

ВЫБРАТЬ Номенклатура, Количество ИЗ Документ.ПоступлениеЕды.Еда

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

ВЫБРАТЬ Номенклатура, СУММА(Количество) КАК Приход ИЗ Документ.ПоступлениеЕды.Еда СГРУППИРОВАТЬ ПО Номенклатура

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

ВЫБРАТЬ Номенклатура, СУММА(Количество) КАК Расход ИЗ Документ.ПродажаЕды.Еда СГРУППИРОВАТЬ ПО Номенклатура

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

ВЫБРАТЬ Номенклатура, СУММА(Количество) КАК Приход, СУММА(0) КАК Расход ИЗ Документ.ПоступлениеЕды.Еда СГРУППИРОВАТЬ ПО Номенклатура ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Номенклатура, СУММА(0), СУММА(Количество) ИЗ Документ.ПродажаЕды.Еда СГРУППИРОВАТЬ ПО Номенклатура УПОРЯДОЧИТЬ ПО Номенклатура

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

ВЫБРАТЬ Номенклатура, СУММА(Количество) КАК Приход ИЗ Документ.ПоступлениеЕды.Еда СГРУППИРОВАТЬ ПО Номенклатура ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Номенклатура, СУММА(Количество) КАК Расход ИЗ Документ.ПродажаЕды.Еда СГРУППИРОВАТЬ ПО Номенклатура

то получили бы совсем другой результат:

Сравните этот и предыдущий запрос и их результаты.

Пройдите тест

Начать тест

v8: чем отличается ОБЪЕДИНИТЬ от СОЕДИНЕНИЕ

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

<Перечень соединений> <Соединение> <Соединение> СОЕДИНЕНИЕ <Описание источника> ПО <Условие отбора> | ЛЕВОЕ СОЕДИНЕНИЕ <Описание источника> ПО <Условие отбора> | ПРАВОЕ СОЕДИНЕНИЕ <Описание источника> ПО <Условие отбора> | ПОЛНОЕ СОЕДИНЕНИЕ <Описание источника> ПО <Условие отбора> | В общем случае <Перечень соединений> может содержать и описывать не только одно соединение (двух источников), но и несколько соединений нескольких источников сразу.
<Описание источника> содержит описание исходной таблицы – см. Описание источников запроса.
<Условие отбора> содержит условия, в соответствии с которыми в выборке необходимо соединить данные из исходных таблиц – источников запроса. Правила описания условий в языке запросов рассматриваются в Условия в языке запросов.
Ключевые слова ЛЕВОЕ, ПРАВОЕ и ПОЛНОЕ уточняют характер соединения. Слова ВНУТРЕНЕЕ или ВНЕШНЕЕ можно не указывать вообще, они повышают наглядность и удобочитаемость текста запроса.
Соединяемые источники не равнозначны между собой, и в некоторых случаях результат зависит от того, какая таблица указана первой, до ключевого слова СОЕДИНЕНИЕ (слева от него), а какая – второй (справа).
Объединение запросов
В языке запросов имеется возможность объединять несколько запросов; при этом записи, полученные с помощью каждого из объединяемых запросов, будут собраны в один результат запроса.
При объединении каждый запрос собирает данные независимо, а такие операции, как упорядочивание результатов и расчет итогов выполняются уже над результатом объединения запросов.
Поля результата запроса будут называться так, как описано в списке полей выборки первого из объединяемых запросов. Поля выборки остальных запросов сопоставляются с полями результата в соответствии с порядком их следования в списке полей выборки. Объединяемые запросы должны иметь одинаковое количество полей в списке полей выборки.
Если поля выборки объединяемых запросов имеют разный тип, то поля результата запроса будут иметь составной тип.
Объединение запросов описывается по следующему правилу:
<Объединение запросов> ОБЪЕДИНИТЬ <Описание запроса> Объединение запросов начинается с обязательного ключевого слова ОБЪЕДИНИТЬ, после которого следует описание присоединяемого запроса. Далее может присоединяться еще один запрос и т. д.

По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные разными запросами, заменяются одной. Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое слово ВСЕ.
Продам СП, Дорого (с) ДенисЧ (?)

Для более глубокого изучения 1С скачайте книгу «Разработка оперативного учёта в 1С 8.3»

Функциональные особенности конструкций для языка запросов в 1С

Результатом выполнения объединения запросов будет слияние двух результатов вместе. То есть данные будут получены по обоим запросам, но соединены в одно. К примеру, по следующим данным

необходимо вычислить общий долг по каждому контрагенту. Очевидно, что для этого необходимо сложить по каждому контрагенту расход, что соответствует отгрузке товара в суммовом выражении и вычесть приход, т.е. реально поступившую оплату за продукцию. Чтобы получить корректный результат, нужно применить конструкцию языка запросов «ОБЪЕДИНИТЬ ВСЕ». Как это будет выглядеть на практике:

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

И далее:

Теперь результатом запроса будут следующие данные:

Контрагент Долг
Мебель + 200
Квант 1000
Траст 300
Сложности при объединении запросов

Если задача – объединить два запроса, то при этом у них должно совпадать количество по показателю «Поле». К примеру, если в таблице Расход есть информация о скидке, которая не предусмотрена в таблице данных Приход, то это поле в данные таблицы Приход необходимо добавить в форме констант. В дальнейшем скидку нужно будет вычесть, а результаты вычислений сгруппировать. Не стоит пренебрегать порядком расположения полей, потому что объединение информации происходит именно в той порядковой очередности, в которой поля указаны для секций ВЫБРАТЬ в каждом из запросов.

Различия в конструкциях

Неправильное применение конструкций «ОБЪЕДИНИТЬ» и «ОБЪЕДИНИТЬ ВСЕ» языка запросов приводит к негативным последствиям. К примеру, если выполнить запрос в следующем виде:

то в полученной таблице будет две одинаковые строки. Для данного случая необходимо ОБЪЕДИНИТЬ заменить на — ОБЪЕДИНИТЬ ВСЕ. В чём же главное отличие этих двух конструкций и почему иногда нужно ставить «ОБЪЕДИНИТЬ», а в других случаях только «ОБЪЕДИНИТЬ ВСЕ».

Конструкция «ОБЪЕДИНИТЬ ВСЕ» не выполняет группировку по строкам полученного результата. Конструкция «ОБЪЕДИНИТЬ» производит слияние двух результатов и при этом выполняет группировку повторяющихся строк. В том случае, когда заранее известно, что получить одинаковые строки невозможно, эффективнее использование конструкции «ОБЪЕДИНИТЬ ВСЕ». Это улучшает быстродействие, так как не приходится проверять результаты на идентичность для их последующей группировки.

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

  • 1С:Предприятие 8.2. Практическое пособие разработчика. Примеры и типовые приемы
    • Обложка
    • Титульный лист
    • Выходные данные
    • Предисловие
      • Кому предназначена эта книга
      • Как читать
      • Благодарности
      • Что находится на компакт-диске
      • Ограничения учебной версии платформы
    • Занятие 1 (0:40). Знакомство, создание информационной базы
      • Программирование или разработка?
      • Общие сведения о системе
      • Конфигурация и прикладное решение
      • Режимы работы системы
      • Создание новой информационной базы
      • В режиме «Конфигуратор»
        • Знакомство с конфигуратором
        • Дерево объектов конфигурации
        • Что такое объекты конфигурации
        • Как добавить объект конфигурации
        • Палитра свойств
        • Запуск отладки в режиме «1С:Предприятие»
      • В режиме «1С:Предприятие»
        • Внешний вид интерфейса прикладного решения
      • Контрольные вопросы
    • Занятие 2 (0:45). Подсистемы
      • Что такое подсистема
      • Добавление подсистемы
        • В режиме «Конфигуратор»
          • Имя и синоним объекта конфигурации
          • Картинка подсистемы
      • Панель разделов прикладного решения
        • В режиме «1С:Предприятие»
      • Порядок разделов
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • «Теория». Окно редактирования объекта конфигурации и палитра свойств
      • Контрольные вопросы
    • Занятие 3 (2:10). Справочники
      • Что такое справочник
      • Формы справочника
      • Простой справочник
        • В режиме «Конфигуратор»
          • Представления объекта конфигурации
          • Принадлежность объекта к подсистемам
          • Код и наименование справочника
          • Команда добавления нового элемента
        • В режиме «1С:Предприятие»
          • Панель навигации и панель разделов
          • Создание элементов справочника
      • «Теория».Проверка заполнения стандартных реквизитов
      • Справочник с табличной частью
        • В режиме «Конфигуратор»
          • Табличная часть
        • В режиме «1С:Предприятие»
          • Заполнение табличной части
      • Иерархический справочник
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
          • Создание элементов в иерархическом справочнике
          • Перенос элементов в другие группы
      • Справочник с предопределенными элементами
        • В режиме «Конфигуратор»
          • Свойство «Быстрый выбор»
          • Предопределенные элементы
        • В режиме «1С:Предприятие»
      • «Теория». Предопределенные элементы
        • Основная конфигурация и конфигурация базы данных
      • Контрольные вопросы
    • Занятие 4 (1:30). Документы
      • Что такое документ
      • Формы документа
      • «Теория». Типы данных. Типообразующие объекты конфигурации
      • Документ «Приходная накладная»
        • В режиме «Конфигуратор»
          • Добавление документа
          • Реквизиты ссылочного типа
          • Свойство «Значение заполнения» реквизита объекта конфигурации
          • Проверка заполнения табличной части
        • В режиме «1С:Предприятие»
          • Добавление приходных накладных
      • «Теория». Справочники и документы
      • Автоматический пересчет суммы в строках документа
        • В режиме «Конфигуратор»
          • Форма документа
          • Обработчик события
        • В режиме «1С:Предприятие»
      • Одна процедура для обработки нескольких событий
        • В режиме «Конфигуратор»
          • Общий модуль
        • В режиме «1С:Предприятие»
      • Документ «Оказание услуги»
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Занятие 5 (2:00). Теоретическое
      • Механизм основных форм
      • Обработчики событий
      • Модули
        • Виды модулей
        • Контекст модуля формы
      • Форма как программный объект
      • Процедуры – обработчики событий в модуле формы
      • Как понять то, что написано в модуле формы
      • Как понять работу кода на встроенном языке
        • Анализ кода с помощью синтакс-помощника
          • Первый способ
          • Второй способ
        • Анализ кода с помощью отладчика
      • Объекты, объекты, объекты…
      • Сервер и клиенты
      • Компиляция общих модулей
      • Директивы компиляции
      • Исполнение кода на клиенте и на сервере
    • Занятие 6 (0:50). Регистры накопления
      • Зачем нужен регистр накопления
      • Что такое регистр накопления
      • Добавление регистра накопления
        • В режиме «Конфигуратор»
          • Движения документа
        • В режиме «1С:Предприятие»
      • Команда перехода к движениям в форме документа
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Движения документа «Оказание услуги»
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • «Теория». Способы работы с коллекцией
      • Контрольные вопросы
    • Занятие 7 (0:25). Простой отчет
      • Что такое отчет
      • Добавление отчета
        • В режиме «Конфигуратор»
          • Макет
          • Схема компоновки данных
          • Набор данных
          • Текст запроса
          • Настройки отчета
        • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Занятие 8 (1:10). Макеты. Редактирование макетов и форм
      • Что такое макет
      • Макет печатной формы
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Редактирование макета
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Редактирование формы
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Занятие 9 (0:50). Периодические регистры сведений
      • Зачем нужен периодический регистр сведений
      • Что такое регистр сведений
      • Добавление периодического регистра сведений
        • В режиме «Конфигуратор»
          • Измерения и ресурсы
        • В режиме «1С:Предприятие»
          • Создание записей в регистре сведений
      • Автоматическая подстановка цены в документ при выборе номенклатуры
        • В режиме «Конфигуратор»
          • Функция, возвращающая цену номенклатуры
          • Вызов функции при выборе номенклатуры и заполнение цены в документе
        • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Занятие 10 (0:30). Перечисления
      • Что такое перечисление
      • Добавление перечисления
        • В режиме «Конфигуратор»
      • Привязка номенклатуры к значениям перечисления «ВидНоменклатуры»
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Регистрация расхода только той номенклатуры, которая является материалом
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Занятие 11 (1:20). Проведение документа по нескольким регистрам
      • Зачем нужно проведение документа по нескольким регистрам
      • Добавление еще одного регистра накопления
        • В режиме «Конфигуратор»
      • Проведение приходной накладной по двум регистрам
        • В режиме «Конфигуратор»
          • Изменение процедуры проведения
          • Команда перехода к записям регистра
        • В режиме «1С:Предприятие»
      • Проведение документа «Оказание услуги» по двум регистрам
        • В режиме «Конфигуратор»
          • Новый реквизит документа
          • Изменение процедуры проведения
        • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Занятие 12 (0:40). Оборотные регистры накопления
      • Зачем нужно создавать еще один регистр
      • Что такое оборотный регистр накопления
      • Добавление оборотного регистра накопления
        • В режиме «Конфигуратор»
      • Проведение документа «Оказание услуги» по трем регистрам
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Занятие 13 (4:30). Отчеты
      • «Теория». Способы доступа к данным
        • Работа с запросами
          • Источники данных запросов
          • Язык запросов
        • Система компоновки данных
      • Выбор данных из одной таблицы
        • В режиме «Конфигуратор»
          • Запрос для набора данных
            • Псевдонимы полей
            • Порядок записей
          • Анализ текста запроса
          • Настройки
        • В режиме «1С:Предприятие»
      • Выбор данных из двух таблиц
        • В режиме «Конфигуратор»
          • Запрос для набора данных
            • Левое соединение двух таблиц
            • Условие отбора записей
            • Псевдонимы полей
            • Порядок записей
          • Анализ текста запроса
          • Ресурсы
          • Параметры
          • Настройки
          • Быстрые пользовательские настройки
        • В режиме «1С:Предприятие»
        • Настройки в конфигураторе и в режиме «1С:Предприятие»
          • Условное оформление
            • В режиме Конфигуратор
            • В режиме «1С:Предприятие»
          • Пользовательские настройки
            • В режиме «Конфигуратор»
          • Отбор
            • В режиме «Конфигуратор»
            • В режиме «1С:Предприятие»
      • Вывод данных по всем дням в выбранном периоде
        • В режиме «Конфигуратор»
          • Запрос для набора данных
            • Параметры виртуальной таблицы
          • Анализ текста запроса
          • Ресурсы
          • Параметры
          • Настройки
        • В режиме «1С:Предприятие»
        • Вывод всех дат в выбранном периоде
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
        • Новый вариант отчета
          • Диаграмма
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
      • Получение актуальных значений из периодического регистра сведений
        • В режиме «Конфигуратор»
          • Запрос для набора данных
            • Параметры виртуальной таблицы
            • Левое соединение таблиц
            • Псевдонимы полей
          • Анализ текста запроса
          • Параметры
          • Настройки
        • В режиме «1С:Предприятие»
      • Использование вычисляемого поля в отчете
        • В режиме «Конфигуратор»
          • Запрос для набора данных
          • Вычисляемые поля
          • Ресурсы
          • Настройки
        • В режиме «1С:Предприятие»
      • Вывод данных в таблицу
        • В режиме «Конфигуратор»
          • Запрос для набора данных
          • Анализ текста запроса
          • Ресурсы
          • Настройки
        • В режиме «1С:Предприятие»
      • «Теория». Виртуальные таблицы запросов
      • Контрольные вопросы
    • Занятие 14 (3:20). Оптимизация проведения документа «Оказание услуги»
      • «Теория». Особенности использования ссылочных данных
      • Повышение скорости проведения
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Автоматический расчет стоимости
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • «Теория». Как быстро посмотреть результат запроса
        • Оперативное и неоперативное проведение документов
        • Понятие момента времени
      • Контроль остатков
        • В режиме «Конфигуратор»
      • Блокировка данных, которые читаются и изменяются при проведении
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • «Теория». Устройство кеша
        • Обычный кеш
        • Транзакционный кеш
      • Контрольные вопросы
    • Занятие 15 (2:50). План видов характеристик
      • Постановка задачи
      • Что такое план видов характеристик
      • Логическая связь объектов
      • Создание новых объектов конфигурации
        • В режиме «Конфигуратор»
      • Доработка объектов конфигурации
        • Справочник «Номенклатура»
          • В режиме «1С:Предприятие»
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
        • Справочник «Варианты номенклатуры»
          • В режиме «1С:Предприятие»
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
        • Регистр «Значения свойств номенклатуры»
          • В режиме «1С:Предприятие»
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
      • Создание характеристик номенклатуры
        • В режиме «1С:Предприятие»
      • Доработка учетных механизмов
        • Регистр «Остатки материалов»
          • В режиме «Конфигуратор»
        • Документ «Приходная накладная»
          • В режиме «Конфигуратор»
        • Документ «Оказание услуги»
          • В режиме «Конфигуратор»
      • Приход/расход номенклатуры с учетом характеристик
        • В режиме «1С:Предприятие»
      • Отчет, использующий характеристики
        • В режиме «Конфигуратор»
          • Запрос для набора данных
          • Ресурсы
          • Настройки
        • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Занятие 16 (1:50). Бухгалтерский учет
      • План видов характеристик в бухгалтерском учете
      • Добавление плана видов характеристик
        • В режиме «Конфигуратор»
      • Что такое «План счетов»
      • Добавление плана счетов
        • В режиме «Конфигуратор»
      • Что такое регистр бухгалтерии
      • Добавление регистра бухгалтерии
        • В режиме «Конфигуратор»
      • Доработка приходной накладной
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Доработка документа «Оказание услуги»
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Оборотно-сальдовая ведомость
        • В режиме «Конфигуратор»
          • Запрос для набора данных
          • Ресурсы
          • Параметры
          • Настройки
        • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Занятие 17 (1:00). План видов расчета, регистр расчета
      • Зачем нужен план видов расчета и регистр расчета?
        • Зависимость по базовому периоду
        • Вытеснение по периоду действия
      • Что такое план видов расчета
      • Добавление плана видов расчета
        • В режиме «Конфигуратор»
      • Что такое регистр расчета
        • Периодичность
        • Вытеснение по периоду действия
        • Зависимость по базовому периоду
          • Зависимость по периоду действия
          • Зависимость по периоду регистрации
      • Добавление регистра расчета
        • В режиме «Конфигуратор»
      • В режиме «1С:Предприятие»
        • В режиме «Конфигуратор»
      • Контрольные вопросы
    • Занятие 18 (3:40). Использование регистра расчета
      • Добавление документа о начислениях
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Иллюстрация механизмов вытеснения и зависимости от базы
        • Отчет по перерасчетам
          • В режиме «Конфигуратор»
        • Зависимость по базовому периоду
          • В режиме «1С:Предприятие»
        • Вытеснение по периоду действия
          • В режиме «1С:Предприятие»
      • Процедура расчета записей регистра расчета
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Отчет о начислениях сотрудникам
        • В режиме «Конфигуратор»
          • Запрос для набора данных
          • Ресурсы
          • Настройки
        • В режиме «1С:Предприятие»
      • Перерасчет
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Диаграмма Ганта
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Занятие 19 (1:30). Поиск в базе данных
      • Общие сведения о механизме полнотекстового поиска в данных
      • Полнотекстовый индекс
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Отчет для поиска данных
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Занятие 20 (1:00). Выполнение заданий по расписанию
      • Постановка задачи
      • Что такое регламентное задание
      • Создание регламентных заданий
        • В режиме «Конфигуратор»
      • Планировщик заданий
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Занятие 21 (0:40). Редактирование движений в форме документа
      • В режиме «Конфигуратор»
      • В режиме «1С:Предприятие»
      • Программное редактирование записей регистра
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
        • Где создавать обработчики событий
      • Контрольные вопросы
    • Занятие 22 (1:00). Список пользователей и их роли
      • Что такое роль
      • Создание ролей
        • В режиме «Конфигуратор»
          • Администратор
          • Директор
          • Мастер
          • Расчетчик
          • Бухгалтер
          • Права на запуск клиентских приложений
      • Добавление новых пользователей
        • В режиме «Конфигуратор»
      • Ограничение доступа к данным на уровне записей и полей базы данных
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
        • В режиме «Конфигуратор»
      • Контрольные вопросы
    • Занятие 23 (1:10). Рабочий стол и настройка командного интерфейса
      • Командный интерфейс разделов
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Рабочий стол
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Видимость команд по ролям
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Занятие 24 (6:10). Обмен данными
      • Общие сведения об обмене данными
        • Что такое план обмена
        • XML-сериализация
        • Запись/чтение документов XML
      • Универсальный механизм обмена данными
        • Константа для обмена данных
          • В режиме «Конфигуратор»
        • Доработка объектов конфигурации, участвующих в обмене
          • В режиме «Конфигуратор»
        • Добавление плана обмена
          • В режиме «Конфигуратор»
        • Процедуры обмена данными
          • В режиме «Конфигуратор»
          • Процедура записи данных
          • Процедура чтения данных
        • Проверка работы обмена данными
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
          • Запуск базы филиала
            • В режиме «Конфигуратор»
            • В режиме «1С:Предприятие»
      • Механизм распределенных информационных баз
        • Основные сведения
        • Постановка задачи
        • Интерактивный обмен
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
          • Запуск базы отделения
            • В режиме «Конфигуратор»
            • В режиме «1С:Предприятие»
        • Программный обмен
          • В режиме «Конфигуратор»
        • Изменение структуры узлов
      • Контрольные вопросы
    • Занятие 25 (0:30). Функциональные опции
      • Опции «Бухгалтерский учет» и «Расчет зарплаты»
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Опция «Учет клиентов»
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Занятие 26 (1:00). Подборы и ввод на основании
      • Организация подборов
        • Одиночный подбор
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
        • Множественный подбор
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
        • Подбор с использованием множественного выбора
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
        • Множественный подбор с использованием множественного выбора
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
        • Использование метода «Оповестить о выборе()»
      • Ввод на основании
        • Команда ввода на основании
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
        • Объекты, введенные на основании
        • Критерий отбора
        • Получение объектов, введенных на основании
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Занятие 27 (2:10). Приемы разработки форм
      • Данные и элементы формы
      • Типы данных формы
      • Связанные списки
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Оформление строк в форме списка
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Вычисляемые колонки в списках
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Список выбора для поля ввода
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Форма выбора для поля, содержащего ссылочный реквизит
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Проверка заполнения реквизитов
        • Автоматическая проверка заполнения
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
        • Программная проверка заполнения
          • В режиме «Конфигуратор»
          • В режиме «1С:Предприятие»
      • Использование параметризированных команд
        • В режиме «Конфигуратор»
        • В режиме «1С:Предприятие»
      • Контрольные вопросы
    • Краткий справочник разработчика
      • Объекты встроенного языка для работы с прикладными данными
      • Манипулирование данными объектов
      • Константы
        • Объекты встроенного языка для работы с константами
        • Последовательность событий при записи констант из формы констант (записать и закрыть)
      • Справочники
        • Объекты встроенного языка для работы со справочниками
        • Последовательность событий при записи элемента справочника из формы элемента (записать и закрыть)
      • Документы
        • Объекты встроенного языка для работы с документами
        • Последовательность событий при записи документа из формы документа
        • Последовательность событий при проведении документа из формы документа (провести и закрыть)
        • Последовательность событий при отмене проведения документа из формы документа
      • Перечисления
        • Объекты встроенного языка для работы с перечислениями
      • Планы видов характеристик
        • Объекты встроенного языка для работы с планами видов характеристик
        • Последовательность событий при записи вида характеристики из формы элемента (записать и закрыть)
      • Планы счетов
        • Объекты встроенного языка для работы с планами счетов
        • Последовательность событий при записи счета из формы счета (записать и закрыть)
      • Планы видов расчета
        • Объекты встроенного языка для работы с планом видов расчета
        • Последовательность событий при записи вида расчета из формы вида расчета (записать и закрыть)
      • Регистры сведений
        • Объекты встроенного языка для работы с регистрами сведений
        • Последовательность событий при сохранении данных из формы записи регистра сведений (записать и закрыть)
        • Последовательность событий при сохранении данных из формы набора записей регистра сведений (записать и закрыть)
      • Регистры накопления
        • Объекты встроенного языка для работы с регистрами накопления
        • Последовательность событий при сохранении набора записей регистра накопления из формы набора записей
      • Регистры бухгалтерии
        • Объекты встроенного языка для работы с регистрами бухгалтерии
        • Последовательность событий при сохранении набора записей регистра бухгалтерии из формы
      • Регистры расчета
        • Объекты встроенного языка для работы с регистрами расчетов
        • Последовательность событий при сохранении набора записей регистра расчета из формы
      • Планы обмена
        • Объекты встроенного языка для работы с планами обмена
        • Последовательность событий при записи узла плана обмена из формы узла (записать и закрыть)
    • Глоссарий

При попытке соединения в запросе двух таблиц в режиме «Левое соединение» иногда возникает ситуация, когда данные из левой таблицы выбираются не все, как должно быть, а только те, которые есть в правой таблице. То есть, получается «Внутреннее соединение».

Например, мы хотим выбрать все документы «Заказ клиента» за какой-то период и соединить каждый из них со своим значением дополнительного сведения «Вип заказ», которое имеет тип «Булево» и хранится в регистре сведений «Дополнительные сведения».

Нужно помнить, что в указанном регистре сведений находятся не все документы «Заказ клиента», а только те, у которых значение дополнительного сведения «Вип заказ» установлено в «Да».

Итак, пишем запрос:

Запрос = Новый Запрос; Запрос.Текст = «ВЫБРАТЬ | ЗаказыКлиентов.Ссылка КАК ЗаказКлиента, | ДополнительныеСведения.Значение КАК ЭтоВипЗаказ |ИЗ | Документ.ЗаказКлиента КАК ЗаказыКлиентов | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения | ПО (ЗаказыКлиентов.Ссылка = ДополнительныеСведения.Объект) |ГДЕ | ДополнительныеСведения.Свойство = &СвойствоДопСведения»; Запрос.УстановитьПараметр(«СвойствоДопСведения», ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Вип заказ (Список заказов клиентов)»); Запрос.Выполнить();

В выборке этого запроса мы увидим результат не «Левого соединения», которое мы указали в тексте запроса, а «Внутреннего соединения». В выборке окажутся только те документы «Заказ клиента», которые присутствуют в правой таблице – «ДополнительныеСведения».

Чтобы избежать такую ситуацию, нужно использовать временную таблицу или вложенный запрос.

Решение с использованием временной таблицы:

Запрос = Новый Запрос; Запрос.Текст = «ВЫБРАТЬ | ДополнительныеСведения.Объект КАК ЗаказКлиента, | ДополнительныеСведения.Значение КАК ЭтоВипЗаказ |ПОМЕСТИТЬ ДополнительныеСведения |ИЗ | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения |ГДЕ | ДополнительныеСведения.Свойство = &СвойствоДопСведения |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЗаказыКлиентов.Ссылка КАК ЗаказКлиента, | ДополнительныеСведения.ЭтоВипЗаказ КАК ЭтоВипЗаказ |ИЗ | Документ.ЗаказКлиента КАК ЗаказыКлиентов | ЛЕВОЕ СОЕДИНЕНИЕ ДополнительныеСведения КАК ДополнительныеСведения | ПО ЗаказыКлиентов.Ссылка = ДополнительныеСведения.ЗаказКлиента»; Запрос.УстановитьПараметр(«СвойствоДопСведения», ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Вип заказ (Список заказов клиентов)»); Запрос.Выполнить();

Решение с использованием вложенного запроса:

Запрос = Новый Запрос; Запрос.Текст = «ВЫБРАТЬ | ЗаказыКлиентов.Ссылка КАК ЗаказКлиента, | ДополнительныеСведения.ЭтоВипЗаказ КАК ЭтоВипЗаказ |ИЗ | Документ.ЗаказКлиента КАК ЗаказыКлиентов | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ДополнительныеСведения.Объект КАК ЗаказКлиента, | ДополнительныеСведения.Значение КАК ЭтоВипЗаказ | ИЗ | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения | ГДЕ | ДополнительныеСведения.Свойство = &СвойствоДопСведения) КАК ДополнительныеСведения | ПО (ЗаказыКлиентов.Ссылка = ДополнительныеСведения.ЗаказКлиента)»; Запрос.УстановитьПараметр(«СвойствоДопСведения», ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Вип заказ (Список заказов клиентов)»); Запрос.Выполнить();

Оба эти варианты запросов дадут в итоге настоящее «Левое соединение»: в выборку попадут все документы «Заказ клиента» из левой таблицы и значения дополнительного сведения из правой таблицы для тех документов, у которых это сведение задано.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Наверх