(ЗУП 3.1.18) Поле объекта не обнаружено ДоступенВыводНаДругихЯзыках в печатке

1. vechiy 35 07.10.21 16:30 Сейчас в теме
что нужно добавить во внешнюю печатную форму, чтобы избежать ошибки? На 3.1.14 работало
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1278383 4 07.10.21 16:40 Сейчас в теме
Скорее всего "КоллекцияПечатныхФорм" заполняется не методом БСП, а вручную
3. user1079872 07.10.21 16:42 Сейчас в теме
реквизит называется ДоступенВыводНаДругихЯзыках. Применяется при выводе печатных форм на других языках.
4. dka80 20 07.10.21 17:23 Сейчас в теме
УправлениеПечатьюКлиентСервер.ИменаПолейКоллекцииПечатныхФорм()
5. Innuil 18.10.21 11:21 Сейчас в теме
У меня такая же ошибка во внешнем отчёте. Нашёл в коде формирование коллекции печатных форм и добавил это свойство:

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


Правда, вылезла другая ошибка, но это другая история.
6. Innuil 18.10.21 13:47 Сейчас в теме
(5) Хотя нет, это та же история. Вынес в расширение такой костыль:
&Вместо("ЯзыкиМакета")
Функция Расширение_ЗУП_ЯзыкиМакета(ПутьКМакету)

	ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
	НСтр("ru = 'Макет ""%1"" не существует. Операция прервана.'"), ПутьКМакету);
	ЧастиПути = СтрРазделить(ПутьКМакету, ".", Истина);
	Если ЧастиПути.Количество() <> 2 И ЧастиПути.Количество() <> 3 Тогда
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;

	ИмяМакета = ЧастиПути[ЧастиПути.ВГраница()];
	ЧастиПути.Удалить(ЧастиПути.ВГраница());
	ИмяОбъекта = СтрСоединить(ЧастиПути, ".");

	ЯзыкиПечатныхФорм = ДоступныеЯзыки();
	Для Каждого КодЯзыка Из ЯзыкиПечатныхФорм Цикл
		Если СтрЗаканчиваетсяНа(ИмяМакета, "_" + КодЯзыка) Тогда
			ИмяМакета = Лев(ИмяМакета, СтрДлина(ИмяМакета) - СтрДлина(КодЯзыка) - 1);
			Прервать;
		КонецЕсли;
	КонецЦикла;

	ТекстЗапроса = 
	"ВЫБРАТЬ
	|	ПользовательскиеМакетыПечати.ИмяМакета КАК ИмяМакета
	|ИЗ
	|	РегистрСведений.ПользовательскиеМакетыПечати КАК ПользовательскиеМакетыПечати
	|ГДЕ
	|	ПользовательскиеМакетыПечати.Объект = &Объект
	|	И ПользовательскиеМакетыПечати.ИмяМакета ПОДОБНО &ШаблонИмениМакета
	|	И ПользовательскиеМакетыПечати.Использование";

	Запрос = Новый Запрос(ТекстЗапроса);
	Запрос.Параметры.Вставить("Объект", ИмяОбъекта);
	Запрос.Параметры.Вставить("ШаблонИмениМакета", ИмяМакета + "_%");

	Выборка = Запрос.Выполнить().Выбрать();
	НайденныеЯзыки = Новый Соответствие;

	Пока Выборка.Следующий() Цикл
		Для Каждого КодЯзыка Из ЯзыкиПечатныхФорм Цикл
			КодЛокализации = КодЯзыка;
			Если СтрЗаканчиваетсяНа(Выборка.ИмяМакета, "_" + КодЛокализации) Тогда
				НайденныеЯзыки.Вставить(КодЛокализации, Истина);
				Продолжить;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;

	ИменаПоиска = Новый Соответствие;
	Для Каждого КодЯзыка Из ДополнительныеЯзыкиПечатныхФорм() Цикл
		ИменаПоиска.Вставить(КодЯзыка, ИмяМакета + "_" + КодЯзыка);
	КонецЦикла;

	ЭтоОбщийМакет = СтрРазделить(ИмяОбъекта, ".").Количество() = 1;

	КоллекцияМакетов = Метаданные.ОбщиеМакеты;
	Если Не ЭтоОбщийМакет Тогда
		//И.Ю. Парфёнов. 18.10.2021 Начало.
		Если ЧастиПути[0] = "ВнешнийОтчет" Тогда
			ИменаПоиска.Очистить();
		Иначе
			ОбъектМетаданных	= Метаданные.НайтиПоПолномуИмени(ИмяОбъекта);
			Если ОбъектМетаданных = Неопределено Тогда
				ВызватьИсключение ТекстОшибки;
			КонецЕсли;
			КоллекцияМакетов = ОбъектМетаданных.Макеты;
		КонецЕсли; 
		//ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъекта);
		//Если ОбъектМетаданных = Неопределено Тогда
		//	ВызватьИсключение ТекстОшибки;
		//КонецЕсли;
		//КоллекцияМакетов = ОбъектМетаданных.Макеты;
		//И.Ю. Парфёнов. 18.10.2021 Завершение. 
	КонецЕсли;

	Для Каждого Элемент Из ИменаПоиска Цикл
		ИмяПоиска = Элемент.Значение;
		КодЯзыка = Элемент.Ключ;
		Если КоллекцияМакетов.Найти(ИмяПоиска) <> Неопределено Тогда
			НайденныеЯзыки.Вставить(КодЯзыка, Истина);
		КонецЕсли;
	КонецЦикла;

	Для Каждого КодЯзыка Из СтандартныеПодсистемыСервер.ЯзыкиКонфигурации() Цикл
		НайденныеЯзыки.Вставить(КодЯзыка, Истина);
	КонецЦикла;

	Результат = Новый Массив;
	Для Каждого КодЯзыка Из ЯзыкиПечатныхФорм Цикл
		Если НайденныеЯзыки[КодЯзыка] <> Неопределено Тогда
			Результат.Добавить(КодЯзыка);
		КонецЕсли;
	КонецЦикла;

	Возврат Результат;

КонецФункции
Показать


Думаю, в следующих патчах-релизах 1С сделает как правильно и универсально.

Сама функция сидит в УправлениеПечатьюМультиязычность
7. MikeStav 28 26.04.22 22:58 Сейчас в теме
ДОброго времени столкнулся с аналогичной проблемой решилось все очень просто

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

КоллекцияПечатныхФорм.Колонки.Добавить("ДоступенВыводНаДругихЯзыках", Новый ОписаниеТипов("Булево"));
user951430; +1 Ответить
Оставьте свое сообщение

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