Имя: Пароль:
1C
1С v8
Неоднозначный результат запроса
0 smartem
 
15.03.18
10:32
Добрый день, коллеги!

Уже не первый час бьюсь над проблемой, понять не могу в чем дело.
Конфигурация 1С:ERP. Там есть типовой РН -ТрудозатратыНезавершенногоПроизводства. В модуле набора записей регистра есть два события "ПередЗаписью" и "ПриЗаписи".
В рассматриваемом варианте оба события вызываются при проведение одного из регистраторов данного регистра.
Так вот, в первом событии ("ПередЗаписью") в запросе формируется временная таблица содержащая записи данного регистра по регистратору:


Запрос.МенеджерВременныхТаблиц = СтруктураВременныеТаблицы.МенеджерВременныхТаблиц;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Таблица.Организация             КАК Организация,
    |    Таблица.Распоряжение            КАК Распоряжение,
    |    Таблица.ВидРабот                КАК ВидРабот,
    |    Таблица.Исполнитель             КАК Исполнитель,
    |    Таблица.Подразделение           КАК Подразделение,
    |    Таблица.КодСтрокиРаспоряжения   КАК КодСтрокиРаспоряжения,
    |    ВЫБОР КОГДА Таблица.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА
    |            Таблица.Количество
    |        ИНАЧЕ
    |            -Таблица.Количество
    |    КОНЕЦ                           КАК КоличествоПередЗаписью
    |ПОМЕСТИТЬ ДвиженияТрудозатратыКОформлениюПередЗаписью
    |ИЗ
    |    РегистрНакопления.ТрудозатратыКОформлению КАК Таблица
    |ГДЕ
    |    Таблица.Регистратор = &Регистратор
    |    И НЕ &ЭтоНовый
    |";
    Запрос.Выполнить();



Код второго события ("ПриЗаписи") сделал примерно такой же (через расширение модуля, упростил для целей отладки).
Только вместо временной таблицы результат запроса выгружаю в ТЗ.



Запрос = Новый Запрос("ВЫБРАТЬ
                          |    Затраты.Период КАК Период,
                          |    Затраты.Регистратор КАК Регистратор,
                          |    Затраты.Организация КАК Организация,
                          |    Затраты.Подразделение КАК Подразделение,
                          |    Затраты.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
                          |    Затраты.КодСтрокиПродукция КАК КодСтрокиПродукция,
                          |    Затраты.Этап КАК Этап,
                          |    Затраты.СтатьяКалькуляции КАК СтатьяКалькуляции,
                          |    Затраты.ВидРабот КАК ВидРабот,
                          |    Затраты.ГруппаПродукции КАК ГруппаПродукции,
                          |    Затраты.Количество КАК Поле1,
                          |    Затраты.НормативнаяСтоимость КАК Поле2,
                          |    Затраты.Стоимость КАК Поле3,
                          |    Затраты.СтоимостьРегл КАК Поле4
                          |ИЗ
                          |    РегистрНакопления.ТрудозатратыНезавершенногоПроизводства КАК Затраты
                          |ГДЕ
                          |    Затраты.Регистратор = &Регистратор");

    
    
    //СтруктураВременныеТаблицы = ДополнительныеСвойства.ДляПроведения.СтруктураВременныеТаблицы;
    
    //Запрос.МенеджерВременныхТаблиц = СтруктураВременныеТаблицы.МенеджерВременныхТаблиц;
    Регистратор = Документы.ЭтапПроизводства2_2.НайтиПоНомеру("23-17 ОЙЛ-ВН.448.1", Дата(2017, 03, 10, 15, 09, 17));
    //Запрос.УстановитьПараметр("Регистратор", Отбор.Регистратор.Значение);
    Запрос.УстановитьПараметр("Регистратор", Регистратор);
    
    Результат = Запрос.Выполнить().Выгрузить();



После выполнения второго события в Таблице значений (результат) пусто.
При этом, если до выполнения второго запроса в процедуре события, выполнить этот запрос например в консоли, то результат будет содержать запись из регистра.

Не могу понять, почему один и тот же запрос выдает разные результаты?
Сама запись в регистре есть, ее даже визуально можно отобрать из списка.

Прошу помощи!!!
1 Cyberhawk
 
15.03.18
10:34
Думаю, куйня у тебя из-за НайтиПоНомеру
2 hhhh
 
15.03.18
10:39
(0) там два этапа на самом деле, сначала удаление движений, потом запись новых. То есть ПриЗаписи у тебя должно вызваться 2 раза. Ты это учитываешь?
3 Dolter
 
15.03.18
10:40
А зачем в "при записи" обращаться к регистру, а не к составу набора записей?
4 smartem
 
15.03.18
10:55
(1) Нее, НайтиПоНомеру - эт я просто ограничил на время отладки. А так параметр заполняется из свойства "Отбор"

(2) Почему-то в типовой, при отладке в "ПриЗаписи" один раз попадает. Уточню этот момент

(3) Это уже вопрос к 1с-кам, мне надо разобраться в типовом коде, вот пока наткнулся на непонятки с результатом запроса. Какое-то оно не логичное. Или я чего-то не понимаю.