Имя: Пароль:
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
Уже сделал через добавление элемента Флажок на форму отчета.Если Флажок Истина то отбирается поле Разница. Всем спасибо
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн