Имя: Пароль:
1C
1С v8
Проверка заполнения даты с условием в запросе
0 palima
 
15.03.19
07:52
Здравствуйте. Помогите пожалуйста решить следующую проблему. Как в запросе оформить условие вида если документссылка.дата1 заполнена, то результат запроса будет дата1, а если не заполнена, то результат запроса будет документссылка.дата2. Через выбор? Честно гуглила и пыталась сделать, но пока безуспешно, хелп...
1 SleepyHead
 
гуру
15.03.19
07:54
ВЫБОР КОГДА ДокументСсылка.Дата1=ДатаВремя(1,1,1) ТОГДА ДокументСсылка.Дата1 ИНАЧЕ ДокументСсылка.Дата2 КОНЕЦ


P.S. Фотку выложи.
2 Filippov
 
15.03.19
08:07
(1) <>
3 SleepyHead
 
гуру
15.03.19
08:13
(2) Тихо, сначала фотка, потом реальный код!
4 palima
 
15.03.19
08:43
(3) корыстные
Вот еще вопрос...
ВЫБОР КОГДА ДокументСсылка.Дата1=ДатаВремя(1,1,1) ТОГДА ДокументСсылка.Дата1 ИНАЧЕ ДокументСсылка.Дата2 КОНЕЦ КАК ВыбДата

До этой доработки у меня была одна дата, и я использовала выражение "ГДЕ ДокументСсылка.Дата1 МЕЖДУ &ДатаНач И &ДатаКон)"
А как мне теперь сейчас это сделать?
Попробовала ГДЕ ВыбДата МЕЖДУ &ДатаНач И &ДатаКон)" , но ругается на то, что поле ВыбДата не найдено...
5 catena
 
15.03.19
08:45
(4)Либо в ГДЕ повторять всю эту конструкцию, либо сперва в ВТ заименовать ее и потом отдельно ГДЕ на уже выбранную дату.
6 unregistered
 
15.03.19
08:47
(4) > корыстные.

> Вот еще вопрос.

А ты борзая. Жаль модераторы ещё спят. Я бы вообще банил за помощь тем, у кого нет фотки в личке.

(5) Ох уж эта женская солидарность. Будь она неладна.
7 palima
 
15.03.19
08:53
ВЫБРАТЬ
    УправленческийОстатки.Субконто1.Ссылка КАК Ссылка,
    УправленческийОстатки.Субконто1 КАК ОС,
    УправленческийОстатки.Субконто1.Код КАК ИнвНомер,
    //было
    //УправленческийОстатки.Субконто1.ДатаВвода КАК ДатаВвода,
    //стало:    
    ВЫБОР
        КОГДА УправленческийОстатки.Субконто1.ДатаРазделения = ДАТАВРЕМЯ(1, 1, 1)
            ТОГДА УправленческийОстатки.Субконто1.ДатаВвода
        ИНАЧЕ УправленческийОстатки.Субконто1.ДатаРазделения
    КОНЕЦ КАК ВыборДаты,
    УправленческийОстатки.СуммаОстаток КАК ВосстановительнаяСтоимость,
    УправленческийОстатки.СуммаОстаток + ЕСТЬNULL(УправленческийОстатки1.СуммаОстаток, 0) КАК ОстаточнаяСтоимость,
    УправленческийОстатки.Субконто1.ГоссобственностьИнвентарныйНомер КАК ИнвНомерПоРеестру,
    УправленческийОстатки.Субконто1.ГоссобственностьНаименованиеОбъекта КАК НаимОбъекта,
    УправленческийОстатки.Субконто1.ГоссобственностьКодОбъекта КАК КодНазначенияОбъекта,
    УправленческийОстатки.Субконто1.ГоссобственностьКодСостоянияОбъекта КАК КодСостоянияОбъекта,
    ИЗ
    (ВЫБРАТЬ
        ОсновныеСредства.Ссылка КАК Ссылка
    ИЗ
        Справочник.ОсновныеСредства КАК ОсновныеСредства
    ГДЕ
        ОсновныеСредства.Ссылка В(&СЧ)

        //конструкцию ниже нужно заменить на ВыборДаты....
        И ОсновныеСредства.ДатаВвода МЕЖДУ &ДатаНач И &ДатаКон
        
        И ОсновныеСредства.Владелец = &ВыбВладелец
        И ОсновныеСредства.ГоссобственностьИнвентарныйНомер <> &ГИН
        И ОсновныеСредства.ГоссобственностьКодОбъекта <> &ГКО
        И ОсновныеСредства.ГоссобственностьКодСостоянияОбъекта <> &ГКСО) КАК ВложенныйЗапрос
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки(&ВыбДата, Счет В ИЕРАРХИИ (&Сч01), , Владелец <> &ВыбВладелецЦентр) КАК УправленческийОстатки
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки(&ВыбДата, Счет В ИЕРАРХИИ (&Сч02), , Владелец <> &ВыбВладелецЦентр) КАК УправленческийОстатки1
            ПО УправленческийОстатки.Субконто1 = УправленческийОстатки1.Субконто1
        ПО ВложенныйЗапрос.Ссылка = УправленческийОстатки.Субконто1

    УПОРЯДОЧИТЬ ПО
        ИнвНомер
8 SleepyHead
 
гуру
15.03.19
08:58
(6) Как хорошо, что ты не модератор, а (5) модератор :)
9 palima
 
15.03.19
09:01
(7) или это условие нужно было делать во вложенном запросе?
10 catena
 
15.03.19
09:11
(9)
ВЫБОР
        КОГДА УправленческийОстатки.Субконто1.ДатаРазделения = ДАТАВРЕМЯ(1, 1, 1)
            ТОГДА УправленческийОстатки.Субконто1.ДатаВвода
        ИНАЧЕ УправленческийОстатки.Субконто1.ДатаРазделения
    КОНЕЦ между &ДатаНач И &ДатаКон
11 catena
 
15.03.19
09:12
И хорошо бы типизировать Субконто1, а то может сплохеть базе...
12 unregistered
 
15.03.19
09:38
(10) Правильнее так.

ВЫБОР
   КОГДА ВЫРАЗИТЬ(УправленческийОстатки.Субконто1 КАК Справочник.ОсновныеСредства).ДатаРазделения = ДАТАВРЕМЯ(1, 1, 1)
   ТОГДА ВЫРАЗИТЬ(УправленческийОстатки.Субконто1 КАК Справочник.ОсновныеСредства).ДатаВвода МЕЖДУ &ДатаНач И &ДатаКон
   ИНАЧЕ ВЫРАЗИТЬ(УправленческийОстатки.Субконто1 КАК Справочник.ОсновныеСредства).ДатаРазделения МЕЖДУ &ДатаНач И &ДатаКон
КОНЕЦ

Только этот код не решает проблему автора. У автора другая задача и решает она её через *опу.
Запрос надо переписывать полностью.
13 catena
 
15.03.19
09:41
(12)Почему так правильнее? Я не про типизацию, а про само условие.
14 unregistered
 
15.03.19
09:51
(13) Читабельнее (ИМХО). Но это не главное.
Важнее именно типизация, чтобы не прилетело NULL в логический оператор МЕЖДУ.

О вообще повторюсь - это фигня по сравнению с той кашей, что изложена в (9). Там переписывать всё надо.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший