Неоднозначный результат запроса к Регистру накопления
Уже не первый час бьюсь над проблемой, понять не могу в чем дело.
Конфигурация 1С:ERP. Там есть типовой РН -ТрудозатратыНезавершенногоПроизводства. В модуле набора записей регистра есть два события "ПередЗаписью" и "ПриЗаписи".
В рассматриваемом варианте оба события вызываются при проведение одного из регистраторов данного регистра.
Так вот, в первом событии ("ПередЗаписью") в запросе формируется временная таблица содержащая записи данного регистра по регистратору:
Код второго события ("ПриЗаписи") сделал примерно такой же (через расширение модуля, упростил для целей отладки).
Только вместо временной таблицы результат запроса выгружаю в ТЗ.
После выполнения второго события в Таблице значений (результат) пусто.
При этом, если до выполнения второго запроса в процедуре события, выполнить этот запрос например в консоли, то результат будет содержать запись из регистра.
Не могу понять, почему один и тот же запрос выдает разные результаты?
Сама запись в регистре есть, ее даже визуально можно отобрать из списка.
Прошу помощи!
Конфигурация 1С:ERP. Там есть типовой РН -ТрудозатратыНезавершенногоПроизводства. В модуле набора записей регистра есть два события "ПередЗаписью" и "ПриЗаписи".
В рассматриваемом варианте оба события вызываются при проведение одного из регистраторов данного регистра.
Так вот, в первом событии ("ПередЗаписью") в запросе формируется временная таблица содержащая записи данного регистра по регистратору:
Запрос.МенеджерВременныхТаблиц = СтруктураВременныеТаблицы.МенеджерВременныхТаблиц;
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Затраты.Период,
| Затраты.Регистратор,
| Затраты.Организация,
| Затраты.Подразделение,
| Затраты.ЗаказНаПроизводство,
| Затраты.КодСтрокиПродукция,
| Затраты.Этап,
| Затраты.СтатьяКалькуляции,
| Затраты.ВидРабот,
| Затраты.ГруппаПродукции,
|
| Затраты.Количество,
| Затраты.НормативнаяСтоимость,
| Затраты.Стоимость,
| Затраты.СтоимостьРегл
|ПОМЕСТИТЬ ТрудозатратыНезавершенногоПроизводстваПередЗаписью
|ИЗ
| РегистрНакопления.ТрудозатратыНезавершенногоПроизводства КАК Затраты
|ГДЕ
| Затраты.Регистратор = &Регистратор
|");
СтруктураВременныеТаблицы = ДополнительныеСвойства.ДляПроведения.СтруктураВременныеТаблицы;
Запрос.МенеджерВременныхТаблиц = СтруктураВременныеТаблицы.МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Регистратор", Отбор.Регистратор.Значение);
Запрос.Выполнить();
ПоказатьКод второго события ("ПриЗаписи") сделал примерно такой же (через расширение модуля, упростил для целей отладки).
Только вместо временной таблицы результат запроса выгружаю в ТЗ.
Запрос = Новый Запрос("ВЫБРАТЬ
| Затраты.Период КАК Период,
| Затраты.Регистратор КАК Регистратор,
| Затраты.Организация КАК Организация,
| Затраты.Подразделение КАК Подразделение,
| Затраты.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
| Затраты.КодСтрокиПродукция КАК КодСтрокиПродукция,
| Затраты.Этап КАК Этап,
| Затраты.СтатьяКалькуляции КАК СтатьяКалькуляции,
| Затраты.ВидРабот КАК ВидРабот,
| Затраты.ГруппаПродукции КАК ГруппаПродукции,
| Затраты.Количество КАК Поле1,
| Затраты.НормативнаяСтоимость КАК Поле2,
| Затраты.Стоимость КАК Поле3,
| Затраты.СтоимостьРегл КАК Поле4
|ИЗ
| РегистрНакопления.ТрудозатратыНезавершенногоПроизводства КАК Затраты
|ГДЕ
| Затраты.Регистратор = &Регистратор");
//СтруктураВременныеТаблицы = ДополнительныеСвойства.ДляПроведения.СтруктураВременныеТаблицы;
//Запрос.МенеджерВременныхТаблиц = СтруктураВременныеТаблицы.МенеджерВременныхТаблиц;
Регистратор = Документы.ЭтапПроизводства2_2.НайтиПоНомеру("23-17 ОЙЛ-ВН.448.1", Дата(2017, 03, 10, 15, 09, 17));
//Запрос.УстановитьПараметр("Регистратор", Отбор.Регистратор.Значение);
Запрос.УстановитьПараметр("Регистратор", Регистратор);
Результат = Запрос.Выполнить().Выгрузить();
ПоказатьПосле выполнения второго события в Таблице значений (результат) пусто.
При этом, если до выполнения второго запроса в процедуре события, выполнить этот запрос например в консоли, то результат будет содержать запись из регистра.
Не могу понять, почему один и тот же запрос выдает разные результаты?
Сама запись в регистре есть, ее даже визуально можно отобрать из списка.
Прошу помощи!
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
А то что регистры в текстах запросов разные, хотя в шапке говорится, что запрос к одному и тому же регистру, это не страшно?
1)
ИЗ
| РегистрНакопления.ТрудозатратыКОформлению КАК Таблица
2)
|ИЗ
| РегистрНакопления.ТрудозатратыНезавершенногоПроизводства КАК Затраты
1)
ИЗ
| РегистрНакопления.ТрудозатратыКОформлению КАК Таблица
2)
|ИЗ
| РегистрНакопления.ТрудозатратыНезавершенногоПроизводства КАК Затраты
Посмотрите, что лежит в ЭтотОбъект в событии передЗаписью. По логике системы - В ПриЗаписи в таблице БД (и соответственно в результате запроса) будет лежать то, что лежит в ЭтотОбъект в событии ПередЗаписью (если мы говорим о модуле набора записей регистра)
(5)
В ЭтотОбъект лежит набор записей данного регистра отобранного по регистратору.
Смотрел через предварительный вызов
ЭтотОбъект.Прочитать()
Если смотреть по отладке, получается, что в ЭтотОбъект в процедуре "ПередЗаписью" и в "ПриЗаписи" один и тот же набор.
(6)
События тоже есть конечно, но в них изменений нет по набору записей.
Посмотрите, что лежит в ЭтотОбъект в событии передЗаписью. По логике системы - В ПриЗаписи в таблице БД (и соответственно в результате запроса) будет лежать то, что лежит в ЭтотОбъект в событии ПередЗаписью (если мы говорим о модуле набора записей регистра)
В ЭтотОбъект лежит набор записей данного регистра отобранного по регистратору.
Смотрел через предварительный вызов
ЭтотОбъект.Прочитать()
Если смотреть по отладке, получается, что в ЭтотОбъект в процедуре "ПередЗаписью" и в "ПриЗаписи" один и тот же набор.
(6)
Но еще могут быть всякие коварства в подписках на события, которые могут переопределять, например, состав коллекции движений после предопределенного события модуля набора записей. Или коварства в расширениях.
События тоже есть конечно, но в них изменений нет по набору записей.
Но еще могут быть всякие коварства в подписках на события, которые могут переопределять, например, состав коллекции движений после предопределенного события модуля набора записей. Или коварства в расширениях.
Проверить просто:
Состав коллекции ЭтотОбъект в событиях ПередЗаписью и ПриЗаписи должен совпадать.
Проверить просто:
Состав коллекции ЭтотОбъект в событиях ПередЗаписью и ПриЗаписи должен совпадать.
Артем, добрый день!
Откройте РН в программе. Сделайте отбор по регистратору.
Отмените проведение документа. Убедитесь, что отбор - пустой
После выполнения второго события в Таблице значений (результат) пусто.
Либо документ - не проведен, либо регистратор не выбирает
Откройте РН в программе. Сделайте отбор по регистратору.
Отмените проведение документа. Убедитесь, что отбор - пустой
После выполнения второго события в Таблице значений (результат) пусто.
Либо документ - не проведен, либо регистратор не выбирает
(10) Спасибо за ссылку. Видел я ее. Только у меня вопрос: а регистр накопления ведет себя также. Я имею ввиду, что событие ПриЗаписи должно вызываться два раза?
Пытался найти ответ и в лекциях Чистова и книгах по разработке, но так и не нашел ответа. Или не увидел...
Пытался найти ответ и в лекциях Чистова и книгах по разработке, но так и не нашел ответа. Или не увидел...
(11)
Зависит от свойств регистратора "Удалять автоматически при отмене проведения", поищите в документации зачем это.
(10) Спасибо за ссылку. Видел я ее. Только у меня вопрос: а регистр накопления ведет себя также. Я имею ввиду, что событие ПриЗаписи должно вызываться два раза?
Зависит от свойств регистратора "Удалять автоматически при отмене проведения", поищите в документации зачем это.
(14)
В данном случае у регистратора указано "Не удалять автоматически". Вообще значения свойства "Удаление движений" посмотрел, но там ответа не нашел. Тем более значение данного свойства, которое указано в регистраторе вообще не предполагает удаление записей автоматически.
Зависит от свойств регистратора "Удалять автоматически при отмене проведения", поищите в документации зачем это.
В данном случае у регистратора указано "Не удалять автоматически". Вообще значения свойства "Удаление движений" посмотрел, но там ответа не нашел. Тем более значение данного свойства, которое указано в регистраторе вообще не предполагает удаление записей автоматически.
Артем, а какая версия ERP ?
У меня в ERP (2.4.1.261) этот запрос (ПриЗаписи) вот так выглядит:
Запрос = Новый Запрос("
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| НАЧАЛОПЕРИОДА(Таблица.Период, МЕСЯЦ) КАК МЕСЯЦ,
| Таблица.Организация КАК Организация,
| Таблица.Регистратор КАК Документ,
| ЛОЖЬ КАК ИзмененыДанныеДляПартионногоУчетаВерсии21
|ПОМЕСТИТЬ ТрудозатратыНезавершенногоПроизводстваЗаданияКРасчетуСебесто имости
|ИЗ
| (ВЫБРАТЬ
| Затраты.Период,
| Затраты.Регистратор,
| Затраты.Организация,
| Затраты.Подразделение,
| Затраты.ЗаказНаПроизводство,
| Затраты.КодСтрокиПродукция,
| Затраты.Этап,
| Затраты.СтатьяКалькуляции,
| Затраты.ВидРабот,
| Затраты.ГруппаПродукции,
|
| Затраты.Количество,
| Затраты.НормативнаяСтоимость,
| Затраты.Стоимость,
| Затраты.СтоимостьРегл
| ИЗ
| ТрудозатратыНезавершенногоПроизводстваПередЗаписью КАК Затраты
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Затраты.Период,
| Затраты.Регистратор,
| Затраты.Организация,
| Затраты.Подразделение,
| Затраты.ЗаказНаПроизводство,
| Затраты.КодСтрокиПродукция,
| Затраты.Этап,
| Затраты.СтатьяКалькуляции,
| Затраты.ВидРабот,
| Затраты.ГруппаПродукции,
|
| -Затраты.Количество,
| -Затраты.НормативнаяСтоимость,
| -Затраты.Стоимость,
| -Затраты.СтоимостьРегл
| ИЗ
| РегистрНакопления.ТрудозатратыНезавершенногоПроизводства КАК Затраты
| ГДЕ
| Затраты.Регистратор = &Регистратор
| ) КАК Таблица
|СГРУППИРОВАТЬ ПО
| НАЧАЛОПЕРИОДА(Таблица.Период, МЕСЯЦ),
| Таблица.Период,
| Таблица.Регистратор,
| Таблица.Организация,
| Таблица.Подразделение,
| Таблица.ЗаказНаПроизводство,
| Таблица.КодСтрокиПродукция,
| Таблица.Этап,
| Таблица.СтатьяКалькуляции,
| Таблица.ВидРабот,
| Таблица.ГруппаПродукции
|ИМЕЮЩИЕ
| СУММА(Таблица.Количество) <> 0
| ИЛИ СУММА(Таблица.НормативнаяСтоимость) <> 0
| ИЛИ СУММА(Таблица.Стоимость) <> 0
| ИЛИ СУММА(Таблица.СтоимостьРегл) <> 0
|;
|//////////////////////////////////////////////////////////// ////////////////////
|УНИЧТОЖИТЬ ТрудозатратыНезавершенногоПроизводстваПередЗаписью
|");
У меня в ERP (2.4.1.261) этот запрос (ПриЗаписи) вот так выглядит:
Запрос = Новый Запрос("
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| НАЧАЛОПЕРИОДА(Таблица.Период, МЕСЯЦ) КАК МЕСЯЦ,
| Таблица.Организация КАК Организация,
| Таблица.Регистратор КАК Документ,
| ЛОЖЬ КАК ИзмененыДанныеДляПартионногоУчетаВерсии21
|ПОМЕСТИТЬ ТрудозатратыНезавершенногоПроизводстваЗаданияКРасчетуСебесто
|ИЗ
| (ВЫБРАТЬ
| Затраты.Период,
| Затраты.Регистратор,
| Затраты.Организация,
| Затраты.Подразделение,
| Затраты.ЗаказНаПроизводство,
| Затраты.КодСтрокиПродукция,
| Затраты.Этап,
| Затраты.СтатьяКалькуляции,
| Затраты.ВидРабот,
| Затраты.ГруппаПродукции,
|
| Затраты.Количество,
| Затраты.НормативнаяСтоимость,
| Затраты.Стоимость,
| Затраты.СтоимостьРегл
| ИЗ
| ТрудозатратыНезавершенногоПроизводстваПередЗаписью КАК Затраты
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Затраты.Период,
| Затраты.Регистратор,
| Затраты.Организация,
| Затраты.Подразделение,
| Затраты.ЗаказНаПроизводство,
| Затраты.КодСтрокиПродукция,
| Затраты.Этап,
| Затраты.СтатьяКалькуляции,
| Затраты.ВидРабот,
| Затраты.ГруппаПродукции,
|
| -Затраты.Количество,
| -Затраты.НормативнаяСтоимость,
| -Затраты.Стоимость,
| -Затраты.СтоимостьРегл
| ИЗ
| РегистрНакопления.ТрудозатратыНезавершенногоПроизводства КАК Затраты
| ГДЕ
| Затраты.Регистратор = &Регистратор
| ) КАК Таблица
|СГРУППИРОВАТЬ ПО
| НАЧАЛОПЕРИОДА(Таблица.Период, МЕСЯЦ),
| Таблица.Период,
| Таблица.Регистратор,
| Таблица.Организация,
| Таблица.Подразделение,
| Таблица.ЗаказНаПроизводство,
| Таблица.КодСтрокиПродукция,
| Таблица.Этап,
| Таблица.СтатьяКалькуляции,
| Таблица.ВидРабот,
| Таблица.ГруппаПродукции
|ИМЕЮЩИЕ
| СУММА(Таблица.Количество) <> 0
| ИЛИ СУММА(Таблица.НормативнаяСтоимость) <> 0
| ИЛИ СУММА(Таблица.Стоимость) <> 0
| ИЛИ СУММА(Таблица.СтоимостьРегл) <> 0
|;
|////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ТрудозатратыНезавершенногоПроизводстваПередЗаписью
|");
(13) Добрый день!
У нас версия 2.4.2.139, но типовой код абсолютно такой же, как и Вашем случае. Единственное его предназначение в том, чтобы проверять - были ли изменения в записях регистра при проведении и если да, по записывать новое задание на расчет себестоимости в указанном периоде.
С этого все и началось: то есть при изменении (например, материала) удалялись движения из регистра ТрудозатратыНезавершенногоПроизводства, то есть появлялась разница между записями в событии "ПередЗаписью" и в событии "ПриЗаписи", что и приводит к бесконечному пересчету того периода, где был оформлен выпуск. Начал смотреть и обнаружил, что почему-то удаляется запись... Хотя явных указаний в коде на удаление записи я не нашел...
У нас версия 2.4.2.139, но типовой код абсолютно такой же, как и Вашем случае. Единственное его предназначение в том, чтобы проверять - были ли изменения в записях регистра при проведении и если да, по записывать новое задание на расчет себестоимости в указанном периоде.
С этого все и началось: то есть при изменении (например, материала) удалялись движения из регистра ТрудозатратыНезавершенногоПроизводства, то есть появлялась разница между записями в событии "ПередЗаписью" и в событии "ПриЗаписи", что и приводит к бесконечному пересчету того периода, где был оформлен выпуск. Начал смотреть и обнаружил, что почему-то удаляется запись... Хотя явных указаний в коде на удаление записи я не нашел...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот