Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Неоднозначный результат запроса

Неоднозначный результат запроса
Я
   smartem
 
15.03.18 - 10:32
Добрый день, коллеги!

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

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



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


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

    
    
    //СтруктураВременныеТаблицы = ДополнительныеСвойства.ДляПроведения.СтруктураВременныеТаблицы;

    
    //Запрос.МенеджерВременныхТаблиц = СтруктураВременныеТаблицы.МенеджерВременныхТаблиц;

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

    Запрос.УстановитьПараметр("Регистратор", Регистратор);
    
    Результат = Запрос.Выполнить().Выгрузить();



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

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

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует