Имя: Пароль:
1C
1С v8
Запрос к виртуальной таблице остатков возвращает пустую таблицу
0 Blast
 
17.06.14
09:21
Добрый день.

Есть 2 подписки на события к документам поступления: обработка проведения и удаление проведения.
Для обеих подписок вызывается одна и та же процедура обработки с запросом, который получает данные из виртуальной таблицы остатков на текущую дату.

При проведении/перепроведении документа запрос возвращает таблицу с остатками. При отмене проведения возвращает пустую таблицу.

Сам запрос простой:

ВЫБРАТЬ
    ТаблЗначенийДляПроверки.Номенклатура КАК Номенклатура,
    ТаблЗначенийДляПроверки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    ТаблЗначенийДляПроверки.СерияНоменклатуры КАК СерияНоменклатуры,
    ТаблЗначенийДляПроверки.Качество КАК Качество,
    ТаблЗначенийДляПроверки.Количество КАК Количество,
    &Склад КАК Склад
ПОМЕСТИТЬ ТабДокументаОбъекта
ИЗ
    &ТаблЗначенийДляПроверки КАК ТаблЗначенийДляПроверки

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    ХарактеристикаНоменклатуры,
    СерияНоменклатуры,
    Качество
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТаблЗначенийДляПроверки.Номенклатура,
    ВЫРАЗИТЬ(ТаблЗначенийДляПроверки.Номенклатура КАК Справочник.Номенклатура).ВестиУчетПоСериям КАК ВестиУчетПоСериям,
    ВЫРАЗИТЬ(ТаблЗначенийДляПроверки.Номенклатура КАК Справочник.Номенклатура).ВестиУчетПоХарактеристикам КАК ВестиУчетПоХарактеристикам,
    ВЫРАЗИТЬ(ТаблЗначенийДляПроверки.Номенклатура КАК Справочник.Номенклатура).ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
    ТаблЗначенийДляПроверки.ХарактеристикаНоменклатуры,
    ТаблЗначенийДляПроверки.СерияНоменклатуры,
    ТаблЗначенийДляПроверки.Качество,
    ТаблЗначенийДляПроверки.Склад,
    ТаблЗначенийДляПроверки.Количество КАК КоличествоДок,
    ЕСТЬNULL(СвободныеОстаткиОстатки.КоличествоОстаток, 0) КАК Количество,
    ТаблЗначенийДляПроверки.Количество + ЕСТЬNULL(СвободныеОстаткиОстатки.КоличествоОстаток, 0) КАК Нехватка
ИЗ
    ТабДокументаОбъекта КАК ТаблЗначенийДляПроверки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(
                ,
                (Склад, Номенклатура, ХарактеристикаНоменклатуры, Качество) В
                    (ВЫБРАТЬ
                        ТабДокументаОбъекта.Склад,
                        ТабДокументаОбъекта.Номенклатура,
                        ТабДокументаОбъекта.ХарактеристикаНоменклатуры,
                        ТабДокументаОбъекта.Качество
                    ИЗ
                        ТабДокументаОбъекта КАК ТабДокументаОбъекта)) КАК СвободныеОстаткиОстатки
        ПО ТаблЗначенийДляПроверки.Склад = СвободныеОстаткиОстатки.Склад
            И ТаблЗначенийДляПроверки.Номенклатура = СвободныеОстаткиОстатки.Номенклатура
            И ТаблЗначенийДляПроверки.ХарактеристикаНоменклатуры = СвободныеОстаткиОстатки.ХарактеристикаНоменклатуры
            И ТаблЗначенийДляПроверки.СерияНоменклатуры = СвободныеОстаткиОстатки.СерияНоменклатуры
            И ТаблЗначенийДляПроверки.Качество = СвободныеОстаткиОстатки.Качество
ГДЕ
    ТаблЗначенийДляПроверки.Количество + ЕСТЬNULL(СвободныеОстаткиОстатки.КоличествоОстаток, 0) < 0

По идее какая разница провожу я документ или отменяю проведение. Данные пытаюсь получить без привязки к документу.

Кто-нибудь сталкивался с подобной ситуацией?
1 DCKiller
 
17.06.14
09:24
(0) Откуда берутся данные в &ТаблЗначДляПроверки?
2 Blast
 
17.06.14
09:25
(1) Это таблица значений. Подставляется напрямую. Она формируется из табличной части Источника.
3 shuhard
 
17.06.14
09:26
(0)[Кто-нибудь сталкивался с подобной ситуацией?]
все
запросы требуют отладки
4 Dionis Sergeevich
 
17.06.14
09:30
(0) Продам консоль запросов
5 Бешеная Нога
 
17.06.14
09:31
значит нет остатков по условиям, которые передаются в виртуальную таблицу
6 Бешеная Нога
 
17.06.14
09:32
рекомендую проверить Качество в ТаблЗначенийДляПроверки и в регистре остатков
7 Blast
 
17.06.14
09:32
(3) Запрос работает.
Он проверялся в консоли.

(4) Которую можно скачать в И-нете бесплатно?:-))
8 Dionis Sergeevich
 
17.06.14
09:33
ВЫБРАТЬ
                        ТабДокументаОбъекта.Склад,
                        ТабДокументаОбъекта.Номенклатура,
                        ТабДокументаОбъекта.ХарактеристикаНоменклатуры,
                        ТабДокументаОбъекта.Качество
                    ИЗ
                        ТабДокументаОбъекта КАК ТабДокументаОбъекта

что-то мне не нравится тут
9 Blast
 
17.06.14
09:34
(6) Спасибо. Попробую проверить Качество.

Условия те же самые, что и при проведении документа. При проведении документа остатки на текущую дату получаются.
10 Blast
 
17.06.14
09:34
(8) Что именно? Это отрабатывает в 1-м случае.
Это подзапрос, извлекающий данные из временной таблицы
11 Dionis Sergeevich
 
17.06.14
09:37
(10) остатки то фактически есть?
12 Blast
 
17.06.14
09:38
(6) Попробовал ради интереса просто обратиться запросом к виртуальной таблице остатков при отмене проведения, передав в качестве отбора ограничение по Складу и списку номенклатуры.

Результат тот же.
13 Blast
 
17.06.14
09:39
(11) Да. При проведении получаются остатки на текущую дату без движений самого документа, из которого подписка на событие отрабатывает.

После отмены проведения, если посмотреть в регистр накопления, данные так же имеются - остатки отрицательные, но есть
14 Dionis Sergeevich
 
17.06.14
09:39
условие соединения по сериям закоментить пробывал?
15 Blast
 
17.06.14
09:42
(14) Более того. Пробовал выполнить не пакетный запрос, в котором обращение только к виртуальной таблице остатков и ограничение по складу и списку номенклатуры.
Почему-то запрос при отмене проведения не видит остатков.
16 DCKiller
 
17.06.14
09:46
(15) Хм... ну логично вообще-то.
17 floody
 
17.06.14
09:46
Что-то мне подсказывает, что если запрос не видит остатков, то остатков нет.
18 Blast
 
17.06.14
09:48
(16)(17)

Попробовал посмотреть Источник.Движения при отмене проведения. Регистр Свободные остатки - пустой по этому документу, соответственно отрицательные остатки есть. А вот по регистру Товары на складах, например, движения ещё не удалены.
19 DCKiller
 
17.06.14
09:50
(18) Я извиняюсь, а почему при отмене проведения документа по регистру у тебя остатки отрицательные, а не нулевые?
20 Dionis Sergeevich
 
17.06.14
09:50
(18) Универсальным отчетом или запросиком в консоли запросов посмотри остатки то есть?
21 Blast
 
17.06.14
09:52
(19) потому что реализацию никто не распроводил.

У меня идет как правило пара документов поступление - реализация. У нас на конец каждого месяца 41 счет по складу закрывается. По регистрам остатки нулевые.
22 Blast
 
17.06.14
09:53
(20) По консоли:
При проведенном документе их как и положено нет. При распроведенном документе - они отрицательные.
23 DCKiller
 
17.06.14
09:55
(22) Попробуй поменять условие. Вместо

ГДЕ
    ТаблЗначенийДляПроверки.Количество + ЕСТЬNULL(СвободныеОстаткиОстатки.КоличествоОстаток, 0) < 0

Сделай

ГДЕ
    ТаблЗначенийДляПроверки.Количество + ЕСТЬNULL(СвободныеОстаткиОстатки.КоличествоОстаток, 0) = 0
24 hhhh
 
17.06.14
09:57
(22) а ТаблЗначенийДляПроверки.Количество отрицательное?
25 Blast
 
17.06.14
10:00
(23) Да, данные извлеклись поскольку ТаблЗначенийДляПроверки.Количество = 0, и ЕСТЬNULL(СвободныеОстаткиОстатки.КоличествоОстаток, 0) = 0

Получается, что при отмене проведения данные в БД в таблице свободные остатки ещё есть, пока транзакция не завершилась, а в Источник.Движения.СвободныеОстатки - набор уже пустой.

Попробую его записать до запроса.

(24) Положительное - при проведении,
равно 0 - при отмене проведения.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший