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

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

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

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

Ниже код:


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

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

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

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

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

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

В тзОстатки_МинусМесяц и тзОстатки_КонецГода есть Подразделение?

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