Разработка и оптимизация запросов в 1С:Предприятие 8.3. Модуль 4. Использование нескольких таблиц в запросе: вложенные запросы, соединение, объединение
На данной странице задавайте вопросы по материалам и практическому заданию четвертого модуля курса «Разработка и оптимизация запросов в 1С:Предприятие 8.3».
Практические задания
К сожалению, у Вас недостаточно прав для дальнейшего просмотра.
Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.
Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.
Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.
Комментарии / обсуждение (382):
Комментарии закрыты
Добрый день!
Написал запрос по отбору остатков номенклатуры имеющейся на главном складе с выводом остатков на второстепенном складе. Все получилось, но есть два вопроса:
1. Если в запросе использую например функцию ЕСТЬNULL(ОстаткиСкладПроверяемый.КоличествоСкладПроверяемый, 0) КАК КоличествоСкладПроверяемый, а в секции ГДЕ напишу условие КоличествоСкладПроверяемый = 0, то результат запроса выводит пустой. Насколько понимаю условие ГДЕ работает не на конечное значение функции в выборке, а на исходные данные таблицы, поэтому не отбирает? Как в этом случае правильно установить такой отбор? Решил эту задачу поместив запрос во временную таблицу и уже по ней отобрал значение.
2. Можно ли что-то сделать чтобы не получать ошибку формирования отчета в случае когда параметр (&НулевойОстаток) не заполнен пользователем и просто не делать никакого отбора? – Создал отчет в СКД и у пользователя есть выбор Да или Нет у этого поля, а если пользователь снимет с него галку, то 1С выводит ошибку “Не задано значение параметра &НулевойОстаток”.
ОстаткиСкладГлавный.Номенклатура КАК Номенклатура,
ОстаткиСкладГлавный.КоличествоСкладОсновной КАК КоличествоСкладОсновной,
ЕСТЬNULL(ОстаткиСкладПроверяемый.КоличествоСкладПроверяемый, 0) КАК КоличествоСкладПроверяемый
ПОМЕСТИТЬ ВТ1
ИЗ
(ВЫБРАТЬ
ОстаткиНоменклатурыОстатки.Номенклатура КАК Номенклатура,
ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК КоличествоСкладОсновной
ИЗ
РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
ГДЕ
ОстаткиНоменклатурыОстатки.Склад = &СкладГлавный) КАК ОстаткиСкладГлавный
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ОстаткиНоменклатурыОстатки.Номенклатура КАК Номенклатура,
ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК КоличествоСкладПроверяемый
ИЗ
РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
ГДЕ
ОстаткиНоменклатурыОстатки.Склад = &СкладПроверяемый) КАК ОстаткиСкладПроверяемый
ПО ОстаткиСкладГлавный.Номенклатура = ОстаткиСкладПроверяемый.Номенклатура
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ1.Номенклатура КАК Номенклатура,
ВТ1.КоличествоСкладОсновной КАК КоличествоСкладОсновной,
ВТ1.КоличествоСкладПроверяемый КАК КоличествоСкладПроверяемый
ИЗ
ВТ1 КАК ВТ1
ГДЕ
ВЫБОР
КОГДА &НулевойОстаток = ИСТИНА
ТОГДА ВТ1.КоличествоСкладПроверяемый = 0
КОГДА &НулевойОстаток = ЛОЖЬ
ТОГДА ВТ1.КоличествоСкладПроверяемый <> 0
КОНЕЦ
…
(текст комментария доступен только участникам Мастер-группы)
1. Понял, учту при разработке.
2. Да, так и нужно было, чтобы все остатки показывало только на главном складе. Но за пример спасибо).
3. Ок, спасибо за рекомендацию.
4. Верно, КоличествоСкладПроверяемый принимает значение NULL, поэтому привел это значение к нулю функцией ЕСТЬNULL, просто для меня было не очевидно что отбор в этом же запросе по нулевому результату этой функции не пройдет.
5. Логику понял, благодарю)
Добрый день!
Конструкция [ ВЫБРАТЬ 1 КАК Поле1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ] дает 3 записи.
Конструкция [ ВЫБРАТЬ 1 КАК Поле1 ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ] дает 2 записи.
НО! Конструкция [ ВЫБРАТЬ 1 КАК Поле1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ] дает только 1 запись.
Исходя из этого, правильно ли думать, что запросы в “движке” объединяются поочередно, и, если слово “ВСЕ” отсутствует, то над промежуточным результатом проводиться операция убора дублей, и именно этим обусловлено то, что в последнем случае не возвращается 2 записи?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день. А если при объединении запросов поставить галку “без дублей” на первый запрос (как на скриншоте), это повлияет на что-нибудь?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый вечер! Тождественны ли понятия “Подзапрос” и “Вложенный запрос”? Если нет, то в чем разница?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый вечер! Подскажите, можно ли использовать в конструкции [ Поле В ( &Парам1, &Парам2) ] в параметрах массивы или списки значений, то-есть отобрать по значениям из набора массивов, например, или скомбинировать – отобрать по массиву строк и паре строковых значений, т.е. [ Поле В ( &Массив, &Строка1, &Строка2) ]?
…
(текст комментария доступен только участникам Мастер-группы)
1) к уроку 4.6
При внутреннем соединении двух таблиц где лучше накладывать условие: в ГДЕ или в ПО ???
или лучше сначала положить результат отбора с условием в первый пакет запроса, а вторым уже соединять?
Как вы расставите запросы по производительности и почему?
Выбрать
Таблица1.Артикул,
Таблица2.Артикул
ИЗ Таблица1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица2
ПО Таблица2.Код = Таблица1.Код
и Таблица1.Наименование ПОДОБНО %Привет%
или
Выбрать
Таблица1.Артикул,
Таблица2.Артикул
ИЗ Таблица1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица2
ПО Таблица2.Код = Таблица1.Код
ГДЕ
Таблица1.Наименование ПОДОБНО %Привет%
ИЛИ
Выбрать
Таблица1.Артикул,
Таблица1.Код
ИЗ Таблица1
ГДЕ
Таблица1.Наименование ПОДОБНО %Привет%
;
Выбрать
Таблица1.Артикул,
Таблица2.Артикул
ИЗ Таблица1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица2
ПО Таблица2.Код = Таблица1.Код
…
(текст комментария доступен только участникам Мастер-группы)
Правильно я понимаю, что в первом варианте перед соединением таблица не фильтруется, т.е. по-другому, фильтр по наименованию срабатывает во время соединения?
Как в данном случае отрабатывают индексы? Порядок полей соединения в идеале должен соответствовать порядку индексов?
Что лучше использовать? внутреннее соединение или несколько полей в условии ГДЕ ((Поле1, Поле2 В (ВЫБРАТЬ…))
…
(текст комментария доступен только участникам Мастер-группы)
Вопрос по уроку 4.2.02 Соединение в запросах (Декартово произведение).
В тестах по 1С Профессионал по платформе есть вопрос:
7.38. Если в конструкторе запроса при использовании нескольких таблиц очистить закладку “Связи” то … правильный ответ “Запрос отработает исходя из логики, которая в нем заложена”.
Является ли верным заключение, что заложенная логика системой в запросе есть Декартово произведение и в случае если одна из таблиц пустая, результат будет пустым, так как число умноженное на ноль равно нулю?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день! Не открывается консоль запросов для вложенного запроса. Просмотрела вопросы и комментарии к данному разделу. В одном из ответов на аналогичный вопрос преподаватель предложил ссылку для скачивания консоли для 8.2. Скачала, запустила в толстом клиенте, консоль все равно не открывается. через отладку запустила в толстом клиенте, не открывается. Получается, что весь текст запроса надо набирать вручную?
…
(текст комментария доступен только участникам Мастер-группы)
У меня 1С:Предприятие 8.3, учебная версия (8.3.18.1128) и Демонстрационная конфигурация “Управляемое приложение”, используемая в видеоуроках. И какой режим совместимости использовать? Скрин приложила. И если все же использовать управляемую консоль, то как в ней на закладке “Связи” добавить еще одну связь по организации (как в видеоуроке 11 модуля 4)?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день! Присоединяюсь к вопросу, не открывается вложенный запрос, скрин ошибки во вложении, тоже Демобаза с сайта итс, платформа 1С:Предприятие 8.3 (8.3.19.1417). пробовала обе консоли, меняла режим совместимости , изначально стоял 8.3.18, пробовала Не использовать, 8.3.17, тонкой, толстый – ничего. Что делать?
…
(текст комментария доступен только участникам Мастер-группы)
Как я понимаю, отчет он просит от меня, на скрине видно. Пока обхожусь конфигуратором.
…
(текст комментария доступен только участникам Мастер-группы)
Еще такой вопрос. Мы делали доработку кода в консоли для расшифровки пустых ячеек (скрин во вложении), после доработки выходит ошибка при расшифровке ячейки . Что не так?
…
(текст комментария доступен только участникам Мастер-группы)
В толстом вот это выходит, причем с самого начала, до доработки. Это мой второй курс после “21 день”. Перед записью на курс уточняла, хватит ли этого, написали, что хватит, теперь каждый раз выходят ошибки, которые замедляют процесс и которые исправить мне пока не под силу. В каких курсах изучаются данные моменты?
…
(текст комментария доступен только участникам Мастер-группы)
В уроке 4-15 система предложила связь документа и его табличной части по ссылке:
РасходТовараТовары.Ссылка = РасходТовара.Ссылка
Связь не понятна, представляла так, что у документа своя ссылка, а у его табличной части – своя, подчинённая ссылке документа. В чём ошибаюсь?
…
(текст комментария доступен только участникам Мастер-группы)
А как тогда программа понимает на что ссылка: на сам документ или на его табличную часть?
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо, кажется, поняла.
…
(текст комментария доступен только участникам Мастер-группы)
К сожалению, при редактировании произвольного выражения у меня не срабатывает лайфхак с постановкой пробела и открытием отдельного конструктора запроса для написания текста вложенного запроса (см. скриншот). В чём может быть причина? Пробовал консоли запросов для платформы 8.2 и 8.3 с сайта its.1c.ru. Причём, что странно, консоль запросов для платформы 8.2 выглядит не как у Вас, а скорее также, как для платформы 8.3.
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день. Практическое задание №20.
На мой взгляд итоговый текст запроса можно улучшить. А именно, во вложенном запросе использовать группировку, чтобы в список для сравнения не попадали повторяющиеся ссылки складов:
Склады.Наименование КАК Наименование
ИЗ
Справочник.Склады КАК Склады
ГДЕ
НЕ Склады.Ссылка В
(ВЫБРАТЬ
ПоступлениеТоваров.Склад КАК Склад
ИЗ
Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
СГРУППИРОВАТЬ ПО
ПоступлениеТоваров.Склад)
…
(текст комментария доступен только участникам Мастер-группы)
А почему ключевое слово РАЗЛИЧНЫЕ никак не повлияло на фактический запрос к базе данных? Неужели оно отрабатывается обработчиком запроса уже после получения выборки из базы данных (как это происходит с конструкцией ИТОГИ … ПО …)?
…
(текст комментария доступен только участникам Мастер-группы)
Я прошел курс. Большое спасибо автору. Есть некоторые пожелания и замечания.
1. Заменить иностранные слова на русские, например “ОК” на “хорошо”.
2. Некоторые темы будут непонятны для людей, которые не работали с SQL.
Это было мое субъективное мнение, надеюсь не обидел, еще раз спасибо.
…
(текст комментария доступен только участникам Мастер-группы)
Насколько я понял, в 1С понимание запросов играет решающую роль. Я программировал на Ассемблере, Паскале, С, С++, после этих языков тяжело привыкнуть к синтаксису языка 1С и тем более написанию алгоритмов с использованием запросов, особенно это было показано в 9-м модуле. Без знания запросов не стоит лезть глубже, нужна будет практика, т.е. надо “набить руку”.
…
(текст комментария доступен только участникам Мастер-группы)
Практическое задание 38 скорее всего необходимо для админа?
…
(текст комментария доступен только участникам Мастер-группы)
COM-соединение, для меня это тема незнакома, и она не проходилась в курсе “Быстрый старт в профессию”
…
(текст комментария доступен только участникам Мастер-группы)
В соединениях условие в секции ГДЕ применяется к результирующей таблице, или обрабатывается до самого соединения таблиц и применяется для каждой таблицы отдельно?
Этот вопрос также касается секции СГРУППИРОВАТЬ.
…
(текст комментария доступен только участникам Мастер-группы)
В курсе “Быстрый старт в профессию” Е.Гилёв говорил, что нежелательно использовать вложенные таблицы больше 2-х уровней вложенности, иначе это тормозит работу системы.
…
(текст комментария доступен только участникам Мастер-группы)
Query-1Сv8-theory – Страница 123 –
РасходТовара.Ссылка.Номер КАК СсылкаНомер,
ПУСТАЯТАБЛИЦА.( КАК Товар, КАК Количество) КАК Состав
ИЗ
Документ.РасходТовара КАК РасходТовара
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
РасходТовара.Ссылка.Номер,
РасходТовара.Товары.(
Товар,
Количество
)
ИЗ
Документ.РасходТовара КАК РасходТовара
тут что то я совсем не понял или я что то пропустил или это дальше будет где то описываться ?
у меня вопросы – что такое вложенные таблицы ?
как в конструкторе запроса сделать ПУСТАЯТАБЛИЦА ?
что это за конструкция – РасходТовара.Ссылка.Номер – ? и как вы ее сделали в конструкторе ?
…
(текст комментария доступен только участникам Мастер-группы)
к сожалению ПУСТАЯТАБЛИЦА в конструкторе не отображается – скрин прикрепил
“РасходТовара.Ссылка.Номер – это разыменование полей в запросе (обращение к подчиненным полям значения ссылочного типа через точку)” – но в данном случии возле слова Ссылка нету плюсика – что бы раскрыть и выбрать Номер(это тоже видно на скрине) – его тоже в ручную нужно писать ?
и чего вместо РасходТовара.Ссылка.Номер – нельзя выбрать в конструкторе РасходТовара.Номер ? оно доступно для выбора и тоже самое выводит
…
(текст комментария доступен только участникам Мастер-группы)
Query-1Сv8-theory – Страница 120 –
“По умолчанию при объединении запросов полностью одинаковые строки, сформированные разными запросами, в результате заменяются одной. Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое слово ВСЕ”
– это опечатка ?
– ведь даже на видео вашем видно – что когда добавляеш второй запрос – то галка “Без дубликатов” не стоит – соответственно по умолчанию идет не ОБЪЕДИНИТЬ, а ОБЪЕДИНИТЬ ВСЕ. и соответственно по умолчанию не “По умолчанию при объединении запросов полностью одинаковые строки, сформированные разными запросами, в результате заменяются одной” – а все строки остаются, в том числе и строки дубликаты.
…
(текст комментария доступен только участникам Мастер-группы)
я еще раз перечитал и все таки запутанно написано – так как важное здесь слово “По умолчанию” и потом речь идет не про то что по умолчанию в конструкторе происходит а про то что выше в абзаце написано )
и потом про “необходимо указать ключевое слово ВСЕ” – а по факту как раз ВСЕ уже указанны по умолчанию и нужно включить галку и отключить все).
…
(текст комментария доступен только участникам Мастер-группы)