8.х Как в СКД сформировать таблицу значений и передать параметром

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем TerANik, 2 июл 2015.

  1. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Ребята задача следующая. Перед формированием СКД нужно создать таблицу значений и передать её в СКД как временную таблицу. Подскажите как?
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    всмылсе как Временнную?
  3. Sert
    Offline

    Sert Опытный в 1С

    Регистрация:
    4 фев 2011
    Сообщения:
    365
    Симпатии:
    12
    Баллы:
    29
    Полагаю к которой запрос потом и делать (в СКД).
  4. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Ну может в формулировки ошибся, чтобы потом запрос который будет в СКД мог делять связь с этой таблицей.
  5. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну смотри какой варинт, принципе ничего обычного.
    Как ты ТЗ в запрос передаешь.
    У тебя есть запрос типа

    Выбрать*
    Поместить В ВТТЗ
    Из
    &Табл КАК ТЗ

    Как то так

    Ну вот у тебя это запрос и должен быть в СКД

    &Табл как раз перед компановкой результата определишь и передашь в СКД.
    На вкладке параметры &Табл ограничешь доступ и видимость
  6. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Так по порядку пишу. Когда нажимают кнопку сформировать, мне надо выполнить отчет. Но у запроса который строится должна быть временная таблица.. которую я хочу передать параметром. Как в СКД это сделать?
    1) Где сформировать процедуру которая у меня сформирует Таблицу значений
    2) Как ТЗ передать в СКД?
  7. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Использовать внешний источник ?
  8. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Да хоть внутренний скажите куда курить? Вот сейчас доперло что надо использовать набор данный и в него передавать ТЗ. Я прав?
  9. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Ну да, правы. Только нужно будет заполнять эту ТЗ, я уже 10000 лет не пользовался такими методами:(
  10. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Код:
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    //Связь между таблицей значений и именами в СКД ВнешниеНаборыДанных = Новый Структура;
    ВнешниеНаборыДанных.Вставить(“ТаблицаНабораДанных”, ТаблицаНабораДанных);
    //Макет компоновки КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
    //Компоновка данных ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
    //Вывод результата ДокументРезультат.Очистить();
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    КонецПроцедуры
    Думаю как то так. Ссылку на источник информации надо вставлять?

    А использовать сейчас попробую.
  11. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну то что я писал - более у ниверсально. Просто через набор - ты получишь набор данных в СКД наборы либо можно объеденить либо только левое соединение
  12. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Соглашусь, как ТЗ передать в виде параметра? Я так понимаю мне надо будет программно это делать.

    Нашел. мож пригодится кому.. да буду так пробовать

    Код:
    Параметр = ЭтаФорма.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период"));
        Параметр.Значение = ТекущаяДата();
  13. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Может массив ?
  14. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Да. Ну набереи ни раз тут обсуждалось или в инете -"Программно установить параметр СКД"
  15. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Так как я написал - не получается.
    СКД вот этого не понимает
    Выбрать*
    Поместить В ВТТЗ
    Из
    &Табл КАК ТЗ
    --- Объединение сообщений, 2 июл 2015 ---
    Тогда либо через набор отдельный.
    Либо тупо можно сразу в коде этот запрос и запрос который в СКД объеденить выполнить, выгрузить в набор и его уже на вывод передать СКД
  16. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Нельзя в СКД параметры в виде ТЗ передавать, если не ошибаюсь.
    Сформируй финальную ТЗ и ее запихни в СКД в виде источника данных.
  17. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54

    Переписка с женой до твоего поста

  18. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    да не проблема типизировать колонки, ТЗ в виде параметра ваще не запихивается, вроде бы....хотя, не уверен :)
  19. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Да не в типах проблемы вот что пишет то
    Ошибка в схеме компоновки данных
    по причине:
    Ошибка получения информации набора данных
    по причине:
    Ошибка в запросе набора данных
    по причине:
    {(5, 2)}: Неверные параметры "Табл"
    <<?>>&Табл КАК Валюты
    --- Объединение сообщений, 2 июл 2015 ---
    А так все красиво выглядело
  20. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Вот так работает
    Код:
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
        // Вставить содержимое обработчика.
        СтандартнаяОбработка = Ложь;
        ТаблицаНабораДанных = Новый ТаблицаЗначений;
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    ДопустимыеСрокиПриемкиСрезПоследних.ГруппаНоменклатуры,
                       |    ДопустимыеСрокиПриемкиСрезПоследних.ДопустимыйСрок
                       |ИЗ
                       |    РегистрСведений.ДопустимыеСрокиПриемки.СрезПоследних КАК ДопустимыеСрокиПриемкиСрезПоследних";
        ТаблицаНабораДанных = Запрос.Выполнить().Выгрузить();              
    //Связь между таблицей значений и именами в СКД
        ВнешниеНаборыДанных = Новый Структура;
        ВнешниеНаборыДанных.Вставить("ТаблицаНабораДанных", ТаблицаНабораДанных);
        КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
        МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
        ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
    //Вывод результата ДокументРезультат.Очистить();
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
        ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    КонецПроцедуры
    ТаблицаНабораДанных это НаборДанных в СКД с такими же полями как в запросе.

Поделиться этой страницей