Имя: Пароль:
1C
1С v8
Запрос ведёт себя странно
,
0 FOI1977
 
28.08.14
13:18
В модуле есть простой запросик
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
    ВЫБОР
        КОГДА Т1.ДатаЗавершенияСделки > ДАТАВРЕМЯ(1, 1, 1, 1, 1, 1)
                ИЛИ Т1.ДатаПолнойОтгрузки > ДАТАВРЕМЯ(1, 1, 1, 1, 1, 1)
            ТОГДА ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовОтгрузка.ПолнаяОтгрузка)
        КОГДА Т1.ДатаНачалаОтгрузки > ДАТАВРЕМЯ(1, 1, 1, 1, 1, 1)
                И ЕСТЬNULL(Т1.ДатаПолнойОтгрузки, ДАТАВРЕМЯ(1, 1, 1, 1, 1, 1)) < ДАТАВРЕМЯ(2000, 1, 1, 1, 1, 1)
            ТОГДА ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовОтгрузка.ЧастичнаяОтгрузка)
        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовОтгрузка.Неотгруженно)
    КОНЕЦ КАК Отгрузка,
    ВЫБОР
        КОГДА Т1.ДатаЗавершенияСделки > ДАТАВРЕМЯ(1, 1, 1, 1, 1, 1)
                ИЛИ Т1.ДатаПолнойОплаты > ДАТАВРЕМЯ(1, 1, 1, 1, 1, 1)
            ТОГДА ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовОплата.ПолнаяОплата)
        КОГДА Т1.ДатаНачалаОплаты > ДАТАВРЕМЯ(1, 1, 1, 1, 1, 1)
                И ЕСТЬNULL(Т1.ДатаПолнойОплаты, ДАТАВРЕМЯ(1, 1, 1, 1, 1, 1)) < ДАТАВРЕМЯ(2000, 1, 1, 1, 1, 1)
            ТОГДА ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовОплата.ЧастичнаяОплата)
        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовОплата.Неоплачено)
    КОНЕЦ КАК Оплата
ИЗ
    РегистрСведений.РезультатыСделокПоПродажам.СрезПоследних(, ЗаказПокупателя = &Ссылка) КАК Т1

Ссылка - заказПокупателя №3536 от этого года

так вот в модуле он выдаёт статусы не отгружен и не оплачен, а в консоли запросов - отгружен и не оплачен.
Как такое может быть?! Где я туплю?!
1 Трик
 
28.08.14
13:20
запрос из обработки проведения?
2 FOI1977
 
28.08.14
13:23
(1) Из обработки события проведения документа
3 Hans
 
28.08.14
13:25
(2) в конце обработки проведения напиши Движения.записать() либо Движения.Взаиморасчеты.Записать();
4 Ёпрст
 
28.08.14
13:26
дык мот записи в РезультатыСделокПоПродажам пишутся позже, чем этот код вообще выполняется
5 FOI1977
 
28.08.14
13:26
(1) (3) то есть она запускается, а движений пока нет. так я понял?!
6 Hans
 
28.08.14
13:27
а такое ДАТАВРЕМЯ(1, 1, 1, 1, 1, 1) я обычно заменяю на &Пустаядата
7 Hans
 
28.08.14
13:27
(3) да.
8 FOI1977
 
28.08.14
13:27
(6) тяжёлое наслендие, не стал переписывать
9 FOI1977
 
28.08.14
13:30
(4) это код обработки события.
Событие - проведение документа.
10 FOI1977
 
28.08.14
13:54
Коллеги, на какое событие "подвесить" эту процедуру, ведь у нас нет события после проведения документа, да и после записи в регистр тоже нет.
11 Hans
 
28.08.14
14:21
(10) свои вычисления пиши в самом конце обработки проведения.

Если Не Отказ Тогда
    ЭтотОбъект.Движения.Записать();

    //твои вычисления

КонецЕсли;
12 lxndr
 
28.08.14
14:31
ващето
ДАТАВРЕМЯ(1, 1, 1, 1, 1, 1) = '01.01.0001 01:01:01"
Этокакбы не пустая дата
13 FOI1977
 
28.08.14
14:37
(12) В данном случае не игрет роли
14 Крошка Ру
 
28.08.14
14:37
(0)Если это из обработки проведения, то в ней не учитываются движения самого документа( т.к. транзакция ещё не зафиксирована и движений в базе ещё нет), а при выполнении в консоли этот документ наверняка уже проведен  и его проводки тоже попадают в запрос.
15 FOI1977
 
28.08.14
14:37
(11) то есть пихать в каждый документ :( лениво, но что делать...
16 FOI1977
 
28.08.14
14:38
(14) то есть (11) не поможет?
17 FOI1977
 
28.08.14
14:39
(14) я выше написал откуда это
18 Hans
 
28.08.14
14:39
(15) В каждый документ не надо. Сделай подписку на событие, на проведение нужных документов и впиши туда Источник.Движения.записать();

(16) поможет.
19 FOI1977
 
28.08.14
14:39
(14) но могу уверить что в обработке события - проведение документа та же фигня
20 Крошка Ру
 
28.08.14
14:40
(16) Нет. Если тебе в обработке проведения нужны движения самого документа, то используй те данные на основании которых эти движения делаются
21 Hans
 
28.08.14
14:41
100 руб ставлю что поможет.
22 Крошка Ру
 
28.08.14
14:42
(19) Ещё раз: до конца ОбработкиПроведения() самих движений документа в базе ещё нет. Можно использовать подписку на события, на момент подписки движения уже есть.
23 FOI1977
 
28.08.14
14:43
(22) вот как раз это и не прокатывало
(21) можешь уже не ставить помогло.
24 FOI1977
 
28.08.14
14:44
(21) Огромное спасибо.
25 Трик
 
28.08.14
14:52
(24) что значит в каждый? их так много? Если бы было лень типоой код менять я бы понял. А тут как я понял и так самописка.
Ошибка? Это не ошибка, это системная функция.