Склеить Форматированные документы

1. AlexKo84 30.01.16 08:34 Сейчас в теме
Привет.
Есть несколько элементов справочника в каждом есть форматированных документов(тип ФорматированныйДокумент), мне нужно их них сделать один.
Есть идея преобразовать их в html, соединить и загрузить в ФорматированныйДокумент, но может есть способ проще?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. CaptainMorgan 30.01.16 09:47 Сейчас в теме
(1) Вы пишите "мне нужно их них сделать один.
Есть идея преобразовать их в html, соединить и загрузить в ФорматированныйДокумент, но может есть способ проще"
Всё зависит от того, что вы потом собираетесь делать?

Используйте методы
Добавить()
Вставить()


Куда уж проще.
Вообще ФорматированныйДокумент используется для редактирования в формах.
Или вы редактируете несколько закладок а потом хотите слить в один файл?
4. ImHunter 315 24.08.17 09:58 Сейчас в теме
(1) Получилось склеить? Тоже вот ищу - как....
5. Alexey_ 27 24.08.17 10:00 Сейчас в теме
6. ImHunter 315 24.08.17 10:05 Сейчас в теме
(5) Ага, пробовал. 8.3.10 уходит непонятно куда при выполнении:
НовыйПараграф.ТипПараграфа = Параграф.ТипПараграфа;

когда тип параграфа - маркированный список.

Какая-то непонятка с этим Типом параграфа... Как пишет СП, тип значения ТипПараграфаФорматированногоДокумента доступен только в толстом клиенте. А у меня код на сервере. Возможно, из-за этого глючит.
8. ImHunter 315 24.08.17 10:53 Сейчас в теме
(1) Переделал процедуру из ссылки, которую тоже привел Алексей в (5).
Похоже, что проблема в том, что платформа глючит при добавлении подряд нескольких нумерованных или маркированных параграфов.
Итого, код приобрел такой вид:
Процедура СоединитьФорматированныеДокументы(ИсходныйДокумент, ДокументПолучатель)
	
	ТекМаркСписок = Неопределено;
	ТекНумСписок = Неопределено;
	
	Для Каждого Параграф Из ИсходныйДокумент.Элементы Цикл
		
		ЭтоМаркСписок = Параграф.ТипПараграфа=ТипПараграфа.МаркированныйСписок;
		ЭтоНумСписок = Параграф.ТипПараграфа=ТипПараграфа.НумерованныйСписок;
		ЭтоОбычныйСписок = Параграф.ТипПараграфа=ТипПараграфа.Обычный;

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

Вроде пока работает.
magiicking; +1 Ответить
9. brus 26.05.21 09:14 Сейчас в теме
(8) Странно, что работает.
Возникла такая же необходимость объединить доки. Версия платформы 8.3.18
При создании объекта "НовыйТекст" - тип был неопределено, соответственно ничего дальше не летело.

Исправил на:

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

        Если ЭтоМаркСписок И ТекМаркСписок<>Неопределено Тогда 
            НовыйПараграф = ТекМаркСписок;
        ИначеЕсли ЭтоНумСписок И ТекНумСписок<>Неопределено Тогда 
            НовыйПараграф = ТекНумСписок;
        Иначе 
            НовыйПараграф = ДокументПолучатель.Элементы.Добавить();
            ЗаполнитьЗначенияСвойств(НовыйПараграф, Параграф);
            ТекМаркСписок = ?(ЭтоМаркСписок, НовыйПараграф, Неопределено);
            ТекНумСписок = ?(ЭтоНумСписок, НовыйПараграф, Неопределено);
		КонецЕсли;
		
        Для Каждого ЭлементПараграфа Из Параграф.Элементы Цикл
            Если Тип(ЭлементПараграфа) = Тип("ТекстФорматированногоДокумента") Тогда
                НовыйТекст 										= НовыйПараграф.Элементы.Добавить(ЭлементПараграфа, Тип("ТекстФорматированногоДокумента"));
				ЗаполнитьЗначенияСвойств(НовыйТекст, ЭлементПараграфа);
				
            ИначеЕсли Тип(ЭлементПараграфа) = Тип("ПереводСтрокиФорматированногоДокумента") Тогда
                НовыйПараграф.Элементы.Добавить(ЭлементПараграфа, Тип("ПереводСтрокиФорматированногоДокумента"));
				
            ИначеЕсли Тип(ЭлементПараграфа) = Тип("КартинкаФорматированногоДокумента") Тогда
                НоваяКартинка = НовыйПараграф.Элементы.Добавить(ЭлементПараграфа, Тип("КартинкаФорматированногоДокумента"));
				ЗаполнитьЗначенияСвойств(НоваяКартинка, ЭлементПараграфа);
            КонецЕсли;
        КонецЦикла;
	КонецЦикла;
