Имя: Пароль:
1C
1С v8
Заполнение макета параметрами из запроса
0 Artemistrator
 
25.04.13
14:49
Добрый день, изучаю 1с программирование, пытаюсь в УТ 11 создать отчет. Создал макет, прописал параметры, создал форму с кнопкой, выбором торговой точки и интервалом дат, но при нажатии сформировать у меня в макет забивается сотни торговых точек и все параметры. Как сделать так, чтобы при выборе торговой точки, только по ней и забивались параметры? Уверен, что дело в цикле, но никак не могу понять, что не так

&НаКлиенте
Процедура СформироватьОтчет(Кнопка)    
   ПечатьТабДок();          
КонецПроцедуры


&НаСервере
Процедура ПечатьТабДок() Экспорт
   ТабДок = Новый  ТабличныйДокумент;
   ТабДок.ТолькоПросмотр = Истина;  
   ТабДок.Защита  = Истина;
   Макет = Отчеты.ВсР.ПолучитьМакет("Макет");
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ТорговыеТочки.Ссылка КАК ТорговаяТочка,
   |    ТорговыеТочки.КассаККМ,
   |    ТорговыеТочки.Склад
   |ПОМЕСТИТЬ ТТ
   |ИЗ
   |    Справочник.ТорговыеТочки КАК ТорговыеТочки
   |{ГДЕ
   |    ТорговыеТочки.Ссылка.* КАК ТорговаяТочка}
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |    ТТ.ТорговаяТочка,
   |    ТоварыНТТОстаткиИОбороты.СуммаНачальныйОстаток КАК НачальныйОстатокПоТовары,
   |    ТоварыНТТОстаткиИОбороты.СуммаПриход КАК ПриходПоТовару,
   |    ТоварыНТТОстаткиИОбороты.СуммаРасход КАК РасходПоТовару,
   |    ТоварыНТТОстаткиИОбороты.СуммаКонечныйОстаток КАК КонечныйОстатокПоТовару,
   |    ТоварыНТТОстаткиИОбороты.Регистратор,
   |    ТоварыНТТОстаткиИОбороты.ПериодСекунда,
   |    ТоварыНТТОстаткиИОбороты.ПериодДень,
   |    ТоварыНТТОстаткиИОбороты.ПериодНеделя,
   |    ТоварыНТТОстаткиИОбороты.ПериодДекада,
   |    ТоварыНТТОстаткиИОбороты.ПериодМесяц,
   |    ТоварыНТТОстаткиИОбороты.ПериодКвартал,
   |    ТоварыНТТОстаткиИОбороты.ПериодПолугодие,
   |    ТоварыНТТОстаткиИОбороты.ПериодГод
   |ПОМЕСТИТЬ Товар
   |ИЗ
   |    ТТ КАК ТТ
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНТТ.ОстаткиИОбороты(
   |                &НачалоПериода,
   |                &КонецПериода,
   |                Авто,
   |                ДвиженияИГраницыПериода,
   |                Склад В
   |                    (ВЫБРАТЬ
   |                        ТТ.Склад
   |                    ИЗ
   |                        ТТ КАК ТТ)) КАК ТоварыНТТОстаткиИОбороты
   |        ПО ТТ.Склад = ТоварыНТТОстаткиИОбороты.Склад
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |    ТТ.ТорговаяТочка,
   |    ДенежныеСредстваВКассахККМОстаткиИОбороты.СуммаНачальныйОстаток КАК НачальныйОстатокПоКассе,
   |    ДенежныеСредстваВКассахККМОстаткиИОбороты.СуммаПриход КАК ПриходПоКассе,
   |    ДенежныеСредстваВКассахККМОстаткиИОбороты.СуммаРасход КАК РасходПоКассе,
   |    ДенежныеСредстваВКассахККМОстаткиИОбороты.СуммаКонечныйОстаток КАК КонечныйОстатокПоКассе,
   |    ДенежныеСредстваВКассахККМОстаткиИОбороты.Регистратор,
   |    ДенежныеСредстваВКассахККМОстаткиИОбороты.ПериодСекунда,
   |    ДенежныеСредстваВКассахККМОстаткиИОбороты.ПериодДень,
   |    ДенежныеСредстваВКассахККМОстаткиИОбороты.ПериодНеделя,
   |    ДенежныеСредстваВКассахККМОстаткиИОбороты.ПериодДекада,
   |    ДенежныеСредстваВКассахККМОстаткиИОбороты.ПериодМесяц,
   |    ДенежныеСредстваВКассахККМОстаткиИОбороты.ПериодКвартал,
   |    ДенежныеСредстваВКассахККМОстаткиИОбороты.ПериодПолугодие,
   |    ДенежныеСредстваВКассахККМОстаткиИОбороты.ПериодГод
   |ПОМЕСТИТЬ Касса
   |ИЗ
   |    ТТ КАК ТТ
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДенежныеСредстваВКассахККМ.ОстаткиИОбороты(
   |                &НачалоПериода,
   |                &КонецПериода,
   |                Авто,
   |                ДвиженияИГраницыПериода,
   |                КассаККМ В
   |                    (ВЫБРАТЬ
   |                        ТТ.КассаККМ
   |                    ИЗ
   |                        ТТ КАК ТТ)) КАК ДенежныеСредстваВКассахККМОстаткиИОбороты
   |        ПО ТТ.КассаККМ = ДенежныеСредстваВКассахККМОстаткиИОбороты.КассаККМ
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |    Товар.ТорговаяТочка,
   |    Товар.НачальныйОстатокПоТовары,
   |    Товар.ПриходПоТовару,
   |    Товар.РасходПоТовару,
   |    Товар.КонечныйОстатокПоТовару,
   |    Товар.Регистратор,
   |    0 КАК НачальныйОстатокПоКассе,
   |    0 КАК ПриходПоКассе,
   |    0 КАК РасходПоКассе,
   |    0 КАК КонечныйОстатокПоКассе,
   |    Товар.ПериодСекунда,
   |    Товар.ПериодДень,
   |    Товар.ПериодНеделя,
   |    Товар.ПериодДекада,
   |    Товар.ПериодМесяц,
   |    Товар.ПериодКвартал,
   |    Товар.ПериодПолугодие,
   |    Товар.ПериодГод
   |ПОМЕСТИТЬ НаГруппировку
   |ИЗ
   |    Товар КАК Товар
   |
   |ОБЪЕДИНИТЬ ВСЕ
   |
   |ВЫБРАТЬ
   |    Касса.ТорговаяТочка,
   |    0,
   |    0,
   |    0,
   |    0,
   |    Касса.Регистратор,
   |    Касса.НачальныйОстатокПоКассе,
   |    Касса.ПриходПоКассе,
   |    Касса.РасходПоКассе,
   |    Касса.КонечныйОстатокПоКассе,
   |    Касса.ПериодСекунда,
   |    Касса.ПериодДень,
   |    Касса.ПериодНеделя,
   |    Касса.ПериодДекада,
   |    Касса.ПериодМесяц,
   |    Касса.ПериодКвартал,
   |    Касса.ПериодПолугодие,
   |    Касса.ПериодГод
   |ИЗ
   |    Касса КАК Касса
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |    НаГруппировку.ТорговаяТочка,
   |    СУММА(НаГруппировку.НачальныйОстатокПоТовары) КАК НачальныйОстатокПоТовары,
   |    СУММА(НаГруппировку.ПриходПоТовару) КАК ПриходПоТовару,
   |    СУММА(НаГруппировку.РасходПоТовару) КАК РасходПоТовару,
   |    СУММА(НаГруппировку.КонечныйОстатокПоТовару) КАК КонечныйОстатокПоТовару,
   |    НаГруппировку.Регистратор,
   |    СУММА(НаГруппировку.НачальныйОстатокПоКассе) КАК НачальныйОстатокПоКассе,
   |    СУММА(НаГруппировку.ПриходПоКассе) КАК ПриходПоКассе,
   |    СУММА(НаГруппировку.РасходПоКассе) КАК РасходПоКассе,
   |    СУММА(НаГруппировку.КонечныйОстатокПоКассе) КАК КонечныйОстатокПоКассе,
   |    НаГруппировку.ПериодСекунда,
   |    НаГруппировку.ПериодДень,
   |    НаГруппировку.ПериодНеделя,
   |    НаГруппировку.ПериодДекада,
   |    НаГруппировку.ПериодМесяц,
   |    НаГруппировку.ПериодКвартал,
   |    НаГруппировку.ПериодПолугодие,
   |    НаГруппировку.ПериодГод,
   |    ВЫБОР
   |        КОГДА ТИПЗНАЧЕНИЯ(НаГруппировку.Регистратор) = ТИП(Документ.ОтчетОРозничныхПродажах)
   |            ТОГДА НаГруппировку.РасходПоТовару
   |        ИНАЧЕ 0
   |    КОНЕЦ КАК Продано,
   |    ВЫБОР
   |        КОГДА ТИПЗНАЧЕНИЯ(НаГруппировку.Регистратор) = ТИП(Документ.УстановкаПрайса)
   |                ИЛИ ТИПЗНАЧЕНИЯ(НаГруппировку.Регистратор) = ТИП(Документ.УстановкаЦенНоменклатуры)
   |            ТОГДА НаГруппировку.ПриходПоТовару - НаГруппировку.РасходПоТовару
   |        ИНАЧЕ 0
   |    КОНЕЦ КАК Переоценка,
   |    ТИПЗНАЧЕНИЯ(НаГруппировку.Регистратор) КАК ТипДокумента,
   |    ВЫБОР
   |        КОГДА ТИПЗНАЧЕНИЯ(НаГруппировку.Регистратор) = ТИП(Документ.ПеремещениеТоваров)
   |                ИЛИ ТИПЗНАЧЕНИЯ(НаГруппировку.Регистратор) = ТИП(Документ.ПоступлениеТоваровУслуг)
   |            ТОГДА НаГруппировку.ПриходПоТовару
   |        ИНАЧЕ 0
   |    КОНЕЦ КАК Приход,
   |    ВЫБОР
   |        КОГДА ТИПЗНАЧЕНИЯ(НаГруппировку.Регистратор) = ТИП(Документ.ПеремещениеТоваров)
   |                ИЛИ ТИПЗНАЧЕНИЯ(НаГруппировку.Регистратор) = ТИП(Документ.ВнутреннееПотреблениеТоваров)
   |            ТОГДА НаГруппировку.РасходПоТовару
   |        ИНАЧЕ 0
   |    КОНЕЦ КАК Списано
   |ИЗ
   |    НаГруппировку КАК НаГруппировку
   |
   |СГРУППИРОВАТЬ ПО
   |    НаГруппировку.Регистратор,
   |    НаГруппировку.ТорговаяТочка,
   |    НаГруппировку.ПериодСекунда,
   |    НаГруппировку.ПериодДень,
   |    НаГруппировку.ПериодНеделя,
   |    НаГруппировку.ПериодДекада,
   |    НаГруппировку.ПериодМесяц,
   |    НаГруппировку.ПериодКвартал,
   |    НаГруппировку.ПериодПолугодие,
   |    НаГруппировку.ПериодГод,
   |    ВЫБОР
   |        КОГДА ТИПЗНАЧЕНИЯ(НаГруппировку.Регистратор) = ТИП(Документ.УстановкаПрайса)
   |                ИЛИ ТИПЗНАЧЕНИЯ(НаГруппировку.Регистратор) = ТИП(Документ.УстановкаЦенНоменклатуры)
   |            ТОГДА НаГруппировку.ПриходПоТовару - НаГруппировку.РасходПоТовару
   |        ИНАЧЕ 0
   |    КОНЕЦ,
   |    ВЫБОР
   |        КОГДА ТИПЗНАЧЕНИЯ(НаГруппировку.Регистратор) = ТИП(Документ.ОтчетОРозничныхПродажах)
   |            ТОГДА НаГруппировку.РасходПоТовару
   |        ИНАЧЕ 0
   |    КОНЕЦ,
   |    ВЫБОР
   |        КОГДА ТИПЗНАЧЕНИЯ(НаГруппировку.Регистратор) = ТИП(Документ.ПеремещениеТоваров)
   |                ИЛИ ТИПЗНАЧЕНИЯ(НаГруппировку.Регистратор) = ТИП(Документ.ПоступлениеТоваровУслуг)
   |            ТОГДА НаГруппировку.ПриходПоТовару
   |        ИНАЧЕ 0
   |    КОНЕЦ,
   |    ВЫБОР
   |        КОГДА ТИПЗНАЧЕНИЯ(НаГруппировку.Регистратор) = ТИП(Документ.ПеремещениеТоваров)
   |                ИЛИ ТИПЗНАЧЕНИЯ(НаГруппировку.Регистратор) = ТИП(Документ.ВнутреннееПотреблениеТоваров)
   |            ТОГДА НаГруппировку.РасходПоТовару
   |        ИНАЧЕ 0
   |    КОНЕЦ";
   // Результат = Запрос.Выполнить();
   
   
   Запрос.Параметры.Вставить("НачалоПериода",НачалоПериода);
   Запрос.Параметры.Вставить("КонецПериода",КонецПериода);
   Запрос.Параметры.Вставить("ТорговаяТочка",ТорговаяТочка);
   
   
   Выборка = Запрос.Выполнить().Выбрать();
   ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
   ОбластьТаблЧасть = Макет.ПолучитьОбласть("ТаблЧасть");
   ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
   
   ТабДок.Очистить();
   ВставлятьРазделительСтраниц = Ложь;
   ТабДок.ОтображатьСетку = Ложь;
   ОбластьШапка.Параметры.НачалоПериода = НачалоПериода;
   ОбластьШапка.Параметры.КонецПериода = КонецПериода;
   ОбластьШапка.Параметры.ТорговаяТочка = ТорговаяТочка;
   
   Пока Выборка.Следующий() Цикл
       
       ТабДок.Вывести(ОбластьШапка);
       ОбластьШапка.Параметры.Заполнить(Выборка);
       //ВыборкаТаблЧасть = Выборка.ТаблЧасть.Выбрать();
       //Пока ВыборкаТаблЧасть.Следующий() Цикл
       ТабДок.Вывести(ОбластьТаблЧасть);
       ОбластьТаблЧасть.Параметры.Заполнить(Выборка);
       //КонецЦикла;
       
       ТабДок.Вывести(ОбластьПодвал);
       ОбластьПодвал.Параметры.Заполнить(Выборка);
       
       
       
   КонецЦикла;
   ТабДок.Показать();
   
КонецПроцедуры
1 NetDozor
 
25.04.13
14:55
В этом запросе:
"ВЫБРАТЬ
   |    ТорговыеТочки.Ссылка КАК ТорговаяТочка,
   |    ТорговыеТочки.КассаККМ,
   |    ТорговыеТочки.Склад
   |ПОМЕСТИТЬ ТТ
   |ИЗ
   |    Справочник.ТорговыеТочки КАК ТорговыеТочки
   |{ГДЕ
   |    ТорговыеТочки.Ссылка.* КАК ТорговаяТочка}
   |;
условие вида |{ГДЕ
   |    ТорговыеТочки.Ссылка.* КАК ТорговаяТочка}
используется для построителя, а так как ты построитель не используешь сдлай нормальное условие
|{ГДЕ
   |    ТорговаяТочка = &ТорговаяТочка
2 NetDozor
 
25.04.13
14:56
без фигурных скобок
|ГДЕ
|    ТорговаяТочка = &ТорговаяТочка
3 shadowfiend10
 
25.04.13
14:58
сразу ОбластьПодвал.Параметры.Заполнить(Выборка);
потом  ТабДок.Вывести(ОбластьПодвал);
4 Artemistrator
 
25.04.13
15:05
(3)не понял! Причем тут подвал?
5 NetDozor
 
25.04.13
15:10
в цикле обычно заполняется ОбластьТаблЧасть, для чего у тебя заполняется и выводится Шапка и Подвал тоже в цикле
6 Artemistrator
 
25.04.13
15:12
(5) эту ошибку уже уяснил. Спасибо. Но насчёт запроса не понял. вместо чего это должно быть? или после чего?
|ГДЕ
|    ТорговаяТочка = &ТорговаяТочка
7 NetDozor
 
25.04.13
15:16
думаю так будет правильней:

   ОбластьШапка.Параметры.НачалоПериода = НачалоПериода;
   ОбластьШапка.Параметры.КонецПериода = КонецПериода;
   ОбластьШапка.Параметры.ТорговаяТочка = ТорговаяТочка;
   ТабДок.Вывести(ОбластьШапка);

   Пока Выборка.Следующий() Цикл
       ОбластьТаблЧасть.Параметры.Заполнить(Выборка);
       ТабДок.Вывести(ОбластьТаблЧасть);
   КонецЦикла;

   //ОбластьПодвал.Параметры.Заполнить(Выборка);
   //тут заполняешь параметры подвала
   ТабДок.Вывести(ОбластьПодвал);
       

   ТабДок.Показать();
8 NetDozor
 
25.04.13
15:18
вместо этого:
|{ГДЕ
|    ТорговыеТочки.Ссылка.* КАК ТорговаяТочка}

надо так:

|ГДЕ
|    ТорговыеТочки.Ссылка = &ТорговаяТочка
9 Ёпрст
 
25.04.13
15:21
(0) я бы оставил с конструкцией от построителя и на форму кинул бы построитель.Отбор, чтоб с него брать параметры для запроса.
10 Artemistrator
 
25.04.13
15:27
(8) {Отчет.ВсР.Форма.ФормаОтчета.Форма(230)}: Ошибка при вызове метода контекста (Выполнить)
   Выборка = Запрос.Выполнить().Выбрать();
по причине:
{(9, 25)}: Не задано значение параметра "ТорговыеТочки"
ТорговыеТочки.Ссылка = <<?>>&ТорговыеТочки

вот эту ошибку выдаёт
11 NetDozor
 
25.04.13
15:30
&ТорговыеТочки и &ТорговаяТочка разницу видишь?
12 Artemistrator
 
25.04.13
15:35
(11) Спасибо, заработало!