Расшифровка отчета СКД формируется только 1 раз

1. user1559729 07.11.23 18:55 Сейчас в теме
Сделал отчет на основе общей формы ФормаОтчета. Всё прекрасно работало. В новом релизе Бух 3.0 эта форма была доработана. Дообновил форму из общей формы. Теперь если работаю с отчетом через Файл - Открыть, то расшифровка прекрасно работает. Если же встраиваю во внешние отчеты и обработки, то расшифровка работает только 1 раз. Со второго раза валится в ошибку вида:

"Ошибка создания источника доступных настроек компоновки данных
e1cib/tempstorage/971c81cc-ac81-....
Undefined"

Может кто подскажет, куда смотреть и что чинить?
По теме из базы знаний
Найденные решения
3. user1559729 08.11.23 23:05 Сейчас в теме
Кажется, разобрался. Слава Богу!
Проблема была в том, что использовал какой-то старый вариант функции СведенияОВнешнейОбработке().
После того, как заменил на новую - всё заработало.
Предполагаю, что помогло использование "ДополнительныеОтчетыИОбработкиКлиентСервер." - возможно, на каком-то этапе происходит инициализация. Комментарии приветствуются.

Было:
Функция СведенияОВнешнейОбработке() Экспорт
	
	СтруктураСведений = Новый Структура;
	СтруктураСведений.Вставить("Наименование", "Мой новый отчет");
	СтруктураСведений.Вставить("Информация", "Мой новый отчет");
	СтруктураСведений.Вставить("Версия", "0.1");
	СтруктураСведений.Вставить("Вид", "ДополнительныйОтчет");
	СтруктураСведений.Вставить("БезопасныйРежим", Истина);
	ТаблицаКоманд = Новый ТаблицаЗначений;
	ТаблицаКоманд.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
	ТаблицаКоманд.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
	ТаблицаКоманд.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
	ТаблицаКоманд.Колонки.Добавить("Обработчик", Новый ОписаниеТипов("Строка"));
	СтрокаТаблицы = ТаблицаКоманд.Добавить();
	СтрокаТаблицы.Использование = "ОткрытиеФормы";
	СтрокаТаблицы.Представление = "Мой новый отчет";
	СтрокаТаблицы.Идентификатор = "мойНовыйОтчет";
	СтруктураСведений.Вставить("Команды", ТаблицаКоманд);
	
	Возврат СтруктураСведений;
	
КонецФункции

Показать


Стало:
/////////////////////////////////////////////////////////////////////////////
// ОПИСАНИЕ ИНТЕРФЕЙСОВ

