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

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

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

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

Снова новичек просит помощи. Цены и товар.

  • Автор темы NocturnalMortum
  • Дата начала
N

NocturnalMortum

Доброго времени суток уважаемые специалисты. Не могу справится с задачей. Задача такова: нужно за определенный промежуток времени получить сколько и на какую сумму было продано определенного товара, как в единицах так и группами (к примеру 1 процессор Intel I3 или вся продукция Intel). У меня не получается привязаться по ТМЦ. Прошу помощи. Вот мой код(ВыбНоменклатура реквизит):
Код:
Запрос=СоздатьОбъект("Запрос");
ТЗ.УдалитьСтроки();	
ТЗ.НоваяКолонка("ТМЦ"); 
ТЗ.НоваяКолонка("Цена");
ТЗ.НоваяКолонка("Количество");
ТЗ.НоваяКолонка("Сумма");

РегТовары = СоздатьОбъект("Регистр.Продажи");
РегТовары.ВыбратьДвижения(НачДата, КонДата);
Пока РегТовары.ПолучитьДвижение() = 1 Цикл
//если ВыбНоменклатура=РегТовары.ТМЦ тогда
ТЗ.НоваяСтрока();
ТЗ.ТМЦ=РегТовары.ТМЦ;
ТЗ.Цена=РегТовары.ПродСтоимость; 
ТЗ.Количество=РегТовары.Количество;
ТЗ.Сумма=РегТовары.Количество*РегТовары.ПродСтоимость;
//КонецЕсли;
КонецЦикла;
за ранее благодарен.
 
V

vitfil

А за позднее?
Любезный, вопрос в чем?
Вот, скажем, для чего вы создаете объект "Запрос", если потом его не используете?
 
P

puh14

Ну группы выбрать через движения очень сложно. Проще запросом. В принципе конструктор запроса за тебя почти всю работу сделает.
получится что-то вроде.

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "Период С НачДата по КонДата;
|Товар = Регистр.Продажи.ТМЦ;
|Сум = Регистр.Товары.ПродСтоимость;
|Кол = Регистр.Товары.Количество;
|Группировка Товар;
|Функция КолВо = Сумма(Кол);
|Функция ИтСумма = Сумма(Сум);";
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Шапка");
Пока запрос.Группировка(1) = 1 Цикл
Таб.ВывестиСекцию("СтрокаГруппы");
Если (Запрос.товар.ЭтоГруппа() = 0) и (Запрос.КолВо <>0) Тогда
Цена = Запрос.ИтСумма/Запрос.КолВо;
Иначе
Цена = 0;
КОнецЕсли;
Таб.Вывести("СтрокаЭлемента");

КонецЦикла;
Таб.ВывестиСекцию("Итого");
Таб.Опции(0,0,0,0);
Таб.Показать("Таблица","");
 
N

NocturnalMortum

Что же вы все со своим "поздним" то =)) Запрос остался, забыл удалить... пробовал и запросом делать. Вопрос в том что мне нужно по выбранной номенклатуре получить сколько продано это номенклатуры и по какой цене за период времени. Не получается у меня сам фильтр по номенклатуре. Все продажи выводит, а по одному или группе товаров не получается.
 
P

puh14

Добавить в запрос условие

Условие (Товар в ВыбНоменклатура);

ВыбНоменклатура вывести на форму .

для регистра - читай УстановитьФильтр()
 
N

NocturnalMortum

Мой запрос выглядел один в один как Ваш, только в условии стояло "="... и не работал так же как не работает Ваш =) Может я забыл где нибудь что нибудь указать? Руки то растут из района мозгов (а они находятся далеко не в голове =)))
 
P

puh14

Покажи полный текст запроса.

а лучше выложи внешнюю обработку
 
N

NocturnalMortum

ТекстЗапроса =
"
|Период с (НачДата) по (КонДата);
|Количество = Регистр.Продажи.Количество;
|Стоимость=Регистр.Продажи.ПродСтоимость;
|ТМЦ = Регистр.Продажи.ТМЦ;
|Группировка ТМЦ;
|Условие (ТМЦ=ВыбНоменклатура);
|Функция Сумма = Сумма(Стоимость);
";
 
P

puh14

1) лучше не называй результат выполнения функции аналогично самой функции.
2) а количество суммовать не надо?
3) " = " в условии ищет четкое соответствие, а " в " ищет вхождение в том числе и в иерархию.
4) Ставь переменные измерений в запросе аналогично их положению в регистре - они не зря стоят в таком порядке.

а так всё вроде правильно - может у тебя выбноменклатура обнуляется, или объявлена в модуле как переменная? проверь отладчиком перед звыполнением запроса чему равно её значение.

А выполнить Запрос не забыл ?

Забыл ;-(
 
N

NocturnalMortum

да, выполнил. Внешняя обработка:

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Шапка");
Запрос.Выполнить(ТекстЗапроса);
Пока запрос.Группировка(1) = 1 Цикл
Таб.ВывестиСекцию("Строка");
Товар=Запрос.ТМЦ;
Стоимость=Запрос.Стоимость;
Кол=Запрос.Количество;
 
V

vbs

А вот эту реплику автор заметил, даже отметил, что уже отвечали подобным образом, только тогда было "за раннее", а теперь "за ранее".
Естественно, подобное вызывает желание сотворить каламбур.
И что, не подвигло заглянуть в учебник пятого класса, чтобы понять, как грамотно написать?
Хоть и НОВИЧЕК, но непростительно писать так безграмотно
 
P

puh14

Лучше сохрани отчет в внешнюю обработку, переименуй в txt и выложи на форуме, а то испорченый телефон получается. Условие однозначно должно отрабатывать, ошибка похоже не в запросе. Конфа ТИС типовая?
 
N

NocturnalMortum

Прошу прощения за мою безграмотность. Мой русский язык испорчен "албанским" и другими пагубными влияниями интернета. Я вижу для многих это принципиально. Впредь постараюсь синтаксических ошибок не допускать. Теперь по делу. Количество пока суммировать не надо, так как там есть и штуки и метры и упаковки, получится черти что... Проблема в том что Запрос формируется только по группам товаров, т.е. на отдельно выбранный товар он мне ничего не выдает. Конфигурация типовая. Как и просили прикрепляю *.тхт фаил.
 

Вложения

  • 4.txt
    33 КБ · Просмотры: 186
P

puh14

Всё он тебе дает - просто ты поставил вывод строчки в таблицу перед тем как определил переменные ТМЦ, колво, сумма и т.д. Разумеется на момент вывода строчки они пустые , а если выбрана группа товаров - то выводятся вообще данные с предыдущей позиции запроса.


ещё один совет - нафиг тебе что-то переназначать переменным? Вставляй в таблицу непосредственно Запрос.товар, Запрос.Колво
 
N

NocturnalMortum

Спасибо за помощь, впредь буду внимательнее... Теперь у меня появилась еще одна проблема, не могу получить покупную цену по этому же товару, когда начинаю формировать отчет выдает ошибку "Значение не представляет агрегатный объект (ТипНоменклатуры):8". Кстати я забыл Вам сказать что отчет внешний. Может я не из того регистра пытаюсь получить значение? Вот код:

ТекстЗапроса = "Период С НачДата по КонДата;
|Товар = Регистр.Продажи.ТМЦ;
|Сум = Регистр.Продажи.ПродСтоимость;
|Кол = Регистр.Продажи.Количество;
|ПостТовар=Регистр.ПартииНаличие.ТМЦ;
|ПостЦена=Регистр.ПартииНаличие.СуммаБух;
|Группировка Товар;
|Группировка ПостТовар;
|Функция КолВо = Сумма(Кол);
|Функция ИтСумма = Сумма(Сум);
|Функция ПриходС = Приход(ПостЦена);
|Условие ((Товар.ТипНоменклатуры <> Перечисление.ТипыНоменклатуры.Услуга) И (Товар.ТипНоменклатуры <> Перечисление.ТипыНоменклатуры.Работа));";
Если ВыбНоменклатура.Выбран()=1 Тогда
ТекстЗапроса=ТекстЗапроса+"
|Условие (Товар в ВыбНоменклатура);
|";
ТекстЗапроса=ТекстЗапроса+"
|Условие (ПостТовар в Товар );
|";
КонецЕсли;
Запрос.Выполнить(ТекстЗапроса);
 
V

vbs

|Условие ((Товар.ТипНоменклатуры <> Перечисление.ТипыНоменклатуры.Услуга) И (Товар.ТипНоменклатуры <> Перечисление.ТипыНоменклатуры.Работа));";
Замени на
|Условие ((Товар.ВидНоменклатуры <> Перечисление.ВидыНоменклатуры.Услуга) И
(Товар.ВидНоменклатуры <> Перечисление.ВидыНоменклатуры.Работа));";
 
P

puh14

Запрос не понимает явное направление в тексте запроса на ссылочные данные конфигурации типа Перечисление.Тип.ВотТакой или Константа.БлаБлаБла.

Перед выполнением запроса создай переменную, в которую пропиши нужное тебе значение, её же поставь и в условие.
 
V

vbs

Запрос не понимает явное направление в тексте запроса на ссылочные данные конфигурации типа Перечисление.Тип.ВотТакой
Странно !
Я родной, а потом свой кусок кода проверил в запросе на реальной базе (ТиС9.54), вставив его в отчет "ДинамикаПродаж". :)
Родной, потому что поленился посмотреть устройство справочника (Там ТипНоменклатуры отсутствует, а ВидНоменклатуры есть)

Может, у него измерение ТМЦ имеет не тип "Справочник.Номенклатура", а просто "Справочник" ?
 
Мы в соцсетях:

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