Оформление строки в ПриПолученииДанных или ПриВыводеСтроки Событие ПриПолученииДанных использется для оформления ячеек строк данных, отображаемых табличным полем. Обработчик данного события вызывается табличным полем в тех же случаях, что и обработчик ПриВыводеСтроки , т.е. при обновлении данных, отображаемых табличным полем или при поиске по подстроке. Важно отметить, что обработчик данного события вызывается табличным полем перед вызовом обработчиков события ПриВыводеСтроки для всех видимых строк табличного поля. Основным отличием данного события от события ПриВыводеСтроки является то, что в обработчике события ПриПолученииДанных можно изменять настройки ячеек группы строк, а не одной строки как в обработчике события ПриВыводеСтроки .
Обрабатывая данное событие можно изменять шрифт, цвет фона или текста, как определенной ячейки, так и всей строки табличного поля, устанавливать высоту или видимость ячеек строки табличного поля, а также устанавливать картинку, флажок или новый текст в ячейке. Параметром данного события является объект типа ОформлениеСтрок - коллекция объектов типа ОформлениеСтроки , являющихся оформлениями строк табличного поля.
Пример кода:
Код 1C v 8.х Процедура ТППриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Попытка
ОформлениеСтроки. Ячейки. ПредоплатаОтсрочка. УстановитьТекст( ? ( ОформлениеСтроки. ДанныеСтроки. Ссылка. Счет. ДоговорКонтрагента. КонтролироватьЧислоДнейЗадолженности, "ОТСРОЧКА" , "ПРЕДОПЛАТА" ) ) ;
Исключение
КонецПопытки ;
Если ОформлениеСтроки. Ячейки. Доставка. Значение = Неопределено Тогда
возврат ;
КонецЕсли ;
Если ДанныеСтроки. Доставка. Проведен Тогда
ОформлениеСтроки. Ячейки. Картинка. ИндексКартинки = 0 ;
ИначеЕсли ДанныеСтроки. Доставка. ПометкаУдаления Тогда
ОформлениеСтроки. Ячейки. Картинка. ИндексКартинки = 1 ;
Иначе
ОформлениеСтроки. Ячейки. Картинка. ИндексКартинки = 2 ;
КонецЕсли ;
ОформлениеСтроки. Ячейки. Картинка. ОтображатьКартинку = истина ;
Если ДанныеСтроки. СтатусНов = "Нет машины" Тогда
ОформлениеСтроки. Ячейки. СтатусНов. ЦветФона = Новый Цвет( 255 , 196 , 196 ) ;
ИначеЕсли ДанныеСтроки. СтатусНов = "Нет разрешения" Тогда
текцвет = Новый Цвет( 255 , 196 , 196 ) ;
Если ДанныеСтроки. Доставка. ДатаДоставки = НачалоДня( РабочаяДата) Тогда
ТекВремя = Дата( 1 , 1 , 1 ) + ( ТекущаяДата( ) - НачалоДня( ТекущаяДата( ) ) ) ;
Попытка ПодачаМашины= ? ( ДанныеСтроки. Доставка. ВремяЗагрузкиФакт[0 ]. ПодачаМашины> ДанныеСтроки. Доставка. ВремяПриездаЭкспедитораФакт, ДанныеСтроки. Доставка. ВремяЗагрузкиФакт[0 ]. ПодачаМашины, ДанныеСтроки. Доставка. ВремяПриездаЭкспедитораФакт) ; Исключение ПодачаМашины = ДанныеСтроки. Доставка. ВремяПриездаЭкспедитораФакт; КонецПопытки ;
Если ПодачаМашины+ ( 15 * 60 ) > ТекВремя Тогда ОформлениеСтроки. Ячейки. СтатусНов. УстановитьТекст( "Получение разрешения" ) ; текцвет = Новый Цвет( 255 , 225 , 225 ) ; КонецЕсли ;
КонецЕсли ;
ОформлениеСтроки. Ячейки. СтатусНов. ЦветФона = текцвет;
ИначеЕсли ДанныеСтроки. СтатусНов = "Загрузка" Тогда
ОформлениеСтроки. Ячейки. СтатусНов. ЦветФона = Новый Цвет( 255 , 153 , 0 ) ;
ИначеЕсли ДанныеСтроки. СтатусНов = "В пути" Тогда
ОформлениеСтроки. Ячейки. СтатусНов. ЦветФона = Новый Цвет( 255 , 255 , 0 ) ;
ИначеЕсли ДанныеСтроки. СтатусНов = "На объекте" Тогда
ОформлениеСтроки. Ячейки. СтатусНов. ЦветФона = Новый Цвет( 51 , 204 , 204 ) ;
ИначеЕсли ДанныеСтроки. СтатусНов = "Завершено" Тогда
ОформлениеСтроки. Ячейки. СтатусНов. ЦветФона = Новый Цвет( 137 , 255 , 113 ) ;
КонецЕсли ;
Если ЗначениеЗаполнено( ДанныеСтроки. СтатусSMS) Тогда
Если ДанныеСтроки. СтатусSMS = "Доставлено" Тогда
ОформлениеСтроки. Ячейки. СтатусSMS. ЦветФона = Новый Цвет( 137 , 255 , 113 ) ;
ИначеЕсли ДанныеСтроки. СтатусSMS = "Поставлено в очередь" ИЛИ
ДанныеСтроки. СтатусSMS = "Отправляется" ИЛИ
ДанныеСтроки. СтатусSMS = "Отправлено" Тогда
ОформлениеСтроки. Ячейки. СтатусSMS. ЦветФона = Новый Цвет( 255 , 255 , 0 ) ;
Иначе
ОформлениеСтроки. Ячейки. СтатусSMS. ЦветФона = Новый Цвет( 255 , 0 , 0 ) ;
КонецЕсли ;
КонецЕсли ;
ОформлениеСтроки. Ячейки. колКОтгрузке. УстановитьТекст( ДанныеСтроки. колКОтгрузке) ;
Если ДанныеСтроки. колКОтгрузке = "ОК" Тогда
ОформлениеСтроки. Ячейки. колКОтгрузке. ЦветФона = Новый Цвет( 200 , 255 , 200 ) ;
Иначе
ОформлениеСтроки. Ячейки. колКОтгрузке. ЦветФона = Новый Цвет( 255 , 0 , 0 ) ;
КонецЕсли ;
ОформлениеСтроки. Ячейки. колСДоставки. УстановитьТекст( ДанныеСтроки. колСДоставки) ;
Если ДанныеСтроки. колСДоставки = "ОК" Тогда
ОформлениеСтроки. Ячейки. колСДоставки. ЦветФона = Новый Цвет( 200 , 255 , 200 ) ;
Иначе
ОформлениеСтроки. Ячейки. колСДоставки. ЦветФона = Новый Цвет( 255 , 0 , 0 ) ;
КонецЕсли ;
Если НЕ ( ДанныеСтроки. Доставка. ВидДоставки = Перечисления. ВидыДоставки. Самовывоз или ДанныеСтроки. Доставка. ВидДоставки = Перечисления. ВидыДоставки. Централизация) Тогда
Если ДанныеСтроки. Доставка. Дата < НачалоДня( ДанныеСтроки. Доставка. Дата) + 60 * 60 * 14 Тогда ОформлениеСтроки. Ячейки. Менеджер. ЦветФона = Новый Цвет( 166 , 255 , 166 ) ; Иначе ОформлениеСтроки. Ячейки. Менеджер. ЦветФона = Новый Цвет( 255 , 166 , 166 ) ; КонецЕсли ;
КонецЕсли ;
КонецПроцедуры
А вот так это выглядит в реальности :
Категория:
Список Справочника, Документов, Регистров Работа с MS Word через OLE В качестве примера использования можно указать вот такую ситуацию: в зависимости от типа клиента (договора, документа и т.п) формируются разные тексты договоров с разным количеством таблиц. В реальности , конечно должены использоваться и макет и описанные здесь динамические механизмы.
В моем примере я заранее создал новый пустой документ.
Тестировалось на Office 2007.
Код 1C v 8.х
Процедура ВыполнитьОбработку() Экспорт
Попытка
Объект = ПолучитьCOMОбъект( ПутьКФайлу) ;
Объект. Application. Visible = 1 ;
Word = Объект. Application;
Doc = Объект. Application. Documents( 1 ) ;
Doc. Activate( ) ;
Text = Word. S_election;
Text. WholeStory( ) ;
Text. Delete( 1 , 1 ) ;
Text. TypeText( Символы. ВК) ;
Text. TypeText( Символы. ВК) ;
Text. TypeParagraph( ) ;
Text. TypeText( "Обычный текст, набранный первую очередь" ) ;
Text. HomeKey( , 1 ) ;
Text. Font. Bold = 9999998 ;
Text. Font. Size = 14 ;
Text. Font. Name = "Verdana" ;
Text. MoveUp( , 2 ) ;
Text. HomeKey( , 1 ) ;
Text. TypeText( "Обычный текст, набранный во вторую очередь" ) ;
Text. MoveDown( , 1 ) ;
Text. EndKey( ) ;
Text. TypeParagraph( ) ;
Text. ClearFormatting( ) ;
Position = Text. Range( ) ;
Table = Doc. Tables. Add( Position, 1 , 6 , 1 , 2 ) ;
Table. Columns( 1 ) . PreferredWidth= 10 ;
Table. Columns( 2 ) . PreferredWidth= 50 ;
Table. Columns( 3 ) . PreferredWidth= 10 ;
Table. Columns( 4 ) . PreferredWidth= 10 ;
Table. Columns( 5 ) . PreferredWidth= 10 ;
Table. Columns( 6 ) . PreferredWidth= 10 ;
Row1= Table. Rows( 1 ) ;
Row1. Cells( 1 ) . Range. Text= "№ п/п" ;
Row1. Cells( 2 ) . Range. Text= "Наименование" ;
Row1. Cells( 4 ) . Range. Text= "Кол-во" ;
Row1. Cells( 3 ) . Range. Text= "Ед. изм." ;
Row1. Cells( 5 ) . Range. Text= "Цена,руб." ;
Row1. Cells( 6 ) . Range. Text= "Сумма,руб." ;
НомерСтроки = 1 ;
Для каждого СтрокаТовары Из Ссылка. Товары Цикл
Row= Table. Rows. Add( ) ;
Row. Cells( 1 ) . Range. Text= НомерСтроки;
Row. Cells( 1 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 2 ) . Range. Text= СтрокаТовары. Номенклатура. Наименование
+ ? ( ЗначениеЗаполнено( СтрокаТовары. ХарактеристикаНоменклатуры) ,
" (" + СтрокаТовары. ХарактеристикаНоменклатуры+ ")" , "" ) ;
Row. Cells( 4 ) . Range. Text= Строка( СтрокаТовары. Количество) ;
Row. Cells( 4 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 3 ) . Range. Text= ? ( ЗначениеЗаполнено( СтрокаТовары. Номенклатура. БазоваяЕдиницаИзмерения)
, СтрокаТовары. Номенклатура. БазоваяЕдиницаИзмерения. Наименование, "-" ) ;
Row. Cells( 3 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 5 ) . Range. Text= Формат( СтрокаТовары. Цена, "ЧДЦ=2" ) ;
Row. Cells( 5 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 6 ) . Range. Text= Формат( СтрокаТовары. Сумма, "ЧДЦ=2" ) ;
Row. Cells( 6 ) . Range. ParagraphFormat. Alignment = 1 ;
НомерСтроки= НомерСтроки+ 1 ;
КонецЦикла ;
Row1. Range. Font. Bold = 9999998 ;
Row1. Range. Font. Size = 14 ;
Row1. Range. Font. Name = "Verdana" ;
Row1. Range. ParagraphFormat. Alignment = 1 ;
Row = Table. Rows. Add( ) ;
Row. Range. Font. Bold = 9999998 ;
Row. Cells( 1 ) . Range. Text= "Итого:" ;
Исключение
Doc. Save( ) ;
Сообщить( ОписаниеОшибки( ) ) ;
Объект. Application. Quit( ) ;
Объект = Неопределено ;
КонецПопытки ;
Попытка
Table. cell( НомерСтроки+ 1 , 1 ) . Merge( Table. cell( НомерСтроки+ 1 , 5 ) ) ;
Исключение
КонецПопытки ;
Попытка
Row. Cells( 1 ) . Range. ParagraphFormat. Alignment = 3 ;
Row. Cells( 2 ) . Range. Text= Формат( Ссылка. Товары. Итог( "Сумма" ) , "ЧДЦ=2" ) ;
Row. Cells( 2 ) . Range. ParagraphFormat. Alignment = 1 ;
Doc. Save( ) ;
Объект. Application. Quit( ) ;
Объект = Неопределено ;
Исключение
Doc. Save( ) ;
Сообщить( ОписаниеОшибки( ) ) ;
Объект. Application. Quit( ) ;
Объект = Неопределено ;
КонецПопытки ;
КонецПроцедуры
Часто при создании документа из макета используют метод замены кусков текста. В примере представлен другой вариант выполнения того же действия - с использованием закладок. Также представлен пример построения нумерованного списка, вставки картинки, настройки ее параметров.
Пример использования описанных возможностей прост. При формировании коммерческого предложения бывает необходимо описать список условий, добавить изображение образца продукции.
Для отображения закладок включите эту опцию в настройках вашего Word'а.
В моем примере я заранее создал новый пустой документ, путь к документу и картинке прописан в тексте. Не забудте указать свои пути.
Код 1C v 8.х Процедура ВыполнитьОбработку() Экспорт
Попытка
Объект = ПолучитьCOMОбъект( "C:\Users\NKrylov\Desktop\Тест.docx" ) ;
Объект. Application. Visible = 1 ;
Word = Объект. Application;
ThisDocument = Word. Documents( 1 ) ;
ThisDocument. Activate( ) ;
ThisDocument. GrammarChecked= 0 ;
ThisDocument. ShowGrammaticalErrors= 0 ;
S_election = Word. S_election;
S_election. WholeStory( ) ;
S_election. Delete( 1 , 1 ) ;
S_election. ParagraphFormat. LineSpacingRule = 0 ;
S_election. ParagraphFormat. SpaceAfter = 0 ;
ThisDocument. Bookmarks. Add( "Закладка1" , S_election. Range( ) ) ;
S_election. TypeParagraph( ) ;
S_election. TypeText( "34r3 " ) ;
S_election. HomeKey( , 1 ) ;
ThisDocument. Bookmarks. Add( "Закладка2" , S_election. Range( ) ) ;
S_election. EndKey( ) ;
S_election. TypeParagraph( ) ;
ThisDocument. Bookmarks. Add( "Закладка3" , S_election. Range( ) ) ;
S_election. TypeParagraph( ) ;
ThisDocument. Bookmarks. Add( "Закладка4" , S_election. Range( ) ) ;
S_election. EndKey( ) ;
ThisDocument. Bookmarks( "Закладка3" ) . Range. S_elect( ) ;
S_election = Word. S_election;
Bookmark = ThisDocument. Bookmarks( "Закладка3" ) ;
Table = ThisDocument. Tables. Add( Bookmark. Range( ) , 1 , 5 , 1 , 2 ) ;
Table. Rows( 1 ) . Cells( 1 ) . Range. Text = 1 ;
Table. Rows( 1 ) . Cells( 2 ) . Range. Text = 2 ;
Table. Rows( 1 ) . Cells( 3 ) . Range. Text = 3 ;
Table. Rows( 1 ) . Cells( 4 ) . Range. Text = 4 ;
Table. Rows( 1 ) . Cells( 5 ) . Range. Text = 5 ;
S_election. MoveDown( , 1 ) ;
S_election. Delete( 1 , 1 ) ;
ThisDocument. Bookmarks( "Закладка2" ) . Range. S_elect( ) ;
S_election = Word. S_election;
Text = S_election. Range. Text;
S_election. TypeText( Text + " sdcsdcs" ) ;
S_election. HomeKey( , 1 ) ;
ThisDocument. Bookmarks. Add( "Закладка2" , S_election. Range( ) ) ;
S_election. EndKey( ) ;
ThisDocument. Bookmarks( "Закладка4" ) . Range. S_elect( ) ;
S_election = Word. S_election;
S_election. TypeText( "sdcsdcsdcsdc" ) ;
S_election. TypeParagraph( ) ;
S_election. TypeText( "sdcsdcsdcsdc" ) ;
S_election. TypeParagraph( ) ;
S_election. TypeText( "sdcsdcsdcsdc" ) ;
S_election. TypeParagraph( ) ;
S_election. TypeText( "sdcsdcsdcsdc" ) ;
S_election. TypeParagraph( ) ;
S_election. MoveUp( , 4 , 1 ) ;
ListTemplate = Word. ListGalleries( 2 ) . ListTemplates( 1 ) . ListLevels( 1 ) ;
ListTemplate. NumberFormat = "%1." ;
ListTemplate. NumberStyle = 0 ;
S_election. Range. ListFormat. ApplyListTemplateWithLevel( Word. ListGalleries( 2 ) . ListTemplates( 1 ) ) ;
S_election. EndKey( 6 ) ;
Picture = S_election. InlineShapes. AddPicture( "C:\Users\NKrylov\Desktop\Новый.bmp" , Ложь , Истина ) ;
Picture. Height = 100 ;
Picture. Width = 150 ;
Shape = Picture. ConvertToShape( ) ;
Shape. WrapFormat. Type = 0 ;
ThisDocument. Save( ) ;
Объект = Неопределено ;
Исключение
ThisDocument. Save( ) ;
Сообщить( ОписаниеОшибки( ) ) ;
Объект = Неопределено ;
КонецПопытки ;
КонецПроцедуры
Автор:
Крылов Николай Категория:
Работа с Microsoft Office и OpenOffice Создание документа Word без использования макетов и пример создания таблицы и её оформление. Кроме прочего в статье присутствует пример создания таблицы с любым количеством колонок и столбцов. Несколько строк с форматированием текста и таблицы. Создание "объединенных" ячеек.
В качестве примера использования можно указать вот такую ситуацию: в зависимости от типа клиента (договора, документа и т.п) формируются разные тексты договоров с разным количеством таблиц. В
реальности , конечно должены использоваться и макет и описанные здесь динамические механизмы.
В моем примере я заранее создал новый пустой документ.
Тестировалось на Office 2007.
Исп. переменные: "ПутьКФайлу" - строка. Полное имя файла в формате MSWord.
"Ссылка" - ДокументСсылка (в моем случае - счет).
Вот текст модуля:
Код 1C v 8.х Процедура ВыполнитьОбработку() Экспорт
Попытка
Объект = ПолучитьCOMОбъект( ПутьКФайлу) ;
Объект. Application. Visible = 1 ;
Word = Объект. Application;
Doc = Объект. Application. Documents( 1 ) ;
Doc. Activate( ) ;
Text = Word. S_election;
Text. WholeStory( ) ;
Text. Delete( 1 , 1 ) ;
Text. TypeText( Символы. ВК) ;
Text. TypeText( Символы. ВК) ;
Text. TypeParagraph( ) ;
Text. TypeText( "Обычный текст, набранный первую очередь" ) ;
Text. HomeKey( , 1 ) ;
Text. Font. Bold = 9999998 ;
Text. Font. Size = 14 ;
Text. Font. Name = "Verdana" ;
Text. MoveUp( , 2 ) ;
Text. HomeKey( , 1 ) ;
Text. TypeText( "Обычный текст, набранный во вторую очередь" ) ;
Text. MoveDown( , 1 ) ;
Text. EndKey( ) ;
Text. TypeParagraph( ) ;
Text. ClearFormatting( ) ;
Position = Text. Range( ) ;
Table = Doc. Tables. Add( Position, 1 , 6 , 1 , 2 ) ;
Table. Columns( 1 ) . PreferredWidth= 10 ;
Table. Columns( 2 ) . PreferredWidth= 50 ;
Table. Columns( 3 ) . PreferredWidth= 10 ;
Table. Columns( 4 ) . PreferredWidth= 10 ;
Table. Columns( 5 ) . PreferredWidth= 10 ;
Table. Columns( 6 ) . PreferredWidth= 10 ;
Row1= Table. Rows( 1 ) ;
Row1. Cells( 1 ) . Range. Text= "№ п/п" ;
Row1. Cells( 2 ) . Range. Text= "Наименование" ;
Row1. Cells( 4 ) . Range. Text= "Кол-во" ;
Row1. Cells( 3 ) . Range. Text= "Ед. изм." ;
Row1. Cells( 5 ) . Range. Text= "Цена,руб." ;
Row1. Cells( 6 ) . Range. Text= "Сумма,руб." ;
НомерСтроки = 1 ;
Для каждого СтрокаТовары Из Ссылка. Товары Цикл
Row= Table. Rows. Add( ) ;
Row. Cells( 1 ) . Range. Text= НомерСтроки;
Row. Cells( 1 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 2 ) . Range. Text= СтрокаТовары. Номенклатура. Наименование
+ ? ( ЗначениеЗаполнено( СтрокаТовары. ХарактеристикаНоменклатуры) ,
" (" + СтрокаТовары. ХарактеристикаНоменклатуры+ ")" , "" ) ;
Row. Cells( 4 ) . Range. Text= Строка( СтрокаТовары. Количество) ;
Row. Cells( 4 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 3 ) . Range. Text= ? ( ЗначениеЗаполнено( СтрокаТовары. Номенклатура. БазоваяЕдиницаИзмерения)
, СтрокаТовары. Номенклатура. БазоваяЕдиницаИзмерения. Наименование, "-" ) ;
Row. Cells( 3 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 5 ) . Range. Text= Формат( СтрокаТовары. Цена, "ЧДЦ=2" ) ;
Row. Cells( 5 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 6 ) . Range. Text= Формат( СтрокаТовары. Сумма, "ЧДЦ=2" ) ;
Row. Cells( 6 ) . Range. ParagraphFormat. Alignment = 1 ;
НомерСтроки= НомерСтроки+ 1 ;
КонецЦикла ;
Row1. Range. Font. Bold = 9999998 ;
Row1. Range. Font. Size = 14 ;
Row1. Range. Font. Name = "Verdana" ;
Row1. Range. ParagraphFormat. Alignment = 1 ;
Row = Table. Rows. Add( ) ;
Row. Range. Font. Bold = 9999998 ;
Row. Cells( 1 ) . Range. Text= "Итого:" ;
Исключение
Doc. Save( ) ;
Сообщить( ОписаниеОшибки( ) ) ;
Объект. Application. Quit( ) ;
Объект = Неопределено ;
КонецПопытки ;
Попытка
Table. cell( НомерСтроки+ 1 , 1 ) . Merge( Table. cell( НомерСтроки+ 1 , 5 ) ) ;
Исключение
КонецПопытки ;
Попытка
Row. Cells( 1 ) . Range. ParagraphFormat. Alignment = 3 ;
Row. Cells( 2 ) . Range. Text= Формат( Ссылка. Товары. Итог( "Сумма" ) , "ЧДЦ=2" ) ;
Row. Cells( 2 ) . Range. ParagraphFormat. Alignment = 1 ;
Doc. Save( ) ;
Объект. Application. Quit( ) ;
Объект = Неопределено ;
Исключение
Doc. Save( ) ;
Сообщить( ОписаниеОшибки( ) ) ;
Объект. Application. Quit( ) ;
Объект = Неопределено ;
КонецПопытки ;
КонецПроцедуры
Написал Nikola23 - http://infostart.ru/public/67727/ Категория:
Работа с Microsoft Office и OpenOffice