// Интерфейс для регистрации обработки.
// Вызывается при добавлении обработки в справочник "ВнешниеОбработки"
//
// Возвращаемое значение:
// Структура:
// Вид - строка - возможные значения:	"ДополнительнаяОбработка"
//										"ДополнительныйОтчет"
//										"ЗаполнениеОбъекта"
//										"Отчет"
//										"ПечатнаяФорма"
//										"СозданиеСвязанныхОбъектов"
//
// Назначение - массив строк имен объектов метаданных в формате:
//			<ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>]
//			Например, "Документ.СчетЗаказ" или "Справочник.*"
//			Прим. параметр имеет смысл только для назначаемых обработок
//
// Наименование - строка - наименование обработки, которым будет заполнено
//						наименование справочника по умолчанию - краткая строка для
//						идентификации обработки администратором
//
// Версия - строка - версия обработки в формате <старший номер>.<младший номер>
//					используется при загрузке обработок в информационную базу
// БезопасныйРежим – Булево – Если истина, обработка будет запущена в безопасном режиме.
//							Более подбробная информация в справке.
//
// Информация - Строка- краткая информация по обработке, описание обработки
//
// Команды - ТаблицаЗначений - команды, поставляемые обработкой, одная строка таблицы соотвествует
//							одной команде
//				колонки: 
//				 - Представление - строка - представление команды конечному пользователю
//				 - Идентификатор - строка - идентефикатор команды. В случае печатных форм
//											перечисление через запятую списка макетов
//				 - Использование - строка - варианты запуска обработки:
//						"ОткрытиеФормы" - открыть форму обработки
//						"ВызовКлиентскогоМетода" - вызов клиентского экспортного метода из формы обработки
//						"ВызовСерверногоМетода" - вызов серверного экспортного метода из модуля объекта обработки
//				 - ПоказыватьОповещение – Булево – если Истина, требуется оказывать оповещение при начале
//								и при окончании запуска обработки. Прим. Имеет смысл только
//								при запуске обработки без открытия формы.
//				 - Модификатор – строка - для печатных форм MXL, которые требуется
//										отображать в форме ПечатьДокументов подсистемы Печать
//										требуется установить как "ПечатьMXL"
//
Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = Новый Структура;
	
	ПараметрыРегистрации.Вставить("Вид", ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет());
	ПараметрыРегистрации.Вставить("Назначение", Новый Массив);
	ПараметрыРегистрации.Вставить("Наименование", НСтр("ru = 'Мой новый отчет'"));
	ПараметрыРегистрации.Вставить("Версия", "0.1");
	ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
	ПараметрыРегистрации.Вставить("Информация", НСтр("ru = 'Мой новый отчет'"));
	
	ТаблицаКоманд = ПолучитьТаблицуКоманд();
	
	ДобавитьКоманду(ТаблицаКоманд,
					НСтр("ru = 'Мой новый отчет'"),
					"мойНовыйОтчет",
					ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы());
	
	ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
	
	Возврат ПараметрыРегистрации;
	
КонецФункции

////////////////////////////////////////////////////////////­/////////////////
// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

Функция ПолучитьТаблицуКоманд()
	
	Команды = Новый ТаблицаЗначений;
	Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
	Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
	Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
	Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
	Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
	
	Возврат Команды;
	
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL")
	
	НоваяКоманда = ТаблицаКоманд.Добавить();
	НоваяКоманда.Представление = Представление;
	НоваяКоманда.Идентификатор = Идентификатор;
	НоваяКоманда.Использование = Использование;
	НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
	НоваяКоманда.Модификатор = Модификатор;
	
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1559729 08.11.23 10:31 Сейчас в теме
Хелп. Как отладиться тоже непонятно...
3. user1559729 08.11.23 23:05 Сейчас в теме
Кажется, разобрался. Слава Богу!
Проблема была в том, что использовал какой-то старый вариант функции СведенияОВнешнейОбработке().
После того, как заменил на новую - всё заработало.
Предполагаю, что помогло использование "ДополнительныеОтчетыИОбработкиКлиентСервер." - возможно, на каком-то этапе происходит инициализация. Комментарии приветствуются.

Было:
Функция СведенияОВнешнейОбработке() Экспорт
	
	СтруктураСведений = Новый Структура;
	СтруктураСведений.Вставить("Наименование", "Мой новый отчет");
	СтруктураСведений.Вставить("Информация", "Мой новый отчет");
	СтруктураСведений.Вставить("Версия", "0.1");
	СтруктураСведений.Вставить("Вид", "ДополнительныйОтчет");
	СтруктураСведений.Вставить("БезопасныйРежим", Истина);
	ТаблицаКоманд = Новый ТаблицаЗначений;
	ТаблицаКоманд.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
	ТаблицаКоманд.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
	ТаблицаКоманд.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
	ТаблицаКоманд.Колонки.Добавить("Обработчик", Новый ОписаниеТипов("Строка"));
	СтрокаТаблицы = ТаблицаКоманд.Добавить();
	СтрокаТаблицы.Использование = "ОткрытиеФормы";
	СтрокаТаблицы.Представление = "Мой новый отчет";
	СтрокаТаблицы.Идентификатор = "мойНовыйОтчет";
	СтруктураСведений.Вставить("Команды", ТаблицаКоманд);
	
	Возврат СтруктураСведений;
	
КонецФункции

Показать


Стало:
/////////////////////////////////////////////////////////////////////////////
// ОПИСАНИЕ ИНТЕРФЕЙСОВ

// Интерфейс для регистрации обработки.
// Вызывается при добавлении обработки в справочник "ВнешниеОбработки"
//
// Возвращаемое значение:
// Структура:
// Вид - строка - возможные значения:	"ДополнительнаяОбработка"
//										"ДополнительныйОтчет"
//										"ЗаполнениеОбъекта"
//										"Отчет"
//										"ПечатнаяФорма"
//										"СозданиеСвязанныхОбъектов"
//
// Назначение - массив строк имен объектов метаданных в формате:
//			<ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>]
//			Например, "Документ.СчетЗаказ" или "Справочник.*"
//			Прим. параметр имеет смысл только для назначаемых обработок
//
// Наименование - строка - наименование обработки, которым будет заполнено
//						наименование справочника по умолчанию - краткая строка для
//						идентификации обработки администратором
//
// Версия - строка - версия обработки в формате <старший номер>.<младший номер>
//					используется при загрузке обработок в информационную базу
// БезопасныйРежим – Булево – Если истина, обработка будет запущена в безопасном режиме.
//							Более подбробная информация в справке.
//
// Информация - Строка- краткая информация по обработке, описание обработки
//
// Команды - ТаблицаЗначений - команды, поставляемые обработкой, одная строка таблицы соотвествует
//							одной команде
//				колонки: 
//				 - Представление - строка - представление команды конечному пользователю
//				 - Идентификатор - строка - идентефикатор команды. В случае печатных форм
//											перечисление через запятую списка макетов
//				 - Использование - строка - варианты запуска обработки:
//						"ОткрытиеФормы" - открыть форму обработки
//						"ВызовКлиентскогоМетода" - вызов клиентского экспортного метода из формы обработки
//						"ВызовСерверногоМетода" - вызов серверного экспортного метода из модуля объекта обработки
//				 - ПоказыватьОповещение – Булево – если Истина, требуется оказывать оповещение при начале
//								и при окончании запуска обработки. Прим. Имеет смысл только
//								при запуске обработки без открытия формы.
//				 - Модификатор – строка - для печатных форм MXL, которые требуется
//										отображать в форме ПечатьДокументов подсистемы Печать
//										требуется установить как "ПечатьMXL"
//
Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = Новый Структура;
	
	ПараметрыРегистрации.Вставить("Вид", ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет());
	ПараметрыРегистрации.Вставить("Назначение", Новый Массив);
	ПараметрыРегистрации.Вставить("Наименование", НСтр("ru = 'Мой новый отчет'"));
	ПараметрыРегистрации.Вставить("Версия", "0.1");
	ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
	ПараметрыРегистрации.Вставить("Информация", НСтр("ru = 'Мой новый отчет'"));
	
	ТаблицаКоманд = ПолучитьТаблицуКоманд();
	
	ДобавитьКоманду(ТаблицаКоманд,
					НСтр("ru = 'Мой новый отчет'"),
					"мойНовыйОтчет",
					ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы());
	
	ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
	
	Возврат ПараметрыРегистрации;
	
КонецФункции

////////////////////////////////////////////////////////////­/////////////////
// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

Функция ПолучитьТаблицуКоманд()
	
	Команды = Новый ТаблицаЗначений;
	Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
	Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
	Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
	Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
	Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
	
	Возврат Команды;
	
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL")
	
	НоваяКоманда = ТаблицаКоманд.Добавить();
	НоваяКоманда.Представление = Представление;
	НоваяКоманда.Идентификатор = Идентификатор;
	НоваяКоманда.Использование = Использование;
	НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
	НоваяКоманда.Модификатор = Модификатор;
	
КонецПроцедуры
Показать
4. romankoav 4 12.12.23 10:52 Сейчас в теме
(3)
Используйте
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(СтандартныеПодсистемыСервер.ВерсияБиблиотеки())

и не придется использовать ПолучитьТаблицуКоманд()
user1559729; +1 Ответить
5. user1559729 12.12.23 10:58 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот