![]() |
|
Продажи за несколько периодов | ☑ | ||
---|---|---|---|---|
0
san4ez1008
20.12.16
✎
03:03
|
И снова здравствуйте. Почти добил отчет по подсчету количества продаж за период. Вроде все сделал, но что-то не ладится.. В общем,ситуевина следующая. Запрос мне вытаскивает все продажи,которые были,кроме нулевых. При указывании группировки "Товар упорядочить по Товар.Наименование без групп все" начинается вывод нулевых продаж с каким-то задвоением, причем коды многих позиций начинают повторяться,да еще и код этой позиции не соответствует коду в справочнике. Не понимаю, что тут происходит, прошу помочь разобраться. Конфиг комплексная 4.5.
Перем ТекСтрокаВТаблице; // текущая строка в таблице значений МФ //******************************************* Процедура Сформировать() ТЗПериод.ВыбратьСтроки(); КолПериодов = ТЗПериод.КоличествоСтрок(); Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); //Таб.ВывестиСекцию("Заголовок"); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Таб.ВывестиСекцию("Заголовок1"); Таб.ВывестиСекцию("Заголовок|Код"); Таб.ПрисоединитьСекцию("Заголовок|Лев"); Для к=1 По КолПериодов Цикл НачДата = ТЗПериод.ПолучитьЗначение(к,"Период_С"); КонДата = ТЗПериод.ПолучитьЗначение(к,"Период_По"); Периодтек = "С "+НачДата+" по "+КонДата; Таб.ПрисоединитьСекцию("Заголовок|Мес"); КонецЦикла; Таб.ПрисоединитьСекцию("Заголовок|Период"); //ТЗВспом = СоздатьОбъект("ТаблицаЗначений"); ТЗВспом.Очистить(); ТЗВспом.НоваяКолонка("Код",,,,"Код",4); ТЗВспом.НоваяКолонка("Товар",,,,"Товар",10); ТЗВспом.НоваяКолонка("Количество",,,,"Количество",4); ТЗВспом.НоваяКолонка("Период",,,,"Период",2); Для й=1 По КолПериодов Цикл НачДата = ТЗПериод.ПолучитьЗначение(й,"Период_С"); КонДата = ТЗПериод.ПолучитьЗначение(й,"Период_По"); //Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос //ТабВыгр = СоздатьОбъект("ТаблицаЗначений"); Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с НачДата по КонДата; |Обрабатывать НеПомеченныеНаУдаление; |Без итогов; |Товар = Документ.ОтчетККМ.Номенклатура.ТекущийЭлемент; |Код = Документ.ОтчетККМ.Номенклатура.Код; |Наименование = Документ.ОтчетККМ.Номенклатура.Наименование; |Количество = Документ.ОтчетККМ.Количество; |ТТ = Документ.ОтчетККМ.Склад; |Функция КоличествоСумма = Сумма(Количество); |Группировка Товар упорядочить по Товар.Наименование без групп все; |Группировка Месяц все; |Группировка Код; |Условие(Товар в СписокЭлементовМФ); |Условие(ТТ в ВыбТТ); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Запрос.Выгрузить(ТабВыгр); ТабВыгр.ВыбратьСтроки(); Номен="" ; Итог=0; Прирост = 0; Пока ТабВыгр.ПолучитьСтроку()=1 Цикл ТЗВспом.НоваяСтрока(); ТЗВспом.Код = ТабВыгр.Код; ТЗВспом.Товар = ТабВыгр.Товар; Если ПустоеЗначение(ТабВыгр.КоличествоСумма)=1 тогда ТЗВспом.Количество = 0; иначе ТЗВспом.Количество = ТабВыгр.КоличествоСумма; конецесли; ТЗВспом.Период = й; КонецЦикла; КонецЦикла; // Итог=0; Прирост = 0; ТЗВспом.Сортировать("Товар,Период +"); Номен=""; Для N = 1 По ТЗВспом.КоличествоСтрок() Цикл Код = "( "+ТЗВспом.ПолучитьЗначение(N,"Код")+" )"; Номенклатура = ТЗВспом.ПолучитьЗначение(N,"Товар"); //Месяц = ТЗВспом.ПолучитьЗначение(N,"Месяц"); Количество = ТЗВспом.ПолучитьЗначение(N,"Количество"); Если Номен <> Номенклатура тогда Если N =1 тогда иначе Таб.ПрисоединитьСекцию("Сформировать|Период"); Итог =0; конецесли; Таб.ВывестиСекцию("Сформировать|Код"); Таб.ПрисоединитьСекцию("Сформировать|Лев"); Таб.ПрисоединитьСекцию("Сформировать|Мес"); Кол = Количество; Итог = Итог+Количество; Номен = Номенклатура; иначе Таб.ПрисоединитьСекцию("Сформировать|Мес"); Кол = Количество; Итог = Итог+Количество; КонецЕсли; КонецЦикла; // Подготовка к заполнению выходных форм данными запроса Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры |
|||
1
san4ez1008
20.12.16
✎
03:05
|
Прошу прощения у модератора,забыл указать раздел
|
|||
2
Злопчинский
20.12.16
✎
04:05
|
Запрос в цикле - респекты и уважуха! ;-)
http://catalog.mista.ru/public/all/?public-filter%5Bsearch%5D=%CF%F0%EE%E4%E0%E6%E8+%EF%EE+%EF%E5%F0%E8%EE%E4%E0%EC |
|||
3
Злопчинский
20.12.16
✎
04:07
|
Листай, там для 777 есть хорошие, я даже вот сейчас себе выцепил...
|
|||
4
Злопчинский
20.12.16
✎
04:11
|
|Группировка Товар упорядочить по Товар.Наименование без групп все;
|Группировка Месяц все; |Группировка Код; Код и товар - это одно и тоже - это товар. как ты себе навскидку представляешь группировку в виде Товар-Месяц-Товар? я вот сразу мозг сломал |
|||
5
san4ez1008
20.12.16
✎
04:14
|
(2) (3) (4) объясни глупому,как иначе ручками сделать? я ж учусь)
|
|||
6
san4ez1008
20.12.16
✎
04:17
|
отчет то в принципе работает, мне только надо учитывать нулевые продажи и выводить их в табличку, так то все работает
|
|||
7
Злопчинский
20.12.16
✎
04:19
|
Что значит "нулевые продажи"?
|
|||
8
Злопчинский
20.12.16
✎
04:19
|
|Группировка Код;
убери нафиг |
|||
9
san4ez1008
20.12.16
✎
04:23
|
(7) значит,что продаж в месяце было 0. потому как запрос в периодах 1,2,3 не видит продаж в периоде 1,поэтому и данных нет по этому периоду. (8) а код мне как вытянуть тогда?
|
|||
10
Злопчинский
20.12.16
✎
04:35
|
там где нужен код попробуй просто написать Запрос.Код
|
|||
11
Злопчинский
20.12.16
✎
04:37
|
(9) тут я мутновато сам. попробуй группировка месяц все вошедшие в запрос - как-то так
|
|||
12
Злопчинский
20.12.16
✎
04:39
|
а вообще
сразу после запроса ТЗ=""; Запрос.Выгрузить(ТЗ,1,0); //непечатать ТЗ или ТЗ.ВыбратьСтроку(,) и втыкай все ли утебя в таблице есть а еще лучше эту ТЗ подсунь в обработку универсального вывода ТЗ с группировками поищи у меня ан ИС по NotaBene - она тебе сама разложит все по нормально, по строкам товары, по столбцам периоды |
|||
13
Злопчинский
20.12.16
✎
04:41
|
уй блин. как все запущено. стучись в скайп, ща забульбеним оперативно, удаленку только давай.
|
|||
14
Злопчинский
20.12.16
✎
04:42
|
скайп Zlopun
|
|||
15
san4ez1008
20.12.16
✎
04:51
|
|Группировка Товар упорядочить по Товар.Код без групп все;
|Группировка Месяц; все норм,нули вышли как положено,только последнее значение итога не досчитывает.. Запрос.Код ничего не выводит |
|||
16
Злопчинский
20.12.16
✎
05:08
|
какое на! последнее значение итога?
у тебя стоит "без ИТОГОВ" сделай подсчет итога в цикле вывода вообще мутно все. все что надо - оставить твой запрос без циклов. период указать с самого началла до самого конца. запрос выгрузить в ТЗ ТЗ подсунуть сюда: http://catalog.mista.ru/public/14794/ Черновик вывода получается за 20 минут. с группировками/расшифровками/шахматками. будешь сам изобретать - наизобретаешь свинтопрульный аппарат. в качестве хобби - ок. но мы же стоим у станка... |
|||
17
san4ez1008
20.12.16
✎
06:06
|
(16) итоги по каждой позиции, я из сам подсчитываю, только вот именно последнюю не считает.. =/ с кодом и со всем остальным разобрался,осталось только это
Для N = 1 По ТЗВспом.КоличествоСтрок() Цикл Код = "( "+ТЗВспом.ПолучитьЗначение(N,"Код")+" )"; Номенклатура = ТЗВспом.ПолучитьЗначение(N,"Товар"); //Месяц = ТЗВспом.ПолучитьЗначение(N,"Месяц"); Количество = ТЗВспом.ПолучитьЗначение(N,"Количество"); Если Номен <> Номенклатура тогда Если N =1 тогда иначе Таб.ПрисоединитьСекцию("Сформировать|Период"); Таб.ПрисоединитьСекцию("Сформировать|Прирост"); Таб.ПрисоединитьСекцию("Сформировать|Коэфф"); Итог =0; Прирост = 0; конецесли; Таб.ВывестиСекцию("Сформировать|Код"); Таб.ПрисоединитьСекцию("Сформировать|Лев"); Таб.ПрисоединитьСекцию("Сформировать|Мес"); Кол = Количество; //подсчет итогов Итог = Итог+Количество; Номен = Номенклатура; Если Итог<>0 тогда Прирост = Окр(Кол/Итог,4); Иначе Прирост = 0; КонецЕсли; иначе Таб.ПрисоединитьСекцию("Сформировать|Мес"); Кол = Количество; Итог = Итог+Количество; Если Итог<>0 тогда Прирост = Окр(Кол/Итог,4); Иначе Прирост = 0; КонецЕсли; КонецЕсли; КонецЦикла; |
|||
18
san4ez1008
20.12.16
✎
06:47
|
(16) опять же,я не смогу в том готовом отчете выбрать произвольный период,как я делаю.. если мне нужно проанализировать 3 месяца с 4 по 21 число,что тогда?
|
|||
19
san4ez1008
20.12.16
✎
09:10
|
чет недопонимаю...почему он последние значения недоприсоединяет?
|
|||
20
san4ez1008
20.12.16
✎
11:00
|
Для N = 1 По ТЗВспом.КоличествоСтрок() Цикл
Код = "( "+ТЗВспом.ПолучитьЗначение(N,"Код")+" )"; Номенклатура = ТЗВспом.ПолучитьЗначение(N,"Товар"); //Месяц = ТЗВспом.ПолучитьЗначение(N,"Месяц"); Количество = ТЗВспом.ПолучитьЗначение(N,"Количество"); Если Номен <> Номенклатура тогда Если N =1 тогда иначе Таб.ПрисоединитьСекцию("Сформировать|Период"); Таб.ПрисоединитьСекцию("Сформировать|Прирост"); Таб.ПрисоединитьСекцию("Сформировать|Коэфф"); Итог =0; Прирост = 0; конецесли; Таб.ВывестиСекцию("Сформировать|Код"); Таб.ПрисоединитьСекцию("Сформировать|Лев"); Таб.ПрисоединитьСекцию("Сформировать|Мес"); Кол = Количество; Итог = Итог+Количество; Номен = Номенклатура; Если Итог<>0 тогда Прирост = Окр(Кол/Итог,4); Иначе Прирост = 0; КонецЕсли; иначе Таб.ПрисоединитьСекцию("Сформировать|Мес"); Кол = Количество; Итог = Итог+Количество; Если Итог<>0 тогда Прирост = Окр(Кол/Итог,4); Иначе Прирост = 0; КонецЕсли; КонецЕсли; КонецЦикла; вот вроде все нормально,а последнюю строку недоприсоединяет.. |
|||
21
san4ez1008
21.12.16
✎
05:24
|
все,сделал наконец-то
|
|||
22
san4ez1008
26.12.16
✎
05:32
|
а как мне теперь убрать все строки, где продажи за все месяца нулевые?
|
|||
23
san4ez1008
10.01.17
✎
03:06
|
(16) может эту тему уже никто не просматривает, но все же,вопрос из (18) еще актуален...
|
|||
24
peal
10.01.17
✎
05:29
|
(18) ДобавитьМесяц(<Дата>,<ЧислоМесяцев>) попробуй использовать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |