Осторожно, 1С! 13-я серия

Поговорим о разработке отчетов на СКД: особенность использования параметров виртуальных таблиц.

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.

комментариев 14 на “Осторожно, 1С! 13-я серия”

  1. Давыдяк Сергей 02.02.2011 в 20:55

    Возникла у меня недавно следующая проблемка:
    сделан отчет с помощью СКД, в файловой базе он выполняется либо почти мгновенно, либо за 2-3 секунды, в этой же базе но в клиент-серверном варианте он подвисает и никак не может выполнится.
    Особенности отчета:
    отчет построен на пакетном запросе состоящем из нескольких запросов, которые помещаются во временные таблицы, основного запроса использующего данные заготовленных таблиц и запросов удаляющих временные таблицы.
    Может подскажете в чем может заключаться проблема.

    • Здесь нужно провести расследование: кто виноват.
      Попробуйте выполнять этот же запрос в консоли отчетов. Если не выполняется, нужно понять на каком запросе пакета ошибка.
      Если выполняется, то значит дело в СКД. Тогда тоже можно поочередно вычислить в какой таблице проблема.

      Вообще ситуация похожа на ошибку платформы. Попробуйте обновиться до последнего релиза.

    • 1. вариант: Если у тебя используется какое-то ограничение по правам(пользователь с не полными правами)  В запросе попробуй использовать “Выбрать Разрешенные”
      2.вариант я обычно разбиваю пакетный запрос на несколько запросов и последовательно выполняю, и смотрю где именно (или на чём виснет)
      3. выношу иногда во внешнюю обработку выполнения запросов, бывают места куда дебаггером не достучатся и если консоль не помогает.
      Попробуй может что путное подойдёт. Если не запрос может тогда и СКД

  2. Большое спасибо, а я так и не победил это )))

  3. СКД хорошая штука. Я не знаю в эту ли тему, но вот возникла задача когда-то: в одном внешнем отчете есть несколько макетов (например у меня 4 там), а форма одна. Из этой одной формы выбираю какой отчет надо сформировать. Так вот остались вопросы открытыми, которые связаны с тем, как пользователи могут сохранять настройки каждого отчета. На форме кнопка выбора отчета делает такую штуку:
    Процедура ДействияФормыВыбратьОтчет(Кнопка)
     // Вставить содержимое обработчика.
     Список = Новый СписокЗначений;
     Список.Добавить(“ОсновнаяСхемаКомпоновкиДанныхПоКонтрагенту”, “01 По поставщикам (основной)”);
     Список.Добавить(“СхемаКомпоновкиДанныхПоНоменклатуре”, “02 По номенклатуре”);
     Список.Добавить(“СхемаКомпоновкиДанныхПоНоменклатуреПоГруппам”, “03 По группам номенклатуры”);
     ВыбЭлемент = Список.ВыбратьЭлемент();
     
     Если ВыбЭлемент <> Неопределено Тогда
      СхемаКомпоновкиДанных = ПолучитьМакет(ВыбЭлемент.Значение);
      КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
      КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
      Если ВыбЭлемент.Значение=”СхемаКомпоновкиДанныхПоНоменклатуре” Тогда
       ЭтотОбъект.ПолучитьФорму(“ФормаОтчета”).Заголовок = “Отчет департамента закупок по номенклатуре”;
       //СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет(“СхемаКомпоновкиДанныхПоНоменклатуре”);
      КонецЕсли; 
      Если ВыбЭлемент.Значение=”ОсновнаяСхемаКомпоновкиДанныхПоКонтрагенту” Тогда
       ЭтотОбъект.ПолучитьФорму(“ФормаОтчета”).Заголовок = “Отчет департамента закупок по поставщикам”;
      КонецЕсли; 
      Если ВыбЭлемент.Значение=”СхемаКомпоновкиДанныхПоНоменклатуреПоГруппам” Тогда
       ЭтотОбъект.ПолучитьФорму(“ФормаОтчета”).Заголовок = “Отчет департамента закупок по группам номенклатуры”;
      КонецЕсли; 
     КонецЕсли;
     
     //Из схемы возьмем настройки по умолчанию
     Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
     
     //Помещаем в переменную данные о расшифровке данных
     ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
     
     //Формируем макет, с помощью компоновщика макета
     КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
     
     //Передаем в макет компоновки схему, настройки и данные расшифровки
     МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
     Настройки, ДанныеРасшифровки);
     
     //Выполним компоновку с помощью процессора компоновки
     ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
     ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,
     ДанныеРасшифровки);
     
     //Очищаем поле табличного документа
     Результат = ЭлементыФормы.Результат;
     Результат.Очистить();
     
     //Выводим результат в табличный документ
     ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
     ПроцессорВывода.УстановитьДокумент(Результат);
     
     ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
     
    КонецПроцедуры
     

    • Видимо сохранять настройки только ручками, ведь по умолчанию они привязываются к форме.
      Но все же раз отчеты разные, почему бы не создать 4 формы?

      • Все отчеты по их смыслу из “одного” магазина
        Почему б их не держать в одной форме?
        В принципе все эти 4 отчета можно было б заменить одним, но мы порой вынуждены выполнять желание “заказчика” – вот я и вывел ему 4 отчета, хотя по смыслу как в юмореске… мы порой думаем что говорим об одном, а на самом деле об другом… или хотим о другом, а получается все об одном и том же

        • В таком случае с настройками придется работать программно.

        • Кстати, если источники данных одинаковы, то можно использовать несколько вариантов отчета в одной схеме компоновки данных.

  4. Информация актуальная, спасибо!

  5. Да, очень полезная информация (уже получал этот ответ, но ещё раз подтверждаю)!
    И, как я понимаю, в случае, когда нужны остатки на начало и конец периода, а обороты не требуются – применяем тот же подход.

  6. Илья Чернов 30.01.2011 в 19:58

    Очень познавательно