Имя: Пароль:
1C
 
Разное выполнение запросов
,
0 falselight
 
15.09.16
10:16
Первый запрос выполняется при проведении документа.
Второй я имитирую обработкой туже ситуацию.
Первый возвращает количество -1. Второй не возвращает ничего.
Почему так?

||
ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстатки.Склад КАК Склад,
    ТоварыНаСкладахОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    ТоварыНаСкладахОстатки.Характеристика КАК Характеристика,
    ТоварыНаСкладахОстатки.КоличествоОстаток - ТоварыНаСкладахОстатки.ор_РезервОстаток КАК Количество
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(
            ,
            (Номенклатура, Характеристика, Склад) В
                (ВЫБРАТЬ
                    Таблица.Номенклатура,
                    Таблица.Характеристика,
                    Таблица.Склад
                ИЗ
                    ДвиженияТоварыНаСкладахИзменение КАК Таблица)) КАК ТоварыНаСкладахОстатки
ГДЕ
    ТоварыНаСкладахОстатки.КоличествоОстаток - ТоварыНаСкладахОстатки.ор_РезервОстаток < 0
||
ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстатки.Склад КАК Склад,
    ТоварыНаСкладахОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    ТоварыНаСкладахОстатки.Характеристика КАК Характеристика,    
    ТоварыНаСкладахОстатки.КоличествоОстаток - ТоварыНаСкладахОстатки.ор_РезервОстаток КАК Количество
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(
            ,
            Номенклатура = &Номенклатура
                И Склад = &Склад
                И Характеристика = &Характеристика) КАК ТоварыНаСкладахОстатки
ГДЕ
    ТоварыНаСкладахОстатки.КоличествоОстаток - ТоварыНаСкладахОстатки.ор_РезервОстаток < 0
1 Ёпрст
 
15.09.16
10:22
Запрос в обработке учитывает движения документа, тот что в модуле проведения - нет.
2 falselight
 
15.09.16
10:24
(1) подскажите пожалуйста как тут быть?
не соберусь никак с мыслями.
если запрос возвращает -1 в документе.
то как тот же результат получить в обработке?
3 Лефмихалыч
 
15.09.16
10:26
(2) в документе получай движение на момент времени документа ив  обработке тоже. Тогда будет одинаково
4 falselight
 
15.09.16
10:26
(1) похоже в модуле проведения тоже так же учитывает
так как такой номенклатуры в регистре вообще нет
а при проведении возвращает -1
получается наоборот
запрос в модуле проведения учитывает движения документа и не дает проводить
а в обработке движения не учитывает и ничего не возвращает
5 falselight
 
15.09.16
10:27
(3) в докумнете не имею возможности править что либо
конфигурация на поддержке
могу править только в обработке
6 Ёпрст
 
15.09.16
10:32
(4) каша у тебя в голове
7 falselight
 
15.09.16
10:38
(6) решение родилось:

в запросе что в обработке минусовать количество из докумнета

(6) то есть работает наоборот того что вы сказали в (1), правильно?
8 Лефмихалыч
 
15.09.16
10:40
(7) нажористая каша.

Ты скажи лучше, зачем ты это все затеял и чего ты добиться хочешь
9 falselight
 
15.09.16
10:41
(8) нужно контролировать что минусовой остаток по номенклатуре и создавать тз по этой номенклатуре
10 falselight
 
15.09.16
10:42
(8) получается в докумнете он есть, а в обработке нет, вот минусую количество документа в обработке ещё
11 Лефмихалыч
 
15.09.16
10:43
(9) тебе на момент проведения надо проконтролировать что ли?
12 falselight
 
15.09.16
10:52
(11) ну получается да
я документ записываю программно
и нужно как то это проконтролировать в запросе
минус количество как я хотел в (7) ошибку дает только
13 Лефмихалыч
 
15.09.16
11:11
(12) снимай с поддержки тогда.
Иначе тебе в обработке придется делать запрос в цикле, чтобы получить остатки на момент каждого документа. В одной секунде может быть олимпиард документов, по этому, даже,е сли ты вычтешь количество самого документа, ты ни как не сможешь полагаться на результат.
14 falselight
 
15.09.16
11:19
(13) имеется ввиду поддержка другой фирмы, не конфигурации, нельзя менять
15 Лефмихалыч
 
15.09.16
11:31
(14) ну, значит в другую эту фирму отправь запрос на изменение, чтобы исправили свой говнокод. Ты с обработкой своей ни чего не добьешься, а только вспотеешь и время потеряешь
16 falselight
 
15.09.16
14:03
(15) а если они утверждают что одна номенклатура с одной характеристикой может оприходоваться и списаться только раз?
17 falselight
 
15.09.16
14:15
(16+) то есть вроде как у них в коде не может быть ошибок
и период в этом случае не актуален?
18 AceVi
 
15.09.16
14:25
(0) надо смотреть весь код - ибо в какой именно момент выполняется запрос в документе? а может до запроса уже есть программно Регистр.Записать().
И в какой момент ты будешь проверять отрицательные остатки? сделаешь подписку на события? так она в той же транзакции что и само проведение. Давай весь план по решению задачи.
Обычно контроль производиться так - есть уже подготовленная таблица для движения пол регистру - она загоняеться в запрос - в запросе получаются все движения на МоментВремени документа+данные из таблицы. вот наиболее корректный способ.
19 falselight
 
15.09.16
14:33
(18) ну там в одном запросе таблица и передается в параметры, и контролируются отрицательные остатки. А их же не должно быть в базе? Значит документ уже проведет по регистру и поместил их туда.
20 AceVi
 
15.09.16
16:55
(19) Из твоего объяснения ничего не понял.
Если тебе еще нужна помощь, давай как ребенок - по шагам все с примерами кода. Типа
Вот у меня таблица для движения по регистру - вот она в запрос попала вот контроль.
А вот что я хочу сделать.
21 aleks_default
 
15.09.16
17:00
А я вот не понял, что хотите контролировать? Какая задача стоит?
Контроль отрицательных остатков? Так он итак отработает при программном проведении документов в их обработке проведения. Зачем его делать внешним?