Нужна помощь при написании запроса

1. Airat116 17.08.20 17:12 Сейчас в теме
Здравствуйте, может кто нибудь помочь запросом?
Мне нужно сделать так что бы в колонке "Просрочка" не выходило значение (737 653)

Я понимаю что она выходит с результата (ТОГДА РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты), &ТекДата, ДЕНЬ))

У меня получается где колонки "Срок оплаты дата " не заполнена , там значение (01.01.0001.0.0.0.0)
минус текущая дата = 737 653

И вот теперь не получается убрать 737 653, хотелось бы просто пустым оставить незаполненные колонки

Вот сам запрос:

ВЫБРАТЬ
ДоговорыКонтрагентов.Наименование КАК ДоговорКонтрагента,
ДоговорыКонтрагентов.тн_БазовыйДоговор КАК ДопСоглашение,
ДоговорыКонтрагентов.Владелец КАК Контрагент,
ДоговорыКонтрагентов.ВидДоговора,
ДоговорыКонтрагентов.тн_ОтветственныйИсполнитель КАК Ответственный,
ДоговорыКонтрагентов.тн_СрокПоставки КАК СрокПоставки,
ДоговорыКонтрагентов.СрокОплаты КАК СрокОплатыУсловие,
ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты) КАК СрокОплатыДата,
ВЫБОР
КОГДА ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты) < &ТекДата
ТОГДА РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты), &ТекДата, ДЕНЬ)
ИНАЧЕ ""
КОНЕЦ КАК Просрочка,
"" КАК Поставка
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
20. Onwardv 68 17.08.20 19:11 Сейчас в теме
...
ВЫБОР
КОГДА ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты) < &ТекДата
                  И ДоговорыКонтрагентов.тн_СрокПоставки<> ДАТАВРЕМЯ(1,1,1)
  ТОГДА                             РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты), &ТекДата, ДЕНЬ)
ИНАЧЕ ""
КОНЕЦ КАК Просрочка,
...
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DJDUH 17 17.08.20 17:30 Сейчас в теме
(1)
У меня получается где колонки "Срок оплаты дата " не заполнена , там значение (01.01.0001.0.0.0.0)
минус текущая дата = 737 653
ну так проверку здесь на пустую дату добавить нужно
Case when "Срок оплаты дата " = DateTime(1,1,1,1,1,1) then 0 end
3. Airat116 17.08.20 17:32 Сейчас в теме
(2)
Вот я попробовал так, но что то не работает
ВЫБОР
КОГДА ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты) = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
ТОГДА 0
ИНАЧЕ ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты)
КОНЕЦ
5. zarankony 312 17.08.20 17:42 Сейчас в теме
(3) может дело в NULL?
ВЫБОР
КОГДА ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты) = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ИЛИ ДоговорыКонтрагентов.тн_СрокПоставки ЕСТЬ NULL
ТОГДА 0
ИНАЧЕ ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты)
КОНЕЦ
7. Airat116 17.08.20 17:50 Сейчас в теме
(5) Вряд ли дело в NULL, тут получается то что
СрокОплатыДата - ТекущаяДата
Прикрепленные файлы:
4. Airat116 17.08.20 17:34 Сейчас в теме
(2) Возможно причина в том что я перевожу дату на тип число
А потом когда добавляю поле "Просрачка " и там срабатывает функция "РАЗНОСТЬДАТ" она ошибку дает
6. alex-l19041 8 17.08.20 17:47 Сейчас в теме
(4)
что я перевожу дату на тип число
- где ?
8. Airat116 17.08.20 17:51 Сейчас в теме
(6) (КОГДА ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты) = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
ТОГДА 0)

Тогда = 0
Вроде как число получается
9. Onwardv 68 17.08.20 17:52 Сейчас в теме
Так и проверяйте СРОКОПЛАТЫ, а не то выражение, которое проверяете Вы на пустую дату.
И, кстати, ДобавитьКДате тоже возвращает дату.
....
ВЫБОР 
КОГДА ДоговорыКонтрагентов.СрокОплаты = ДАТАВРЕМЯ(1,1,1)
ТОГДА ДАТАВРЕМЯ(1,1,1)
КОГДА....
...
10. Airat116 17.08.20 18:00 Сейчас в теме
(9) Как я понял выводится в колонке "просрочка" будет ДАТАВРЕМЯ(1,1,1) ?
11. Onwardv 68 17.08.20 18:05 Сейчас в теме
(10) А Вам что нужно, 0 ?, тогда напишите 0.

Я, так понимаю, нужно что-то вроде этого:
....
ТОГДА ВЫБОР КОГДА  ДоговорыКонтрагентов.СрокОплаты = ДАТАВРЕМЯ(1,1,1) 
                ТОГДА 0
             ИНАЧЕ
                   РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты), &ТекДата, ДЕНЬ)
              КОНЕЦ

...
13. Airat116 17.08.20 18:16 Сейчас в теме
(11) Мне желательно оставить пустое значение, типо ""
12. Onwardv 68 17.08.20 18:06 Сейчас в теме
Т.е. вставьте ещё ветвь ВЫБОР
14. Onwardv 68 17.08.20 18:32 Сейчас в теме
Блин. Вам же ещё первый комментатор всё подсказал. Правда в латинской раскладке.
15. Onwardv 68 17.08.20 18:35 Сейчас в теме
Вот так сделайте:


ВЫБРАТЬ
ДоговорыКонтрагентов.Наименование КАК ДоговорКонтрагента,
ДоговорыКонтрагентов.тн_БазовыйДоговор КАК ДопСоглашение,
ДоговорыКонтрагентов.Владелец КАК Контрагент,
ДоговорыКонтрагентов.ВидДоговора,
ДоговорыКонтрагентов.тн_ОтветственныйИсполнитель КАК Ответственный,
ДоговорыКонтрагентов.тн_СрокПоставки КАК СрокПоставки,
ДоговорыКонтрагентов.СрокОплаты КАК СрокОплатыУсловие,
ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты) КАК СрокОплатыДата,
ВЫБОР
КОГДА ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты) < &ТекДата
                  И ДоговорыКонтрагентов.СрокОплаты <> ДАТАВРЕМЯ(1,1,1)
  ТОГДА                             РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты), &ТекДата, ДЕНЬ)
ИНАЧЕ ""
КОНЕЦ КАК Просрочка,
"" КАК Поставка
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
Показать
16. Airat116 17.08.20 18:38 Сейчас в теме
(15)
Я вот сделал как вы написали, результат колонки "Просрочка" остаётся 737 653 если не заполнены остальные колонки
ВЫБРАТЬ
ДоговорыКонтрагентов.Наименование КАК ДоговорКонтрагента,
ДоговорыКонтрагентов.тн_БазовыйДоговор КАК ДопСоглашение,
ДоговорыКонтрагентов.Владелец КАК Контрагент,
ДоговорыКонтрагентов.ВидДоговора,
ДоговорыКонтрагентов.тн_ОтветственныйИсполнитель КАК Ответственный,
ДоговорыКонтрагентов.тн_СрокПоставки КАК СрокПоставки,
ДоговорыКонтрагентов.СрокОплаты КАК СрокОплатыУсловие,
ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты) КАК СрокОплатыДата,
ВЫБОР
КОГДА ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты) < &ТекДата
ТОГДА
ВЫБОР КОГДА ДоговорыКонтрагентов.СрокОплаты = ДАТАВРЕМЯ(1,1,1)
ТОГДА ""
ИНАЧЕ
РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты), &ТекДата, ДЕНЬ)
КОНЕЦ
ИНАЧЕ ""
КОНЕЦ КАК Просрочка,
"" КАК Поставка
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
Показать
17. Onwardv 68 17.08.20 18:48 Сейчас в теме
(16)
тн_СрокПоставки


Тогда проблема не только в сроке оплаты. Выведете всё и посмотрите.
т.е. добавьте в список выводимых полей:
ДоговорыКонтрагентов.тн_СрокПоставки,
ДоговорыКонтрагентов.СрокОплаты,
ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты),
РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты), &ТекДата, ДЕНЬ),
&ТекДата

И сразу поймете, где у Вас чего нету. Вдруг параметр &ТекДата заполнен непонятно как.
18. Airat116 17.08.20 19:01 Сейчас в теме
(17) ТекДата заполненом текущей датой (17.08.2020)

Проблема в том что например СрокОплаты заполнен число 01.08.2020
Далее поле "СрокОплатыУсловие" заполнен числом 10

Далее делаем вычисляемое поле = СрокОплаты + СрокОплатыУсловие = получаем 11.08.2020

В этом моменте проблема как бы начинается - если оба поля пустые, мы получаем пустую дату

Далее добавляем вычисляемое "Просрочка" и там в начале мы сравниваем с текущей датой и если
текущая дата больше 11.08.2020 тогда выводим формула (Первое вычисляемое поле где мы получили 11.08.2020 - текущая дата, например текдата 17.08.2020 = должно вывести 6 (это работает))

А когда мы текдату - вычисляемое поле (в котором пустая дата) = мы получаем 737 653

А я хотел сделать чтоб пустая колонка тогда была
19. Onwardv 68 17.08.20 19:08 Сейчас в теме
(18)
Так у вас ДоговорыКонтрагентов.СрокОплаты Не ДатаВремя , а число?
В таком случае бессмысленно сравнивать число с пустой датой. оно всегда ложь будет.
М.б. тогда лучше проверять ДоговорыКонтрагентов.тн_СрокПоставки на пустую дату?
20. Onwardv 68 17.08.20 19:11 Сейчас в теме
...
ВЫБОР
КОГДА ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты) < &ТекДата
                  И ДоговорыКонтрагентов.тн_СрокПоставки<> ДАТАВРЕМЯ(1,1,1)
  ТОГДА                             РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты), &ТекДата, ДЕНЬ)
ИНАЧЕ ""
КОНЕЦ КАК Просрочка,
...
21. Airat116 17.08.20 19:16 Сейчас в теме
(20)
ООО круто))) помогло))) Спасибо большое)
ВЫБОР
КОГДА ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты) ДАТАВРЕМЯ(1,1,1)
ТОГДА РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДоговорыКонтрагентов.тн_СрокПоставки, ДЕНЬ, ДоговорыКонтрагентов.СрокОплаты), &ТекДата, ДЕНЬ)
ИНАЧЕ ""
КОНЕЦ
22. Airat116 18.08.20 10:12 Сейчас в теме
А можете еще подсказать?) Можно ли в запросе соединить строку + число
Например чтоб в колонке "Просрочка" выходило - Просрочено на 2 дня
23. Onwardv 68 18.08.20 12:05 Сейчас в теме
(22) Полноценную конкатенацию строк запросы 1с не умеют.
(Некоторые примитивы срабатывают).

Лучше так назовите колонку.
24. Onwardv 68 18.08.20 12:06 Сейчас в теме
(23) "Просрочено на (в днях)"

0
0
2
5
4
0
25. Airat116 18.08.20 13:55 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот