Таблица не найдена 1с скд

Обновлено: 07.07.2024

Для использования в отчёте на СКД произвольной таблицы значений необходимо настроить соответствующим образом схему компоновки данных и прописать программный вывод отчёта.

1. Настройка схемы компоновки данных.

1.1. Создаём основную схему компоновки данных.

Добавление набора данных - запрос

Создание запроса

1.2. На закладке "Наборы данных" добавляем набор данных - объект.

Добавление набора данных - объект

1.3. Добавляем необходимые поля набора данных (достаточно указать Поле) и указываем Имя объекта, содержащего данные.

Заполнение реквизитов набора данных - объект

1.4. Если в СКД есть другие наборы данных (например, Запрос), то создаём связи наборов данных на закладке "Связи наборов данных".

Создание связи наборов данных

1.5. Настраиваем вывод отчёта нужным образом.

Настройки СКД

2. Программный вывод отчёта.

2.1. В модуле объекта отчёта создаём процедуру-обработчик ПриКомпоновкеРезультата.

Создание процедуры ПриКомпоновкеРезультата

2.2. В процедуре ПриКомпоновкеРезультата отключаем стандартную обработку.

2.3. Формируем таблицу значений произвольным образом. Имена колонок таблицы значений должны совпадать с полями набора данных в СКД (п.1.3).

2.4. Получаем схему компоновки данных из макета.

2.5. Из схемы получаем настройки по умолчанию.

2.6. Помещаем данные о расшифровке в соответствующую переменную.

2.7. Формируем макет с помощью компоновщика макета.

2.8. Передаём в макет компоновки схему, настройки и данные расшифровки.

2.9. Выполняем компоновку с помощью процессора компоновки. Для этого выполняем метод процессора компоновки данных Инициализировать(). В качестве параметров передаём макет компоновки данных, внешние наборы данных (тип: Структура, ключ структуры должен совпадать с именем объекта в схеме компоновки данных (п.1.3), значение - сформированная таблица значений), данные расшифровки.

2.10. Очищаем поле табличного документа.

2.11. Выводим результат в табличный документ.

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

Пример сформированного отчёта:

Отчёт на СКД с использованием внешнего набора данных

Справочная информация из синтакс-помощника:

ПроцессорКомпоновкиДанных (DataCompositionProcessor) Инициализировать(<Макет>, <ВнешниеНаборыДанных>, <ДанныеРасшифровки>, <ВозможностьИспользованияВнешнихФункций>) Тип: МакетКомпоновкиДанных.
Макет, для которого будет выполняться компоновка. Тип: Структура.
Ключ структуры соответствует имени внешнего набора данных. Значение структуры - внешнему набору данных. Тип: ДанныеРасшифровкиКомпоновкиДанных.
Объект, в котором нужно заполнить данные расшифровки. Если не указан, то расшифровка заполняться не будет. <ВозможностьИспользованияВнешнихФункций> (необязательный) Тип: Булево.
Указывает возможность использования функции общих модулей конфигурации в выражениях компоновки данных.
Значение по умолчанию: Ложь. Пример использования внешних наборов данных в СКД (для УТ 10.3)

Комментарии

Обычный Александр (не проверено)

вт, 13/09/2016 - 10:25

Спасибо огромное за статью и прикреплённый пример. Очень помогло в работе.

Щукина Татьяна (не проверено)

пт, 16/12/2016 - 15:28

Спасибо - просто спасли. Только у меня Период не видит в модуле

пт, 16/12/2016 - 16:03

Можете файл отчёта выложить?

Щукина Татьяна (не проверено)

пт, 16/12/2016 - 17:14

положила все в модуль Объекта(база ЗиК 3), в СКД в Параметры добавила "Период" =стандартный период,НачалоПериода=&Период.ДатаНачала ; КонецПериода.. Не видит здесь Период и все..

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) экспорт

СтандартнаяОбработка = Ложь;
//ДанныеПечати = ПолучитьИзВременногоХранилища(Адр);
Запрос = Новый Запрос;
Запрос.Текст ;

//Запрос.УстановитьПараметр("НачалоПериода", Период.ДатаНачала);
//Запрос.УстановитьПараметр("КонецПериода", Период.ДатаОкончания);
НачалоПериода=Дата("01.11.2016 00:00:00"); ;

Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
Запрос.УстановитьПараметр("СовмПроф", "Доплата за совм. проф. (4)");

//Если СовмещСотрудник.Пустой() тогда
// //Сообщить("В ЭТОЙ ГРУППЕ НЕТ КОНТРАГЕНТОВ " );
//конецесли;

Запрос = Новый Запрос;
Запрос.Текст ;
ффф= Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено ;
//Запрос.УстановитьПараметр("НачалоПериода", Период.ДатаНачала);
//Запрос.УстановитьПараметр("КонецПериода", Период.ДатаОкончания);
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода",КонецПериода);

