Имя: Пароль:
1C
1С v8
Проверка на неопределено в запросе
0 MaxKor
 
15.03.17
08:25
Здравствуйте! Помогите пожалуйста разобраться.
Вот запрос:
ВЫБРАТЬ
ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
ЗаказыПокупателейОстаткиИОбороты.СуммаВзаиморасчетовПриход КАК СуммаДоговора
ПОМЕСТИТЬ СуммаДоговораВсего
ИЗ
РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты КАК ЗаказыПокупателейОстаткиИОбороты
ГДЕ
ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента = &ДоговорКонтрагента
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Договор,
СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборотКт) КАК СуммаАвансов,
СуммаДоговораВсего.СуммаДоговора
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Регистратор, , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамПолученным), , ) КАК ХозрасчетныйОстаткиИОбороты,
СуммаДоговораВсего КАК СуммаДоговораВсего
ГДЕ
ХозрасчетныйОстаткиИОбороты.Субконто2 = &Субконто2
И ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее

СГРУППИРОВАТЬ ПО
ХозрасчетныйОстаткиИОбороты.Субконто2,
СуммаДоговораВсего.СуммаДоговора

Но иной раз авансов нет. И тогда весь запрос не отрабатывает, по всем полям неопределенно, а данные из него нужны дальше в любом случае. Как проверить поле ХозрасчетныйОстаткиИОбороты.СуммаОборотКт на неопределенно и дать ему значение 0.
пробовал уже по разному и ЕСТЬ NULL и неопределенно, выдает ошибку. Спасибо.
1 shamannk
 
15.03.17
08:26
Ошибку в студию!
2 MaxKor
 
15.03.17
08:37
ВЫБОР
    КОГДА ХозрасчетныйОстаткиИОбороты.СуммаОборотКт ЕСТЬ NULL ТОГДА 0
    ИНАЧЕ ХозрасчетныйОстаткиИОбороты.СуммаОборотКт
КОНЕЦ

Ошибка - Операция не разрешения в предложении <<?>>ВЫБОР
Тоже же самое если пишу "= Неопределено"
3 Мимохожий Однако
 
15.03.17
08:39
Попробуй:
Функция ЕСТЬNULL
Функция предназначена для замены значения NULL на другое значение.

Параметры функции:

Первый параметр — выражение любого типа

Второй параметр — выражение любого типа

Возвращаемое значение: значение первого параметра, в случае, если первый параметр не содержит значение NULL, значение второго параметра в противном случае.

Второй параметр будет преобразован к типу первого в случае, если тип первого параметра является строкой или числом.

Пример:
// Получить сумму по полю количество. В случае, если нет
// записей, получить 0
ВЫБРАТЬ ЕСТЬNULL(СУММА(Количество), 0) КАК Количество
ИЗ Документ.РасхНакл.Состав
4 MaxKor
 
15.03.17
08:41
(3) пробовал, не работает. наверное потому что в запросе поля имеют значение именно неопределенно
5 Мимохожий Однако
 
15.03.17
08:59
(4) Покажи код. Не стесняйся
6 youalex
 
15.03.17
09:07
(2) Ты это где пишешь? В ГДЕ?
7 MaxKor
 
15.03.17
09:12
(6) и в ГДЕ пробовал и в самом поле пробовал
8 r_i_n_i_k
 
15.03.17
09:15
Попробуй СуммаДоговораВсего ЛЕВОЕ СОЕДИНЕНИЕ Хазрасчетный
и в поля выведи ДоговорКонтрагента.
И условия Договор = $Договор засунь в параметры виртуальной таблицы, а не в условия
9 1dvd
 
15.03.17
09:19
у тебя таблицы не связаны вообще
10 Черный маклер
 
15.03.17
09:20
(0) пробуй в консоли запросов - если в результате щелкать по пустому полю то увидишь тип результата
11 НЕА123
 
15.03.17
09:26
СУММА(ЕстьNULL(ХозрасчетныйОстаткиИОбороты.СуммаОборотКт, 0)) КАК СуммаАвансов,
неужто не срабатывает?
ЗЫ
запрос бредовенький...
12 НЕА123
 
15.03.17
09:29
(11) сторно
13 MaxKor
 
15.03.17
09:41
(10) он ничего не выводит в консоли, строк нет
(11) не срабатывает, строк нет
(5)  вот код:
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
        |    ЗаказыПокупателейОстаткиИОбороты.СуммаВзаиморасчетовПриход КАК СуммаДоговора
        |ПОМЕСТИТЬ СуммаДоговораВсего
        |ИЗ
        |    РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты КАК ЗаказыПокупателейОстаткиИОбороты
        |ГДЕ
        |    ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента = &ДоговорКонтрагента
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Договор,
        |    СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборотКт) КАК СуммаАвансов,
        |    СуммаДоговораВсего.СуммаДоговора
        |ИЗ
        |    СуммаДоговораВсего КАК СуммаДоговораВсего
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Регистратор, , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамПолученным), , ) КАК ХозрасчетныйОстаткиИОбороты
        |        ПО СуммаДоговораВсего.ДоговорКонтрагента = ХозрасчетныйОстаткиИОбороты.Субконто2
        |ГДЕ
        |    ХозрасчетныйОстаткиИОбороты.Субконто2 = &Субконто2
        |    И ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее
        |
        |СГРУППИРОВАТЬ ПО
        |    ХозрасчетныйОстаткиИОбороты.Субконто2,
        |    СуммаДоговораВсего.СуммаДоговора";
    
    Запрос.УстановитьПараметр("ДоговорКонтрагента", Договор);
    Запрос.УстановитьПараметр("Субконто2", Договор);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Авансы = ВыборкаДетальныеЗаписи.СуммаАвансов;    
        ВсегоПоДоговору = ВыборкаДетальныеЗаписи.СуммаДоговора
    КонецЦикла;

дальше мне нужно обрабатывать эти суммы, если авансов не было, то ноль чтоб цифра была. но если авансов нет, то запрос весь не отрабатывает
14 sidalexsandr
 
15.03.17
09:45
(13) А чем тебе не подходит проверить, что если запрос пустой, то тогда цифра 0?
15 catena
 
15.03.17
09:47
(13)О, боги! Когда вы пишите условаия ГДЕ на левую таблицу - вы превращаете левое соединение в полное. Уберите ГДЕ в условия связи.
16 catena
 
15.03.17
09:48
...СуммаОборотКт принимает значение неопределено. Это прям техподдержке мозг выносить. @{Ненавижу1С} заходил?
17 Мимохожий Однако
 
15.03.17
09:59
(13) СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборотКт) КАК СуммаАвансов. В этой строке добавь функцию ЕСТЬNULL. у тебя может не быть авансов
18 MaxKor
 
15.03.17
09:59
"ВЫБРАТЬ
        |    &ДоговорКонтрагента КАК ДоговорКонтрагента,
        |    ЕСТЬNULL(Хозрасчетный.СуммаОборотКт, 0) КАК СуммаАвансов,
        |    ЕСТЬNULL(Заказы.СуммаВзаиморасчетовПриход, 0) КАК СуммаДоговора
        |ИЗ
        |    РегистрНакопления.ЗаказыПокупателей.Обороты(, , , ДоговорКонтрагента = &ДоговорКонтрагента) КАК Заказы,
        |    (ВЫБРАТЬ
        |        СУММА(т.СуммаОборотКт) КАК СуммаОборотКт
        |    ИЗ
        |        РегистрБухгалтерии.Хозрасчетный.Обороты(, , Регистратор, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамПолученным), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры), Субконто1 = &ДоговорКонтрагента, , ) КАК т
        |    ГДЕ
        |        т.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее) КАК Хозрасчетный";

вот решение моего вопроса. всем спасибо!
19 catena
 
15.03.17
10:01
мда...
20 catena
 
15.03.17
10:02
Кросс-соединение таблиц... да на большом объеме данных... Это будет очаровательно...
21 1dvd
 
15.03.17
10:03
(15) (16) Даже не верится, что девушка может быть такой умной. Может ты мужик переодетый? :)

ЗЫ шучу
22 catena
 
15.03.17
11:03
(21)Да какая ж я девушка, я мать!)))