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

1С:Предприятие :: 1С:Предприятие 8 общая

Подскажите: три ТЗ в запросе

Подскажите: три ТЗ в запросе
Я
   dft2014
 
29.08.18 - 18:53
Есть три таблицы значений:
тзОстатки
тзОстатки_МинусМесяц
тзОстатки_КонецГода

Собираю их с помощью запроса в одну, причем:
- ФИО, Подразделение и Остаток должно тянуться из тзОстатки;
- ОстатокПредДата должно тянуться из тзОстатки_МинусМесяц;
- ОстатокКонецГода должно тянуться из тзОстатки_КонецГода

В результате, если Остаток пустой, то возвращает пустое ФИО, Подразделение и Должность.

Пробовала вместо |    ВТ.ФИО КАК ФИО, 
писать  |    естьNull(ВТ.ФИО,ВТКонецГода.ФИО) КАК ФИО, 
результат одинаковый. 

Ниже код:


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|    ТЗ.ФИО КАК ФИО,
|    ТЗ.Подразделение КАК Подразделение,
|    ТЗ.ОстатокТекДата КАК ОстатокТекДата
|ПОМЕСТИТЬ ВТ
|ИЗ
|    &ТЗ КАК ТЗ
|;
|
////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ
|    ТЗПредДата.ФИО КАК ФИО,
|    ТЗПредДата.ОстатокПредДата КАК ОстатокПредДата
|ПОМЕСТИТЬ ВТПредДата
|ИЗ
|    &ТЗПредДата КАК ТЗПредДата
|;
|
////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ
|    ТЗКонецГода.ФИО КАК ФИО,
|    ТЗКонецГода.ОстатокКонецГода КАК ОстатокКонецГода
|ПОМЕСТИТЬ ВТКонецГода
|ИЗ
|    &ТЗКонецГода КАК ТЗКонецГода
|;
|
////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ 
|    ВТ.ФИО КАК ФИО,
//|    естьNull(ВТ.ФИО,ВТКонецГода.ФИО) КАК ФИО,  //тоже самое выдает

|    ВТ.Подразделение КАК Подразделение,
|    ВТПредДата.ОстатокПредДата КАК ОстатокПредДата,
|    ВТ.ОстатокТекДата КАК ОстатокТекДата,
|    ВТКонецГода.ОстатокКонецГода КАК ОстатокКонецГода
|ИЗ
|    ВТ КАК ВТ
|        ПОЛНОЕ СОЕДИНЕНИЕ ВТПредДата КАК ВТПредДата
|        ПО ВТ.ФИО = ВТПредДата.ФИО
|        ПОЛНОЕ СОЕДИНЕНИЕ ВТКонецГода КАК ВТКонецГода
|        ПО ВТ.ФИО = ВТКонецГода.ФИО";

Запрос.УстановитьПараметр("ТЗ",тзОстатки);
Запрос.УстановитьПараметр("ТЗПредДата",тзОстатки_МинусМесяц);
Запрос.УстановитьПараметр("ТЗКонецГода",тзОстатки_КонецГода);

ИтоговаяТаблица = Запрос.Выполнить().Выгрузить();
 
 
   Sapiens_bru
 
1 - 29.08.18 - 19:11
Тут можно извратится и собрать конструкцией ВЫБОР все возможные варианты Null из таблиц.
Но я предлагаю поступить намного проще - используйте для связи не соединение таблиц, а объединение.
Объединяйте поля ФИО из всех таблиц, а поля остатков объединяйте с нулевыми значениями.
ФИО Пред 0 0
ФИО  0  Тек 0
ФИО  0  0  Конец

Затем полученную таблицу пихаете в новую ВТ и группируете по полю ФИО, суммируя все остальные поля.

Если нужно, потом можно связать с первой таблицей для получения подразделений.

Будет работать на порядки быстрее и не надо думать где там NULL
   iolxrfsf
 
2 - 29.08.18 - 19:13
> возвращает пустое ФИО, Подразделение и Должность.
а где здесь вообще "Должность"?

В тзОстатки_МинусМесяц и тзОстатки_КонецГода есть Подразделение?
> Пробовала "естьNull(ВТ.ФИО,ВТКонецГода.ФИО) КАК ФИО"
Можно ещё "естьNull(ВТ.ФИО,естьNull(ВТКонецГода.ФИО,ВТПредДата.ФИО)) КАК ФИО"
   МихаилМ
 
3 - 29.08.18 - 19:19
Вы Мисти ?

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует