Управление Торговлей 11.1.2.20 Метод объекта не обнаружен (Метаданные)

1. vertkov2010 3 20.11.14 09:00 Сейчас в теме
Здравствуйте, уважаемые форумчане
Имеется конфигурация УТ 11.1.2.20, подключены весы с печатью этикеток Штрих-М. Продажи обмен с подключаемым оборудованием Offline/весы с печатью этикеток/Посмотреть список товаров/Печать/Кодов товаров, выходит ошибка Метод объекта не обнаружен (Метаданные). Ошибка появилась после обновления на 11.1.2.20 и повторяется на релизе 11.1.6.


{ОбщийМодуль.УправлениеПечатью.Модуль(344)}: Метод объекта не обнаружен (Метаданные)
ИсточникВнешнихПечатныхФорм = МассивОбъектов[0].Метаданные().ПолноеИмя();
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spezc 786 20.11.14 09:02 Сейчас в теме
ошибка говорит о том, что в МассивОбъектов[0] или ничего нет, или лежит то, от чего нельзя получить метаданные. в вашем случае лучшим вариантом будет посмотреть в отладчике
3. vertkov2010 3 20.11.14 09:12 Сейчас в теме
(2) spezc,вот что в отладчике
Прикрепленные файлы:
4. deniseek77 86 20.11.14 10:16 Сейчас в теме
(3) vertkov2010, Ну и вот- Структура не содержит и не может содержать Метаданных...
5. vertkov2010 3 20.11.14 11:01 Сейчас в теме
(4) deniseek77, и как это исправить?
6. deniseek77 86 20.11.14 11:08 Сейчас в теме
(5) vertkov2010, скиньте сюда весь код модуля, нужно смотреть
7. vertkov2010 3 20.11.14 11:25 Сейчас в теме
(6) deniseek77,
Процедура СформироватьПечатныеФормы(ИмяМенеджераПечати, Знач ИменаМакетов, МассивОбъектов, ПараметрыПечати,
	КоллекцияПечатныхФорм, ОбъектыПечати = Неопределено, ПараметрыВывода) Экспорт
	
	ПараметрыВывода = ПодготовитьСтруктуруПараметровВывода();
	
	Если ОбъектыПечати = Неопределено Тогда
		ОбъектыПечати = Новый СписокЗначений;
	КонецЕсли;
	
	КоллекцияПечатныхФорм = ПодготовитьКоллекциюПечатныхФорм(Новый Массив);
	
	Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда
		ИменаМакетов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаМакетов);
	Иначе // Тип("Массив")
		ИменаМакетов = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(ИменаМакетов);
	КонецЕсли;
	
	ПрефиксВнешнихПечатныхФорм = "ВнешняяПечатнаяФорма.";
	
	ИсточникВнешнихПечатныхФорм = ИмяМенеджераПечати;
	Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(МассивОбъектов)) Тогда
		ИсточникВнешнихПечатныхФорм = МассивОбъектов.Метаданные().ПолноеИмя();
	Иначе
		//Если МассивОбъектов.Количество() > 0 Тогда
			ИсточникВнешнихПечатныхФорм = МассивОбъектов[0].Метаданные().ПолноеИмя();
		//КонецЕсли;
	КонецЕсли;
	ВнешниеПечатныеФормы = СписокПечатныхФормИзВнешнихИсточников(ИсточникВнешнихПечатныхФорм);
	
	// добавление внешних печатных форм в комплект
	ДобавленныеВнешниеПечатныеФормы = Новый Массив;
	Если ТипЗнч(ПараметрыПечати) = Тип("Структура") 
		И ПараметрыПечати.Свойство("ДополнитьКомплектВнешнимиПечатнымиФормами") 
		И ПараметрыПечати.ДополнитьКомплектВнешнимиПечатнымиФормами Тогда 
		
		ИдентификаторыВнешнихПечатныхФорм = ВнешниеПечатныеФормы.ВыгрузитьЗначения();
		Для Каждого Идентификатор Из ИдентификаторыВнешнихПечатныхФорм Цикл
			Если ИменаМакетов.Найти(Идентификатор) = Неопределено Тогда
				ИменаМакетов.Добавить(ПрефиксВнешнихПечатныхФорм + Идентификатор);
				ДобавленныеВнешниеПечатныеФормы.Добавить(ПрефиксВнешнихПечатныхФорм + Идентификатор);
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	Для Каждого ИмяМакета Из ИменаМакетов Цикл
		// проверка наличия уже напечатанной формы
		НайденнаяПечатнаяФорма = КоллекцияПечатныхФорм.Найти(ИмяМакета, "ИмяМакета");
		Если НайденнаяПечатнаяФорма <> Неопределено Тогда
			ПоследняяДобавленнаяПечатнаяФорма = КоллекцияПечатныхФорм[КоллекцияПечатныхФорм.Количество()-1];
			Если ПоследняяДобавленнаяПечатнаяФорма.ИмяМакета = НайденнаяПечатнаяФорма.ИмяМакета Тогда
				ПоследняяДобавленнаяПечатнаяФорма.Экземпляров = ПоследняяДобавленнаяПечатнаяФорма.Экземпляров + 1;
			Иначе
				КопияПечатнойФормы = КоллекцияПечатныхФорм.Добавить();
				ЗаполнитьЗначенияСвойств(КопияПечатнойФормы, НайденнаяПечатнаяФорма);
				КопияПечатнойФормы.Экземпляров = 1;
			КонецЕсли;
			Продолжить;
		КонецЕсли;
		
		// поиск указания дополнительного менеджера печати в имени печатной формы
		ИмяДополнительногоМенеджераПечати = "";
		Идентификатор = ИмяМакета;
		ВнешняяПечатнаяФорма = Неопределено;
		Если Найти(Идентификатор, ПрефиксВнешнихПечатныхФорм) > 0 Тогда // это внешняя печатная форма
			Идентификатор = Сред(Идентификатор, СтрДлина(ПрефиксВнешнихПечатныхФорм) + 1);
			ВнешняяПечатнаяФорма = ВнешниеПечатныеФормы.НайтиПоЗначению(Идентификатор);
		ИначеЕсли Найти(Идентификатор, ".") > 0 Тогда // указан дополнительный менеджер печати
			Позиция = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца(Идентификатор, ".");
			ИмяДополнительногоМенеджераПечати = Лев(Идентификатор, Позиция - 1);
			Идентификатор = Сред(Идентификатор, Позиция + 1);
		КонецЕсли;
		
		// определение внутреннего менеджера печати
		ИспользуемыйМенеджерПечати = ИмяДополнительногоМенеджераПечати;
		Если ПустаяСтрока(ИспользуемыйМенеджерПечати) Тогда
			ИспользуемыйМенеджерПечати = ИмяМенеджераПечати;
		КонецЕсли;
		
		// проверка соответствия печатаемых объектов выбранной печатной форме
		ОжидаемыйТипОбъекта = Неопределено;
		МетаданныеМенеджера = Метаданные.НайтиПоПолномуИмени(ИспользуемыйМенеджерПечати);
		Если МетаданныеМенеджера <> Неопределено
			И (Метаданные.Документы.Содержит(МетаданныеМенеджера)
			Или Метаданные.Справочники.Содержит(МетаданныеМенеджера)
			Или Метаданные.БизнесПроцессы.Содержит(МетаданныеМенеджера)
			Или Метаданные.Задачи.Содержит(МетаданныеМенеджера)
			Или Метаданные.ПланыВидовРасчета.Содержит(МетаданныеМенеджера)
			Или Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеМенеджера)
			Или Метаданные.ПланыОбмена.Содержит(МетаданныеМенеджера)) Тогда
				ОжидаемыйТипОбъекта = Тип(СтрЗаменить(ИспользуемыйМенеджерПечати, ".", "Ссылка."));
		КонецЕсли;
		
		ОбъектыСоответствующиеПечатнойФорме = МассивОбъектов;
		Если ОжидаемыйТипОбъекта <> Неопределено Тогда
			Если ТипЗнч(МассивОбъектов) = Тип("Массив") Тогда
				ОбъектыСоответствующиеПечатнойФорме = Новый Массив;
				Для Каждого Объект Из МассивОбъектов Цикл
					Если ТипЗнч(Объект) <> ОжидаемыйТипОбъекта Тогда
						СообщитьПечатнаяФормаНедоступна(Объект);
					Иначе
						ОбъектыСоответствующиеПечатнойФорме.Добавить(Объект);
					КонецЕсли;
				КонецЦикла;
				Если ОбъектыСоответствующиеПечатнойФорме.Количество() = 0 Тогда
					ОбъектыСоответствующиеПечатнойФорме = Неопределено;
				КонецЕсли;
			ИначеЕсли ОбщегоНазначения.ЗначениеСсылочногоТипа(МассивОбъектов) Тогда
				Если ТипЗнч(МассивОбъектов) <> ОжидаемыйТипОбъекта Тогда
					СообщитьПечатнаяФормаНедоступна(МассивОбъектов);
					ОбъектыСоответствующиеПечатнойФорме = Неопределено;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
		
		ВременнаяКоллекцияДляОднойПечатнойФормы = ПодготовитьКоллекциюПечатныхФорм(Идентификатор);
		
		// вызов процедуры Печать из менеджера печати
		Если ВнешняяПечатнаяФорма <> Неопределено Тогда
			// менеджер печати во внешней печатной форме
			МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки");
			МодульДополнительныеОтчетыИОбработки.ПечатьПоВнешнемуИсточнику(
				ВнешняяПечатнаяФорма(ВнешняяПечатнаяФорма.Значение, ИсточникВнешнихПечатныхФорм),
				Новый Структура("ИдентификаторКоманды, ОбъектыНазначения", ВнешняяПечатнаяФорма.Значение, ОбъектыСоответствующиеПечатнойФорме),
				ВременнаяКоллекцияДляОднойПечатнойФормы,
				ОбъектыПечати,
				ПараметрыВывода);
		Иначе
			Если Не ПустаяСтрока(ИспользуемыйМенеджерПечати) Тогда
				МенеджерПечати = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИспользуемыйМенеджерПечати);
				// печать внутренней печатной формы
				Если ОбъектыСоответствующиеПечатнойФорме <> Неопределено Тогда
					МенеджерПечати.Печать(ОбъектыСоответствующиеПечатнойФорме, ПараметрыПечати, ВременнаяКоллекцияДляОднойПечатнойФормы, ОбъектыПечати, ПараметрыВывода);
				Иначе
					ВременнаяКоллекцияДляОднойПечатнойФормы[0].ТабличныйДокумент = Новый ТабличныйДокумент;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
		
		// проверка корректности заполнения коллекции печатных форм, полученной из менеджера печати
		Для Каждого ОписаниеПечатнойФормы Из ВременнаяКоллекцияДляОднойПечатнойФормы Цикл
			ОбщегоНазначенияКлиентСервер.Проверить(
				ТипЗнч(ОписаниеПечатнойФормы.Экземпляров) = Тип("Число") И ОписаниеПечатнойФормы.Экземпляров > 0,
				СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Не задано количество экземпляров для печатной формы ""%1"".'"),
					?(ПустаяСтрока(ОписаниеПечатнойФормы.СинонимМакета), ОписаниеПечатнойФормы.ИмяМакета, ОписаниеПечатнойФормы.СинонимМакета)
					));
		КонецЦикла;
				
		// обновление коллекции
		Отказ = ВременнаяКоллекцияДляОднойПечатнойФормы.Количество() = 0;
		// предполагается одна печатная форма, но для обратной совместимости принимается вся коллекция
		Для Каждого ВременнаяПечатнаяФорма Из ВременнаяКоллекцияДляОднойПечатнойФормы Цикл 
			Если ВременнаяПечатнаяФорма.ТабличныйДокумент <> Неопределено Тогда
				ПечатнаяФорма = КоллекцияПечатныхФорм.Добавить();
				ЗаполнитьЗначенияСвойств(ПечатнаяФорма, ВременнаяПечатнаяФорма);
				Если ВременнаяКоллекцияДляОднойПечатнойФормы.Количество() = 1 Тогда
					ПечатнаяФорма.ИмяМакета = ИмяМакета;
					ПечатнаяФорма.ИмяВРЕГ = ВРег(ИмяМакета);
				КонецЕсли;
			Иначе
				// возникла ошибка при формировании печатной формы
				Отказ = Истина;
			КонецЕсли;
		КонецЦикла;
		
		// вызов исключения при возникновении ошибки
		Если Отказ Тогда
			ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'При формировании печатной формы ""%1"" возникла ошибка. Обратитесь к администратору.'"), ИмяМакета);
			ВызватьИсключение(ТекстСообщенияОбОшибке);
		КонецЕсли;
		
	КонецЦикла;
	
	// установка количества экземпляров табличным документам
	Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
		Если ДобавленныеВнешниеПечатныеФормы.Найти(ПечатнаяФорма.ИмяМакета) <> Неопределено Тогда
			ПечатнаяФорма.Экземпляров = 0; // для автоматически добавленных форм
		КонецЕсли;
		Если ПечатнаяФорма.ТабличныйДокумент <> Неопределено Тогда
			ПечатнаяФорма.ТабличныйДокумент.КоличествоЭкземпляров = ПечатнаяФорма.Экземпляров;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать
8. vertkov2010 3 20.11.14 11:27 Сейчас в теме
(4) deniseek77, полностью весь модуль УправлениеПечатью
Прикрепленные файлы:
Новый1.txt
9. deniseek77 86 20.11.14 11:49 Сейчас в теме
(8) vertkov2010,
//Если МассивОбъектов.Количество() > 0 Тогда
ИсточникВнешнихПечатныхФорм = МассивОбъектов[0].Метаданные().ПолноеИмя();
//КонецЕсли; 
вот сдесь у вас должно быть либо Справочникссылка либо документссылка передаваться, а у вас передается структура. Она у вас уже на входе передается, то есть проблема в вашей печатной форме, нужно ее смотреть, что из нее передается...
10. vertkov2010 3 20.11.14 13:30 Сейчас в теме
(9) deniseek77, спасибо, буду смотреть печатную форму, если что отпишусь
11. vertkov2010 3 21.11.14 09:48 Сейчас в теме
(9) deniseek77, формирование печатной формы

Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "КодыТоваров") Тогда
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "КодыТоваров", "Коды товаров", СформироватьПечатнуюФормуКодыТоваров(МассивОбъектов, ОбъектыПечати, ПараметрыПечати));
	КонецЕсли;
	
КонецПроцедуры

Функция СформироватьПечатнуюФормуКодыТоваров(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_КодыТоваров";
	
	Макет = УправлениеПечатью.ПолучитьМакет("Справочник.ПравилаОбменаСПодключаемымОборудованиемOffline.ПФ_MXL_КодыТоваров");
	ПервыйДокумент = Истина;
	
	Для Каждого Объект Из МассивОбъектов Цикл
		
		ПодключаемоеОборудованиеOfflineВызовСервера.ОбновитьКодыТоваров(Объект.ПравилоОбмена);
		
		Если Не ПервыйДокумент Тогда
			ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		
		ПервыйДокумент = Ложь;
		НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
		
		ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
		ОбластьМакета.Параметры.ТекстЗаголовка = НСтр("ru = 'Коды товаров'");
		ОбластьМакета.Параметры.ПравилоОбмена  = Объект.ПравилоОбмена;
		ТабличныйДокумент.Вывести(ОбластьМакета);
		
		ОбластьКод   = Макет.ПолучитьОбласть("ШапкаТаблицы|Код");
		ОбластьТовар = Макет.ПолучитьОбласть("ШапкаТаблицы|Товар");
		ТабличныйДокумент.Вывести(ОбластьКод);
		ТабличныйДокумент.Присоединить(ОбластьТовар);
		
		ОбластьКод   = Макет.ПолучитьОбласть("Строка|Код");
		ОбластьТовар = Макет.ПолучитьОбласть("Строка|Товар");
		
		МаксимальныйКодВесовогоТовара = ПодключаемоеОборудованиеOfflineВызовСервера.МаксимальныйКодВесовогоТовара();
		
		Товары = ПодключаемоеОборудованиеOfflineВызовСервера.ПолучитьТаблицуТоваровДляПравила(Объект.ПравилоОбмена, Справочники.ВидыЦен.ПустаяСсылка());
		Для Каждого СтрокаТЧ Из Товары Цикл
			
			ОбластьКод.Параметры.Код = (СтрокаТЧ.Код - (МаксимальныйКодВесовогоТовара));
			ТабличныйДокумент.Вывести(ОбластьКод);
			
			Если СтрокаТЧ.Используется Тогда
				ОбластьТовар.Параметры.Товар = СтрокаТЧ.Наименование;
			Иначе
				ОбластьТовар.Параметры.Товар = "";
			КонецЕсли;
			ТабличныйДокумент.Присоединить(ОбластьТовар);
			
		КонецЦикла;
		
		ОбластьМакета = Макет.ПолучитьОбласть("Итого");
		ТабличныйДокумент.Вывести(ОбластьМакета);
		
		// Вывести подписи.
		ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
		ОбластьМакета.Параметры.Ответственный = Пользователи.ТекущийПользователь();
		ТабличныйДокумент.Вывести(ОбластьМакета);
		
		УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Объект.ПравилоОбмена);
	
	КонецЦикла;
	
	Возврат ТабличныйДокумент;
	
КонецФункции
#КонецЕсли
КонецПроцедуры
Показать
12. vertkov2010 3 24.11.14 08:22 Сейчас в теме
проблема остается открытой, прошу помощи
13. vertkov2010 3 27.11.14 08:21 Сейчас в теме
уважаемые форумчане, помогите разобраться
14. deniseek77 86 30.11.14 00:55 Сейчас в теме
(13) vertkov2010, Пишитев личку, в понедельник, посмотрим. Решим.
Оставьте свое сообщение

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