Имя: Пароль:
1C
1C 7.7
v7: Отчет по отгрузкам по периодам- помогите найти ошибку
, , ,
0 Gal4onok
 
13.03.13
20:58
Добрый вечер.

"//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Фирма = Документ.РасходнаяНакладная.Фирма;
   |Склад = Документ.РасходнаяНакладная.Склад;
   |Товар = Документ.РасходнаяНакладная.Товар;
   |ТоварнаяГруппа = Документ.РасходнаяНакладная.Товар.ТоварнаяГруппа;
   |Менеджер = Документ.РасходнаяНакладная.Менеджер;
   |Покупатель = Документ.РасходнаяНакладная.Клиент;
   |АдресПоставки = Документ.РасходнаяНакладная.АдресКлиента;
   |ПризнакРасхНакладной = Документ.РасходнаяНакладная.ПризнакНакладной;
   |ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
   |Количество = Документ.РасходнаяНакладная.Количество;
   |Коэффициент = Документ.РасходнаяНакладная.Коэффициент;
   |СуммаПродажа = Документ.РасходнаяНакладная.Сумма;
   |Функция СуммаКоличество = Сумма(Количество*Коэффициент);
   |Функция СуммаУпак = Сумма(Количество);
   |Функция СуммаПродСт = Сумма(СуммаПродажа);
   |Группировка Менеджер без групп;
   |Группировка Покупатель без групп;
   |Группировка АдресПоставки без групп;
   |Группировка Товар без групп;
   |Группировка Месяц все;
   |Группировка ТекущийДокумент;
   |Условие(ПризнакРасхНакладной = Перечисление.ПризнРасхНакл.Продажа);
   |Условие(Менеджер <> ПустоеМенеджер);
   |Условие(Покупатель в ВыбПокупатель);
   |"//}}ЗАПРОС
   ;

В результате этого запроса есть все месяца за период, но в таком виде:
Январь 13    
Январь 13    Расходная накл. 002850 (25.01.13)
Февраль 13    
Февраль 13    Расходная накл. 002850 (25.01.13)
Март 13    
Март 13            Расходная накл. 002850 (25.01.13)

Хотя документ январский.
1 shuhard
 
13.03.13
20:59
(0)какая гадость эта 7.7
2 Gal4onok
 
13.03.13
21:02
согласна, это все по теме?
3 NcSteel
 
13.03.13
21:05
(2) В сексии по v8 - ДА.
4 Gal4onok
 
13.03.13
21:06
извиняюсь, исправьте плз
5 Gal4onok
 
13.03.13
21:22
(3) создать новую тему???
6 kot275
 
13.03.13
21:44
Давай скрин чего вывел, так не понятно.
7 NS
 
13.03.13
21:44
А если "все" убрать то все нормально?
8 kot275
 
13.03.13
21:44
И подробней чего хотелось реализовать.
9 ЧеловекДуши
 
13.03.13
21:49
(0) >>>  |Группировка Месяц все;

Зачем тут "ВСЕ"? :)
10 Gal4onok
 
14.03.13
14:08
мне нужно месяца за выбранные все вывести потом в колонки. В некоторых месяцах отгрузки нет, поэтому группировка показывает ссылку по найденному доку на период
11 Gal4onok
 
14.03.13
14:11
Январь 13    Расходная накл. 002850 (25.01.13)
Февраль 13   Расходная накл. 002850 (25.01.13)
Март 13      Расходная накл. 002850 (25.01.13)
12 Gal4onok
 
14.03.13
14:12
а надо

Январь 13    Расходная накл. 002850 (25.01.13)
Февраль 13  
Март 13
13 NS
 
14.03.13
14:12
(11) Я это уже где-то видел.
Еще раз - что происходит если убрать "все"?
14 Gal4onok
 
14.03.13
14:13
будут только периоды в которых есть отгрузки
15 Gal4onok
 
14.03.13
14:14
то есть только
Январь 13    Расходная накл. 002850 (25.01.13)
16 NS
 
14.03.13
14:14
(14) Глюк остается если убрать "все"?
Мне интересно, ты настолько не хочешь чтоб тебе помогли?
Зачем тогда ветку создала?
17 ЧеловекДуши
 
14.03.13
14:15
(14) Ну вот ты уже в курсе, что делать :)
Делай еще один цикл для повторного обхода по всем периодам.

(15) Результат на лицо... Не стоит быть птицей.
18 NS
 
14.03.13
14:16
(15) Ну и добавь в цикле интервалы которые пропускает. Без документов.
19 Gal4onok
 
14.03.13
14:18
то есть запросом никак не вывести все периоды и ссылку на док?
20 Gal4onok
 
14.03.13
14:18
(18) сообразить не могу, как это сделать?
21 NS
 
14.03.13
14:19
(19) Нет. Только если найдешь способ обойти глюк.
При обходе вопрос решается элементарно.
22 Gal4onok
 
14.03.13
14:23
например?
23 ЧеловекДуши
 
14.03.13
14:26
(22) Например создать ТЗ, где было бы прописан полный список всех периодов. Думается этого способа будет достаточно.
24 NS
 
14.03.13
14:27
Убираешь группировку по месяцу.
Документ становится пятой группировкой.
Пока Запрос.групиировка(4)=1 цикл
Начдата=Начмесяца(ВыбНачПериода);
Пока Запрос.группировка(5)=1 цикл
   ТекМесяц=начмесяца(Запрос.текущийдокумент);
   Пока начдата<=текмесяц цикл
      период=периодстр(начдата,конмесяца(начдата));
      Таб.Вывестисекцию("месяц");
      начдата=добавитьмесяц(начдата,1);
   КонецЦикла;
   Таб.Вывестисекцию("Документ");
КонецЦикла;
Пока начдата<=начмесяца(выбконпериода)
   период=периодстр(начдата,конмесяца(начдата));
   Таб.Вывестисекцию("месяц");
   начдата=добавитьмесяц(начдата,1);
КонецЦикла;
КонецЦикла;
25 Gal4onok
 
14.03.13
14:29
ок. спасибо, попробую
26 NS
 
14.03.13
14:36
ТекМесяц=начмесяца(Запрос.текущийдокумент.датадок);
конечно.
27 Gal4onok
 
14.03.13
14:45
(26) Еще вопросик. Указанные группировки могут меняться пользователем, возможно не будет детализации до уровня документа, как обойти привязку к дате отгрузки?
28 Mikeware
 
14.03.13
14:46
(27) тогда делайте прямыми запросами...
29 NS
 
14.03.13
14:55
(27) Тогда переписать иначе.
Сделать группировку по месяцу, но без "все"
А в группировке по месяцу так-же добавить в цикле недостающие месяцы.
Вместо даты документа будет Запрос.началопериода()
30 Gal4onok
 
14.03.13
21:49
Еще два вопроса:
1.как переберать результат запроса, не зная сколько группировок выбрано.
2. как посчитать данные в этом цикле в сравнении Март к Февралю, а если данных в Феврале нет , то Март к Январю.
Что-то я затупила на этом
31 NS
 
14.03.13
21:57
Что-то я вопрос в первом пункте не понял.
То есть как "не зная"?
Тяжело посчитать сколько галок в списке поставил пользователь?
Универсальный перебор, независимо от количества группировок, есть практически в любом типовом отчете.
32 Gal4onok
 
14.03.13
22:01
(31) у меня фигня получается, не могу вывести
//видимо сильно головой в дтп ударилась
33 NS
 
14.03.13
22:12
перем колгруппировок,Запрос;
Процедура вывестигруппировку(номергруппировки)
 Если Запрос.группировка(номергруппировки)>0 тогда
     таб.вывестисекцию("...");
     Вывестигруппировку(мин(номергруппировки+1,количествогруппировок));
 Иначе
    Если номергруппировки>1 тогда
        вестигруппировку(номергруппировки-1);
    КонецЕсли;
 КонецЕсли;
КонецПроцедуры
Вывестигруппировку(1);
34 NS
 
14.03.13
22:13
перем колгруппировок,Запрос;
Процедура вывестигруппировку(номергруппировки)
 Если Запрос.группировка(номергруппировки)>0 тогда
     таб.вывестисекцию("...");
     Вывестигруппировку(мин(номергруппировки+1,колгруппировок));
 Иначе
    Если номергруппировки>1 тогда
        вывестигруппировку(номергруппировки-1);
    КонецЕсли;
 КонецЕсли;
КонецПроцедуры
Вывестигруппировку(1);
35 Gal4onok
 
14.03.13
22:19
Процедура СформироватьСтроки(НомерГруппировки)
   
   
   ИмяГруппировки=Запрос.ЗначениеУпорядочивания(НомерГруппировки);
   Если Запрос.группировка(номергруппировки)>0 тогда
       таб.вывестисекцию("ИмяГруппы");
       СформироватьСтроки(мин(номергруппировки+1,количествогруппировок));
   Иначе
       Если номергруппировки>1 тогда
           СформироватьСтроки(номергруппировки-1);
       КонецЕсли;
   КонецЕсли;

 
 
КонецПроцедуры // СформироватьСтроки


ИмяГруппировки=Запрос.ЗначениеУпорядочивания(НомерГруппировки);
{C:\DOCUMENTS AND SETTINGS\АДМИНИСТРАТОР\РАБОЧИЙ СТОЛ\КОПИЯ.ERT(28)}: Значение не представляет агрегатный объект (ЗначениеУпорядочивания)
36 NS
 
14.03.13
22:24
А зачем тебе значениеупорядочивания?
Сформируй список группировок. И бери списгруппировок.получитьзначение(номергруппировки)
37 Gal4onok
 
14.03.13
22:26
ИмяГруппировки это переменная в отчете. Запрос.ЗначениеУпорядочивания(1)
38 Gal4onok
 
14.03.13
22:26
я реально уже не помню 7ку, туплю, еще головой ударилась
39 NS
 
14.03.13
22:26
(37) И?
40 Gal4onok
 
14.03.13
22:28
как мне значение то получить?
41 NS
 
14.03.13
22:28
Я же написал.
42 Gal4onok
 
14.03.13
22:30
мне не название группировок надо, а значения из запроса
43 NS
 
14.03.13
22:31
колгруппировок=0;
списокгруппировок=создатьобъект("списокЗначений");
Для а=1 по спис.размерсписка() цикл
Если спис.пометка(а)=1 тогда
  списокгруппировок.Добавитьзначение(спис.Получитьзначение(а));
   колгруппировок=колгруппировок+1;
КонецЕсли;  
КонецЦикла;

В выводе -
ИмяГруппировки=списокгруппировок.получитьзначение(НомерГруппировки);
таб.вывестисекцию(ИмяГруппировки);
44 NS
 
14.03.13
22:32
(42) А ты по названию группировки не умеешь брать значение из запроса?
45 NS
 
14.03.13
22:33
Значениегруппировки=Запрос.ПолучитьАтрибут(ИмяГруппировки);
46 Gal4onok
 
14.03.13
22:34
(44) по ходу уже не умею
47 Gal4onok
 
14.03.13
22:46
Перем ПустоеМенеджер,КоличествоГруппировок, списокгруппировок ;//*******************************************

Процедура СформироватьСтроки(Запрос,Таб,НомерГруппировки)
   
   

   ИмяГруппировки=списокгруппировок.получитьзначение(НомерГруппировки);
   Значениегруппировки=Запрос.ПолучитьАтрибут(ИмяГруппировки);

   Если Запрос.группировка(номергруппировки)>0 тогда
       Таб.вывестисекцию("ИмяГруппы");
       СформироватьСтроки(запрос,Таб,мин(номергруппировки+1,количествогруппировок));
   Иначе
       Если номергруппировки>1 тогда
           СформироватьСтроки(Запрос,Таб,номергруппировки-1);
       КонецЕсли;
   КонецЕсли;

 
 
КонецПроцедуры // СформироватьСтроки
48 Gal4onok
 
14.03.13
22:46
ИмяГруппировки=списокгруппировок.получитьзначение(НомерГруппировки);
{C:\DOCUMENTS AND SETTINGS\АДМИНИСТРАТОР\РАБОЧИЙ СТОЛ\КОПИЯ.ERT(7)}: Индекс не входит в границы списка значений.
Значениегруппировки=Запрос.ПолучитьАтрибут(ИмяГруппировки);
{C:\DOCUMENTS AND SETTINGS\АДМИНИСТРАТОР\РАБОЧИЙ СТОЛ\КОПИЯ.ERT(8)}: Неверное имя атрибута
49 NS
 
14.03.13
22:48
И каким образом количество группировок стало не равно размеру списка?
50 Gal4onok
 
14.03.13
22:50
Группировки.ДобавитьЗначение("Менеджер",    "Менеджер");
Группировки.ДобавитьЗначение("Покупатель",    "Покупатель");
Группировки.ДобавитьЗначение("АдресПоставки",    "Адрес поставки");
Группировки.ДобавитьЗначение("Товар","Номенклатура");
Группировки.ДобавитьЗначение("Период","Период");
51 Gal4onok
 
14.03.13
22:50
в запросе :
ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Фирма = Документ.РасходнаяНакладная.Фирма;
   |Склад = Документ.РасходнаяНакладная.Склад;
   |Товар = Документ.РасходнаяНакладная.Товар;
   |ТоварнаяГруппа = Документ.РасходнаяНакладная.Товар.ТоварнаяГруппа;
   |Менеджер = Документ.РасходнаяНакладная.Менеджер;
   |Покупатель = Документ.РасходнаяНакладная.Клиент;
   |АдресПоставки = Документ.РасходнаяНакладная.АдресКлиента;
   |ПризнакРасхНакладной = Документ.РасходнаяНакладная.ПризнакНакладной;
   |ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
   |Количество = Документ.РасходнаяНакладная.Количество;
   |Коэффициент = Документ.РасходнаяНакладная.Коэффициент;
   |СуммаПродажа = Документ.РасходнаяНакладная.Сумма;
   |Функция СуммаКоличество = Сумма(Количество*Коэффициент);
   |Функция СуммаУпак = Сумма(Количество);
   |Функция СуммаПродСт = Сумма(СуммаПродажа);
   |Группировка Менеджер без групп;
   |Группировка Покупатель без групп;
   |Группировка АдресПоставки без групп;
   |Группировка Товар без групп;
   |Группировка Месяц все;
   |Условие(ПризнакРасхНакладной = Перечисление.ПризнРасхНакл.Продажа);
   |Условие(Менеджер <> ПустоеМенеджер);
   |Условие(Покупатель в ВыбПокупатель);
   |"//}}ЗАПРОС
   ;
52 NS
 
14.03.13
22:51
(51) чему равна переменная количествогруппировок.
Что в списке списокгруппировок.
53 Gal4onok
 
14.03.13
22:55
теперь первой ошибки нет, индекс правильный. 5 группировок
не видит Значениегруппировки=Запрос.ПолучитьАтрибут(ИмяГруппировки);
{C:\DOCUMENTS AND SETTINGS\АДМИНИСТРАТОР\РАБОЧИЙ СТОЛ\КОПИЯ.ERT(8)}: Неверное имя атрибута
54 NS
 
14.03.13
23:06
(53) ну неочет получать атрибут период. А должна?
55 Gal4onok
 
14.03.13
23:15
в результате отчет выводит такой бред
http://pixs.ru/showimage/Bezimyanni_1658870_7394849.jpg
56 Gal4onok
 
14.03.13
23:18
вопрос: где март и почему верхние пустые?;)
57 NS
 
14.03.13
23:22
Это у тебя нужно спросить - какие секции ты выводишь, и что в них.
58 NS
 
14.03.13
23:28
В секции имягруппы, в самой правой ячейке ты естественно выводишь значениегруппировки?
59 Gal4onok
 
15.03.13
06:37
да
60 Gal4onok
 
15.03.13
06:39
полный код
Перем ПустоеМенеджер,КоличествоГруппировок, списокгруппировок ;//*******************************************

Процедура СформироватьСтроки(Запрос,Таб,НомерГруппировки)
   
   

   ИмяГруппировки=списокгруппировок.получитьзначение(НомерГруппировки);
   Значениегруппировки=Запрос.ПолучитьАтрибут(ИмяГруппировки);

   Если Запрос.группировка(номергруппировки)>0 тогда
       Таб.вывестисекцию("ИмяГруппы");
       СформироватьСтроки(запрос,Таб,мин(номергруппировки+1,количествогруппировок));
   Иначе
       Если номергруппировки>1 тогда
           СформироватьСтроки(Запрос,Таб,номергруппировки-1);
       КонецЕсли;
   КонецЕсли;

 
 
КонецПроцедуры // СформироватьСтроки

Процедура Сформировать()
   Перем Запрос, ТекстЗапроса, Таб;
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Фирма = Документ.РасходнаяНакладная.Фирма;
   |Склад = Документ.РасходнаяНакладная.Склад;
   |Товар = Документ.РасходнаяНакладная.Товар;
   |ТоварнаяГруппа = Документ.РасходнаяНакладная.Товар.ТоварнаяГруппа;
   |Менеджер = Документ.РасходнаяНакладная.Менеджер;
   |Покупатель = Документ.РасходнаяНакладная.Клиент;
   |АдресПоставки = Документ.РасходнаяНакладная.АдресКлиента;
   |ПризнакРасхНакладной = Документ.РасходнаяНакладная.ПризнакНакладной;
   |ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
   |Количество = Документ.РасходнаяНакладная.Количество;
   |Коэффициент = Документ.РасходнаяНакладная.Коэффициент;
   |СуммаПродажа = Документ.РасходнаяНакладная.Сумма;
   |Функция СуммаКоличество = Сумма(Количество*Коэффициент);
   |Функция СуммаУпак = Сумма(Количество);
   |Функция СуммаПродСт = Сумма(СуммаПродажа);
   |Группировка Менеджер без групп;
   |Группировка Покупатель без групп;
   |Группировка АдресПоставки без групп;
   |Группировка Товар без групп;
   |Группировка Месяц все;
   |Условие(ПризнакРасхНакладной = Перечисление.ПризнРасхНакл.Продажа);
   |Условие(Менеджер <> ПустоеМенеджер);
   |Условие(Покупатель в ВыбПокупатель);
   |"//}}ЗАПРОС
   ;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;

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

   // Заполнение полей "Итого"
   Таб.ВывестиСекцию("Итого");
   // Вывод заполненной формы
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Сформировать", "");
КонецПроцедуры




Группировки.ДобавитьЗначение("Менеджер",    "Менеджер");
Группировки.ДобавитьЗначение("Покупатель",    "Покупатель");
Группировки.ДобавитьЗначение("АдресПоставки",    "Адрес поставки");
Группировки.ДобавитьЗначение("Товар","Номенклатура");
Группировки.ДобавитьЗначение("Месяц","Месяц");




ПустоеМенеджер="";
61 NS
 
15.03.13
10:53
А галки на всех группировках на форме стоят?
порядок группировок на форме не меняла?
62 Gal4onok
 
15.03.13
13:22
нет. стоят все. ничего не меняла
63 NS
 
15.03.13
13:26
(62) Очень непохоже на правду.
64 NS
 
15.03.13
13:36
ИмяГруппировки=списокгруппировок.получитьзначение(НомерГруппировки);
   Значениегруппировки=Запрос.ПолучитьАтрибут(ИмяГруппировки);
Если типзначенистр(Значениегруппировки)="Справочник" тогда
  Значениегруппировки=ЗначениеГруппировки.Наименование;
КонецЕсли;
сообщить(""+ИмяГруппировки+" "+Значениегруппировки);

А так?
65 NS
 
15.03.13
13:36
Если типзначениястр(Значениегруппировки)="Справочник" тогда
66 Gal4onok
 
15.03.13
14:06
я задолбалась уже этим отчетом.
(64) в сообщениях выводит какую то ерунду.
Вкратце суть задачи: нужен отчет по продажам с указанными группировками по периодам (месяц, неделя, день), с отбором по значениям группировок (множ.фильтр),
данные по периодам выводятся в колонки с итогами по группировкам.
Данные в сравнении последнего месяца с предыдущим ( если данных нет, то след.период итп. в натуральном выражении(количество, сумма), и в %)
Если при сравнении идет снижение показателей, они выводятся в допол.колонки (дублируеться) и только отрицательные.
Кто возмется написать такое, сколько денег,
(оплата через интернет -карточка, телефон, яндексденьги и тп)
67 NS
 
15.03.13
14:08
(66) Ты можешь скопировать на форум что он выводит?
68 Gal4onok
 
15.03.13
14:09
текст сообщений или отчет?
69 Gal4onok
 
15.03.13
14:09
Менеджер
Покупатель
АдресПоставки
Товар
Месяц
Месяц Январь 13
Месяц Февраль 13
Месяц Март 13
Товар Золотая  семечка" масло  1л подсол/15
Месяц
Месяц Январь 13
Месяц Февраль 13
Месяц Март 13
Товар Кетчуп  М.Р. 460гр Болгарский сладкий сашет /20  №189-46К
Месяц
Месяц Январь 13
Месяц Февраль 13
Месяц Март 13
Товар Кетчуп  М.Р. 460гр Шашлычный сашет /20  №209-46К
Месяц
Месяц Январь 13
Месяц Февраль 13
Месяц Март 13
Товар Килька Боцман бланшированная неразд. в т/с ж/б 230гр/48
70 NS
 
15.03.13
14:19
Процедура СформироватьСтроки(Запрос,Таб,НомерГруппировки)
   
   

   ИмяГруппировки=списокгруппировок.получитьзначение(НомерГруппировки);
  // Значениегруппировки=Запрос.ПолучитьАтрибут(ИмяГруппировки);
 // нельзя получить значение до того как получили группировку!!!
   Если Запрос.группировка(номергруппировки)>0 тогда
       Значениегруппировки=Запрос.ПолучитьАтрибут(ИмяГруппировки);

       Таб.вывестисекцию("ИмяГруппы");
       СформироватьСтроки(запрос,Таб,мин(номергруппировки+1,количествогруппировок));
   Иначе
       Если номергруппировки>1 тогда
           СформироватьСтроки(Запрос,Таб,номергруппировки-1);
       КонецЕсли;
   КонецЕсли;

 
 
КонецПроцедуры // СформироватьСтроки
71 NS
 
15.03.13
14:19
Теперь будет нормально.
72 Gal4onok
 
15.03.13
14:44
NS, спасибо большое за терпение и помощь.Теперь работает.
73 Gal4onok
 
15.03.13
14:45
Ни у кого нет желания написать (66) на коммерческой основе?
74 NS
 
15.03.13
14:53
5000 руб.
75 Gal4onok
 
15.03.13
14:55
без проблем, аську можно?
76 NS
 
15.03.13
15:07
Аськи нет. Есть фейсбук, скайп, почта.
77 Gal4onok
 
15.03.13
15:08
ок, у меня только почта тогда
78 NS
 
15.03.13
15:09
почта на mail.ru
Nefedov_Sergei
79 Gal4onok
 
15.03.13
15:24
отправила...
80 NS
 
15.03.13
15:48
(79) Вечером, часов в 9-ть, поподробней расспрошу что там нужно сделать.
AdBlock убивает бесплатный контент. 1Сергей