Имя: Пароль:
1C
1С v8
Печать в word
0 ИУБиПовиц
 
30.07.12
13:38
Здравствуйте. На текущий момент есть печатная форма, которая печатается из документа в табличный документ. Необходимо переделать, что бы печатолось в word. Собственно переделал, но некоторые параметры не заполняются, логику я понять толком не могу. вот код.

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

               Если МассивИменПараметров.Найти(Ячейка.Параметр) = Неопределено тогда
                   МассивИменПараметров.Добавить(Ячейка.Параметр);
               КонецЕсли;
           ИначеЕсли Ячейка.Заполнение = ТипЗаполненияОбластиТабличногоДокумента.Шаблон Тогда
               //выделим все параметры в шаблоне в отдельные строки

               ТекстШаблона = Ячейка.Текст;
               ТекстШаблона = СтрЗаменить(ТекстШаблона, "[", Символы.ПС + "[");
               ТекстШаблона = СтрЗаменить(ТекстШаблона, "]", Символы.ПС);
               Для Счетчик = 1 По СтрЧислоСтрок(ТекстШаблона) Цикл
                   ТекСтрока = СтрПолучитьСтроку(ТекстШаблона, Счетчик);
                   Если Лев(ТекСтрока, 1) = "[" тогда
                       ИмяПараметра = Сред(ТекСтрока, 2);
                       //если такого параметра еще нет, то добавим его

                       Если МассивИменПараметров.Найти(ИмяПараметра) = Неопределено тогда
                           МассивИменПараметров.Добавить(ИмяПараметра);
                       КонецЕсли;
                   КонецЕсли;
               КонецЦикла;
           КонецЕсли;//конец проверки, что в ячейке - текст, параметр или шаблон

       КонецЦикла;//конец обхода по колонкам

   КонецЦикла;//конец обхода по строкам

   Возврат МассивИменПараметров;
КонецФункции


Функция Печать(ДокОбъект, ТабДок,ИзОБработки = ЛОЖЬ) Экспорт

ТабДокСПарам = Новый ТабличныйДокумент;
Списокмакетов = Новый СписокЗначений;
Печать_БезПечати(ДокОбъект,ТабДокСПарам,ИзОБработки,СписокМакетов); //тут собственно старая обработка печати из которой я параметры хочу выдернуть
Макет= ПолучитьМакет("макетВорд");
ОбъектВорд = Макет.Получить();
   
// Документ из объекта и его активация
   
Документ = ОбъектВорд.Application.Documents(1);
Документ.Activate();
   
// Выборка данных
Выборка = ОбъектВорд.Application.Selection;
для каждого Макет из СписокМакетов цикл
 знч = макет.Значение;
 ИмяПараметров = ПолучитьМассивИменПараметров(знч);
   для каждого имя из ИмяПараметров цикл
   Замена = Документ.Content.Find;
   попытка
         РезультатЗамены = Замена.Execute("[" + имя + "]", , , , , , , , , знч.Параметры[имя], );
   исключение
     Сообщить("не могу вывести " +  "[" + имя + "]" +  знч.Параметры[имя]);
   КонецПопытки;
           
           
 КонецЦикла;
               
КонецЦикла;
   
       
ОбъектВорд.Application.Visible = Истина;
ОбъектВорд.Activate();
1 Масянька
 
30.07.12
13:43
По коду - вроде (!) все правильно.
Какие параметры не заполняются?
2 ИУБиПовиц
 
30.07.12
13:56
Да он как то их по своему разумению заполняет-не заполняет, я пока и непойму в чем беда..
3 ИУБиПовиц
 
30.07.12
14:02
(1) не знаете Документ.Content.Find чувствителен к регистру? поиск по всему доку идет или первый попавшийся?
4 Масянька
 
30.07.12
14:05
[Перем] - именно так и надо искать/менять.
Таблицы, надписи - так такой алес капут....
5 ИУБиПовиц
 
30.07.12
14:14
Все разобрался, дело было в обычных 95%(прокладке между стулом и компьютером:)) иногда параметры имели тип справочник, и в этом случае надо было пихать спр.наименование..
Программист всегда исправляет последнюю ошибку.