Вход | Регистрация

1С:Предприятие ::

Метки: 

Корректное соединение 3 и более запросов с разным количеством полей

Я
   merlin789
 
22.02.18 - 10:10
Добрый день, Коллеги.​
Столкнулся со следующей проблемой, не удаётся соединить несколько однотипных полей из 3 запросов к регистрам в 1 поле с соединением по 3 ключевым полям номенклатуре, складу + список дат, дата берётся из регистра производственный календарь помещается в отдельный запрос. Проблема в том, как оформить в конечный запрос, т.к номенклатура, склад и дата сворачиваются не по всем строкам, по некоторым в результате отображаются только сами значения регистра без номенклатуры, склада и даты.(значения null) хотя каждый запрос по отдельности выдаёт корректный результат. Знаю про способ естьnull но он годится только для соединения 2х таблиц. Вариант с объединить не годится т.к. разное количество полей в запросах. Остатётся вариант только группировать по 2 запроса во временную таблицу, и к ней приесодинять данные третьего запроса, но на мой взягляд данный вариант громоздкий и некорректный.
Я ищу конструкцию которая позволит объединить в 1 столбец данные одного и того же справочника(номенклатура, склад) из 3 и более запросов. Буду благодарен за пример с конструкцией или направление в котором двигаться.
 
 
   merlin789
 
1 - 22.02.18 - 10:11
//Календарь

Выбрать
НачалоПериода(ДатаКалендаря,День) как ДатаКалендаря
поместить календарь
Из
РегистрСведений.РегламентированныйПроизводственныйКалендарь
где
ДатаКалендаря между &ДатаНач и &ДатаКон
;


//Движения топлива

Выбрать
ДатаКалендаря,
Склад,
Номенклатура,
Сумма(Количество) как Количество
Поместить ДвиженияТоплива
из
(Выбрать
НачалоПериода(Дата,День) как ДатаКалендаря,
Помещение.Склад как Склад,
Номенклатура,
Количество
из
РегистрСведений.krsДвижениеТопливаНаАЗС
где
Дата между &ДатаНач и &ДатаКон
и
выбор
когда &склад<>Значение(справочник.Склады.пустаяСсылка)
тогда
помещение.Склад=&Склад
иначе
истина
конец
)как ДвижТоплива
сгруппировать по ДатаКалендаря,Склад, Номенклатура
;

//Остатки топлива

Выбрать
НачалоПериода(ДатаКалендаря,День) как ДатаКалендаря,
Склад,
Номенклатура,
Сумма(Количество) как ОстатокН
поместить ОстаткиТоплива
из
(
Выбрать
НачалоПериода(Период, день) как ДатаКалендаря,
Помещение.Склад как Склад,
Номенклатура,
Количество*Плотность как Количество
из РегистрСведений.krsДанныеУровнемеров
где период между &ДатаНач и &ДатаКон
и
выбор 
когда &склад<>Значение(справочник.Склады.пустаяСсылка)
тогда
помещение.Склад=&Склад
иначе
истина
конец)как ДДатчиков
сгруппировать по ДатаКалендаря,Склад,номенклатура
;

//Перемещения

ВЫБРАТЬ
НачалоПериода(Период, День) как ДатаКалендаря,
Склад,
Номенклатура,
КоличествоПриход как Приход,
КоличествоРасход как Расход
поместить Перемещения
ИЗ
РегистрНакопления.ТоварыВРознице.Обороты(&ДатаНач, &ДатаКон,День,
выбор
когда &Склад <>Значение(Справочник.Склады.ПустаяСсылка)
тогда
Склад=&Склад
иначе
истина
конец)
;
Выбрать
Календарь.ДатаКалендаря,
ДвиженияТоплива.Номенклатура,
ДвиженияТоплива.Склад,
ОстаткиТоплива.ОстатокН,
ДвиженияТоплива.Количество,
Перемещения.Приход,
Перемещения.Расход
из


Календарь как Календарь 
Полное Соединение
ДвиженияТоплива как ДвиженияТоплива
по
Календарь.ДатаКалендаря=ДвиженияТоплива.ДатаКалендаря

Полное Соединение
ОстаткиТоплива как ОстаткиТоплива
по
Календарь.ДатаКалендаря=ОстаткиТоплива.ДатаКалендаря
и
ДвиженияТоплива.Склад=ОстаткиТоплива.Склад
и
ДвиженияТоплива.Номенклатура=ОстаткиТоплива.Номенклатура

Полное Соединение
Перемещения как Перемещения
по
Календарь.ДатаКалендаря=Перемещения.ДатаКалендаря
и
ДвиженияТоплива.Склад=Перемещения.Склад
и
ДвиженияТоплива.Номенклатура=Перемещения.Номенклатура


упорядочить по Календарь.ДатаКалендаря
   mehfk
 
2 - 22.02.18 - 10:12
   merlin789
 
3 - 22.02.18 - 10:18
mehfk, нет проблемы соединить эти таблицы, проблема именно в колонках.
т.е для 2 таблиц это было бы так
Выбрать
Календарь.ДатаКалендаря,
ЕстьNULL(ДвиженияТоплива.Номенклатура,Остатки.Номенклатура) как Номенклатура, но как быть когда их больше?
Неужели в 1с нет никакого стандартного метода?
   МимохожийОднако
 
4 - 22.02.18 - 10:21
Нарисуй сначала в Excel таблички или в блокнотике, а потом определись что и как. Возможно, нужно объединение.
   Optan
 
5 - 22.02.18 - 10:22
(3) ЕстьNULL(ДвиженияТоплива.Номенклатура,ЕстьNULL(ОстаткиТоплива.Номенклатура,Перемещения.Номенклатура) 
(1)
А почему не соединится с календарем тремя левыми соединениями и сгруппировать?
   merlin789
 
6 - 22.02.18 - 10:28
(5)была такая мысль
т.е. алгоритм таков?

3 левых соединения с календарём
Выбрать
ДатаКалендаря
ЕстьNULL(таблица1),ЕстьNULL(таблица2),ЕстьNULL(таблица3) как номенклатура
ИЗ
(таблица1
объединить
таблица2
объединить
таблица3)
сгруппировать по номенклатура
   Optan
 
7 - 22.02.18 - 10:37
(6) Ну я думал как то так:
Выбрать 
Календарь.Дата,
ЕстьNULL(Таблица1.Номенклатура,ЕстьNULL(Таблица2.Номенклатура,Таблица3.Номенклатура)),
ЕстьNULL(Таблица1.Склад,ЕстьNULL(Таблица2.Склад,Таблица3.Склад)),
....Дальше Сумма/Максимум(тут все твои числовые показатели)
 из Календарь
ЛЕВОЕ СОЕДИНЕНИЕ Таблица1 КАК Таблица1
ПО Календарь.Дата=Таблица1.Дата
......
СГРУППИРОВАТЬ ПО 
Календарь.Дата,
ЕстьNULL(Таблица1.Номенклатура,ЕстьNULL(Таблица2.Номенклатура,Таблица3.Номенклатура)),
ЕстьNULL(Таблица1.Склад,ЕстьNULL(Таблица2.Склад,Таблица3.Склад))

   merlin789
 
8 - 22.02.18 - 10:39
(7)Спасибо!


Список тем форума
Рекламное место пустует Рекламное место пустует
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки - вот настоящая работа.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует