• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Запрос По Регистру В 7.7

  • Автор темы Hryv
  • Дата начала
H

Hryv

В базе есть отчет, который раньше работал правильно
Потом в регистр добавили измерение и отчет начал косячить

Отчет довольно сложный, и переделывать его полностью долго и нудна
Но никак не соображу как устранить баг
Наверное туплю сегодня :oops:

Ближе к теме:
в запросе есть группировка по товару (с группами справочника) и функция КонОст по количеству
(в регистре товар - это измерение, количество - ресурс, на всякий случай уточняю)

в регистр добавили измерение Фирма и по ней не всегда закрывается в ноль, то есть остатки выглядят так
Товар1, Фирма1, 1
Товар1, Фирма2, -1

В запросе измерение Фирма не используется, но при Запрос.Группировка(1) Товар1 попадает с остатком 0 (что естественно 1-1=0)
Мне надо чтобы он вообще не попадал
Можно, конечно, при обходе проверять если остаток 0, то строку в отчет не выводить
Но тогда будет проблема с группами
По группе ведь может быть 0, а по разным товарам +1 и -1

и что-то ничего путного в голову не приходит ;)
 
Д

Дайнеко

Специально опробовал, выводит, зараза. Например, на разных складах +/1 а выводится по всем. Так что не ломай зубы об Запрос.
Хотя.. Попробуй Условие (ИтогКоличества <> 0)

А иначе побори анализом:
* ЭтоГруппа() = 1 не выводишь. Просто запоминаешь в переменную Группу, а также флажок ФлажокГруппуВыводить = 1
* Проверяешь Товар на 0
* Перед выводом строки:
Код:
			Если (ФлажокГруппуВыводить = 1) Тогда
ФлажокГруппуВыводить = 0;
Таб.ВывестиСекцию("Группа");
КонецЕсли;
Таб.ВывестиСекцию("Товар");
Только надо учесть и вышестоящие группы, чтобы они всегда выводились.
 
H

Hryv

В запросе условие на функцию нельзя поставить :)

А в цикле при выводе понятно что можно намудрить, но в том то и дело, что делать этого не хочется
 
P

puh14

Ну к конОст можно ещё условие прилепить... Только вот что туда написать? а если например

пустФирма = ПолучитьПустоеЗначение("Справочник.Фирмы");

Остаток = КонОст(Количество) Когда (Фирма <> ПустФирма);

Усли фирм всего две - можно поизвращаться типа

Остаток = (КонОст(Количество) Когда (Фирма = Фирма1)) + (КонОст(Количество) Когда (Фирма = Фирма2));
 
H

Hryv

из всего о чем я подумал самое простое - это выгрузить запрос в ТЗ, затем почистить ее, а затем делать цикл уже по ТЗ, а не по запросу

но и это делать лень
пошел на допущение, что отрицательных остатков по товарам быть не должно, и еще менее вероятно то, что сумма положительных и отрицательных остатков в одной группе будет ровно 0
с учетом этого просто пропускаю все строки в которых остаток равен 0
 
Д

Дайнеко

но и это делать лень
Это ключевая фраза ;)

что отрицательных остатков по товарам быть не должно, ....сумма положительных и отрицательных остатков в одной группе будет ровно 0

Ох, идеалист. Споткнешься на том, что у одного товара -1 у совсем другого +1.
Да, условие на функцию не поставишь - ляпнул не подумав. Но я размышлял и про условие Когда.
Во первых ваше можно написать просто: Остаток = КонОст(Количество) Когда (НЕ(ПустоеЗначение(Фирма) = 1));
Я думал что-то вроде: Остаток = КонОст(Количество) Когда (Количество <> 0);
Но оно бесполезно, ибо проверяет каждую конкретную запись, которая итак <> 0/
 
H

Hryv

Во первых ваше можно написать просто: Остаток = КонОст(Количество) Когда (НЕ(ПустоеЗначение(Фирма) = 1));
это не подходит

споткнуться, конечно можно, но я оценил риск как стремящийся к нулю


всем спасибо за советы ;)
 
P

puh14

О! Придумал! Делаешь перед запросом список товаров, которые косячат (отдельным запросиком), а потом в основном запросе ставишь условие, что твои товары не входят в этоот список.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!