Имя: Пароль:
1C
1С v8
Вид отчета
,
0 amadeus2010
 
29.03.12
09:58
Добрый день,при формировании и выводе отчета по рейсам выводится сводная таблица с раскрытыми полями,т.е можно увидеть рейсы экспедитора,его продажи.Теперь надо чтобы список был скрытым и пользователь сам выбирал какую строку ему раскрыть полностью.Как можно это сделать?
1 Cube
 
29.03.12
10:02
Для Сч = 1 По ЭлементыФормы.Результат.КоличествоУровнейГруппировокСтрок() Цикл
   ЭлементыФормы.Результат.ПоказатьУровеньГруппировокСтрок(ЭлементыФормы.Результат.КоличествоУровнейГруппировокСтрок() - Сч + 1);
КонецЦикла;
ЭлементыФормы.Результат.ПоказатьУровеньГруппировокСтрок(0);
2 lxs
 
29.03.12
10:03
(1) что помешает пользователю нажать Ctrl+Shft+"+"?
3 lxs
 
29.03.12
10:04
(0) отчет на СКД?
4 Cube
 
29.03.12
10:05
(2) На СКД не работает и это же нажимать надо...
5 lxs
 
29.03.12
10:05
Если на СКД, то играй вариантами отчета. Кому следует видеть детализацию - им свой вариант отчета (посл. закладка), кому не следует - сокращенный вариант.
6 lxs
 
29.03.12
10:05
(4) Да ты что?
7 lxs
 
29.03.12
10:06
Развернуть/свернуть группировки не работает только там, где этих группировок нет.
8 amadeus2010
 
29.03.12
10:06
Пользователь хочет чтобы при выводе отчет список был закрытым, так при большом объеме данных ему легче так увидеть проблемные рейсы с долгами.
Отчет написан через стандартный запрос
9 lxs
 
29.03.12
10:07
(8) Если группировки есть, то смотри свойства поля таб.документа и играй уровнями. Что-то вроде (1).
10 Cube
 
29.03.12
10:08
(6) А ты сам попробуй. Кстати, не сработает нигде, т.к. нужно "-" жать, а не "+" :)
11 amadeus2010
 
29.03.12
10:09
Привожу процедуру формирующую отчет,подскажите что и как изменить согласно моему вопросу
Процедура КнопкаСформироватьНажатие(Кнопка=Неопределено) Экспорт
   
   ТоварыВРейсахФильтр = "";  
   Если ЗначениеЗаполнено(Рейс) Тогда
       ТоварыВРейсахФильтр = " Рейс = &Рейс И";
       ТоварыВРейсахФильтр2 = "И ТоварыНаСкладахОбороты.Регистратор.Рейс = &Рейс"
   КонецЕсли;
   //ТоварыВРейсахФильтр        
   ЭлементыФормы.ПолеТабличногоДокумента1.Очистить();
   ДатаКонца = ?(ЗначениеЗаполнено(ДатаКон),КонецДня(ДатаКон), КонецДня(ОбщегоНазначения.ПолучитьРабочуюДату()));
   
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("ДатаНачала",ДатаНач);
   Запрос.УстановитьПараметр("ДатаКонца",ДатаКонца);
   Запрос.УстановитьПараметр("Рейс",Рейс);
   Запрос.Текст =
   "ВЫБРАТЬ
   |    СУММА(ЕСТЬNULL(ЭкспедиторВозвратПокупательОбороты.КоличествоОборот, 0)) КАК ВозвратОтПокупателя,
   |    МАКСИМУМ(ВложенныйЗапрос.ПеремещениеПриход) КАК ПеремещениеПриход,
   |    МАКСИМУМ(ВложенныйЗапрос.ПеремещениеРасход) КАК ПеремещениеРасход,
   |    МАКСИМУМ(ВложенныйЗапрос.КоличествоНакладная) КАК КоличествоНакладная,
   |    ЕСТЬNULL(ВложенныйЗапрос.РегистраторРейс, ЭкспедиторВозвратПокупательОбороты.Рейс) КАК Рейс,
   |    ЕСТЬNULL(ВложенныйЗапрос.Номенклатура, ЭкспедиторВозвратПокупательОбороты.Номенклатура) КАК Номенклатура,
   |    ЕСТЬNULL(ВложенныйЗапрос.СерияНоменклатуры, ЭкспедиторВозвратПокупательОбороты.СерияНоменклатуры) КАК СерияНоменклатуры
   |ИЗ
   |    (ВЫБРАТЬ
   |        СУММА(ВЫБОР
   |                КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
   |                    ТОГДА ВЫБОР
   |                            КОГДА ТоварыНаСкладахОбороты.Регистратор.СкладПолучатель.ТипСклада = &СкладМашина
   |                                ТОГДА ТоварыНаСкладахОбороты.КоличествоПриход
   |                            ИНАЧЕ 0
   |                        КОНЕЦ
   |                ИНАЧЕ 0
   |            КОНЕЦ) КАК ПеремещениеПриход,
   |        СУММА(ВЫБОР
   |                КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
   |                    ТОГДА ВЫБОР
   |                            КОГДА ТоварыНаСкладахОбороты.Регистратор.СкладОтправитель.ТипСклада = &СкладМашина
   |                                ТОГДА ТоварыНаСкладахОбороты.КоличествоРасход
   |                            ИНАЧЕ 0
   |                        КОНЕЦ
   |                ИНАЧЕ 0
   |            КОНЕЦ) КАК ПеремещениеРасход,
   |        СУММА(ВЫБОР
   |                КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
   |                    ТОГДА ТоварыНаСкладахОбороты.КоличествоРасход
   |                ИНАЧЕ 0
   |            КОНЕЦ) КАК КоличествоНакладная,
   |        ТоварыНаСкладахОбороты.Регистратор.Рейс КАК РегистраторРейс,
   |        ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура,
   |        ТоварыНаСкладахОбороты.СерияНоменклатуры КАК СерияНоменклатуры
   |    ИЗ
   |        РегистрНакопления.ТоварыНаСкладах.Обороты(, , Регистратор, ) КАК ТоварыНаСкладахОбороты
   |    ГДЕ
   |        (ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
   |                ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг)
   |        И ТоварыНаСкладахОбороты.Регистратор.Рейс.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
   |        " + ТоварыВРейсахФильтр2 + "
   |    
   |    СГРУППИРОВАТЬ ПО
   |        ТоварыНаСкладахОбороты.Регистратор.Рейс,
   |        ТоварыНаСкладахОбороты.Номенклатура,
   |        ТоварыНаСкладахОбороты.СерияНоменклатуры) КАК ВложенныйЗапрос
   |        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ЭкспедиторВозвратПокупатель.Обороты(, , , " + ТоварыВРейсахФильтр + " Рейс.Дата МЕЖДУ &ДатаНачала И &ДатаКонца) КАК ЭкспедиторВозвратПокупательОбороты
   |        ПО ВложенныйЗапрос.РегистраторРейс = ЭкспедиторВозвратПокупательОбороты.Рейс
   |            И ВложенныйЗапрос.Номенклатура = ЭкспедиторВозвратПокупательОбороты.Номенклатура
   |            И ВложенныйЗапрос.СерияНоменклатуры = ЭкспедиторВозвратПокупательОбороты.СерияНоменклатуры    
   |
   |СГРУППИРОВАТЬ ПО
   |    ЕСТЬNULL(ВложенныйЗапрос.РегистраторРейс, ЭкспедиторВозвратПокупательОбороты.Рейс),
   |    ЕСТЬNULL(ВложенныйЗапрос.Номенклатура, ЭкспедиторВозвратПокупательОбороты.Номенклатура),
   |    ЕСТЬNULL(ВложенныйЗапрос.СерияНоменклатуры, ЭкспедиторВозвратПокупательОбороты.СерияНоменклатуры)
   |ИТОГИ
   |    СУММА(ВозвратОтПокупателя),
   |    СУММА(ПеремещениеПриход),
   |    СУММА(ПеремещениеРасход),
   |    СУММА(КоличествоНакладная)
   |ПО
   |    Рейс";

   Запрос.УстановитьПараметр("СкладМашина",Перечисления.ТипыСкладов.Машина);
   
   Макет = ПолучитьМакет("Макет");
   ОбластьШапки = Макет.ПолучитьОбласть("Шапка");
   Если ЗначениеЗаполнено(ДатаНач) или ЗначениеЗаполнено(ДатаКонца) Тогда
       период = ПредставлениеПериода(НачалоДня(ДатаНач),КонецДня(ДатаКонца));
       Если Период <> "" Тогда
           Период = " за " + период;
       КонецЕсли;
       Если не значениеЗаполнено(ДатаНач) тогда
           Период = " на дату " + формат(КонецДня(ДатаКон),"ДЛФ=D")+" г.";
       конецесли;    
       ОбластьШапки.Параметры.Период = Период;
   КонецЕсли;

   ОБластьСтроки1 = Макет.ПолучитьОбласть("Строка1");
   ОБластьСтроки2 = Макет.ПолучитьОбласть("Строка2");
   ОбластьПодвала = Макет.ПолучитьОбласть("Подвал");
   ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ОбластьШапки);
   Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   ЭлементыФормы.ПолеТабличногоДокумента1.НачатьАвтогруппировкуСтрок();
   Пока Выборка.Следующий() Цикл
       ОБластьСтроки1 = Макет.ПолучитьОбласть("Строка1");
       ОБластьСтроки1.Параметры.Заполнить(Выборка);
       ОБластьСтроки1.Параметры.Колонка1 = Выборка.Рейс;
       ОБластьСтроки1.Параметры.Экспедитор = Выборка.Рейс.Экспедитор;
       ОБластьСтроки1.Параметры.Разница =
       ?(Выборка.КоличествоНакладная = Null, 0 , Выборка.КоличествоНакладная)
       + ?(Выборка.ПеремещениеРасход = Null, 0 ,Выборка.ПеремещениеРасход)
       - Выборка.ВозвратОтПокупателя
       - ?(Выборка.ПеремещениеПриход = Null, 0 ,Выборка.ПеремещениеПриход);
       ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ОбластьСтроки1,1);
       Выборка2 = Выборка.Выбрать();
       Пока выборка2.Следующий() Цикл
           ОБластьСтроки2 = Макет.ПолучитьОбласть("Строка2");
           ОБластьСтроки2.Параметры.Заполнить(Выборка2);
           ОБластьСтроки2.Параметры.Колонка1 = Выборка2.Номенклатура;
           ОБластьСтроки2.Параметры.Серия = Выборка2.СерияНоменклатуры;        
           ОБластьСтроки2.Параметры.Разница =
           ?(Выборка2.КоличествоНакладная = Null, 0 , Выборка2.КоличествоНакладная)  
           +?(Выборка2.ПеремещениеРасход = Null, 0 , Выборка2.ПеремещениеРасход)
           - Выборка2.ВозвратОтПокупателя
           - ?(Выборка2.ПеремещениеПриход = Null, 0 , Выборка2.ПеремещениеПриход);
           ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ОБластьСтроки2,2);
       КонецЦикла;
   КонецЦикла;
   ЭлементыФормы.ПолеТабличногоДокумента1.ЗакончитьАвтогруппировкуСтрок();
   ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ОбластьПодвала);    
   
КонецПроцедуры
12 Cube
 
29.03.12
10:10
(8) Ну тогда:

ТабличныйДокумент (SpreadsheetDocument)
НачатьГруппуСтрок (StartRowGroup)
Синтаксис:

НачатьГруппуСтрок(<ИмяГруппы>, <ОткрытаЛиГруппа>)
Параметры:

<ИмяГруппы> (необязательный)

Тип: Строка.
Название группы.
<ОткрытаЛиГруппа> (необязательный)

Тип: Булево.
Определяет необходимость открытия группы. Истина - выведенная группа будет открыта; Ложь - группа будет выведена в свернутом виде.
Значение по умолчанию: Истина
Описание:

Начинает новую группу строк. Можно создавать вложенные группы строк.

Доступность:

Сервер, толстый клиент, внешнее соединение.
13 lxs
 
29.03.12
10:11
(10) епт, я говорил про разворачивание группировок)
14 lxs
 
29.03.12
10:12
Вообще не вижу проблемы. Читай СП.
15 Cube
 
29.03.12
10:12
Пиши так:

   ЭлементыФормы.ПолеТабличногоДокумента1.ЗакончитьАвтогруппировкуСтрок();
   ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ОбластьПодвала);
   ЭлементыФормы.ПолеТабличногоДокумента1.ПоказатьУровеньГруппировокСтрок(0);
16 amadeus2010
 
29.03.12
10:26
(15) спасибо за совет, все работает
17 amadeus2010
 
29.03.12
11:38
Добрый день еще раз побеспокою вас. Как сделать так чтобы из кода (11)в отчет выводилось только определенное поле Разница а не все поля?
18 lxs
 
29.03.12
11:41
жесть
19 amadeus2010
 
29.03.12
11:43
Сделал так:
   ТоварыВРейсахФильтр = "";  
   Если ЗначениеЗаполнено(Рейс) Тогда
       ТоварыВРейсахФильтр = " Рейс = &Рейс И";
       ТоварыВРейсахФильтр2 = "И ТоварыНаСкладахОбороты.Регистратор.Рейс = &Рейс"
   КонецЕсли;
   //ТоварыВРейсахФильтр        
   ЭлементыФормы.ПолеТабличногоДокумента1.Очистить();
   ДатаКонца = ?(ЗначениеЗаполнено(ДатаКон),КонецДня(ДатаКон), КонецДня(ОбщегоНазначения.ПолучитьРабочуюДату()));
   
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("ДатаНачала",ДатаНач);
   Запрос.УстановитьПараметр("ДатаКонца",ДатаКонца);
   Запрос.УстановитьПараметр("Рейс",Рейс);
   Запрос.Текст =
   "ВЫБРАТЬ
   |    СУММА(ЕСТЬNULL(ЭкспедиторВозвратПокупательОбороты.КоличествоОборот, 0)) КАК ВозвратОтПокупателя,
   |    МАКСИМУМ(ВложенныйЗапрос.ПеремещениеПриход) КАК ПеремещениеПриход,
   |    МАКСИМУМ(ВложенныйЗапрос.ПеремещениеРасход) КАК ПеремещениеРасход,
   |    МАКСИМУМ(ВложенныйЗапрос.КоличествоНакладная) КАК КоличествоНакладная,
   |    ЕСТЬNULL(ВложенныйЗапрос.РегистраторРейс, ЭкспедиторВозвратПокупательОбороты.Рейс) КАК Рейс,
   |    ЕСТЬNULL(ВложенныйЗапрос.Номенклатура, ЭкспедиторВозвратПокупательОбороты.Номенклатура) КАК Номенклатура,
   |    ЕСТЬNULL(ВложенныйЗапрос.СерияНоменклатуры, ЭкспедиторВозвратПокупательОбороты.СерияНоменклатуры) КАК СерияНоменклатуры
   |ИЗ
   |    (ВЫБРАТЬ
   |        СУММА(ВЫБОР
   |                КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
   |                    ТОГДА ВЫБОР
   |                            КОГДА ТоварыНаСкладахОбороты.Регистратор.СкладПолучатель.ТипСклада = &СкладМашина
   |                                ТОГДА ТоварыНаСкладахОбороты.КоличествоПриход
   |                            ИНАЧЕ 0
   |                        КОНЕЦ
   |                ИНАЧЕ 0
   |            КОНЕЦ) КАК ПеремещениеПриход,
   |        СУММА(ВЫБОР
   |                КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
   |                    ТОГДА ВЫБОР
   |                            КОГДА ТоварыНаСкладахОбороты.Регистратор.СкладОтправитель.ТипСклада = &СкладМашина
   |                                ТОГДА ТоварыНаСкладахОбороты.КоличествоРасход
   |                            ИНАЧЕ 0
   |                        КОНЕЦ
   |                ИНАЧЕ 0
   |            КОНЕЦ) КАК ПеремещениеРасход,
   |        СУММА(ВЫБОР
   |                КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
   |                    ТОГДА ТоварыНаСкладахОбороты.КоличествоРасход
   |                ИНАЧЕ 0
   |            КОНЕЦ) КАК КоличествоНакладная,
   |        ТоварыНаСкладахОбороты.Регистратор.Рейс КАК РегистраторРейс,
   |        ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура,
   |        ТоварыНаСкладахОбороты.СерияНоменклатуры КАК СерияНоменклатуры
   |    ИЗ
   |        РегистрНакопления.ТоварыНаСкладах.Обороты(, , Регистратор, ) КАК ТоварыНаСкладахОбороты
   |    ГДЕ
   |        (ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
   |                ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг)
   |        И ТоварыНаСкладахОбороты.Регистратор.Рейс.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
   |        " + ТоварыВРейсахФильтр2 + "
   |    
   |    СГРУППИРОВАТЬ ПО
   |        ТоварыНаСкладахОбороты.Регистратор.Рейс,
   |        ТоварыНаСкладахОбороты.Номенклатура,
   |        ТоварыНаСкладахОбороты.СерияНоменклатуры) КАК ВложенныйЗапрос
   |        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ЭкспедиторВозвратПокупатель.Обороты(, , , " + ТоварыВРейсахФильтр + " Рейс.Дата МЕЖДУ &ДатаНачала И &ДатаКонца) КАК ЭкспедиторВозвратПокупательОбороты
   |        ПО ВложенныйЗапрос.РегистраторРейс = ЭкспедиторВозвратПокупательОбороты.Рейс
   |            И ВложенныйЗапрос.Номенклатура = ЭкспедиторВозвратПокупательОбороты.Номенклатура
   |            И ВложенныйЗапрос.СерияНоменклатуры = ЭкспедиторВозвратПокупательОбороты.СерияНоменклатуры    
   |
   |СГРУППИРОВАТЬ ПО
   |    ЕСТЬNULL(ВложенныйЗапрос.РегистраторРейс, ЭкспедиторВозвратПокупательОбороты.Рейс),
   |    ЕСТЬNULL(ВложенныйЗапрос.Номенклатура, ЭкспедиторВозвратПокупательОбороты.Номенклатура),
   |    ЕСТЬNULL(ВложенныйЗапрос.СерияНоменклатуры, ЭкспедиторВозвратПокупательОбороты.СерияНоменклатуры)
   |ИТОГИ
   |    СУММА(ВозвратОтПокупателя),
   |    СУММА(ПеремещениеПриход),
   |    СУММА(ПеремещениеРасход),
   |    СУММА(КоличествоНакладная)
   |ПО
   |    Рейс";

   Запрос.УстановитьПараметр("СкладМашина",Перечисления.ТипыСкладов.Машина);
   
   Макет = ПолучитьМакет("Макет");
   ОбластьШапки = Макет.ПолучитьОбласть("Шапка");
   Если ЗначениеЗаполнено(ДатаНач) или ЗначениеЗаполнено(ДатаКонца) Тогда
       период = ПредставлениеПериода(НачалоДня(ДатаНач),КонецДня(ДатаКонца));
       Если Период <> "" Тогда
           Период = " за " + период;
       КонецЕсли;
       Если не значениеЗаполнено(ДатаНач) тогда
           Период = " на дату " + формат(КонецДня(ДатаКон),"ДЛФ=D")+" г.";
       конецесли;    
       ОбластьШапки.Параметры.Период = Период;
   КонецЕсли;

   ОБластьСтроки1 = Макет.ПолучитьОбласть("Строка1");
   ОБластьСтроки2 = Макет.ПолучитьОбласть("Строка2");
   ОбластьПодвала = Макет.ПолучитьОбласть("Подвал");
   ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ОбластьШапки);
   Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   ЭлементыФормы.ПолеТабличногоДокумента1.НачатьАвтогруппировкуСтрок();
   Пока Выборка.Следующий() Цикл
       ОБластьСтроки1 = Макет.ПолучитьОбласть("Строка1");
       ОБластьСтроки1.Параметры.Заполнить(Выборка);
       ОБластьСтроки1.Параметры.Колонка1 = Выборка.Рейс;
       ОБластьСтроки1.Параметры.Экспедитор = Выборка.Рейс.Экспедитор;
       ОБластьСтроки1.Параметры.Разница =
       ?(Выборка.КоличествоНакладная = Null, 0 , Выборка.КоличествоНакладная)
       + ?(Выборка.ПеремещениеРасход = Null, 0 ,Выборка.ПеремещениеРасход)
       - Выборка.ВозвратОтПокупателя
       - ?(Выборка.ПеремещениеПриход = Null, 0 ,Выборка.ПеремещениеПриход);
       //ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ОбластьСтроки1,1);
   КонецЦикла;
   ЭлементыФормы.ПолеТабличногоДокумента1.ЗакончитьАвтогруппировкуСтрок();
   ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ОБластьСтроки1.Параметры.Разница);
   ЭлементыФормы.ПолеТабличногоДокумента1.ПоказатьУровеньГруппировокСтрок(0);

Выдает ошибку {Отчет.ОтчетПоРейсам.Форма.ФормаОтчета(263)}: Ошибка при вызове метода контекста (Вывести): Несоответствие типов (параметр номер '1')
   ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ОБластьСтроки1.Параметры.Разница);
20 lxs
 
29.03.12
12:13
кури СП, е-мое!!! Как таких допускают к конфигуратору...
21 lxs
 
29.03.12
12:14
Сделай второй макет, удали в нем ненужные колонки, в коде убери заполнение тех параметров, которых в макете больше не существует и не пиши больше такого бреда, как в (19). Хоть немного почитай Простые примеры разработки что ли.
22 lxs
 
29.03.12
12:15
И хоть немного научись думать головой
23 amadeus2010
 
29.03.12
12:27
Уже сделал через добавление элемента Флажок на форму отчета.Если Флажок Истина то отбирается поле Разница. Всем спасибо
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.