Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Запрос в 7.7 с условием на счет. Туплю чего-то.

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

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

|Условие(СчетПодходит(СчетУчета)=1)
   Vovik
 
7 - 08.07.20 - 13:54
А там отлаживай и обрабатывай как хочешь
   vladko
 
8 - 08.07.20 - 13:54
(0) Может быть, что в РасходнаяНакладная реквизит Счет отвечает за счет на оплату, а не за бух.счет.
   Злопчинский
 
9 - 08.07.20 - 14:07
ну и если ВыбСчетУчета - группа, то случится обломс...
поэтому можно так написать:
(СчетУчета в ВыбСчетУчета)
   fisher
 
10 - 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
от так:

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

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


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