Имя: Пароль:
1C
1C 7.7
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
если интересно, чего он там считает - открой запрос в профайлере и гляди. Всё станет более чем понятно