Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
02 июл 2025, 05:01

Динамика Цен

Автор gliokker, 01 сен 2015, 12:30

0 Пользователей и 1 гость просматривают эту тему.

gliokker

Всем привет, пишу отчёт в СКД Динамика цен закупа товара.
Все работает всё выводит, но не могу придумать алгоритм что бы повторяющиеся цены за определённый период не выводились.Подскажите как это реализовать.
ВЫБРАТЬ
   ЗакупкиОбороты.Номенклатура,
   ЗакупкиОбороты.Контрагент,
   ЗакупкиОбороты.СтоимостьОборот / ЗакупкиОбороты.КоличествоОборот КАК Цена,
   ЗакупкиОбороты.Период КАК Дата,
   МАКСИМУМ(ЗакупкиОбороты.СтоимостьОборот / ЗакупкиОбороты.КоличествоОборот) КАК МаксЦена,
   МИНИМУМ(ЗакупкиОбороты.СтоимостьОборот / ЗакупкиОбороты.КоличествоОборот) КАК МинЦена
ИЗ
   РегистрНакопления.Закупки.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ЗакупкиОбороты

СГРУППИРОВАТЬ ПО
   ЗакупкиОбороты.Номенклатура,
   ЗакупкиОбороты.Контрагент,
   ЗакупкиОбороты.Период,
   ЗакупкиОбороты.СтоимостьОборот / ЗакупкиОбороты.КоличествоОборот
Вот запрос, думал найти МаксЦену и МинЦену потом их сравнить, не получилось не сравниваются.
"Управление торговлей", редакция 10.3 (10.3.32.2)

vitasw

Ключевое слово "Различные".
ВЫБРАТЬ РАЗЛИЧНЫЕ

gliokker

Цитата: vitasw от 01 сен 2015, 12:40
Ключевое слово "Различные".
ВЫБРАТЬ РАЗЛИЧНЫЕ
Нет это работать не будет.

Дмитрий@

Какие именно цены, у вас целых три.
Добавлено: 01 сен 2015, 16:26


В случае повтора цен какой период выводить?

gliokker

Цитата: Дмитрий@ от 01 сен 2015, 16:23
Какие именно цены, у вас целых три.
Добавлено: 01 сен 2015, 16:26


В случае повтора цен какой период выводить?
Всё уже сделал спасибо,кому интересно.
Сделал второй набор данный (объект) при компоновке результата написал маленький кодик, и вуаля всё работает
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; // отключаем стандартный вывод отчета - будем выводить программно
НачДата = КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных.Элементы.Найти("НачалоПериода").Значение;
КонДата = КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных.Элементы.Найти("КонецПериода").Значение;

    ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура");
ТЗ.Колонки.Добавить("Контрагент");

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗакупкиОбороты.Контрагент КАК Контрагент,
| ЗакупкиОбороты.Номенклатура КАК Номенклатура,
| ЗакупкиОбороты.Период КАК Период,
|   ЗакупкиОбороты.КоличествоОборот,
|   ЗакупкиОбороты.СтоимостьОборот
|ИЗ
| РегистрНакопления.Закупки.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ЗакупкиОбороты
|УПОРЯДОЧИТЬ ПО
| Контрагент,
| Номенклатура,
| Период
|ИТОГИ
| СУММА(СтоимостьОборот),
| СУММА(КоличествоОборот)
|ПО
| Контрагент,
| Номенклатура,
| Период
|" ;

Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(НачДата));
Запрос.УстановитьПараметр("КонецПериода", КонецДня(КонДата));

Результат = Запрос.Выполнить();
ВыборкаКонтрагента = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент");
Пока ВыборкаКонтрагента.Следующий() Цикл
Контрагент = ВыборкаКонтрагента.Контрагент;
ВыборкаНоменклатуры = ВыборкаКонтрагента.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
    Пока ВыборкаНоменклатуры.Следующий() Цикл
Номенклатура = ВыборкаНоменклатуры.Номенклатура;
СуммаЦен=0;
КоличествоЦен=0;
ВыборкаПериода = ВыборкаНоменклатуры.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период");
    Пока ВыборкаПериода.Следующий() Цикл
СтоимостьОборот = ВыборкаПериода.СтоимостьОборот;
КоличествоОборот = ВыборкаПериода.КоличествоОборот;
Цена = СтоимостьОборот/КоличествоОборот;
ТЗ_ВТ = Новый ТаблицаЗначений;
ТЗ_ВТ.Колонки.Добавить("Цена");                                            
Стр = ТЗ_ВТ.Добавить();
Стр.Цена = Цена;
СуммаЦен=СуммаЦен+Цена;
КоличествоЦен=КоличествоЦен+1;
КонецЦикла;  //Цикл периода

СредняяЦена=СуммаЦен/КоличествоЦен;
Если СредняяЦена<>Цена Тогда
Ряд = ТЗ.Добавить();
Ряд.Контрагент = Контрагент;
Ряд.Номенклатура = Номенклатура;

КонецЕсли;
КонецЦикла; //Цикл номенклатуры
КонецЦикла; //Цикл контрагентов

ТЗ.Свернуть("Контрагент,Номенклатура",);
ТЗ.Сортировать("Контрагент,Номенклатура",);

ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ТЗ",ТЗ);

Настройки = КомпоновщикНастроек.ПолучитьНастройки(); // Получаем настройки отчета

ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; // Создаем данные расшифровки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; // Создаем компоновщик макета
// Инициализируем макет компоновки используя схему компоновки данных
// и созданные ранее настройки и данные расшифровки
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);

// Скомпонуем результат
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;// Передаем таблицу ТЗ в процессор компоновки
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);

ДокументРезультат.Очистить();

// Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

ДокументРезультат.ПолеСверху = 20;
ДокументРезультат.ПолеСнизу = 20;
//ДокументРезультат.ПолеСлева = 10;
//ДокументРезультат.ПолеСправа = 2;
ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ДокументРезультат.НижнийКолонтитул.Выводить = Истина;
ДокументРезультат.НижнийКолонтитул.ТекстСлева = ТекущаяДата();
ДокументРезультат.НижнийКолонтитул.ТекстСправа = ИмяПользователя();
ДокументРезультат.ВерхнийКолонтитул.Выводить = Истина;
ДокументРезультат.ВерхнийКолонтитул.ТекстСлева = Справочники.Организации.НайтиПоКоду("УТ0000001");
ДокументРезультат.ВерхнийКолонтитул.ТекстСправа = "стр. [&НомерСтраницы] из [&СтраницВсего]";

КоличествоОтборов = ЭтотОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы.Количество();
ИспользуемыеОтборыЕсть = "Нет";
Если КоличествоОтборов > 0 Тогда
Для К = 1 По КоличествоОтборов Цикл
Если ЭтотОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы.Получить(К - 1).Использование = Истина Тогда
ИспользуемыеОтборыЕсть = "Да";
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ИспользуемыеОтборыЕсть = "Да" Тогда
ДокументРезультат.ПовторятьПриПечатиСтроки = ДокументРезультат.Область("R8:R9");
ДокументРезультат.ФиксацияСверху = 9;
Иначе
ДокументРезультат.ПовторятьПриПечатиСтроки = ДокументРезультат.Область("R7:R8");
ДокументРезультат.ФиксацияСверху = 8;
КонецЕсли;


КонецПроцедуры



vitasw

Мисье знает толк в извращениях.
Вашу бы энергию да на написание запроса - цены б вам не было.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск