Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 4
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Войти | Зарегистрироваться )


Свернуть

> Добро пожаловать на наш форум

Здравствуйте уважаемый посетитель. К сожалению вы не были распознаны форумом как зарегистрированный пользователь. Для полноценного использования возможностей нашего форума вам необходимо зарегистрироваться. Если вы уже зарегистрированы на форуме, то вам необходимо пройти авторизацию, используя Ваш логин и пароль.

Логин:   
Пароль:
 

Форум:

Новые темы (за 20 дней):

Последние сообщения:

Наши сервисы:

Дополнительно:

Новости для бухгалтера:

 
Выод форматированного документа в табличный документ [раздел 1С Предприятие 8]
Автор TipsyKID — 14.12.18, 13:23 — 1 комментариев
Решил поделиться решением.
Задача: есть форматированный документ его необходимо вывести в табличный документ.
Процедуры не полностью универсальные, содержат ряд условностей, но для начала, как пища для размышлений, подойдет.

Проблемы которые пока не получилось сделать лучше:
1.Нумерованный список в нумерованном списке в нумер.... и т.д..
2.Маркированный список в маркированном списке в марки... и т.д..
3.После применения форматирования оригинальная область приходит в негодность и ее надо восстановить для дальнейшего использования
4. Выделение цветного текста происходит по последнему условному оформлению "параграфа" (беда 1с, что в табличном документе в рамках одной ячейки нельзя устанавливать разное оформление: шрифт, цвет и т.д..)

Если есть подсказки, идеи, фиксы ошибок: готов выслушать.
Кстати, тема очень актуальная, т.к. объект "Форматированный документ" - очень перспективен, но загвоздка в том, что вывести и полноценно распечатать его является проблемой, что очень сильно ограничивает область применения.

// Описание
//      Устанавливает свойства ячеек области в зависимости от элемента форматированного документа
// Параметры
//  Область -  ОбластьЯчеекТабличногоДокумента - область которую следует изменить
//  ЭлементФорматированногоДокумента -  ТекстФорматированногоДокумента - элемент по которому следует изменить область
Процедура УстановитьУсловноеФорматированиеОбласти(Область,ЭлементФорматированногоДокумента) Экспорт
    
    Если НЕ ТипЗнч(ЭлементФорматированногоДокумента) = Тип("ТекстФорматированногоДокумента") Тогда
        Возврат
    КонецЕсли;    
    
    ЗаполнитьЗначенияСвойств(Область.Области[0],ЭлементФорматированногоДокумента,,"Текст");
    
    Если ЗначениеЗаполнено(ЭлементФорматированногоДокумента.НавигационнаяСсылка) Тогда
        
        Область.Области[0].Гиперссылка = Истина;
        Область.Области[0].ЦветТекста = WebЦвета.СинеСерый;
        Область.Области[0].Шрифт = Новый Шрифт(,,,,Истина);
        
    КонецЕсли;
    
    
КонецПроцедуры //установитьУсловноеФорматированиеОбласти

// Описание
//         Добавляет в табличный документ оббласть с форматированным текстом (переносит форматирование на ячейку области)
// Параметры
//  ТабличныйДокумент -  ТабличныйДокумент - Табличный документ в который следует вставить область
//  Область -  ОбластьЯчеекТабличногоДокумента - область которую следует изменить
//  ЭлементФорматированногоДокумента -  ТекстФорматированногоДокумента - элемент по которому следует изменить область
Процедура ВывестиФорматированныйТекстВТабличныйДокумент(ТабличныйДокумент,Область,ЭлементФорматированногоДокумента) Экспорт
    
    
    УстановитьУсловноеФорматированиеОбласти(Область,ЭлементФорматированногоДокумента);
    ТабличныйДокумент.Вывести(Область);

// к сожалению, после применения форматирования оригинальная область приходит в негодность
//                                                                и ее надо восстановить для дальнейшего использования
    
//    //ЗаполнитьЗначенияСвойств(Область.Области[0],ОбластьТекстПоУмолчанию.Области[0],,"Текст,Шрифт,Заполнение,");
//    
//    Область.Области[0].Шрифт = Новый Шрифт;
//    Область.Области[0].ЦветРамки         = Новый Цвет;
//    Область.Области[0].ЦветТекста         = Новый Цвет;
//    Область.Области[0].ЦветУзора         = Новый Цвет;
//    Область.Области[0].ЦветФона         = Новый Цвет;
//    

КонецПроцедуры //ВывестиФорматированныйТекстВТабличныйДокумент

// Описание
//     Выводит в табличный документ форматированный документ
// Параметры
//  Макет - Макет - Макет
//  ОписаниеФорматированныйДокумент - ФорматированныйДокумент - форматированный документ который следует вывести
//  ТабличныйДокумент - ТабличныйДокумент -  Табличный документ в который следует вывести форматированный документ
Процедура ВывестиФорматиованныйДокументВТабличныйДокумент(Макет,ОписаниеФорматированныйДокумент,ТабличныйДокумент,ТолькоТекстКлиента,
                                                          ИмяОбластиОписание = "ОбластьОписание",ИмяОбластиКартинка = "ОбластьОписаниеКартинка") Экспорт
    
    РазмерПикселя = 0.264583333333334;//размер пикселя в миллиметрах, кто бы знал!
    
    ОбластьТекст = Макет.ПолучитьОбласть(ИмяОбластиОписание);
    ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбластиКартинка);
    
    ДокументПолучатель = Новый ФорматированныйДокумент;
    НомерцияПараграфа  = 0;
    Для Каждого Параграф Из ОписаниеФорматированныйДокумент.Элементы Цикл
        
        ЭтоМаркСписок = Параграф.ТипПараграфа = ТипПараграфа.МаркированныйСписок;
        ЭтоНумСписок = Параграф.ТипПараграфа = ТипПараграфа.НумерованныйСписок;
        ЭтоОбычныйСписок = Параграф.ТипПараграфа = ТипПараграфа.Обычный;
        
        ПриставкаПараграфа = "";
        
        Если ЭтоМаркСписок  Тогда
            ПриставкаПараграфа = " • ";
            НомерцияПараграфа = 0;
        ИначеЕсли ЭтоНумСписок Тогда
            НомерцияПараграфа = НомерцияПараграфа + 1;
        Иначе
            НомерцияПараграфа = 0;
        КонецЕсли;
        
        //Накапливаем текст / данные
        ТекущийТипПараграфа = Неопределено;
        Описание = ПриставкаПараграфа;
        ЭлементПараграфаДляОформленияОбласти = Неопределено;
        
        Для Каждого ЭлементПараграфа Из Параграф.Элементы Цикл
            
            ТекущийТипПараграфа = ?(ТекущийТипПараграфа = Неопределено,Тип(ЭлементПараграфа),ТекущийТипПараграфа);
            Если Тип(ЭлементПараграфа) = Тип("ТекстФорматированногоДокумента") Тогда
                
                Если ЭтоНумСписок Тогда
                    ПриставкаПараграфа = Лев(" " + Формат(НомерцияПараграфа,"ЧЦ=3; ЧДЦ=") + ".  ",4);//ограничем 99
                    Описание = ПриставкаПараграфа + Описание + ЭлементПараграфа.Текст;    
                Иначе
                    Описание = Описание + ЭлементПараграфа.Текст;    
                КонецЕсли;
                ЭлементПараграфаДляОформленияОбласти = ЭлементПараграфа;
                ТекущийТипПараграфа = Тип("ТекстФорматированногоДокумента");
            ИначеЕсли Тип(ЭлементПараграфа) = Тип("ПереводСтрокиФорматированногоДокумента") Тогда
                
                Если ТекущийТипПараграфа = Тип("ТекстФорматированногоДокумента") Тогда
                    ТекущийТипПараграфа = Тип("ПереводСтрокиФорматированногоДокумента");
                    
                    Если ТолькоТекстКлиента Тогда
                        ШаблоныЗаполнения.ВернутьШаблонБезТегов(Описание);
                    КонецЕсли;
                    
                    ОбластьТекст.Параметры.Описание = Описание;
                    
                    
                    ВывестиФорматированныйТекстВТабличныйДокумент(ТабличныйДокумент,ОбластьТекст,ЭлементПараграфаДляОформленияОбласти);
                    ОбластьТекст = Макет.ПолучитьОбласть("ОбластьОписание");
                    Описание = ПриставкаПараграфа;
                КонецЕсли;
                
                ОбластьТекст.Параметры.Описание = "";
                
                ТабличныйДокумент.Вывести(ОбластьТекст);
            ИначеЕсли Тип(ЭлементПараграфа) = Тип("КартинкаФорматированногоДокумента") Тогда
                Если ТекущийТипПараграфа = Тип("ТекстФорматированногоДокумента") Тогда
                    ТекущийТипПараграфа = Тип("КартинкаФорматированногоДокумента");
                    
                    ОбластьТекст.Параметры.Описание = Описание;
                    ТабличныйДокумент.Вывести(ОбластьТекст);
                    Описание = ПриставкаПараграфа;
                КонецЕсли;
                
                СтрокаURL = ЭлементПараграфа.Картинка;
                
                //Преобразовываем в полноценный base64
                ИмяHeader = "base64,";
                НомерСимволаКонца = СтрНайти(СтрокаURL,ИмяHeader) + СтрДлина(ИмяHeader) - 1;
                ДлинаСтроки = СтрДлина(СтрокаURL);
                
                СтрокаBase64 = Прав(СтрокаURL,ДлинаСтроки - НомерСимволаКонца);
                
                ДанныеКартинки = Base64Значение(СтрокаBase64);
                //Определим тип файла / картинки
                ТипФайла = Сред(СтрокаURL,СтрНайти(СтрокаURL,";") -3,3);
                ПутьКВременномуФайлу = ПолучитьИмяВременногоФайла(ТипФайла);
                ДанныеКартинки.Записать(ПутьКВременномуФайлу);
                
                Картинка = Новый Картинка(ПутьКВременномуФайлу);
                
                //Динамический вывод картинки в табличный документ
                КартинкаПечатьОрганизации = ОбластьКартинка.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
                КартинкаПечатьОрганизации.Картинка = Картинка;
                КартинкаПечатьОрганизации.Верх = 0;
                КартинкаПечатьОрганизации.Высота = ЭлементПараграфа.Высота * РазмерПикселя;
                КартинкаПечатьОрганизации.Ширина = ЭлементПараграфа.Ширина * РазмерПикселя;
                КартинкаПечатьОрганизации.Лево = 25;
                КартинкаПечатьОрганизации.ГраницаСверху = Ложь;
                КартинкаПечатьОрганизации.ГраницаСлева = Ложь;
                КартинкаПечатьОрганизации.ГраницаСправа = Ложь;
                КартинкаПечатьОрганизации.ГраницаСнизу = Ложь;
                КартинкаПечатьОрганизации.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
                ТабличныйДокумент.Вывести(ОбластьКартинка);
            КонецЕсли;
            
        КонецЦикла;
        
        Если НЕ Описание = ПриставкаПараграфа Тогда
            Если ТолькоТекстКлиента Тогда
                ШаблоныЗаполнения.ВернутьШаблонБезТегов(Описание);
            КонецЕсли;
            
            ОбластьТекст.Параметры.Описание = Описание;
            
            ВывестиФорматированныйТекстВТабличныйДокумент(ТабличныйДокумент,ОбластьТекст,ЭлементПараграфаДляОформленияОбласти);
            
            ОбластьТекст = Макет.ПолучитьОбласть("ОбластьОписание");
            Описание = ПриставкаПараграфа;
        КонецЕсли;
        
    КонецЦикла;
        
КонецПроцедуры //ВывестиФорматиованныйДокументВТабличныйДокумент
Просмотров: 138, последний комментарий от Vofka   
RSS Текстовая версия Сейчас: 22.01.19, 12:50
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!

Курсы валют: доллар США к гривне Курсы валют: евро к гривне Курсы валют: российский рубль к гривне