КонецПроцедуры
Показать
cheshirshik; user1552391; +2 Ответить
3. AlexKo84 30.01.16 20:51 Сейчас в теме
Пробовал добавить(), но не понял как сделать, что бы текст оставался форматированным, и желательно с картинками.
Собственно форматированные документы лежат в реквизитах справочника(хранилища значений) и мне надо их показать как один форм док, с форматированием.
7. ImHunter 315 24.08.17 10:17 Сейчас в теме
Хотя... Один раз такой параграф нормально создается. Глючит на создании следующего. Ну буду дальше копать...
10. 127.0.0.0 29.12.23 14:15 Сейчас в теме
судя по дате последнего комментария дело было брошено. ?
Коллеги, возникает вопрос как соединить два и более форматированного документа без конвертации в HTML ?
11. user1880116 29.12.23 15:15 Сейчас в теме
(10)
как
Попробуй написать какой-нибудь код?
13. 127.0.0.0 29.12.23 15:48 Сейчас в теме
(11)
если знал бы как объединить два форматированных документы уже написал бы, и пробывать не пришлось бы )
14. пользователь 29.12.23 16:01
Сообщение было скрыто модератором.
...
15. пользователь 29.12.23 16:14
Сообщение было скрыто модератором.
...
16. user1880116 29.12.23 16:23 Сейчас в теме
(15) Чуви, вот там в (9) код какой-то написан, не?
17. 127.0.0.0 29.12.23 16:40 Сейчас в теме
(16)
Чуви ) вот это "чюдо" ниже в принципе не может работать

ЭтоМаркСписок = Параграф.ТипПараграфа=ТипПараграфа.МаркированныйСписок;
ЭтоНумСписок = Параграф.ТипПараграфа=ТипПараграфа.НумерованныйСписок;
ЭтоОбычныйСписок = Параграф.ТипПараграфа=ТипПараграфа.Обычный;


не говоря что о том что код нечитабелен и нет описания.
конкретно у вас это работает ?
18. пользователь 29.12.23 16:49
Сообщение было скрыто модератором.
...
20. Sintson 411 16.03.24 11:59 Сейчас в теме
(17)
Вот рабочий вариант, исправлена процедура (9).

Процедура СоединитьФорматированныеДокументы(ИсходныйДокумент, ДокументПолучатель)

Для Каждого Параграф Из ИсходныйДокумент.Элементы Цикл

НовыйПараграф = ДокументПолучатель.Элементы.Добавить();
ЗаполнитьЗначенияСвойств(НовыйПараграф, Параграф);

Для Каждого ЭлементПараграфа Из Параграф.Элементы Цикл

Если Тип(ЭлементПараграфа) = Тип("ТекстФорматированногоДокумента") Тогда
НовыйТекст = НовыйПараграф.Элементы.Добавить(ЭлементПараграфа.Текст);
НовыйТекст.НавигационнаяСсылка = ЭлементПараграфа.НавигационнаяСсылка;
НовыйТекст.ЦветТекста = ЭлементПараграфа.ЦветТекста;
НовыйТекст.ЦветФона = ЭлементПараграфа.ЦветФона;
НовыйТекст.Шрифт = Новый Шрифт(ЭлементПараграфа.Шрифт);

ИначеЕсли Тип(ЭлементПараграфа) = Тип("ПереводСтрокиФорматированногоДокумента") Тогда
НовыйПараграф.Элементы.Добавить(, Тип("ПереводСтрокиФорматированногоДокумента"));

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

КонецЕсли;

КонецЦикла;

КонецЦикла;

КонецПроцедуры
12. 127.0.0.0 29.12.23 15:47 Сейчас в теме
(2) на данный момент так и реализовано, хотелось бы сделать именно форматированный текст! что бы была возможность вставлять ссылки выделять текст шрифтом и тд...
(4)
(2) на данный момент так и реализовано, хотелось бы сделать именно форматированный текст! что бы была возможность вставлять ссылки выделять текст шрифтом и тд...


через конвертацию в HTML

&НаСервере
Процедура ПриОткрытииНаСервере()
	
	СтруктураВложения = Новый Структура;
	СтрокаДляЧтения = Объект.СтрокаHTML;
	
	СтруктураВложения = Новый Структура;
	ЭтаФорма.HTML.УстановитьHTML(СтрокаДляЧтения, СтруктураВложения );
	
КонецПроцедуры


&НаСервере
Процедура ПерезаписатьШаблонНаСервере()
	
	СтруктураВложения = Новый Структура;
	ПерСтрокаHTML = ЭтаФорма.HTML;
	ЭтаФорма.HTML.ПолучитьHTML(ПерСтрокаHTML,СтруктураВложения);
	
	Объект.ШаблонHTML = ПерСтрокаHTML;
	Записать();

КонецПроцедуры
Показать


т.е. конвертируем из формы в HTML , далее пишем в реквизит (ПолучитьHTML). при открытии читаем строку HTML и выводим на форму. (УстановитьHTML)
19. пользователь 30.12.23 10:01
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

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