Запрос.УстановитьПараметр("ВидДеят", "Вид деятельности (Сотрудники)");
Запрос.УстановитьПараметр("ВидКат", "Категория (Сотрудники)");
Запрос.УстановитьПараметр("ДОП_1", "Вид з/п (Начисления)");
Запрос.УстановитьПараметр("ДОП_2", "Призн.н/о прибыли (Начисления))");
Запрос.УстановитьПараметр("ДОП_3", "Резерв отпусков (участие) (Начисления)");
Запрос.УстановитьПараметр("ДОП_4", "Код н/у (Начисления)");
Запрос.УстановитьПараметр("ДОП_5", "Фонд з/п (Начисления)");
Запрос.УстановитьПараметр("начисл",ффф);

ПланВидовРЕЗ= РезультатПакета[6].Выгрузить();
ПланВидовРЕЗ.сортировать("ПланВидовРасчетаНаименование");

СотрРез = РезультатПакета[9].Выгрузить();
ДанныеПечати = РезультатПакета[10].Выгрузить(); //окончательный итог Сотрудник

//начисл_Сотр_подр = РезультатПакета[9].Выгрузить();
//начисл_Сотр_подр.сортировать("Группа");
//РезультатЗапроса.сортировать("Группа,СпрОтрВБух_ВидДеятельности,ВидДеятельностиНАШ");
ДанныеПечати.сортировать("Сотрудник");
ДанныеПечати.Колонки.Добавить("ПодразделенияРодитель", Новый ОписаниеТипов("строка"));
ДанныеПечати.Колонки.Добавить("ВидДеятельностиНаш", Новый ОписаниеТипов("строка"));

Если ДанныеПечати.Количество()=0 тогда
Сообщить("Запрос Пустой " );
иначе
Для каждого Стр ИЗ ДанныеПечати Цикл //КОНТРАГЕНТ
если сокрЛП(Стр.НаименованиеНачисления) = "Доплата за совм. проф. (4)" тогда
СтруктураОтбор = Новый Структура();
СтруктураОтбор.Вставить("СовмещСотрудник", Стр.Сотрудник);
СтруктураОтбор.Вставить("СовмещСумма", Стр.Сумма);
СтруктураОтбор.Вставить("СовмещПодразделениеОТКуда_отдел", Стр.Подразделение);

Если МассивНайденныеСтроки.Количество() > 0 Тогда
Для Каждого Ст Из МассивНайденныеСтроки Цикл
Стр.ВидДеятельностиНаш = Ст.СовмещСпособОтражения;
Если Ст.СовмещПодразделениеКуда = NULL Тогда
Счет ="";
СубСчет ="";
ПодразделениеСпрОтр ="";
ВидДеятельностиСпрОтр ="";
резЗапр = 0;

если резЗапр = 0 Тогда
ааа = "ОШИБКА нет в спр.СовмещСпособОтраженияСсылка записи = "+Ст.СовмещСпособОтраженияСсылка+" по "+Стр.Сотрудник +" cумма = "+ Стр.Сумма+" => ПодразделенияРодитель И ВидДеятельностиНаш берем из спр.Сотрудники" ;
Стр.ПодразделенияРодитель = Стр.ПодразделениеРод;
Стр.ВидДеятельностиНаш = Стр.ВидДеятельностиСотр;
иначе
Стр.ПодразделенияРодитель = ПодразделениеСпрОтр ;
Стр.ВидДеятельностиНаш = ВидДеятельностиСпрОтр;
конецесли;
иначе
Стр.ПодразделенияРодитель = Ст.СовмещПодразделениеКуда ; //это должен быть родитель подразделения
Стр.ВидДеятельностиНаш = Ст.СовмещСпособОтражения;
конецесли;
конецЦикла;
ИНАЧЕ
ааа = "ОШИБКА нет в табл.СовмещСотрРЕЗУЛЬТАТ "+Стр.Сотрудник +" cумма = "+ Стр.Сумма+" => ПодразделенияРодитель И ВидДеятельностиНаш берем из спр.Сотрудники" ;
Стр.ПодразделенияРодитель = Стр.ПодразделениеРод;
Стр.ВидДеятельностиНаш = Стр.ВидДеятельностиСотр;
конецЕсли ;
ИНАЧЕ
Стр.ПодразделенияРодитель = Стр.ПодразделениеРод;
Стр.ВидДеятельностиНаш = Стр.ВидДеятельностиСотр;
конецЕсли ;
КонецЦикла;
КонецЕсли;
ДанныеПечати.сортировать("Сотрудник");
//***************************************************************
//Получаем схему из макета
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

//Из схемы возьмем настройки по умолчанию
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);

//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, Новый Структура("ДанныеПечати", ДанныеПечати), ДанныеРасшифровки);

//Очищаем поле табличного документа
ДокументРезультат.Очистить();

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

Читайте также: