Имя: Пароль:
1C
 
Запросы в скд
0 jinny84
 
23.01.23
15:26
Добрый день. Есть скд, в нем один большой запрос, с кучей временных таблиц, каждая отвечает за свой реквизит и сли хоть в одной временной таблице в запросе не заполнен реквизит, отчет полностью выходит пустым.
Вот к примеру если НаимнованиеКарман3, то отчет полностью выходит пустым, хотя НаимнованиеКарман2 заполнена, и  отдельно если выкинуть эту таблицу, все выводит

ВЫБРАТЬ
    ТТН.НоменклатураКармана3 КАК НаимнованиеКарман3,
    ТТН.Карман3 КАК КоличествоКарман3,
    ТТН.Ссылка,
    ТТН.Рецепт,
    Доставка.Сумма / Приход.Количество * Рецепт111.КоэффициентПересчетаВЕдХранения КАК ЦенаЗаЕдиницуКарман3,
    Доставка.Регистратор,
    Приход.Регистратор КАК Регистратор1
ПОМЕСТИТЬ Номенклатура3ТТН
ИЗ
    Доставка КАК Доставка,
    Приход КАК Приход,
    Рецепт111 КАК Рецепт111,
    Документ.ТТН КАК ТТН
ГДЕ
    Рецепт111.Номенклатура = ТТН.НоменклатураКармана3
    И Рецепт111.Ссылка = ТТН.Рецепт
    И Приход.Период МЕЖДУ ДОБАВИТЬКДАТЕ(ТТН.Дата, ДЕНЬ, -14) И ТТН.Дата
    И Доставка.Период МЕЖДУ ДОБАВИТЬКДАТЕ(ТТН.Дата, ДЕНЬ, -14) И ТТН.Дата
    И Приход.Номенклатура = ТТН.НоменклатураКармана3
    И Доставка.Регистратор = Приход.Регистратор
    И ТТН.Ссылка = &Ссылка
1 jinny84
 
23.01.23
15:27
подскажите как проверять реквизит, и что если он не заполнен не лез в эту временную таблицу, а выводил 0
2 Kassern
 
23.01.23
15:30
(1) Напишите нормально запрос и такой проблемы не будет. Зачем вы таблицы в "ГДЕ" соединяете? Где у вас связи таблиц?
3 jinny84
 
23.01.23
17:00
(2) со связями тоже самое)
4 Fish
 
23.01.23
17:03
(3) Попробуй с правильными связями.
5 Kassern
 
23.01.23
17:04
(3) Почитайте уже за запросы 1с. Есть книжечка Хрусталевой на эту тему.
"подскажите как проверять реквизит" - Выбор когда Таблица.Реквизит ВидСравнения Значение Тогда...
"и что если он не заполнен не лез в эту временную таблицу, а выводил 0" - скорее всего ЕстьNull(Таблица2.Реквизит,0) - Это при условии левого соединения к Таблице1 таблицы2.
6 mikecool
 
23.01.23
17:12
с оракуля, видимо, автор перебежал...
7 jinny84
 
24.01.23
10:51
Млин, не хрена не получается, вот сам запрос, многии условия убрал. Если у этого реквизита ставлю связь НаимнованиеКарман3, все, нечего сразу не выводит

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

СГРУППИРОВАТЬ ПО
    ПартииТоваровНаСкладах.Регистратор,
    ПартииТоваровНаСкладах.Период,
    ПартииТоваровНаСкладах.Номенклатура
;

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

СГРУППИРОВАТЬ ПО
    МИРА_ОперативныеВзаиморасчеты.Период,
    МИРА_ОперативныеВзаиморасчеты.Регистратор
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    УстановкаРецептурыСостав.Ссылка,
    УстановкаРецептурыСостав.Номенклатура,
    УстановкаРецептурыСостав.Количество,
    УстановкаРецептурыСостав.КоэффициентПересчетаВЕдХранения
ПОМЕСТИТЬ Рецепт111
ИЗ
    Документ.УстановкаРецептуры.Состав КАК УстановкаРецептурыСостав
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТТН.НоменклатураКармана1 КАК НаимнованиеКарман1,
    ТТН.Карман1 КАК КоличестоКарман1,
    ТТН.Ссылка,
    Доставка.Сумма / Приход.Количество * Рецепт111.КоэффициентПересчетаВЕдХранения КАК ЦенаЗаЕдиницуКарман1,
    Доставка.Регистратор
ПОМЕСТИТЬ Номенклатура1ТТН
ИЗ
    Доставка КАК Доставка,
    Рецепт111 КАК Рецепт111,
    Приход КАК Приход,
    Документ.ТТН КАК ТТН
ГДЕ
    Рецепт111.Номенклатура = ТТН.НоменклатураКармана1
    И Рецепт111.Ссылка = ТТН.Рецепт
    И Приход.Период МЕЖДУ ДОБАВИТЬКДАТЕ(ТТН.Дата, ДЕНЬ, -14) И ТТН.Дата
    И Доставка.Период МЕЖДУ ДОБАВИТЬКДАТЕ(ТТН.Дата, ДЕНЬ, -14) И ТТН.Дата
    И Приход.Номенклатура = ТТН.НоменклатураКармана1
    И Доставка.Регистратор = Приход.Регистратор
    И ТТН.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТТН.НоменклатураКармана3 КАК НаимнованиеКарман3,
    ТТН.Карман3 КАК КоличествоКарман3,
    ТТН.Ссылка,
    ТТН.Рецепт,
    Доставка.Сумма / Приход.Количество * Рецепт111.КоэффициентПересчетаВЕдХранения КАК ЦенаЗаЕдиницуКарман3,
    Доставка.Регистратор,
    Приход.Регистратор КАК Регистратор1
ПОМЕСТИТЬ Номенклатура3ТТН
ИЗ
    Доставка КАК Доставка,
    Приход КАК Приход,
    Рецепт111 КАК Рецепт111,
    Документ.ТТН КАК ТТН
ГДЕ
    Рецепт111.Ссылка = ТТН.Рецепт
    И Приход.Период МЕЖДУ ДОБАВИТЬКДАТЕ(ТТН.Дата, ДЕНЬ, -14) И ТТН.Дата
    И Доставка.Период МЕЖДУ ДОБАВИТЬКДАТЕ(ТТН.Дата, ДЕНЬ, -14) И ТТН.Дата
    И Доставка.Регистратор = Приход.Регистратор
    И ТТН.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТТН.Ссылка,
    ТТН.Дата,
    ТТН.Клиент,
    ТТН.Поставщик,
    ТТН.Товар,
    ТТН.Объем,
    ТТН.Рецепт,
    Номенклатура1ТТН.НаимнованиеКарман1,
    Номенклатура1ТТН.КоличестоКарман1,
    СРЕДНЕЕ(Номенклатура1ТТН.ЦенаЗаЕдиницуКарман1) КАК ЦенаЗаЕдиницуКарман1,
    СРЕДНЕЕ(ЕСТЬNULL(Номенклатура3ТТН.ЦенаЗаЕдиницуКарман3, 0)) КАК Поле3
ИЗ
    Номенклатура3ТТН КАК Номенклатура3ТТН,
    Документ.ТТН КАК ТТН
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Номенклатура1ТТН КАК Номенклатура1ТТН
        ПО ТТН.Ссылка = Номенклатура1ТТН.Ссылка
ГДЕ
    ТТН.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
    ТТН.Ссылка,
    ТТН.Дата,
    ТТН.Клиент,
    ТТН.Поставщик,
    ТТН.Товар,
    ТТН.Объем,
    ТТН.Рецепт,
    Номенклатура1ТТН.НаимнованиеКарман1,
    Номенклатура1ТТН.КоличестоКарман1
8 Kassern
 
24.01.23
11:00
(7) У вас походу нет понимания как работают соединения в sql. Что такое внутреннее, левое, правое, полное соединение. Что попадает в результирующую таблицу после таких соединений. С такими знаниями вы вряд ли задачу решите, а за вас вряд ли кто отчет напишет.
Решение - все же почитать умные книжки/статьи на тему соединений. Далее можно создать базу пустышку для тренировки полученных знаний. Там завести пару регистров с совпадающими ключевыми полями для соединения (например номенклатура, или склад). А после уже ковырять консоль запросов/СКД и смотреть как ведут соединения таблиц на практике. Что будет если для одной строчки таблица1 по связи удовлетворяют 2 строчки таблица2 при левом соединении? Либо, что будет, если внутренним соединением соединить 2 таблицы по номенклатуре, но не будет строк удовлетворяющих связям? Вот когда у вас будут ответы на эти вопросы, вы легко решите данную задачку.
9 Мультук
 
гуру
24.01.23
11:01
(7)

В институте за такое "писули" красной пастой ставили крест на чертеже, мило улыбались и говорили -- у вас тут небольшая ошибка, исправьте.
10 jinny84
 
24.01.23
11:20
Тема закрыта, всем спасибо)
11 Lexandr
 
24.01.23
12:01
(9) Это у глупых студентов, а умные чуть-ли не силой заставляли препода  взять в руки принесенный карандаш. Но вот реальная история -принес вечерник чертеж и может даже не свой, и черканул очень важный препод на этом чертеже красной ручкой и тут же улетел со стула, ибо не фиг равнять обычного студентика со взрослым мужиком.
Основная теорема систематики: Новые системы плодят новые проблемы.