Имя: Пароль:
 
1C
1C 7.7
v7: Запрос в 7.7 с условием на счет. Туплю чего-то.
0 fisher
 
08.07.20
11:58
С 7.7 давно не работаю, да вот пришлось немножко.
Черный запрос. Добавляю условие на счет из карточки счета и запрос почему-то ничего не возвращает.
Условие такого вида
    |ТМЦ = Документ.РасходнаяНакладная.ТМЦ;
    |СчетУчета = Документ.РасходнаяНакладная.ТМЦ.Счет;
    |СуммаБезНДС = Документ.РасходнаяНакладная.СуммаБезНДС;
    |Функция СуммаБезНДССумма = Сумма(СуммаБезНДС);
    |Условие(СчетУчета = ВыбСчетУчета);
    |Группировка ТМЦ без групп;
ВыбСчетУчета - получаю через СчетПоКоду.
Если выбросить условие то запрос отрабатывает. И фильтрация по этой же переменной в обходе результата запроса тоже работает корректно. А в запросе - никак.
Чую, позабыл про какую-то тонкость.
1 Prog111
 
08.07.20
13:01
Функцию надо добавить.
2 ДенисЧ
 
08.07.20
13:17
(1) она есть, вынимательней будь
3 ДенисЧ
 
08.07.20
13:17
Возможно, счёт неправильно задаёшь
4 vladko
 
08.07.20
13:51
(0)
1. В отладчике проверь, точно ли для ВыбСчетУчета сработало СчетПоКоду()
2. проверь типы реквизитов: в документе РасходнаяНакладная реквизит Счет, ну и твой ВыбСчетУчета
5 vladko
 
08.07.20
13:52
(0) ну и в начале запроса конечно же, я думаю, что есть период выборки накладных.
6 Vovik
 
08.07.20
13:53
Я делаю иногда так

Функция СчетПодходит(Сч)
Возврат 1;
КонецФункции

|Условие(СчетПодходит(СчетУчета)=1)
7 Vovik
 
08.07.20
13:54
А там отлаживай и обрабатывай как хочешь
8 vladko
 
08.07.20
13:54
(0) Может быть, что в РасходнаяНакладная реквизит Счет отвечает за счет на оплату, а не за бух.счет.
9 Злопчинский
 
08.07.20
14:07
ну и если ВыбСчетУчета - группа, то случится обломс...
поэтому можно так написать:
(СчетУчета в ВыбСчетУчета)
10 fisher
 
08.07.20
14:43
(4) Как я уже сказал, в постобработке аналогичное условие успешно срабатывает. То есть со счетом все в порядке.
(5) Как я уже сказал, без условия запрос успешно отрабатывает. То есть с периодом все в порядке.
(8) В постобработке аналогичное условие успешно срабатывает.
(9) Нет, не группа.
Фигня какая-то, в общем. Пока оставил запрос по всем счетам и фильтрую уже при обходе. Благо там 99% нужных данных.
11 Злопчинский
 
08.07.20
14:48
СчетУчета - реквизит чего? шапки дока?
12 Ёпрст
 
08.07.20
14:50
(0)
ТМЦ - поди реквизит <Справочник>, неопределенного вида ? да ?

если так, у таких ревизитов нельзя в запросе поиметь переменную для группировки, эти атрибуты будут пустыми. максимум, можно только в условия или в Когда у функций пихать через точку (плюя на производительность, особенно в скуле)
13 Ёпрст
 
08.07.20
14:50
от так:

|Условие(ТМЦ.СчетУчета = ВыбСчетУчета);
14 fisher
 
08.07.20
15:07
(11) СчетУчета - это реквизит справочника, ссылка на элемент которого в реквизите ТМЦ табличной части дока.
(12) Определенного.
15 fisher
 
08.07.20
15:17
(13) Гы. Так работает. Но это ад и израиль. Судя по всему, в этом случае с сиквела вытягиваются данные без условия, а потом по каждой строчке в цикле выполняется обращение к БД за счетом учета.
Во всяком случае вытянуть значение счета запросом и отфильтровать по нему постобработкой без доп. обращений к БД на порядки быстрее выходит. Причем про порядки - это я не шучу.
Если как в (13) - две минуты. Если без условия и пост-фильтрацией - несколько секунд.
16 fisher
 
08.07.20
16:16
А может быть беда в том, что реквизит счет имеет тип просто "Счет", а на счет конкретного плана счетов?
17 Somebody
 
08.07.20
16:18
(16) вот это вряд ли.
18 Злопчинский
 
08.07.20
16:22
(17) ну как бы счет10 для хозяйственногопланасчетов и счеьт10 для корммерческоговыдуманногопланасчетов - это будут вообщето разные значения...
19 Злопчинский
 
08.07.20
16:23
(14) тогда должно работать...
20 Ёпрст
 
08.07.20
19:54
(14) точно определенного? Можно еще включитьsql(1) или 0 не помню, поиграться.. а так, переписать на прямой запрос и не парится
21 Ёпрст
 
08.07.20
19:56
Реквизит тмц в таб части, определенного вида? Типа справочник.вася? Или просто <справочник?
22 fisher
 
09.07.20
10:14
(20) Точно. "Спиравочник.ТМЦ"
23 cyberandr
 
09.07.20
10:37
ВыбСчетУчета  через ПЕРЕМ в начале процедуры объявляешь?
24 Ёпрст
 
09.07.20
11:05
(22) тогда забей, перепиши на прямой запрос
25 Ёпрст
 
09.07.20
11:06
ну или с потерей производительностит, перед выполнением, Запрос.ВключитьSQL(0)
26 fisher
 
09.07.20
11:13
(23) Не. Без Перем. Сразу перед запросом.
27 fisher
 
09.07.20
11:16
(24) Да я сразу же забил :) Фильтрую уже при обходе. Все шустренько ибо фильтровать надо немного.
Просто интересно, в чем трабла.
28 vladko
 
09.07.20
11:43
(27) ставлю на типизацию переменных. Запрос должен обрабатывать условие. Если глянуть твой .md тогда скорее всего станет ясно.
29 cyberandr
 
09.07.20
12:19
(26) Поставь у меня может помочь
30 cyberandr
 
09.07.20
12:20
Сорри  (26) Поставь может помочь, мне помогало.
31 victuan1
 
14.07.20
05:45
(15) Это багофича запроса в 7.7 - нельзя вытянуть значение поля через две точки. Тип справочника роли не играет.
32 victuan1
 
14.07.20
05:46
Поэтому так не работает:
|СчетУчета = Документ.РасходнаяНакладная.ТМЦ.Счет;
|Условие(СчетУчета = ВыбСчетУчета);

а так - должно:
|СчетУчета = Документ.РасходнаяНакладная.ТМЦ;
|Условие(СчетУчета.Счет = ВыбСчетУчета);
33 fisher
 
14.07.20
09:18
(31) Вытягивается без проблем. И группируется без проблем. А вот условие почему-то не работает. Возможно, какая-то комбинация нескольких точек и счета неопределенного типа.