Волшебная процедура для работы с СКД

Создает Компановщик настроек.
Заполняет его отборами на основании Построителя (он на форме)
Подсовывает этот Компановщик в СКД и выводит результат в Дерево значений

используется тут: http://infostart.ru/public/91297

Процедура ЗаполнитьТаблицуТоваров()

    ТабличноеПолеДокумент.Строки.Очистить();

    ГруппировкаПоНом = Неопределено;

    СписГруппировок = Новый СписокЗначений;
    СписГруппировок.Добавить("Номенклатура");
    СписГруппировок.Добавить("Размер");

    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
    Группировка = КомпоновщикНастроек.Настройки;
    Группировка.Структура.Очистить();

    Для i=1 По СписГруппировок.Количество() Цикл

        Значение = СписГруппировок.Получить(i-1).Значение;

        Группировка = Группировка.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
        Группировка.Имя = Значение;
        Группировка.Использование = Истина;
        Группировка.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));

        Поле = Группировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
        Поле.Поле = Новый ПолеКомпоновкиДанных(Значение);
        Поле.Использование = Истина;

        ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
        ВыбранноеПоле.Поле = Поле.Поле;
        ВыбранноеПоле.Использование = Истина;

        ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
        ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ОстатокСклад1");
        ВыбранноеПоле.Использование = Истина;

        ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
        ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ОстатокСклад2");
        ВыбранноеПоле.Использование = Истина;

        Если ГруппировкаПоНом = Неопределено Тогда
            ГруппировкаПоНом = Группировка;
        КонецЕсли;

    КонецЦикла;

    Для Каждого ЭлементОтбора Из ПостроительОтчета.Отбор Цикл

        Если Не ЭлементОтбора.Использование Тогда
            Продолжить;
        КонецЕсли;

        ВидСравненияВОтборе = мСоответствиеВидовСравнения.Получить(ЭлементОтбора.ВидСравнения);
        Если ВидСравненияВОтборе = Неопределено Тогда
            Продолжить;
        КонецЕсли;

        Если Лев(ЭлементОтбора.ПутьКДанным, 8) = "Свойство" Тогда
            ИмяПоля = "Номенклатура.["+СоответствиеНазначений[ЭлементОтбора.Представление]+" (свойство)]";
        Иначе
            ИмяПоля = ЭлементОтбора.ПутьКДанным;
        КонецЕсли;

        ПолеОтбора = Новый ПолеКомпоновкиДанных(ИмяПоля);

        Отбор = ГруппировкаПоНом.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        Отбор.ЛевоеЗначение  = ПолеОтбора;
        Отбор.Использование  = Истина;
        Отбор.ВидСравнения   = ВидСравненияВОтборе;
        Отбор.ПравоеЗначение = ЭлементОтбора.Значение;

    КонецЦикла;

    СхемаКомпоновкиДанных = ПолучитьМакет("Схема");
    СхемаКомпоновкиДанных.Параметры.Период.Значение = ДокументСсылка.Дата;
    СхемаКомпоновкиДанных.Параметры.Склад1.Значение = СкладОтправитель;
    СхемаКомпоновкиДанных.Параметры.Склад2.Значение = СкладПолучатель;

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,, Истина);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ПроцессорВывода.УстановитьОбъект(ТабличноеПолеДокумент);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

    Для Каждого Стр Из ТабличноеПолеДокумент.Строки Цикл
        Стр.Колонка2 = Стр.Колонка1;
    КонецЦикла;

    ЛишняяСтрока = ТабличноеПолеДокумент.Строки[ТабличноеПолеДокумент.Строки.Количество()-1];
    ТабличноеПолеДокумент.Строки.Удалить(ЛишняяСтрока);

КонецПроцедуры

Добавить комментарий