|
Представление электронного документа | ☑ | ||
---|---|---|---|---|
0
Momus
25.02.22
✎
10:22
|
Кто-нибудь работал с библиотекой электронных документов версии 1.9.+? Хочу изменить вывод одного поля при формировании табличного документа из сохраненного xml, но не могу разобраться как. В версии 1.8.+ было все просто, тут логика поменялась: нет привычного макета табличного документа, а используется ПреобразованиеXSL.
|
|||
1
Мимохожий Однако
25.02.22
✎
10:37
|
Сними покровы со своего кода
|
|||
2
Momus
25.02.22
✎
10:46
|
(1) всм? Прислать код преобразования, который используется в библиотеке?
|
|||
3
Momus
25.02.22
✎
10:48
|
Функция ПреобразоватьФорматЭД(ПотокИсходногоXML, Параметры = Неопределено, КонтекстДиагностики = Неопределено) Экспорт
Если Параметры = Неопределено Тогда Преобразователь = КонвертацияЭДОПовтИсп.ПреобразованиеXSL_ПараметрыПроизвольногоДокумента(); Если Преобразователь = Неопределено Тогда Возврат Неопределено; КонецЕсли; Иначе ТекстПравила = ТекстПравилаПреобразованияФормата(Параметры, КонтекстДиагностики); Если НЕ ЗначениеЗаполнено(ТекстПравила) Тогда Возврат Неопределено; КонецЕсли; Преобразователь = Новый ПреобразованиеXSL; Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(ТекстПравила); ПараметрыXSL = Неопределено; Если Параметры.Свойство("ПараметрыXSL", ПараметрыXSL) И ЗначениеЗаполнено(ПараметрыXSL) Тогда Для Каждого ПараметрXSL Из ПараметрыXSL Цикл Если ТипЗнч(ПараметрXSL.Значение) = Тип("Структура") Тогда ЗначениеПараметра = КонвертироватьЗначениеПоИнструкции(ПараметрXSL.Значение); Если ЗначениеПараметра = Неопределено Тогда Продолжить; КонецЕсли; Преобразователь.ДобавитьПараметр(ПараметрXSL.Ключ, ЗначениеПараметра); Иначе ЗначениеПараметра = ПараметрXSL.Значение; Если ТипЗнч(ЗначениеПараметра) = Тип("Строка") Тогда Если СтрНайти(ЗначениеПараметра, "'") <> 0 Тогда ЗначениеПараметра = СтрШаблон("""%1""", ЗначениеПараметра); Иначе ЗначениеПараметра = СтрШаблон("'%1'", ЗначениеПараметра); КонецЕсли; КонецЕсли; Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда ЗначениеПараметра = ?(ЗначениеПараметра, 1, 0); КонецЕсли; Преобразователь.ДобавитьПараметр(ПараметрXSL.Ключ, ЗначениеПараметра); КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; ЧтениеИсходногоXML = Новый ЧтениеXML; ЧтениеИсходногоXML.ОткрытьПоток(ПотокИсходногоXML); ПотокИтоговогоXML = Новый ПотокВПамяти; ЗаписьИтоговогоXML = Новый ЗаписьXML; ЗаписьИтоговогоXML.ОткрытьПоток(ПотокИтоговогоXML); Попытка Преобразователь.Преобразовать(ЧтениеИсходногоXML, ЗаписьИтоговогоXML); Исключение ЧтениеИсходногоXML.Закрыть(); ЗаписьИтоговогоXML.Закрыть(); ПотокИтоговогоXML.Закрыть(); ВидОперации = НСтр("ru = 'Преобразование формата.'; |en = 'Format conversion.'"); ВидОшибки = ОбработкаНеисправностейБЭДКлиентСервер.ВидОшибкиНеизвестнаяОшибка(); ПредставлениеОшибкиПодробное = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); Ошибка = ОбработкаНеисправностейБЭД.НоваяОшибка( ВидОперации, ВидОшибки, ПредставлениеОшибкиПодробное, ""); ОбработкаНеисправностейБЭД.ДобавитьОшибку(КонтекстДиагностики, Ошибка, ОбщегоНазначенияБЭДКлиентСервер.ПодсистемыБЭД().ОбменСКонтрагентами); Возврат Неопределено; КонецПопытки; ЧтениеИсходногоXML.Закрыть(); ЗаписьИтоговогоXML.Закрыть(); Результат = Неопределено; Если Параметры = Неопределено ИЛИ Параметры.ИтоговыйФормат = "ПараметрыЭлектронногоДокумента" Тогда Результат = ЗначениеИзПотокаXML(ПотокИтоговогоXML, Тип("Структура"), Параметры, КонтекстДиагностики); ПотокИтоговогоXML.Закрыть(); ИначеЕсли Параметры.ИтоговыйФормат = "ТабличныйДокумент" Тогда Результат = ЗначениеИзПотокаXML(ПотокИтоговогоXML, Тип("ТабличныйДокумент"), Параметры, КонтекстДиагностики); ПотокИтоговогоXML.Закрыть(); ИначеЕсли Параметры.ИтоговыйФормат = "ТаблицаНоменклатуры" Тогда Результат = ЗначениеИзПотокаXML(ПотокИтоговогоXML, Тип("ТаблицаЗначений"), Параметры, КонтекстДиагностики); ПотокИтоговогоXML.Закрыть(); ИначеЕсли Параметры.ИтоговыйФормат = "CML" Тогда Результат = ПотокИтоговогоXML.ЗакрытьИПолучитьДвоичныеДанные(); КонецЕсли; Если ТипЗнч(Результат) = Тип("ТабличныйДокумент") И (Результат.ВысотаТаблицы = 0 Или Результат.ШиринаТаблицы = 0) Тогда // Могли не определиться размеры табличного документа, тогда выводим его в новый табличный документ. ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.Вывести(Результат); Результат = ТабличныйДокумент; КонецЕсли; Возврат Результат; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |