Изначально с управляемыми формами я не работал.
Только недавно перешел на уф. И понимаю, что любой шаг делается с таким трудом. Пока не изучишь механизмы работы СКД, форм, самих отчетов, за пару минут ничего не заработает.
Также требуется немного знать БСП. Понимать, что многое скорее всего работает уже из коробки. Просто надо понимать, что, где и как вызывать.
Поэтому решил написать небольшую шпаргалку для себя и, возможно, кому-то еще пригодится.
1. Открытие формы отчета.
УсловияОтбора = Новый Структура();
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("Отбор", УсловияОтбора);
ПараметрыФормы.Вставить("СформироватьПриОткрытии", ложь);
ПараметрыФормы.Вставить("КлючВарианта", ИмяВариантаОтчета);
ОткрытьФорму("Отчет."+ИмяВстроенногоОтчета+".Форма", ПараметрыФормы);
Для внешнего поменяется 1 строчка:
ОткрытьФорму("ВнешнийОтчет."+ИмяВнешнегоОтчета+".Форма", ПараметрыФормы);
Открыть по пути:
КомандаОткрытьВнешнийОтчет("\\192.168.0.1\обмен\отчет.erf");
&НаКлиенте
Процедура КомандаОткрытьВнешнийОтчет(Путь)
ОписаниеОповещения = Новый ОписаниеОповещения("ПоместитьФайлВХранилищеЗавершениеОтчет", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения, , Путь, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ПоместитьФайлВХранилищеЗавершениеОтчет(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
РезЗапроса = ПодключитьВнешнийОтчетНаСервереОтчет(Адрес);
ИмяОтчета = РезЗапроса.ИмяОтчета;
КлючВарианта = РезЗапроса.ВариантОтчета;
ПараметрыОткрытия = Новый Структура("КлючВарианта", КлючВарианта);
Уникальность ="ВнешнийОтчет." + ИмяОтчета;
ОткрытьФорму("ВнешнийОтчет." + ИмяОтчета + ".Форма", ПараметрыОткрытия, Неопределено, Уникальность)
КонецПроцедуры
Диагностика настроек отчета СКД
//Отладка по отчету
&НаСервере
Процедура ДиагностикаНастроекОтчетаСервер(ИмяОтчета)
ОтчетОбъект = Отчеты[ИмяОтчета].Создать();
// Проверяем доступные поля отбора
Для Каждого ПолеОтбора Из ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор.ДоступныеПоляОтбора.Элементы Цикл
Сообщить("Доступное поле отбора: " + Строка(ПолеОтбора.Поле));
КонецЦикла;
// Проверяем параметры
Для Каждого Параметр Из ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл
Сообщить("Параметр: " + Строка(Параметр.Параметр) + ", Значение: " + Строка(Параметр.Значение));
КонецЦикла;
// Проверяем существующие отборы
Для Каждого Отбор Из ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
Сообщить("Отбор: " + Строка(Отбор.ЛевоеЗначение) + " " +
Строка(Отбор.ВидСравнения) + " " + Строка(Отбор.ПравоеЗначение));
КонецЦикла;
КонецПроцедуры
Перебор вариантов отчета:
&Насервере коротко:
Для каждого Настройка Из СоздОтчет.СхемаКомпоновкиДанных.ВариантыНастроек Цикл
Сообщить("отчет "+Имяотчета+" вариант:"+Настройка.Имя+", Представление:"+Настройка.Представление );
КонецЦикла; //Пример
Открытие по скопированной ссылке 1С:
СсылкаВ1С = "e1cib/data/Справочник.ВариантыОтчетов?ref=aaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
ПерейтиПоНавигационнойСсылке(СсылкаВ1С);
Получить Отчет для отработки своих вариантов.
Если Внешний Тогда
//СоздОтчетСсылка = ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере (Имяотчета);
СоздОтчет = ПолучитьВнешнийОтчетСервер(Имяотчета,Внешний);
Иначе
СоздОтчет = Отчеты[Имяотчета].Создать();
КонецЕсли;
Получение пользовательских настроек:
&НаСервереБезКонтекста
Процедура ПолучитьотчетСнастройками(Имяотчета)
СоздОтчет = Отчеты[Имяотчета].Создать();
Настройки =ПолучитьПользовательскиеНастройкиСервер(СоздОтчет );
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьПользовательскиеНастройкиСервер(отчет)
КомпоновщикНастроек=отчет.КомпоновщикНастроек;
Настройки=КомпоновщикНастроек.ПолучитьНастройки();
//Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачПериода",НачалоДня(ТекущаяДата()));
//Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонПериода",КонецДня(ТекущаяДата()));
//КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
Возврат КомпоновщикНастроек.ПользовательскиеНастройки;
КонецФункции
Открытие формы отчета с исправленными настройками.
Отличие от обычного открытия формы только здесь:
Форма=ПолучитьФорму("ВнешнийОтчет." + ИмяВнешнегоОтчета + ".Форма");
ПользовательскиеНастройки=ПолучитьИсправитьПользовательскиеНастройки(Форма.Отчет.КомпоновщикНастроек);
ПараметрыФормы.Вставить("ПользовательскиеНастройки",ПользовательскиеНастройки);
&НаСервереБезКонтекста
Функция ПолучитьИсправитьПользовательскиеНастройки(КомпоновщикНастроек);
Настройки=КомпоновщикНастроек.ПолучитьНастройки();
//Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачПериода",НачалоДня(ТекущаяДата()));
//Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонПериода",КонецДня(ТекущаяДата()));
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Период",Новый СтандартныйПериод(ТекущаяДата(),ТекущаяДата()) );
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
Возврат КомпоновщикНастроек.ПользовательскиеНастройки;
КонецФункции
И самое последнее программное формирование СКД.
С выбором варианта отчета.
Пришлось лезть в БСП, смотреть, как делается рассылка. И здесь не добавлены изменяемые отборы параметры. Потому что обычно они берутся из варианта. Но если формировать из 1 отчета другой на СКД, то скорее всего потребуется немного доработать. Функция будет в приложенной обработке.
Табдок = ПрограммноСформироватьОтчетИпоказатьТабДокСервер(ИмяВстроенногоОтчета,Ложь);
Табдок.Показать();
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.25.112
Вступайте в нашу телеграмм-группу Инфостарт