|
v7: Глюки (?) функции Счётчик() в запросе | ☑ | ||
---|---|---|---|---|
0
akovpashko
12.08.13
✎
15:39
|
Пишу обработку, которая делает документ возврата на весь товар склада. Естессно если на складе товара нету, незачем и создавать пустой документ. Хочу для этого использовать Счётчик().
Код запроса: ЗапросОстатков = СоздатьОбъект("Запрос"); Если выбДатаОстатков < ПолучитьДатуТА() Тогда ТекстЗапроса = "Период с выбДатаОстатков по выбДатаОстатков;"; Иначе ТекстЗапроса = ""; КонецЕсли; ТекстЗапроса = ТекстЗапроса + "//{{ЗАПРОС(ОстатокВнутрСкладКлиента) |СкладКлиента = Регистр.ОстаткиНаВнутрСкладах.СкладКлиента; |ВнутрСклад = Регистр.ОстаткиНаВнутрСкладах.ВнутрСклад; |Товар = Регистр.ОстаткиНаВнутрСкладах.Товар; |Количество = Регистр.ОстаткиНаВнутрСкладах.количество; |Функция КоличествоКонОст = КонОст(Количество); |Группировка Товар без групп; |Условие(СкладКлиента = выбСкладКлиента); |Условие(ВнутрСклад = выбВнутрСкладКлиента); |"//}}ЗАПРОС Дальше по результатам запроса формирую документ. Если этой обработкой сформировать документ возврата на определенную дату, провести его, а потом еще раз сформироватьь на ту же или более позднюю дату, получаю тот же документ, только без количества товара. Выгрузка запроса в ТЗ и просмотр ТЗ показывает тот же товар, но с нулями в колонке КоличествоКонОст. Убираю из запроса Счётчик() и запрос чудесным образом ничего не возвращает, как по идее и должно быть. Релиз 7.7.027 + MSSQL 2005 + патч (секретный релиз). Как задачу реализовать по-другому знаю. Вопрос: это глюк платформы, секретного релиза или мой провтык? |
|||
1
skunk
12.08.13
✎
15:43
|
ты же документ провел и списал товар ... разве нет?
|
|||
2
Ёпрст
12.08.13
✎
15:46
|
(0)
1.в запросе (0) нет функции Счётчик 2.ты не в курсе, что она считает. |
|||
3
Ёпрст
12.08.13
✎
15:47
|
+2
3. При возврате товара, остаток на складе увеличиться в 2 раза. |
|||
4
Ёпрст
12.08.13
✎
15:48
|
+3
4. чего курил автор, предстоит разобраться врачам. |
|||
5
akovpashko
12.08.13
✎
16:09
|
(1) вот в этом и вопрос. Я документ провел и списал, допустим, 7 единиц одного и 1 единицу второго. После этого запрос возвращает две строки: первый и второй товар, но без количества.
(2) Прошу прощения. Запрос скопировал уже когда сделал по-другому. Оригинал запроса: Если выбДатаОстатков < ПолучитьДатуТА() Тогда ТекстЗапроса = "Период с выбДатаОстатков по выбДатаОстатков;"; Иначе ТекстЗапроса = ""; КонецЕсли; ТекстЗапроса = ТекстЗапроса + "//{{ЗАПРОС(ОстатокВнутрСкладКлиента) |СкладКлиента = Регистр.ОстаткиНаВнутрСкладах.СкладКлиента; |ВнутрСклад = Регистр.ОстаткиНаВнутрСкладах.ВнутрСклад; |Товар = Регистр.ОстаткиНаВнутрСкладах.Товар; |Количество = Регистр.ОстаткиНаВнутрСкладах.количество; |Функция КоличествоКонОст = КонОст(Количество); |Функция Счётчик = Счётчик(); |Группировка Товар без групп; |Условие(СкладКлиента = выбСкладКлиента); |Условие(ВнутрСклад = выбВнутрСкладКлиента); |"//}}ЗАПРОС И да, я не совсем уверен, что знаю, что она считает. В СП и описании языка толком не пишут. Буду плагодарен за пояснение или ссылку на нормальное описание. (3) это не совсем понял. Там реализован учет товара, который передали клиенту с основного склада, но он еще его не продал. Вернуть нужно назад на основной склад. (4) к счастью не курю :) |
|||
6
akovpashko
12.08.13
✎
16:10
|
+5 (1) 7 единиц одного и 1 единица второго товара - это и был весь остаток на складе до возврата.
|
|||
7
Ёпрст
12.08.13
✎
16:13
|
(5)
Прочитай описание функции счётчик, в СП.. много думай. |
|||
8
Ёпрст
12.08.13
✎
16:13
|
Это не количество записей по группировке запроса, если что.
|
|||
9
пипец
12.08.13
✎
16:14
|
чоу там гадать - счетчик считает количество строк в выводе результата
|
|||
10
Grobik
12.08.13
✎
16:14
|
>> к счастью не курю :)
К несчастью. |
|||
11
Ёпрст
12.08.13
✎
16:15
|
И функция Счётчик в этом запросе.. ни на что не влияет вообще.
|
|||
12
Ёпрст
12.08.13
✎
16:15
|
(9) не угадал.
|
|||
13
пипец
12.08.13
✎
16:19
|
(12) скажем так, не так выразился ... а по сути однофигственно если не придираться к словам ... ;))
|
|||
14
jarett
12.08.13
✎
16:19
|
Простите, функция Счётчик() просто случайно конструктором вставлена? Ну чисто поржать...
|
|||
15
akovpashko
12.08.13
✎
16:20
|
(7) (8) вот вы, старожилы форума, вредные иногда бываете :)
Из СП: "Счётчик (Counter) - количество записей, вошедших в выборку, <Параметр> - не нужен;" Логично подумать, что там количество всех записей, которые попали в выборку по указанным условиям без группировки. Следует ли из этого, что для тех целей, для которых я хотел применить эту функцию она не подходит? (10) Нет уж, спасибо. Вон до меня здешний одинесник выпивать любил. Такого понаписывал, что уже больше года разгребаю. |
|||
16
Ёпрст
12.08.13
✎
16:21
|
(13)
угадай, что выведет функция в данном запросе: |Док = Документ.Реализация.ТекущийДокумент; |Количество = Документ.Реализация.Количество; |Функция СуммаКол = Сумма(Количество); |Функция Счётчик = Счётчик(); |Условие (Док = ВыбДок); |Группировка Док; |
|||
17
Ёпрст
12.08.13
✎
16:22
|
(15) ты тоже угадай, что выведет счётчик в этом запросе.
|
|||
18
Ёпрст
12.08.13
✎
16:22
|
угадаешь - поймешь что считает. и при каких условиях.
|
|||
19
пипец
12.08.13
✎
16:23
|
(15) не поверишь , понаписанное полуфинансистом/почтикодером женщиной , не любящей выпивать - уже который год разгребаем ;))
|
|||
20
akovpashko
12.08.13
✎
16:25
|
(16) если Количество - реквизит ТЧ, то Счётчик = количество строк в ВыбДок?
|
|||
21
пипец
12.08.13
✎
16:26
|
(16) ну чоу гадать ?
(20) ;'))) |
|||
22
Ёпрст
12.08.13
✎
16:29
|
(20) молодец..
А так ? |Док = Документ.Реализация.ТекущийДокумент; |Функция Счётчик = Счётчик(); |Условие (Док = ВыбДок); |Группировка Док; |
|||
23
akovpashko
12.08.13
✎
16:36
|
(22) а так Счётчик = 1. Я понял уже, что применил там, где не применяется. Спасибо за подсказки.
А как Счётчик работает в запросах по регистрах? Или его туда вообще лучше не совать? |
|||
24
Ёпрст
12.08.13
✎
16:36
|
(23) подсчитывает количество записей , участвующих при расчете функций.
|
|||
25
akovpashko
12.08.13
✎
16:48
|
(24) Ясно, спасибо.
Тогда никак не могу ысмыслить как так вышло, что 11.08.2013 я списал с регистра 2 товара в количестве, которое было на остатках (то есть полностью), выполнил этот запрос с периодом с 12.08.2013 по 12.08.2013, Счётчик = 2, и в выборку попали оба этих товара но с количествами 0? Движений по регистру в эти дни нету. |
|||
26
Ёпрст
12.08.13
✎
16:51
|
(25) ё...
при расчете КонОст участвовало 2 записи.. это и показал счётчик. А то что КонОст вернул 0 приэтом - так и должно быть. |
|||
27
akovpashko
12.08.13
✎
17:03
|
(26) это я понимаю. А вот откуда 2 записи и откуда 2 записи с тем же товаром, что и был списан не пойму.
Ладно, вопрос решен, подзатыльник получен, пояснения получены. Всем спасибо. |
|||
28
Ёпрст
12.08.13
✎
17:05
|
(27) Итоги на ТА или нет смотришь? В зависимости от этого, КонОст считает остаток по одной табличке или по двум..
|
|||
29
Ёпрст
12.08.13
✎
17:06
|
если интересно, чего он там считает - открой запрос в профайлере и гляди. Всё станет более чем понятно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |