|
как сделать отчет
|
|||
---|---|---|---|
#18+
Собственно отчет: НаличиеОправВДенежномОтношении Уже бьюсь головой об стену, не работает. Подскажите, в чем ошибка в модуле: Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Обрабатывать НеПомеченныеНаУдаление; |Оправы = Регистр.Оправы.Оправы; |ЦенаРеализации = Регистр.Оправы.ЦенаРеализации; |количество = Регистр.Оправы.количество; |Функция количествоКонОст = КонОст(количество); |Функция СумКол = сумма(количество); |Группировка оправы Без групп; |Группировка ЦенаРеализации Без групп; |"//}}ЗАПРОС ; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; ТЗ= СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(ТЗ); ТЗ.ВыбратьСтроку() КонецЕсли; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); Таб.ВывестиСекцию("шапка"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл Пока Запрос.Группировка(2) = 1 Цикл //Сообщить (Запрос.Оправы); Таб.ВывестиСекцию("Строка_1"); КонецЦикла; КонецЦикла; Таб.ВывестиСекцию("Строка_2"); Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры; В таблице: ?(Запрос.ЦенаРеализации<=790,Запрос.количествоКонОст,0) ?(Запрос.ЦенаРеализации=1500,Запрос.количествоКонОст,0) ?(Запрос.ЦенаРеализации=2000,Запрос.количествоКонОст,0) ?(Запрос.ЦенаРеализации=2500,Запрос.количествоКонОст,0) и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2008, 14:41 |
|
как сделать отчет
|
|||
---|---|---|---|
#18+
Отчет должен выглядеть так: P.S. v7.7 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2008, 17:08 |
|
как сделать отчет
|
|||
---|---|---|---|
#18+
Muxarus |Обрабатывать НеПомеченныеНаУдаление; Это не нужно поскольку группировка по регистру, а не документы или справочники. А где в запросе инструкция "период с по" на какой момент остатки то берутся? Озвучте структуру регистра Оправы. Что есть ЦенаРеализации - ресурс, измерения, реквизит; какой тип имеет число, перечисление, справочник? Если число то куда и в какую колонку значение выведется по если Цена реализации равна например 1501 руб.? (?(Запрос.ЦенаРеализации=1500) ) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2008, 10:34 |
|
как сделать отчет
|
|||
---|---|---|---|
#18+
Muxarus Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; ТЗ= СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(ТЗ); ТЗ.ВыбратьСтроку() КонецЕсли; Зачем создаете ТЗ и выгружаете туда запрос если далее в цикле ТЗ вообще не используется?. ТЗ.ВыбратьСтроку() - вызывает сомнения, есть метод ВыбратьСтроки() и метод ПолучитьСтроку(). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2008, 10:37 |
|
как сделать отчет
|
|||
---|---|---|---|
#18+
Dinamo, сори, проглядел. строку |Обрабатывать НеПомеченныеНаУдаление; заменил на |Период с ВыбНачПериода по ВыбКонПериода; ЦенаРеализации имеет тип число Цены фиксированные (согласно прайсу), если появится новая цена типа 1550, сделаю еще одну колонку ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2008, 11:00 |
|
как сделать отчет
|
|||
---|---|---|---|
#18+
DinamoMuxarus Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; ТЗ= СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(ТЗ); ТЗ.ВыбратьСтроку() КонецЕсли; Зачем создаете ТЗ и выгружаете туда запрос если далее в цикле ТЗ вообще не используется?. ТЗ.ВыбратьСтроку() - вызывает сомнения, есть метод ВыбратьСтроки() и метод ПолучитьСтроку(). Это я смотрел цену, в процессе не учавствует :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2008, 11:02 |
|
как сделать отчет
|
|||
---|---|---|---|
#18+
Так что просмотрели ТЗ есть у вас заполненные значения Оправа, ЦенаРеализации? MuxarusЦенаРеализации имеет тип число Цены фиксированные (согласно прайсу), если появится новая цена типа 1550, сделаю еще одну колонку Имхо подход тупиковый, а если продали со скидкой? Так и будете колонки добавлять по ценам с разницей в 50-100-200 рублей. Лучше использовать тот же диапазонный подход который используется в колонке >790-1000. Если рассматривать задачу в целом: Регистр спроектирован - "неправильно". ЦенаРеализации - измерения - это не правильно, должен быть ресурс. Если хотите разделить по ценовым категориям введите специальный справочник КатегрииЦен, в котором будет реквизиты ЦенаМинимальная - ЦенаМаксимальная. И сделайте в Оправах его периодический реквизит на этот справочник. Тогда сможете использовать группировку по этому измерению. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2008, 14:18 |
|
как сделать отчет
|
|||
---|---|---|---|
#18+
DinamoТак что просмотрели ТЗ есть у вас заполненные значения Оправа, ЦенаРеализации? ЦенаРеализации суммируется Имхо подход тупиковый, а если продали со скидкой? Так и будете колонки добавлять по ценам с разницей в 50-100-200 рублей. Лучше использовать тот же диапазонный подход который используется в колонке >790-1000. Если продали со скидкой, бог с ним, здесь имеется ввиду то, что мы имеем на складе, а не как мы реализовали (лишь строится прогноз) Если рассматривать задачу в целом: Регистр спроектирован - "неправильно". ЦенаРеализации - измерения - это не правильно, должен быть ресурс. Если хотите разделить по ценовым категориям введите специальный справочник КатегрииЦен, в котором будет реквизиты ЦенаМинимальная - ЦенаМаксимальная. И сделайте в Оправах его периодический реквизит на этот справочник. Тогда сможете использовать группировку по этому измерению. ЦенаРеализации была ресурсом, позже уже перекочевала в измерения, т.к. я уже перепробывал все что мог Немноожко не понимаю со справочником, что это даст? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2008, 15:54 |
|
как сделать отчет
|
|||
---|---|---|---|
#18+
я, можно сказать новичек в программировании, если не затруднит, можно пояснить. Идею я кажется уловил, только не знаю как реализовать ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2008, 16:00 |
|
как сделать отчет
|
|||
---|---|---|---|
#18+
это не регистр, это дурдом... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2008, 12:11 |
|
как сделать отчет
|
|||
---|---|---|---|
#18+
А я обычно в подобных отчетах предлагаю пользователю самому указать диапазоны (естественно выбранный диапазон доступен по умолчанию) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2008, 15:08 |
|
как сделать отчет
|
|||
---|---|---|---|
#18+
Программист 1сА я обычно в подобных отчетах предлагаю пользователю самому указать диапазоны (естественно выбранный диапазон доступен по умолчанию ) В виде чего? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2008, 16:55 |
|
как сделать отчет
|
|||
---|---|---|---|
#18+
Так я и не могу понять почему не работает и как сделать чтоб работал. Может есть у кого-нибудь мысли? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2008, 18:59 |
|
как сделать отчет
|
|||
---|---|---|---|
#18+
почему не работает? печатает - что запрограммировали кстати в чем выражается что не работает? таблица значений пустая или на печати ерунда? а цена реализации в отдельном справочнике? подчиненном? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2008, 08:45 |
|
как сделать отчет
|
|||
---|---|---|---|
#18+
leafпочему не работает? печатает - что запрограммировали кстати в чем выражается что не работает? таблица значений пустая или на печати ерунда? а цена реализации в отдельном справочнике? подчиненном? ЦенаРеализации рождается в документе ОприходываниеОправ и живет "измерением" в регистре Оправы ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2008, 19:58 |
|
как сделать отчет
|
|||
---|---|---|---|
#18+
ВСЕМ спасибо, все работает как надо! Кому интересно ниже решение (по скольку количество столбцов фикированное) Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; тз = СоздатьОбъект("ТаблицаЗначений"); тз.НоваяКолонка("Оправа"); тз.НоваяКолонка("К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. Как всегда, всё оказалось просто. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2008, 20:10 |
|
|
start [/forum/topic.php?fid=28&gotonew=1&tid=1524318]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
11ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 18ms |
total: | 276ms |
0 / 0 |