Имя: Пароль:
1C
 
Не работает отбор в СКД
0 ultrannge89
 
29.08.14
08:48
Почти типовой отчет скд.
На форме кнопка с процедурой формирования отчета.

        Параметры = "Srvr=""192.168.7.96"";Ref=""ut_anlk"";Usr=""ПриданниковаС"";";
    V82COMConnector= Новый COMОбъект("V82.COMConnector");
    //Попытка
        БазаИсточник = V82COMConnector.Connect(Параметры);
        Запрос = БазаИсточник.NewObject("Запрос");
        Запрос.Текст = "ВЫБРАТЬ
        |    ПлатежиПоДоговору.ДоговорКонтрагента.Номер КАК УтНомер,
        |    ВЫБОР
        |        КОГДА ПлатежиПоДоговору.ДоговорКонтрагента.СпособОплаты = ЗНАЧЕНИЕ(Перечисление.СпособыОплатыДоговоров.Оплата100)
        |            ТОГДА ""Оплата100""
        |        КОГДА ПлатежиПоДоговору.ДоговорКонтрагента.СпособОплаты = ЗНАЧЕНИЕ(Перечисление.СпособыОплатыДоговоров.Ипотека)
        |            ТОГДА ""Ипотека""
        |        КОГДА ПлатежиПоДоговору.ДоговорКонтрагента.СпособОплаты = ЗНАЧЕНИЕ(Перечисление.СпособыОплатыДоговоров.ИпотекаФОНД)
        |            ТОГДА ""ИпотекаФОНД""
        |        КОГДА ПлатежиПоДоговору.ДоговорКонтрагента.СпособОплаты = ЗНАЧЕНИЕ(Перечисление.СпособыОплатыДоговоров.Рассрочка)
        |            ТОГДА ""Рассрочка""
        |    ИНАЧЕ """"
        |    КОНЕЦ КАК УтСпособОплаты,
        |    ПлатежиПоДоговору.СуммаПлатежа КАК УтСуммаДок,
        |    ПлатежиПоДоговору.Период КАК УтПериод
        |ИЗ
        |    РегистрСведений.ПлатежиПоДоговору КАК ПлатежиПоДоговору
        |ГДЕ
        |    ПОДСТРОКА(ПлатежиПоДоговору.ДоговорКонтрагента.Номер, 1, 1) = ""А""
        |
        |УПОРЯДОЧИТЬ ПО
        |    ДоговорКонтрагента,
        |    Период";
        Результат = Запрос.Выполнить();
        Если Не Результат.Пустой() Тогда
            ТаблицаРезультат = Новый ТаблицаЗначений;
            ТаблицаРезультат.Колонки.Добавить("УтНомер", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100)));
            ТаблицаРезультат.Колонки.Добавить("УтСпособОплаты", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100)));
            ТаблицаРезультат.Колонки.Добавить("УтНомерСтроки", Новый ОписаниеТипов("Число",, Новый КвалификаторыЧисла(12)));
            ТаблицаРезультат.Колонки.Добавить("УтСуммаДок", Новый ОписаниеТипов("Число",, Новый КвалификаторыЧисла(12)));
            ТаблицаРезультат.Колонки.Добавить("УтПериод", Новый ОписаниеТипов("Дата",, Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя)));
            Выборка = Результат.Выбрать();
            ДокНомерПред = "";
            Пока Выборка.Следующий() Цикл
                НоваяСтрока = ТаблицаРезультат.Добавить();
                Если ДокНомерПред = "" ИЛИ ДокНомерПред <> Выборка.УтНомер Тогда
                    ДокНомерПред = Выборка.УтНомер;
                    НомерСтроки = 1;
                ИначеЕсли ДокНомерПред = Выборка.УтНомер Тогда
                    НомерСтроки = НомерСтроки + 1;
                КонецЕсли;
                НоваяСтрока.УтНомерСтроки = НомерСтроки;
                НоваяСтрока.УтНомер = Выборка.УтНомер;
                НоваяСтрока.УтСпособОплаты = Выборка.УтСпособОплаты;
                НоваяСтрока.УтСуммаДок = Выборка.УтСуммаДок;
                НоваяСтрока.УтПериод = Выборка.УтПериод;
            КонецЦикла;
        Иначе
            Сообщить("Пустой результат запроса");
        КонецЕсли;
        
        //сформируем структуру внешних данных
        ВнешниеНаборыДанных = Новый Структура;
        ВнешниеНаборыДанных.Вставить("Данные", ТаблицаРезультат);
        
        Настройки = КомпоновщикНастроек.Настройки;
        ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
        КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
        МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
        
        //инициализация процессора скд
        ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
        
        ТабличныйДокумент.Очистить();
        
        //инициализация процессора вывода
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент);
        ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);


В конструкторе имеются 2 набора данных, которые объединяю по номеру договора, отчет формируется, но если делаю отбор по любой колонке пишет: Ошибка исполнения отчета
по причине:
Ошибка инициализации
по причине:
Ошибка создания набора данных "ВнешнийИсточник"
по причине:
Не найден внешний набор данных "Данные"
1 ultrannge89
 
29.08.14
08:52
Признаюсь честно, это мой первый отчет с программным формированием... До этого были простенькие скд, если требовалось что-то сложней, делал стандартно в макете. Но времена меняются и надо учиться...
2 ultrannge89
 
29.08.14
09:04
Еще вопросик, как уже после формирования отчета добавить колонку булево и обработать по условию таблицу? Колонка нужна чтобы проще было сверять суммы в отчете...
3 ultrannge89
 
29.08.14
09:05
На выходных посмотрю курс по скд от Гилева, надеюсь часть моих вопросов он исключит.