powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / как сделать отчет
17 сообщений из 17, страница 1 из 1
как сделать отчет
    #35614662
Muxarus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно отчет: НаличиеОправВДенежномОтношении
Уже бьюсь головой об стену, не работает. Подскажите, в чем ошибка

в модуле:
Процедура Сформировать()

Перем Запрос, ТекстЗапроса, Таб;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Обрабатывать НеПомеченныеНаУдаление;
|Оправы = Регистр.Оправы.Оправы;
|ЦенаРеализации = Регистр.Оправы.ЦенаРеализации;
|количество = Регистр.Оправы.количество;
|Функция количествоКонОст = КонОст(количество);
|Функция СумКол = сумма(количество);
|Группировка оправы Без групп;
|Группировка ЦенаРеализации Без групп;
|"//}}ЗАПРОС
;

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;

ТЗ= СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(ТЗ);
ТЗ.ВыбратьСтроку()

КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
Таб.ВывестиСекцию("шапка");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка(1) = 1 Цикл
Пока Запрос.Группировка(2) = 1 Цикл
//Сообщить (Запрос.Оправы);
Таб.ВывестиСекцию("Строка_1");
КонецЦикла;
КонецЦикла;
Таб.ВывестиСекцию("Строка_2");
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры;

В таблице:
?(Запрос.ЦенаРеализации<=790,Запрос.количествоКонОст,0)
?(Запрос.ЦенаРеализации=1500,Запрос.количествоКонОст,0)
?(Запрос.ЦенаРеализации=2000,Запрос.количествоКонОст,0)
?(Запрос.ЦенаРеализации=2500,Запрос.количествоКонОст,0) и т.д.
...
Рейтинг: 0 / 0
как сделать отчет
    #35615204
Muxarus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отчет должен выглядеть так:





P.S. v7.7
...
Рейтинг: 0 / 0
как сделать отчет
    #35615792
Фотография Dinamo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxarus
|Обрабатывать НеПомеченныеНаУдаление;

Это не нужно поскольку группировка по регистру, а не документы или справочники.
А где в запросе инструкция "период с по" на какой момент остатки то берутся?

Озвучте структуру регистра Оправы. Что есть ЦенаРеализации - ресурс, измерения, реквизит; какой тип имеет число, перечисление, справочник?
Если число то куда и в какую колонку значение выведется по
если Цена реализации равна например 1501 руб.? (?(Запрос.ЦенаРеализации=1500) )
...
Рейтинг: 0 / 0
как сделать отчет
    #35615796
Фотография Dinamo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Muxarus
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;

ТЗ= СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(ТЗ);
ТЗ.ВыбратьСтроку()

КонецЕсли;
Зачем создаете ТЗ и выгружаете туда запрос если далее в цикле ТЗ вообще не используется?.
ТЗ.ВыбратьСтроку() - вызывает сомнения, есть метод ВыбратьСтроки() и метод ПолучитьСтроку().
...
Рейтинг: 0 / 0
как сделать отчет
    #35615804
Muxarus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dinamo,

сори, проглядел. строку |Обрабатывать НеПомеченныеНаУдаление; заменил на |Период с ВыбНачПериода по ВыбКонПериода;

ЦенаРеализации имеет тип число

Цены фиксированные (согласно прайсу), если появится новая цена типа 1550, сделаю еще одну колонку
...
Рейтинг: 0 / 0
как сделать отчет
    #35615807
Muxarus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DinamoMuxarus
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;

ТЗ= СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(ТЗ);
ТЗ.ВыбратьСтроку()

КонецЕсли;
Зачем создаете ТЗ и выгружаете туда запрос если далее в цикле ТЗ вообще не используется?.
ТЗ.ВыбратьСтроку() - вызывает сомнения, есть метод ВыбратьСтроки() и метод ПолучитьСтроку().



Это я смотрел цену, в процессе не учавствует :-)
...
Рейтинг: 0 / 0
как сделать отчет
    #35615815
Muxarus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заодно
...
Рейтинг: 0 / 0
как сделать отчет
    #35615893
Фотография Dinamo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что просмотрели ТЗ есть у вас заполненные значения Оправа, ЦенаРеализации?

MuxarusЦенаРеализации имеет тип число
Цены фиксированные (согласно прайсу), если появится новая цена типа 1550, сделаю еще одну колонку

Имхо подход тупиковый, а если продали со скидкой? Так и будете колонки добавлять по ценам с разницей в 50-100-200 рублей.
Лучше использовать тот же диапазонный подход который используется в колонке >790-1000.

Если рассматривать задачу в целом:
Регистр спроектирован - "неправильно". ЦенаРеализации - измерения - это не правильно, должен быть ресурс. Если хотите разделить по ценовым категориям введите специальный справочник КатегрииЦен, в котором будет реквизиты ЦенаМинимальная - ЦенаМаксимальная. И сделайте в Оправах его периодический реквизит на этот справочник. Тогда сможете использовать группировку по этому измерению.
...
Рейтинг: 0 / 0
как сделать отчет
    #35615976
Muxarus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DinamoТак что просмотрели ТЗ есть у вас заполненные значения Оправа, ЦенаРеализации?

ЦенаРеализации суммируется

Имхо подход тупиковый, а если продали со скидкой? Так и будете колонки добавлять по ценам с разницей в 50-100-200 рублей.
Лучше использовать тот же диапазонный подход который используется в колонке >790-1000.

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

Если рассматривать задачу в целом:
Регистр спроектирован - "неправильно". ЦенаРеализации - измерения - это не правильно, должен быть ресурс. Если хотите разделить по ценовым категориям введите специальный справочник КатегрииЦен, в котором будет реквизиты ЦенаМинимальная - ЦенаМаксимальная. И сделайте в Оправах его периодический реквизит на этот справочник. Тогда сможете использовать группировку по этому измерению.

ЦенаРеализации была ресурсом, позже уже перекочевала в измерения, т.к. я уже перепробывал все что мог
Немноожко не понимаю со справочником, что это даст?
...
Рейтинг: 0 / 0
как сделать отчет
    #35615977
Muxarus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я, можно сказать новичек в программировании, если не затруднит, можно пояснить. Идею я кажется уловил, только не знаю как реализовать
...
Рейтинг: 0 / 0
как сделать отчет
    #35616505
Господин ПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не регистр, это дурдом...
...
Рейтинг: 0 / 0
как сделать отчет
    #35616627
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я обычно в подобных отчетах предлагаю пользователю самому указать диапазоны (естественно выбранный диапазон доступен по умолчанию)
...
Рейтинг: 0 / 0
как сделать отчет
    #35616703
Muxarus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист 1сА я обычно в подобных отчетах предлагаю пользователю самому указать диапазоны (естественно выбранный диапазон доступен по умолчанию )

В виде чего?
...
Рейтинг: 0 / 0
как сделать отчет
    #35616824
Muxarus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так я и не могу понять почему не работает и как сделать чтоб работал. Может есть у кого-нибудь мысли?
...
Рейтинг: 0 / 0
как сделать отчет
    #35617128
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему не работает?
печатает - что запрограммировали
кстати в чем выражается что не работает? таблица значений пустая или на печати ерунда?
а цена реализации в отдельном справочнике? подчиненном?
...
Рейтинг: 0 / 0
как сделать отчет
    #35618936
Muxarus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leafпочему не работает?
печатает - что запрограммировали
кстати в чем выражается что не работает? таблица значений пустая или на печати ерунда?
а цена реализации в отдельном справочнике? подчиненном?

ЦенаРеализации рождается в документе ОприходываниеОправ и живет "измерением" в регистре Оправы
...
Рейтинг: 0 / 0
как сделать отчет
    #35618947
Muxarus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВСЕМ спасибо, все работает как надо!
Кому интересно ниже решение
(по скольку количество столбцов фикированное)

Процедура Сформировать()

Перем Запрос, ТекстЗапроса, Таб;

тз = СоздатьОбъект("ТаблицаЗначений");
тз.НоваяКолонка("Оправа");
тз.НоваяКолонка("К790");
тз.НоваяКолонка("К1000");
тз.НоваяКолонка("К1500");
тз.НоваяКолонка("К2000");
тз.НоваяКолонка("К2500");
тз.НоваяКолонка("К3000");
тз.НоваяКолонка("К3500");
тз.НоваяКолонка("К4000");
тз.НоваяКолонка("К4500");
тз.НоваяКолонка("К4800");
тз.НоваяКолонка("К5000");
тз.НоваяКолонка("К8000");
тз.НоваяКолонка("К12000");
тз.НоваяКолонка("К12001");
тз.НоваяКолонка("сумма1");
// ну и так далее, сколько у тебя колонок

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Оправы = Регистр.Оправы.Оправы;
|ЦенаРеализации = Регистр.Оправы.ЦенаРеализации;
|количество = Регистр.Оправы.количество;
|Функция количествоКонОст = КонОст(количество);
|Функция СумКол = сумма(количество);
|Группировка оправы Без групп;
|Группировка ЦенаРеализации;
|"//}}ЗАПРОС
;

// функцию с суммой можно и не применять - далбше бежим по тз - есть цикл, значит можем и в цикле все просуммировать

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

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

// заполняем тз
тз.НоваяСтрока();
тз.Оправа = Запрос.Оправы;

Пока Запрос.Группировка(2) = 1 Цикл

//смотрим, в каком ценовом диапахоне находится оправа, вносим в нужную колонку
Если Запрос.ЦенаРеализации <= 790 Тогда
тз.К790 = Запрос.количествоКонОст;
ИначеЕсли (Запрос.ЦенаРеализации > 790) и (Запрос.ЦенаРеализации <= 1000) Тогда
тз.К1000 = Запрос.количествоКонОст;
ИначеЕсли (Запрос.ЦенаРеализации > 1000) и (Запрос.ЦенаРеализации <= 1500) Тогда
тз.К1500 = Запрос.количествоКонОст;
ИначеЕсли (Запрос.ЦенаРеализации > 1500) и (Запрос.ЦенаРеализации <= 2000) Тогда
тз.К2000 = Запрос.количествоКонОст;
ИначеЕсли (Запрос.ЦенаРеализации > 2000) и (Запрос.ЦенаРеализации <= 2500) Тогда
тз.К2500 = Запрос.количествоКонОст;
ИначеЕсли (Запрос.ЦенаРеализации > 2500) и (Запрос.ЦенаРеализации <= 3000) Тогда
тз.К3000 = Запрос.количествоКонОст;
ИначеЕсли (Запрос.ЦенаРеализации > 3000) и (Запрос.ЦенаРеализации <= 3500) Тогда
тз.К3500 = Запрос.количествоКонОст;
ИначеЕсли (Запрос.ЦенаРеализации > 3500) и (Запрос.ЦенаРеализации <= 4000) Тогда
тз.К4000 = Запрос.количествоКонОст;
ИначеЕсли (Запрос.ЦенаРеализации > 4000) и (Запрос.ЦенаРеализации <= 4500) Тогда
тз.К4500 = Запрос.количествоКонОст;
ИначеЕсли (Запрос.ЦенаРеализации > 4500) и (Запрос.ЦенаРеализации <= 4800) Тогда
тз.К4800 = Запрос.количествоКонОст;
ИначеЕсли (Запрос.ЦенаРеализации > 4800) и (Запрос.ЦенаРеализации <= 5000) Тогда
тз.К5000 = Запрос.количествоКонОст;
ИначеЕсли (Запрос.ЦенаРеализации > 5000) и (Запрос.ЦенаРеализации <= 8000) Тогда
тз.К8000 = Запрос.количествоКонОст;
ИначеЕсли (Запрос.ЦенаРеализации > 8000) и (Запрос.ЦенаРеализации <= 12000) Тогда
тз.К12000 = Запрос.количествоКонОст;
Иначе
тз.К12001 = Запрос.количествоКонОст;
КонецЕсли;
// ну и так далее, сколько у тебя колонок\
КонецЦикла;
тз.сумма1 = Запрос.СумКол;
КонецЦикла;


// контрольная проверка, что же таки попадает в тз
//тз.ВыбратьСтроку(,,);

// свернем, для избаваления дубликатов
//тз.Свернуть("Оправа", "К790, К1000, К1500, К2000, К2500, К3000, К3500, К4000, К4500, К4800, К5000, К8000, К12000, К12001,");

И790 = 0;
// перебираем уже тз
тз.ВыбратьСтроки();
Пока тз.ПолучитьСтроку()=1 Цикл
//выводим в строку
//смотри внимательно таблицу, но там тоже все понятно
Таб.ВывестиСекцию("Строка_1");

И790 = И790 + тз.К790;
И1000 = И1000 + тз.К1000;
И1500 = И1500 + тз.К1500;
И2000 = И2000 + тз.К2000;
И2500 = И2500 + тз.К2500;
И3000 = И3000 + тз.К3000;
И3500 = И3500 + тз.К3500;
И4000 = И4000 + тз.К4000;
И4500 = И4500 + тз.К4500;
И4800 = И4800 + тз.К4800;
И5000 = И5000 + тз.К5000;
И8000 = И8000 + тз.К8000;
И12000 = И12000 + тз.К12000;
И12001 = И12001 + тз.К12001;
КонецЦикла;

Таб.ВывестиСекцию("Строка_2");
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");

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

ВыбНачПериода = ТекущаяДата();
ВыбКонПериода = ТекущаяДата();

P.S. Как всегда, всё оказалось просто.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / как сделать отчет
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]