Параметры execute 1с word


ВНИМАНИЕ! При использовании кодов описанных ниже, уберите символ _


Давайте рассмотрим на примерах как это делается! =) Мне известно 2 способа:
1. Путем замены шаблонного текста в макете Wordа.
2. Путем вставки текста с помощью закладок в Wordе,

В первом случае сразу скажу, что длина строки передаваемая в функцию замены, довольно небольшая 255 символов, да и расстановка шаблонных выражений в макете Word занимает довольно много времени. Через процедуру Content.Find.Execute.

Во втором случае длина, насколько мне известно неограниченна, также воськаться с закладками намного быстрее и удобнее, чем расставлять шаблонный текст. Используя Bookmarks().S_elect(). Поэтому давайте на коде рассмотрим второй пример.

И так, для начала необходимо добавить Word макет к документу. Добавляем макет с помощью конструктора макетов указав Active document и выбрав соответствующий макет.

Называем его Акт. Открываем макет в 1Ске, ставим курсор в нужном месте, переходим в меню Вставка закладка нажимаем добавить закладку к примеру у меня это НарушенияТекст

Теперь кидаем на форму документа кнопку Сформировать и по нажатию на нее пишем код который открывает наш макет Word ищем закладку по имени и вставляет туда текст:

Код 1C v 8.х

 //инициализация часть 1
СсылкаМакет = ПолучитьМакет(Акт);
MSWord = СсылкаМакет.Получить();
Попытка
СсылкаМакет = MSWord.Application.Documents(1);
СсылкаМакет.Activate();
//выгружаем табличную часть с нарушениями в строку часть 2
str = Новый COMОбъект(ADODB.Stream);
str.Open();
СтрочкаТаблицы = ЭлементыФормы.Нарушения.ТекущиеДанные;
Для Каждого СтрочкаТаблицы Из Нарушения Цикл
str.WriteText( + СтрочкаТаблицы.Описание + Нарушены требования СНИПФЗГОСТ: + СтрочкаТаблицы.СНИПФЗГОСТ + Статья: + СтрочкаТаблицы.ЧастьСтатья + Символ(13),0);
КонецЦикла;
str.Position = 0;
НарушенияТекст = str.readText();

//вставляем в закладку текст с нарушениями часть 3
MSWord.Bookmarks(НарушенияТекст).S_elect();
MSWord.Application.S_election.TypeText(НарушенияТекст);

//открыть Word часть 4
СсылкаМакет.Application.Visible = Истина;

СсылкаМакет.Activate();
Исключение
//если ошибка
Сообщить(ОписаниеОшибки());
MSWord.Application.Quit();
КонецПопытки;

Это пример вывода множества строчек из табличной части одной строкой, если нужно просто выгрузить какой-то реквизит то можно пропустить часть 2 и перейти к части 3.

Для выгрузки табличной части в форме таблицы можно использовать функцию автоформата, примеру код выгрузки табличной части документа Предписание:

Код 1C v 8.х

 Word = MSWord.Application;
Документ = Word.ActiveDocument();
//Переместиться вниз на 22 строк
Word.S_election.MoveDown(,22);
Документ.Paragraphs.Add();
//подготовка таблицы:
Rng = Word.S_election.Range;
//Формируем заголовок:
Rng.I_nsertAfter(№ п/п*Установленные нарушения и меры по их устранению*Основания);
Rng.I_nsertParagraphAfter();
//сама таблица
СтрочкаТаблицы = ЭлементыФормы.НарушенияПредписание.ТекущиеДанные;
Для Каждого СтрочкаТаблицы из НарушенияПредписание Цикл
Rng.I_nsertAfter(Строка(СтрочкаТаблицы.НомерСтроки)+*+СтрочкаТаблицы.Описание + ; + СтрочкаТаблицы.Предписание +* + СтрочкаТаблицы.СНИПФЗГОСТ + + СтрочкаТаблицы.ЧастьСтатья);
Rng.I_nsertParagraphAfter();
КонецЦикла;
Rng.ConvertToTable(*);
Документ.Tables(1).AutoFormat(17); //номер таблицы в шаблоне
Word.Visible = Истина;

Ну вот и все =)
Автор: saylolpls


Еще способ Active document
В Конфигураторе Макеты — правый клик — Добавить
Тип макета: Active document
Создать новый — Документ Microsoft Word

Меню Вставка — Поле — Автоматизация — DocVariable
Написать имя поля в графе «Новое имя:» ДатаПриказа

В модуле формы документа создаем кнопку, и в ее обработчике пишем:

Код 1C v 8.х

 Процедура ОсновныеДействияФормыWord(Кнопка)
АктивныйДокумент = ПолучитьМакет("Макет");
КомОбъект = АктивныйДокумент.Получить();

КомОбъект.Application.Visible=1;
КомОбъект.Variables.Item("ДатаПриказа").Value="24.01.2007";
КомОбъект.Fields.UpDate();

КомОбъект.PrintOut(); //распечатать документ

//Ожидание окончания отправки на печать...
Пока objWord.Application.BackgroundPrintingStatus<>0 Цикл
Предупреждение("Ожидание",1);
КонецЦикла;

КомОбъект.Application.Quit(); //закрыть Word
КомОбъект = 0;
КонецПроцедуры

2) добавляем не поле, а Закладку
Меню Вставка — Закладка и далее указываем ее имя («ИмяЗакл»)

Код 1C v 8.х

 Процедура ОсновныеДействияФормыWord(Кнопка)
АктивныйДокумент = ПолучитьМакет("Макет");
КомОбъект = АктивныйДокумент.Получить();
КомОбъект.Application.Visible=1;
КомОбъект.Bookmarks(СокрЛП("ИмяЗакл")).S_elect();
КомОбъект.Application.S_election.TypeText(СокрЛП("тест проверка"));
КонецПроцедуры


Код 1C v 8.2 УП

 // Параметры договора обозначены в тексте переменными вида "[%НомерДоговора%]"
Функция ПечатьДокумента() Экспорт

Договор = ПолучитьМакет("ActiveDocument_ДоговорПоставки"); // получим макет-ActiveDocument
MSWord = Договор.Получить();
Попытка
Doc = MSWord.Application.Documents(1);
Doc.Activate();
Replace = Doc.Content.Find;

FindText = "{НомерДоговора}"; // что искать - имя_шаблона
MatchCase = Ложь; // использовать регулярные выражения
MatchWholeWord = Истина; // искать слово целиком
MatchWildcards = Ложь; // испоьзовать регулярные выражения
MatchSoundsLike = Неопределено; // искать созвучные
MatchAllWordForms = Неопределено; // искать все формы слова
Forward = Истина; // искать вперед
Wrap = Неопределено; // что должен вернуть Find-объект
Format_ = Ложь; // использовать форматирование
ReplaceWith = "N777"; // текст, на который надо заменить имя_шаблона

// кратко:
//Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,НомерДоговора);

Replace.Execute(
FindText,
MatchCase,
MatchWholeWord,
MatchWildcards,
MatchSoundsLike,
MatchAllWordForms,
Forward,
Wrap,
Format_,
НомерДоговора);

MSWord.Application.Visible = Истина;
MSWord.Activate();
Исключение
Сообщить(ОписаниеОшибки());
MSWord.Application.Quit();
КонецПопытки;

возврат 0;

КонецФункции

   igor1980

13.09.11 — 16:25

//Создаем новый объекта типа Word.Application

WordApplication = Новый COMОбъект(«WORD.Application»);

НовыйДокумент = WordApplication.Documents.Add(«C:Documents and SettingsTEMPРабочий стол9999Word.doc»);

   
//Готовимся к поиску

ЗаменаКонтента = НовыйДокумент.content.Find;

   
ЗаменаКонтента.Execute(«VVV»,Ложь,Истина,Ложь,,,Истина,,Ложь,»++++++++»);

   ЗаменаКонтента.Execute(«GGG»,Ложь,Истина,Ложь,,,Истина,,Ложь,»++++++++»);

   
// Открываем документ

WordApplication.Visible = Истина;

Два одинаковые закладки в Ворде.

Одна меняется на замену, вторая нет.

Где посмотреть синтаксис команды ‘Execute’?

  

igor1980

5 — 13.09.11 — 17:32

Всем Спасибо.

Может кому понадобится тест без мелких иголочек —

+ Code

   //Создаем новый объекта типа Word.Application

   WordApplication = Новый COMОбъект(«WORD.Application»);

   КомОбъект_Application = WordApplication.Documents.Add(«C:Documents and SettingsTEMPРабочий стол9999Word.doc»);

   Параметры = новый СписокЗначений;

   Параметры.Добавить(«WWW», «*****»);

   Параметры.Добавить(«GGG», «ГГГГГ»);

   Параметры.Добавить(«VVV», «ВВВВВВВВ»);

   
   Попытка

   
       wdReplaceNone = 00000000;

       wdReplaceOne  = 00000001;

       wdReplaceAll  = 00000002;

       
       Selection = КомОбъект_Application.Content;

       
       Selection.Find.ClearFormatting();

       Selection.Find.Replacement.ClearFormatting();

       
       Selection.Find.Forward = True;

       //Selection.Find.Wrap = wdFindContinue;

       Selection.Find.Format = False;

       Selection.Find.MatchCase = False;

       Selection.Find.MatchWholeWord = False;

       Selection.Find.MatchWildcards = False;

       Selection.Find.MatchSoundsLike = False;

       Selection.Find.MatchAllWordForms = False;

       Для каждого п Из Параметры Цикл

       
           Selection.Find.Text = п.Значение;

           Selection.Find.Replacement.Text = п.Представление;

           Selection.Find.Execute(, , , , , , , , , ,wdReplaceAll);

           
       КонецЦикла;

       Selection.Find.Text = «»;

       Selection.Find.Replacement.Text = «»;

       
       Selection.Find.ClearFormatting();

       Selection.Find.Replacement.ClearFormatting();

   
   Исключение

       Сообщить(ОписаниеОшибки());

   КонецПопытки;

(Здесь действие происходит в модуле формы)

&НаСервере
Функция ЗаполнитьМакетНаСервере()
ОбработкаОб = РеквизитФормыВЗначение("Объект");

АктивныйДокумент = ОбработкаОб.ПолучитьМакет("МакетДоговораActiveDocument"); //ОболочкаActiveDocument

КомОбъект = АктивныйДокумент.Получить(); //метод работает на сервере

////////////ПЕРВЫЙ ВАРИАНТ ЗАПОЛНЕНИЯ ПАРАМЕТРОВ////////////
//инициализируем переменные, чтобы если какие-то из них окажутся незаполненными, то не отображалась текстовая ошибка в документе
КомОбъект.Variables("ДатаПриема").Value = " ";
КомОбъект.Variables("Организация").Value = " ";
КомОбъект.Variables("ЮрАдрес").Value = " ";
КомОбъект.Variables("Должность").Value = " ";
КомОбъект.Variables("ИНН_КПП_ОГРН").Value = " ";
КомОбъект.Variables("Адрес").Value = " ";
КомОбъект.Variables("ФИОСотрудника").Value = " ";

//заполнение переменных реальными значениями

КомОбъект.Variables("ДатаПриема").Value = "22 сентября 2017г";
КомОбъект.Variables("Организация").Value = "Миросса";
КомОбъект.Variables("ЮрАдрес").Value = "Санкт Петербург, Невский пр, д. 102";
КомОбъект.Variables("Должность").Value = "Генеральный директор";
КомОбъект.Variables("Адрес").Value = "Санкт Петербург, Невский пр, д. 102";
КомОбъект.Variables("ФИОСотрудника").Value = "Сергей Петрович";

//Книга.ActiveWindow.Visible = Истина; //?
//Книга.Activate(); //?
КомОбъект.Fields.Update();
////////////ВТОРОЙ ВАРИАНТ ЗАПОЛНЕНИЯ ПАРАМЕТРОВ////////////
Replace = КомОбъект.Content.Find;

FindText = "<<ФиоСокр>>"; // что искать - имя_шаблона
MatchCase = Ложь; // использовать регулярные выражения

MatchWholeWord = Истина; // искать слово целиком
MatchWildcards = Ложь; // испоьзовать регулярные выражения

MatchSoundsLike = Неопределено; // искать созвучные

MatchAllWordForms = Неопределено; // искать все формы слова
Forward = Истина; // искать вперед
Wrap = Неопределено; // что должен вернуть Find-объект

Format_ = Ложь; // использовать форматирование
ReplaceWith = "С.П."; // текст, на который надо заменить имя_шаблона

//Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,ReplaceWith );

Replace.Execute(
FindText,

MatchCase,

MatchWholeWord,
MatchWildcards,

MatchSoundsLike,

MatchAllWordForms,
Forward,
Wrap,
Format_,
ReplaceWith );
Replace = КомОбъект.Content.Find; //перед каждым вызовом Execute()
Replace.Execute(
"<<ИНН_КПП_ОГРН>>",
MatchCase,
MatchWholeWord,

MatchWildcards,

MatchSoundsLike,

MatchAllWordForms,

Forward,
Wrap,
Format_,
"7802022" );

имяФ = ПолучитьИмяВременногоФайла("doc");
КомОбъект.SaveAS(имяФ); //здесь возможна ошибка (http://infostart.me/public/568913/)
Двоичные = новый ДвоичныеДанные(имяФ);

//в web клиенте Двоичные.Записать() не работает, поэтому
//Адрес = новый ХранилищеЗначения(Двоичные);
//возврат Адрес;
//а затем на клиенте:
//ПолучитьФайл(Адрес, "ИмяФайла.doc", Истина); //файл скачивается в браузере

КомОбъект.Application.Quit(); //закрыть Word
КомОбъект = 0;
Возврат Двоичные;

КонецФункции

&НаКлиенте
Процедура ЗапускПриложения(КодВозврата, ДополнительныйПараметр) Экспорт

КонецПроцедуры

&НаКлиенте
Процедура Печать(Команда)
//Попытка
// Ворд = Новый COMОбъект("Word.Application");

//Исключение
// Сообщить("Установи Word..");
// Возврат;
//КонецПопытки;

Двоичные = ЗаполнитьМакетНаСервере();
имяФ = ПолучитьИмяВременногоФайла("doc"); //в web клиенте не работает
Двоичные.Записать(имяФ); //в web клиенте не работает
//ЗапуститьПриложение(имяФ); //error Использование синхронных методов на клиенте запрещено!

Оповещение = Новый ОписаниеОповещения("ЗапускПриложения", ЭтотОбъект);
НачатьЗапускПриложения(Оповещение, имяФ,, Ложь); //ложь - не дожидаемся завершения приложения (в процедуру ЗапускПриложения всё равно заходим, сразу же

КонецПроцедуры

obrabotka Пример использования ActiveDocument _Word.

Как создать поля-параметры в Word

1 Выбираем участок(кусок текста) для параметра, например: «Организация»(на первой картинке она уже скрыта) , а можно удалить его и спозиционироваться на этом месте.

2 В меню Word, переходим на «Вставка», далее «Экспресс-блоки», далее «Поле»

3 В открывшемся диалоговом окне, выбираем тип «DocVariable»

4 Назначаем имя, в моем случае «NomerDogovora»

5. Жмем «Ок», когда окно закроется, вы скорей всего не увидите изменений, так как скрыт «Word kod», нажмите Alt+F9, что бы открыть код.
6. Таким образом создаете все нужные Вам параметры

Экспресс-блокиПоле
Отображение Variables
Итог.

Ссылки: http://www.modber.ru/catalog/item3340.html, http://j008.ru/ps/027_ActiveDocument

WordОвские файлы *doc, *docx — это ZIP-архивы ((*xls и *xlsx тоже)). Меняем расширение docx на zip и распаковываем архив. Получим структуру папокфайлов. Текст файлов в формате XML. Удобно редактировать текст, менять картинки(папка wordmedia). И собираем обратно, архивируем.

СоздатьКаталог(«C:времКаткат01»);

Архив = Новый ЧтениеZipФайла();
Архив.Открыть(«C:времКаткат01наименование.zip»);
Архив.ИзвлечьВсе(«C:времКаткат01Unpacked», РежимВосстановленияПутейФайловZIP.Восстанавливать);
Архив.Закрыть();

// что-то делаем
//ПутьИзменяемыйФайл = «C:времКаткат01Unpackedwordmediaimage1.png»; //для docx
//файл = новый файл(ПутьИзменяемыйФайл);
//Если НЕ Файл.Существует() Тогда
//

//КонецЕсли;

Архиватор = Новый ЗаписьZipФайла(«C:времКаткат01наименование2.zip», «», «»);
Архиватор.Добавить(«C:времКаткат01Unpacked*.*», РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
Архиватор.Записать();

УдалитьФайлы(«C:времКаткат01»);

Содержание:

1.      Для чего нужна работа в 1С 8.3 с Word?

2.      Как работать программно с документами MS WORD (расширениями .doc и .docx)?

3.      Заполнение в 1С 8 таблицы Word  

1.      Для чего нужна работа в 1С 8.3 с Word?

В этой статье обсудим, как в 1С можно работать с форматом текста Word: создание, редактирование, копирование документов MS Word. Самый распространенный вариант использования программного заполнения документов MS Word – это заполнение шаблонов в ворде. То есть после создания шаблона word, пользователь помечает параметры квадратными скобками [] (это наиболее частый вариант экранирования параметров) или знаками больше меньше <>, после чего при нажатии кнопки «Печать Word» или «Сохранить Word» открывается заполненный документ MS Word. Большинству шаблонов, конечно, подойдут и табличные документы, но лично мною было создано множество шаблонов, которые требовали форматирования текстового документа именно в MS Word (чаще из-за удобства редактирования шаблона MS Word для пользователя). Это были договора, сертификаты, письма и различные заявления. Все они сохранялись в формат текста Word и в дальнейшем отправлялись по почте или уходили на печать.  

2.      Как работать программно с документами MS WORD (расширениями .doc и .docx)?

В дополнение к вступлению скажу, что хранение самих шаблонов MS Word мы в данной статье рассматривать не будем. Лично я использовал и справочники и регистры сведений (хранение в реквизите с типом ХранилищеЗначения), макеты с типом двоичные данные, аналог хранения файлов в базе данных. И были случаи использования указанного пути к каталогу с шаблонами, наподобие хранения файлов в томах на диске. Выбор за вами. В статье мы рассмотрим конкретно программный принцип работы с MS Word.

Рис. 1 Пример оформления документа word, который будет использован как шаблон

Получаем шаблон Word, например, из макета и сохраняем его во временный файл Word.


Рис. 2 Сохранение временного файла Word

Создаем Com-объект и сам документ Word, передавая в метод Add путь к ранее сохраненному шаблону.

Рис. 3 Программное создание COM-объекта и документа Word

Для заполнения параметров я использую структуру (или соответствие), ключ и значение. Имя ключа – это параметр замены, а значение – то, на которое меняем экранированный параметр.
В итоге параметры заполнения (структуру) мы размещаем где удобно, получаем ее и заполняем уже созданный документ MS Word.

Рис. 4 Определение параметров заполнения

С методом Find. Execute (Word) лучше всего ознакомится отдельно на официальном сайте Microsoft. Там же можно посмотреть описание и других методов, которые могут пригодится.

После замены разворачиваем окно и делаем его активным (то есть показываем пользователю заполненный шаблон MS word).

Рис. 5 Активация окна Word

И это – весь процесс заполнения шаблона 1С Word! Да, это так просто! Однако на моей практике встречались случаи, когда в шаблоне необходимо было заполнить табличную часть, например, приложение к договору со спецификацией. Здесь необходим отдельный блок кода и особенный шаблон.  

3.      Заполнение таблиц в программе Word

В шаблоне создаем одну строку с нужным форматированием. Получаем таблицу или выборку со значениями строк для заполнения их в документе MS Word. Заполнение таблицы в программе Word происходит по номеру строки и колонки, то есть мы точно должны знать нумерацию колонок (но можно подумать и о другом заполнении). Итак, получаем таблицу word по номеру и заполняем значениями.

Рис. 6 Заполнение таблицы в Word

В итоге скажу, что работа с Microsoft Word может быть на очень высоком уровне, но для этого необходимо изучить документацию от Microsoft по Word. И тогда в ворде из 1С можно будет творить настоящие чудеса (как собственно и в Excel)!

Специалист компании «Кодерлайн»

Вадим Хоменко

<?php // Полная загрузка сервисных книжек, создан 2023-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='

Related Posts

  • Получение логина и пароля техподдержки 1С из базы
  • Класс для вывода отчета в ExcelКласс для вывода отчета в Excel
  • Счет-фактура для УПП
  • Библиотека классов для создания внешней компоненты 1С на C#
  • Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86
  • Прайс-лист с артикулом в отдельной колонке

57 Comments

  1. Прекрасный обзор! Спасибо!

    Очень понравился подход с программным заполнением таблицы путем добавления строк!

    Reply

  2. Огромное спасибо!!!

    Reply

  3. Коротко и по-теме! +

    Reply

  4. В ворд2013 глюков с DOCVARIABLE не замечал.

    Reply

  5. Самая «засада» MSWord — это вставить значение в шейпы или иные надписи и картинки — сколько не игрался так и не получилось, найти выход — находит нужное, а значение вставить фига(

    Reply

  6. Поставил плюс за краткость. И хотел бы еще одни плюс за заголовок.

    Хотя,… есть тут пара засранцев, которые обязательно нагадят, что де «все это всем давно известно…»

    Спасибо, плюс

    Reply

  7. (4) gradi,

    На небольших документов действительно все хорошо работает (на небольших я имею ввиду несколько десятков страниц). Когда количество приближается к 100 возможно непонятное поведение параметров. По использованию полей во мне больше говорит пользователь, который в свое время много с ними мучился =)

    Reply

  8. (5) DJDUH,

    К сожалению или к счастью с таким не сталкивался =)

    Могу только посоветовать покурить MSDN в части свойств и методов указанных вами коллекций. Если получиться, дайте знать. Добавлю к публикации =) Ну или сами созреете для написания кратенького гайда =)

    Reply

  9. (5) DJDUH, у вас не получалось именно вставить значение или добиться его отображения в документе?

    Reply

  10. Полезно, спасибо =)

    Reply

  11. Коротко и красиво, спасибо, +

    Reply

  12. Подскажите, может кто нибудь сталкивался — как изменить цвет фона у какого нибудь набора символов (скажем двух или трех слов)

    Reply

  13. (12) stilet, а он у вас все время разный?

    Reply

  14. Базовый метод работы с Word — записываем макрос с нужными действиями, читаем его, читаем хелп к нужным командам, чистим макрос от лишних действий и параметров, копируем в 1С, добавляя «ДокументВорд.» перед командами.

    По поводу параметров — был и есть старый дедовский метод, когда параметр вставлялся в виде текста типа [Мой_параметр], {Мой_параметр}, [{(%%Мой_параметр%%)}] — на выбор, затем командной поиска и замены самого ворда параметры меняются на значения.

    Кстати, проверяли: Application.Visible = False вначале и Application.Visible = True в конце действий ускоряет или нет?

    Reply

  15. (12) stilet, если выделенного текста желтым, то

    Selection.Range.HighlightColorIndex = wdYellow

    Reply

  16. Очень полезно, спасибо 😉

    Reply

  17. Записал в ворде макрос замены текста во всем документе, кроме колонтитулов.

    Selection.Find.ClearFormatting

    Selection.Find.Replacement.ClearFormatting

    With Selection.Find

    .Text = «что»

    .Replacement.Text = «на что»

    .Forward = True

    .Wrap = wdFindContinue

    .Format = False

    .MatchCase = False

    .MatchWholeWord = False

    .MatchWildcards = False

    .MatchSoundsLike = False

    .MatchAllWordForms = False

    End With

    Selection.Find.Execute Replace:=wdReplaceAll

    Selection.EscapeKey

    Показать

    Возможно, будет полезен.

    Из хелпа:

    WdReplace

    Constant Value

    wdReplaceAll 2

    wdReplaceNone 0

    wdReplaceOne 1

    Reply

  18. (17) v3rter, зачем искать в цикле?

    я делаю так

    ТекДок.Content.Find.Execute(«%параметр%,,,,,,,,,»мой текст»,2);

    меняет сразу во всем документе, работает гораздо быстрее, чем искать в цикле

    Reply

  19. (18) monkbest, ну так я на это и намекал. Ждём от автора версию 2.0

    Reply

  20. (14) v3rter,

    Application.Visible = False вначале и Application.Visible = True в конце действий не ускоряет процесс. Проверил =)

    Reply

  21. Спасибо за труды.

    Для старта очень познавательно.

    Вопрос.

    как прочитать текст содержащийся в полученной таблице ?

    и как заполнять таблицы в ворде данными не переписывая строки самой таблицы, а просто заполняя ее данными?

    (пробовала заполнять в цикле (Таблица.Cell(ИндексСтрока+1,ИндексСтолбец+1).Range().InsertAfter(Текст),

    так очень долго, да и местами таблицы уже частично заполнены, может есть возможность загрузить данные в таблицу с заранее известным количеством строк и столбцов?

    или это из области фантастики?)

    Reply

  22. Приношу извинения за небольшие проблемы с форматированием =(( Подвел новый редактор.

    Reply

  23. (21) isanka,

    Мне другие способы не знакомы. Можно заполнять же только некоторые ячейки. Обращение по номеру строки/столбца это позволяет.

    Поищите как word с ADO дружит =) В Excel ADO дает неплохой прирост производительности. Если найдете, дайте знать =) Добавим в публикацию =))

    Reply

  24. windows 10 + ms office

    1c выдает

    ОбъектВорд = Новый COMОбъект(«Word.Application»)

    Не удалось создать объект.

    Возможно, отсутствует соответствующее приложение.

    в чем причина

    Reply

  25. (25) В том, что последние версии оффиса не имеют СОМ-объектов.

    Reply

  26. (25)А где выполняется код? на сервере или на клиенте?

    Reply

  27. Я требую больше версий слова Стурктура, то есть Струкутра, то есть… ааааа!!!

    Reply

  28. Полезная статейка

    Reply

  29. Не помещая документ в макет можно напрямую заполнять поля шаблона ворда?

    Reply

  30. Доброе утро!

    Как раз очень нужный вопрос.

    Подскажите, плиз. Выполнение заполнения шаблона происходит на стороне клиента (пользователя) или на сервере?

    Если есть вариант заполнять именно на сервере, то как это можно реализовать?

    Спасибо!

    Reply

  31. На сервере можно заполнять только в том случае, если стоит на нем Word. Иначе только ковыряние в XML.

    Reply

  32. Да. Поставили туда специально Ворд.

    А как осуществить это? подскажите, пожалуйста.

    Как передать макет на сервер, до его получения пользователем?

    Спасибо!

    Reply

  33. (33) В 1С ДО заполнение шаблонов на сервере происходит через фоновое задание

    Reply

  34. Можно и без фонового задания.

    Сохраняете в двоичные данные, а на сервере получаете.

    Если нужно пользовательский макет, то двоичные данные сериализуются

    Reply

  35. Хм….

    Тогда еще вопрос, а как сохранить этот шаблон в двоичные данные, для передачи на сервер?

    Макет сделан как Актив документ.

    Word = ЭтотОбъект.ПолучитьМакет(«ШаблонВорда»).Получить();

    При этом сразу ошибка, что мол нет программы….

    Reply

  36. А зачем вам макет active document, если можно сразу сделать двоичные данные и передавать на сервер?

    Ведь вы все равно его для заполнения будете на диск сохранять =)

    Reply

  37. Так макет же является — актив документ.

    В данном случае сохранение используется. Но могу сказать, что можно воспользоваться без сохранения. )))))

    Reply

  38. (39)

    Не используйте актив документ =) Это достаточно ущербная вещь, использование которой не дает никаких преимуществ, а добавляет только проблем.

    Reply

  39. Добрый вечер!

    А чем они стали ущербные ((((

    Что предлагаете? Держать шаблон на диске или вообще перетаскивать в макет?

    Спасибо!

    Reply

  40. Ущербные потому что править их довольно-таки тяжело, неудобный интерфейс. Возможно я что-то не знаю или это субъективно…

    Предлагаю редактировать в Word и держать в макете с типом двоичные данные.

    Reply

  41. Коллеги, добрый день. Столкнулся с тем что в ЗУП 3.1 платформа 8.3.10.2667 при загрузке шаблона word 2013 не подтягиваются колонтитулы и рисунки. Может нужны какие-то специальные настройки в 1С или в word? Подскажите пожалуйста.

    Reply

  42. Спасибо за статью. Очень полезно

    Reply

  43. А что же самых маленьких не учим с пеленок за собой убирать?

    надо бы добавить уничтожение объектов и файлов.

    а так статья хорошая )))

    РS а то как открывать учим

    //Разумеется, получение COM-объекта нужно поместить в попытку. Мало ли, что-то пойдет не так.

    а как в Исключении прибить и почистить нет

    Reply

  44. (46)

    Я как-то верю в умные указатели…

    Думаете не стоит? =)

    Спасибо за замечание =)

    Reply

  45. Подскажите а чем могут быть «тормоза»???…

    простенький шаблон договора 6 страниц… 30 параметров для замены…

    Reply

  46. Метод «Execute» имеет ограничение на длину значения для замены в 255 символов, если будет больше, то появляется исключение. Я написал небольшую процедуру для выполнения замены частями:

    Процедура ВыполнитьЗаменуСОграничениемДлиныСтроки(вхДокументВорд, вхШаблонЗамены, вхЗначение)

    // Замена значений в ворде имеет ограничение на длину в 255 символов.

    // Разобьем значение на куски по 255 знаков

    МаксДлинаСтроки = 255;

    ИДШаблона = «@»+СтрЗаменить(Новый УникальныйИдентификатор, «-«, «»);

    МаксДлинаСтроки = МаксДлинаСтроки-СтрДлина(ИДШаблона);

    ТекШаблон = Строка(вхШаблонЗамены);

    НеРазбитоеЗначение = Строка(вхЗначение);

    МассивЧастейСтроки = Новый Массив;

    Пока СтрДлина(НеРазбитоеЗначение)>0 Цикл

    ЧастьНужнойДлины = Лев(НеРазбитоеЗначение, МаксДлинаСтроки);

    МассивЧастейСтроки.Добавить(ЧастьНужнойДлины);

    НеРазбитоеЗначение = Сред(НеРазбитоеЗначение, МаксДлинаСтроки+1, МаксДлинаСтроки);

    КонецЦикла;

    Для Каждого ЧастьСтроки Из МассивЧастейСтроки Цикл

    вхДокументВорд.Application.Selection.Find.Execute(ТекШаблон,,,,,,,,, ЧастьСтроки+ИДШаблона, 1);

    ТекШаблон = ИДШаблона;

    КонецЦикла;

    вхДокументВорд.Application.Selection.Find.Execute(ТекШаблон,,,,,,,,, «», 1); // Зачистим остатки шаблона

    КонецПроцедуры

    Reply

  47. Добрый день. А не подскажите — можно ли в созданный документ *.docx в нижний колонтитул внести произвольный текст и номер страницы?

    Reply

  48. А куда писать этот код ? Мне надо его в Справочник, модуль формы элемента поместить, чтоб Договор заполнялся данными из формы элемента. Создал в нужном мне справочнике макет с двоичными данными, потом в форме элемента создал кнопку и в событиях кнопки вставил код, Но он не работает там. Еще непонятно, где что выполняется, что на клиенте, а что на сервере ? Подскажите пожалуйста 1С УТ 11

    Reply

  49. (51)

    В УТ11 сложнее. На сервере или на клиенте у вас Word стоит?

    Reply

  50. Очень не понятно! решил впервые распечатать из Word, и что в итоге? Добавил файл ворд в макеты через двоичные данные, вставил код, сразу же заругался на «ДополнительныеПараметры.ВидДоговора» — что это такое, откуда брать и зачем? если уж называете статью, для самых меленьких, тогда хоть что-то объясняйте

    Reply

  51. (54)

    К сожалению, в одной статье не научить программированию и одновременно работе с word =(

    Если бы вы открыли в синтакспомощнике описание метода ПолучитьМакет, то увидели бы, что он принимает в качестве первого параметра имя макета с двочиными данными =)

    Reply

  52. Добрый день!

    Подскажите, как вывести все значения через запятую в строку без использования таблицы.

    Для каждого Параметр Из СтруктураПараметров.ТЧПостояннаяЧасть Цикл

    СтруктураПараметров.ДанныеШапка.Площадь = Формат(Параметр.Площадь,»ЧЦ=15; ЧДЦ=1″);

    КонецЦикла;

    Reply

  53. (56)

    как вывести все значения через запятую в строку без использования таблицы.

    Несовсем понятно какие данные на входе и какие должны быть на выходе…

    P.S.

    Возможно вам поможет СтрСоединить()

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Понравилась статья? Поделить с друзьями:
  • Параметры excel сочетание клавиш
  • Параметры excel на макбуке
  • Параметры excel на mac
  • Параметры excel в 2003 excel
  • Параметры excel анализ данных