Работа с MS Word из 1С "для самых маленьких"

Публикация № 488556

Разработка - Практика программирования

MS WORD

202
Данная статья - попытка собрать сведения по работе (на начальном уровне) с MS Word в одном месте. На infostart.ru и других сайтах полно похожего материала, и при наличии должной усидчивости это все можно найти. Хотелось собрать основные моменты в одном месте.

Публикация - своего рода памятка, содержащая примеры кода для:

1. заполнение шаблона Word данными из 1С;
2. заполнение колонтитулов Word данными из 1С;
3. заполнение таблицы в Word данными из 1С;

Начало работы

В большинстве случаев перед нами ставится следующая задача: 
Нужно открыть документ Word, заполненный данными из 1С.

Для этого нам нужно подготовить шаблон документа Word. Не путайте это с Word Template, специальные файлы Word, которые содержат настройки документов для многократного использования. Нам нужен обычный вордовский документ с расширениеми *.docx или *.doc.  А далее поместить этот документ в макет с двоичными данными.

Попытка
 //Получаем макет из двоичных данных
   Шаблон = ПолучитьМакет(ДополнительныеПараметры.ВидДоговора);
 ИмяФайла = ПолучитьИмяВременногоФайла(".docx");
   Шаблон.Записать(ИмяФайла);
 //Создаем COM-объект для работы с Word
   ОбъектВорд = Новый COMОбъект("Word.Application");
   ОбъектВорд.Documents.add(ИмяФайла);
 //В Word можно открывать в одном приложении несколько документов, поэтому ОбъектВорд.Application.Documents - это коллекция открытых документов.
 //В нашем случае документ открыт всегда один
   ДокументВорд = ОбъектВорд.Application.Documents(1);
   ДокументВорд.Activate();
   Исключение Сообщить("Ошибка при запуске приложения "+ОписаниеОшибки());
 КонецПопытки;
//Разумеется, получение COM-объекта нужно поместить в попытку. Мало ли, что-то пойдет не так.

Читатель может справедливо заметить, что используется модальный вызов, и погрозить автору пальцем. И будет прав.

//Создадим структуру параметров документа
 ПараметрыДокумента = ПодготовитьСтрукутруПараметров();
 //Заполним структуру параметров документа
 ЗаполнитьСтруктуруПараметров(ПараметрыДокумента);

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

Углубимся немножко в принципы работы Word...

Каждый документ Word разделен на разделы, которые состоят из страниц.

Для каждого раздела есть возможность создавать свою нумерацию элементов, уникальные колонтитулы и настройки параметров страницы. Так, например, чтобы повернуть одну из страниц (вывести на печать как альбомную), нужно создать под неё отдельный раздел.


Каждая страница Word разделена на несколько областей:

  • Верхний колонтитул 
  • Основной текст
  • Нижний колонтитул

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

//Объект, содержит весь основный текст из всех разделов ДокументВорд.Content
//Объект содержит коллекцию разделов документа
ДокументВорд.Sections
//В каждом разделе есть своя коллекция для верхних колонтитулов
ДокументВорд.Sections(1).Headers
//И своя коллекция для нижних колонтитулов
ДокументВорд.Sections(1).Footers
//При этом, если стоит галочка "Уникальный колонтитул для первой страницы", то коллекции Headers и Footers будут содержать два элемента
 

Заполнение пользовательских параметров

При обращении к этим коллекциям мы можем выполнять в них поиск и получать встроенные объекты, например, таблицы.

Теперь мы более-менее поняли, как обращаться к областям Word, можем в них пошуровать и выполнить замену наших параметров:

//Переберем все параметры и заменим их в документе
Для каждого Параметр Из ПараметрыДокумента Цикл
  ВыполнитьЗамену(ДокументВорд.Content, Параметр.Ключ, Параметр.Значение);
//Ищим вхождения параметра в верхнем колонтитуле
  ВыполнитьЗамену(ДокументВорд.Sections(1).Headers.Item(1).Range(), Параметр.Ключ, Параметр.Значение);
//Ищим вхождения параметра в нижнем колонтитуле первой и последующих страниц               
  ВыполнитьЗамену(ДокументВорд.Sections(1).Footers.Item(1).Range(), Параметр.Ключ, Параметр.Значение);    
  ВыполнитьЗамену(ДокументВорд.Sections(1).Footers.Item(2).Range(), Параметр.Ключ, Параметр.Значение);
КонецЦикла;

//Выполнить поиск и замену Функция
ВыполнитьЗамену(знач Object, Параметр, Значение)
  Object.Find.Execute(Параметр,,,,,,,,,Значение,2)
КонецФункции
 

Рассмотри подробнее метод Execute. Его параметры идентичны диалоговуму окну при замене/поиске непоседресвенно из MS Word: 

А вот и основные параметры (вольный перевод справки MSDN):

  1. Искомый текст - Строка - Текст для замены. Текст может содержать специальные параметры. Например, ^p - абзац, ^t - табуляция
  2. Чувствительность к регистру - Булево - Если истина, то поиск будет осуществляться с учетом регистра
  3. Слова целиком - Булево - Если истина, то ищутся слова целиком. Вхождение слов не учитываются. Например, при поиске слова дом будет пропущено слово домашний
  4. Использовать подстановочные знаки - Булево - Если истина, то используются встроенные регулярные выражения.
  5. Искать похожие - Булево - Если истина, то результат поиска будет содержать похожие слова
  6. Искать все формы - Булево - Если истина, то результат поиска будет содержать различные формы слов.
  7. Поиск сначала - Булево - Если истина, то будет осуществляться с начала до конца документа
  8. Охват - WdFindWrap - Опредяляет направление поиска
  9. Формат - Format - Формат искомого текста
  10. Строка замены - Строка - Строка, на которую будет заменен исходный текст
  11. Количество замен - WdReplace - Определяет сколько раз выполнять замену
  12. и т.д.

WdReplace - Constant Value:
wdReplaceAll 2 
wdReplaceNone 0 
wdReplaceOne 1

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

//УправлениеПечатьюMSWordКлиент c незначительными изменениями для конфигурации УПП 1.3
Функция ВыполнитьЗамену(знач Object, Параметр, Значение)
  СтрокаПоиска = "[" + Параметр + "]";
  СтрокаЗамены = Строка(Значение);
//Необходимо выделить областей, в которой мы осуществляем замену
  Object.Select();
//Получаем выделенную область
  Selection = Object.Application.Selection;
//Найдем все вхождения параметра и заменим его на нужное нам значение
  FindObject = Selection.Find;
  FindObject.ClearFormatting();
  Пока FindObject.Execute(СтрокаПоиска) Цикл
    Если ПустаяСтрока(СтрокаЗамены) Тогда
      Selection.Delete();
    Иначе
      Selection.TypeText(СтрокаЗамены);
    КонецЕсли;
  КонецЦикла;
//Отменим выделение
  Selection.Collapse();
КонецФункции

Уже получив выделенную область можно отредактировать стиль текста, шрифт и т.д.

//Редактирование шрифта
 Selection.Font
//Редактирование цвета
 Selection.HighlightColorIndex

Также есть второй подход, использующий такой объект Word, как поля. Мне он не очень нравится, т.к. в больших документах, порядка 100 страниц, эти поля начинают глючить (исчезать, не подставлять нужные значения) и прочая ерунда. Ну по крайней мере в Word 2007. Но я его все равно приведу:  

При подготовке шаблона в тело документа необходимо навставлять полей с типом DOCVARIABLE (можно вставлять горячими клавишими Ctrl+F9).

Доступ к таким полям можно получить следующим нехитрым образом:

ДокументВорд.Variables.Item(НазваниеПараметра).Values

Заполнение таблиц по шаблону

Итак, мы заполнили параметры в основном тексте документа, заменили параметры в колонтитулах, но у нас еще есть одна неприятность - нужно заполнить таблицу.

Подход, описанный ниже, годится только для таблиц с заранее известным форматом. Т.е. мы можем как угодно отформатировать таблицу и её строки изначально. Но потом изменять довольно-таки проблематично.

К таблицам можно получить доступ через области документа.

//Получаем доступ к первой таблице в основном тексте
 Таблица = ДокументВорд.Content.Tables(1)

Далее, получив таблицу, мы работаем с ней по привычной схеме - строки, столбцы.

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

//Данные для заполнения
  ПараметрыТЧ = ПараметрыДокумента.ПриложениеТЧ;
//Нужно оставить шапку и первую строку нетронутой Итератор = 2;
  Таблица = ДокументВорд.Content.Tables(3);
  Для каждого Строка Из ПараметрыТЧ Цикл
//По умолчанию добавляет строку выше первой
    Таблица.Rows.Add();
    ЗаполнитьСтрокуТаблицы(Таблица, Итератор, Строка,"ПП,НоменклатураНаименование,ЕдИзмерения,ЦенаСтрокой",ПараметрыТЧ );
    Итератор = Итератор + 1;
  КонецЦикла;
//Структура шаблонов содержит Наименование колонок и их порядок
  Процедура ЗаполнитьСтрокуТаблицы(Таблица, НомерСтроки, ЗначениеЗаполнения, СтруктураШаблонов,ТаблицаЗначений)
    МассивСтрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтруктураШаблонов,",");
    Итератор = 1;
    Для каждого Строка Из МассивСтрок Цикл
      Если ТаблицаЗначений.Колонки.Найти(Строка) = Неопределено И Строка <> "ПП" Тогда
        Итератор = Итератор + 1;
        Продолжить;
   //Не забываем, что Шапка тоже строка, а при нумерации нам нужно её исключить
      ИначеЕсли Строка = "ПП" Тогда
        Таблица.Cell(НомерСтроки, Итератор).Range().Text = Строка(НомерСтроки-1);
        Итератор = Итератор + 1;
        Продолжить;
      КонецЕсли;
      Таблица.Cell(НомерСтроки, Итератор).Range().Text = Строка(ЗначениеЗаполнения[Строка]);
      Итератор = Итератор + 1;
   КонецЦикла;
КонецПроцедуры
 

Вот, в принципе, и все. Основные вопросы, возникающие при работе с Word, я постарался осветить. Надеюсь, данный обзор поможет вам в работе =)

Спасибо за советы и комментарии:
v3rtermonkbest

Критика только приветствуется. Чем больше замечаний, тем лучше будет гайд =)

202

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Дата
57. Сурикат 264 03.07.19 15:50 Сейчас в теме
(56)
как вывести все значения через запятую в строку без использования таблицы.


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

P.S.
Возможно вам поможет СтрСоединить()
56. rjkjlptq 11 03.07.19 10:51 Сейчас в теме
Добрый день!
Подскажите, как вывести все значения через запятую в строку без использования таблицы.


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

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

КонецЦикла;
55. Сурикат 264 20.06.19 09:15 Сейчас в теме
(54)

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

Если бы вы открыли в синтакспомощнике описание метода ПолучитьМакет, то увидели бы, что он принимает в качестве первого параметра имя макета с двочиными данными =)
54. user1132956 20.06.19 06:48 Сейчас в теме
Очень не понятно! решил впервые распечатать из Word, и что в итоге? Добавил файл ворд в макеты через двоичные данные, вставил код, сразу же заругался на "ДополнительныеПараметры.ВидДоговора" - что это такое, откуда брать и зачем? если уж называете статью, для самых меленьких, тогда хоть что-то объясняйте
53. named_Alexander 21.09.18 13:47 Сейчас в теме
52. Сурикат 264 21.09.18 13:36 Сейчас в теме
(51)
В УТ11 сложнее. На сервере или на клиенте у вас Word стоит?
51. named_Alexander 20.09.18 12:01 Сейчас в теме
А куда писать этот код ? Мне надо его в Справочник, модуль формы элемента поместить, чтоб Договор заполнялся данными из формы элемента. Создал в нужном мне справочнике макет с двоичными данными, потом в форме элемента создал кнопку и в событиях кнопки вставил код, Но он не работает там. Еще непонятно, где что выполняется, что на клиенте, а что на сервере ? Подскажите пожалуйста 1С УТ 11
50. user608357_elpst 14.08.18 17:00 Сейчас в теме
Добрый день. А не подскажите - можно ли в созданный документ *.docx в нижний колонтитул внести произвольный текст и номер страницы?
49. pchelov 16.04.18 16:59 Сейчас в теме
Метод "Execute" имеет ограничение на длину значения для замены в 255 символов, если будет больше, то появляется исключение. Я написал небольшую процедуру для выполнения замены частями:

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

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

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

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

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

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

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

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

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

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

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

КонецЦикла;

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

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

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

КонецЦикла;

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

КонецПроцедуры
48. Forrest_Gump 23.03.18 09:21 Сейчас в теме
Подскажите а чем могут быть "тормоза"???...
простенький шаблон договора 6 страниц... 30 параметров для замены...
Прикрепленные файлы:
47. Сурикат 264 20.03.18 14:21 Сейчас в теме
(46)
Я как-то верю в умные указатели...
Думаете не стоит? =)

Спасибо за замечание =)
46. AlexeyK1 14 20.03.18 13:42 Сейчас в теме
А что же самых маленьких не учим с пеленок за собой убирать?
надо бы добавить уничтожение объектов и файлов.
а так статья хорошая )))

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

а как в Исключении прибить и почистить нет
45. Pavel Rodinchenko 20.02.18 10:54 Сейчас в теме
Спасибо за статью. Очень полезно
44. bondar_vy 08.02.18 12:23 Сейчас в теме
Коллеги, добрый день. Столкнулся с тем что в ЗУП 3.1 платформа 8.3.10.2667 при загрузке шаблона word 2013 не подтягиваются колонтитулы и рисунки. Может нужны какие-то специальные настройки в 1С или в word? Подскажите пожалуйста.
43. artms 172 27.10.17 09:07 Сейчас в теме
42. Сурикат 264 30.09.17 20:01 Сейчас в теме
Ущербные потому что править их довольно-таки тяжело, неудобный интерфейс. Возможно я что-то не знаю или это субъективно...
Предлагаю редактировать в Word и держать в макете с типом двоичные данные.
41. Tanis 30.09.17 18:12 Сейчас в теме
Добрый вечер!

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

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

Спасибо!
40. Сурикат 264 30.09.17 12:25 Сейчас в теме
(39)

Не используйте актив документ =) Это достаточно ущербная вещь, использование которой не дает никаких преимуществ, а добавляет только проблем.
39. Tanis 29.09.17 19:10 Сейчас в теме
Так макет же является - актив документ.

В данном случае сохранение используется. Но могу сказать, что можно воспользоваться без сохранения. )))))
38. Сурикат 264 29.09.17 17:45 Сейчас в теме
А зачем вам макет active document, если можно сразу сделать двоичные данные и передавать на сервер?
Ведь вы все равно его для заполнения будете на диск сохранять =)
37. Tanis 29.09.17 17:13 Сейчас в теме
Хм....

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

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

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

При этом сразу ошибка, что мол нет программы....
36. Сурикат 264 29.09.17 16:25 Сейчас в теме
Эм...
У вас 1с ДО?

Можно и без фонового задания.
Сохраняете в двоичные данные, а на сервере получаете.

Если нужно пользовательский макет, то двоичные данные сериализуются
35. user697645_gonchar.m 29.09.17 15:23 Сейчас в теме
34. tjurikov_ivan 188 29.09.17 15:20 Сейчас в теме
(33) В 1С ДО заполнение шаблонов на сервере происходит через фоновое задание
33. Tanis 29.09.17 15:07 Сейчас в теме
Да. Поставили туда специально Ворд.

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

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

Спасибо!
32. Сурикат 264 29.09.17 12:06 Сейчас в теме
На сервере можно заполнять только в том случае, если стоит на нем Word. Иначе только ковыряние в XML.
31. Tanis 29.09.17 09:53 Сейчас в теме
Доброе утро!

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

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

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

Спасибо!
30. MiniGrad2014 10.08.17 21:47 Сейчас в теме
Не помещая документ в макет можно напрямую заполнять поля шаблона ворда?
29. fish249 03.08.17 09:35 Сейчас в теме
28. HalfZer0 15 02.06.17 12:43 Сейчас в теме
Я требую больше версий слова Стурктура, то есть Струкутра, то есть... ааааа!!!
maXon777; +1 Ответить
27. Сурикат 264 25.11.16 08:38 Сейчас в теме
(25)А где выполняется код? на сервере или на клиенте?
26. sssss_aaaaa_2011 23.11.16 20:33 Сейчас в теме
(25) В том, что последние версии оффиса не имеют СОМ-объектов.
25. freud 2 23.11.16 19:54 Сейчас в теме
windows 10 + ms office
1c выдает

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


Не удалось создать объект.
Возможно, отсутствует соответствующее приложение.

в чем причина
asviridovsky; +1 Ответить 2
24. v3rter 24.05.16 16:16 Сейчас в теме
(21) isanka, Попробуйте Таблица.Cell(ИндексСтрока+1,ИндексСтолбец+1).Range().Text или Таблица.Cell(ИндексСтрока+1,ИндексСтолбец+1).Range.Text

Всё это гуглится, но не на русском: https://msdn.microsoft.com/ru-ru/library/office/ff821612.aspx
23. Сурикат 264 23.05.16 18:12 Сейчас в теме
(21) isanka,
Мне другие способы не знакомы. Можно заполнять же только некоторые ячейки. Обращение по номеру строки/столбца это позволяет.
Поищите как word с ADO дружит =) В Excel ADO дает неплохой прирост производительности. Если найдете, дайте знать =) Добавим в публикацию =))
22. Сурикат 264 23.05.16 18:10 Сейчас в теме
Приношу извинения за небольшие проблемы с форматированием =(( Подвел новый редактор.
21. isanka 23.05.16 14:02 Сейчас в теме
Спасибо за труды.
Для старта очень познавательно.
Вопрос.
как прочитать текст содержащийся в полученной таблице ?
и как заполнять таблицы в ворде данными не переписывая строки самой таблицы, а просто заполняя ее данными?
(пробовала заполнять в цикле (Таблица.Cell(ИндексСтрока+1,ИндексСтолбец+1).Range().InsertAfter(Текст),
так очень долго, да и местами таблицы уже частично заполнены, может есть возможность загрузить данные в таблицу с заранее известным количеством строк и столбцов?
или это из области фантастики?)


20. Сурикат 264 22.05.16 14:09 Сейчас в теме
(14) v3rter,
Application.Visible = False вначале и Application.Visible = True в конце действий не ускоряет процесс. Проверил =)
19. v3rter 19.05.16 10:04 Сейчас в теме
(18) monkbest, ну так я на это и намекал. Ждём от автора версию 2.0
18. monkbest 103 19.05.16 08:07 Сейчас в теме
(17) v3rter, зачем искать в цикле?
я делаю так
ТекДок.Content.Find.Execute("%параметр%,,,,,,,,,"мой текст",2);

меняет сразу во всем документе, работает гораздо быстрее, чем искать в цикле
Daynestro07; zhernikov; gigapevt; Сурикат; +4 Ответить 1
17. v3rter 18.05.16 16:40 Сейчас в теме
Записал в ворде макрос замены текста во всем документе, кроме колонтитулов.

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
Сурикат; +1 Ответить 1
16. sudmorsh 55 18.05.16 16:18 Сейчас в теме
Очень полезно, спасибо ;)
15. v3rter 18.05.16 12:27 Сейчас в теме
(12) stilet, если выделенного текста желтым, то
Selection.Range.HighlightColorIndex = wdYellow
adhocprog; +1 Ответить
14. v3rter 18.05.16 12:24 Сейчас в теме
Базовый метод работы с Word - записываем макрос с нужными действиями, читаем его, читаем хелп к нужным командам, чистим макрос от лишних действий и параметров, копируем в 1С, добавляя "ДокументВорд." перед командами.

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

Кстати, проверяли: Application.Visible = False вначале и Application.Visible = True в конце действий ускоряет или нет?
Zhilyakovdr; gradi; monkbest; +3 Ответить 1
13. Сурикат 264 18.05.16 11:36 Сейчас в теме
(12) stilet, а он у вас все время разный?
12. stilet 50 18.05.16 11:05 Сейчас в теме
Подскажите, может кто нибудь сталкивался - как изменить цвет фона у какого нибудь набора символов (скажем двух или трех слов)
11. AndMax 3 17.05.16 14:43 Сейчас в теме
Коротко и красиво, спасибо, +
10. nni93 13.05.16 15:30 Сейчас в теме
9. gradi 5 13.05.16 13:15 Сейчас в теме
(5) DJDUH, у вас не получалось именно вставить значение или добиться его отображения в документе?
8. Сурикат 264 12.05.16 23:22 Сейчас в теме
(5) DJDUH,
К сожалению или к счастью с таким не сталкивался =)
Могу только посоветовать покурить MSDN в части свойств и методов указанных вами коллекций. Если получиться, дайте знать. Добавлю к публикации =) Ну или сами созреете для написания кратенького гайда =)
7. Сурикат 264 12.05.16 23:17 Сейчас в теме
(4) gradi,
На небольших документов действительно все хорошо работает (на небольших я имею ввиду несколько десятков страниц). Когда количество приближается к 100 возможно непонятное поведение параметров. По использованию полей во мне больше говорит пользователь, который в свое время много с ними мучился =)
6. director04 3580 12.05.16 20:25 Сейчас в теме
Поставил плюс за краткость. И хотел бы еще одни плюс за заголовок.
Хотя,... есть тут пара засранцев, которые обязательно нагадят, что де "все это всем давно известно..."
Спасибо, плюс
5. DJDUH 17 12.05.16 17:14 Сейчас в теме
Самая "засада" MSWord - это вставить значение в шейпы или иные надписи и картинки - сколько не игрался так и не получилось, найти выход - находит нужное, а значение вставить фига(
4. gradi 5 12.05.16 16:44 Сейчас в теме
В ворд2013 глюков с DOCVARIABLE не замечал.
3. pvl_mksv 19 12.05.16 14:25 Сейчас в теме
2. GOOD256 74 12.05.16 13:52 Сейчас в теме
1. maXon777 96 12.05.16 10:30 Сейчас в теме
Прекрасный обзор! Спасибо!

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

См. также

Агрегатные функции СКД, о которых мало кто знает 316

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    9946    ids79    42       

Три костыля. Сказ про фокусы в коде 121

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    7759    YPermitin    67       

Отслеживание выполнения фонового задания 133

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции Разработка

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    8214    ids79    14       

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив 241

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    10333    ids79    24       

Фоновое выполнение кода в 1С - это просто 117

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

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

02.08.2019    9771    avalakh    21       

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты 126

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    9244    ids79    6       

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ 134

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Инструментарий разработчика Практика программирования Разработка

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    8668    ids79    24       

"Меньше копипаста!", или как Вася универсальную процедуру писал 170

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    6200    SeiOkami    48       

Создание отчетов с помощью СКД - основные понятия и элементы 192

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Математика и алгоритмы

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    17370    ids79    16       

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017 176

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Разработка

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    11510    dmurk    134       

Регистры накопления. Структура хранения в базе данных 174

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    17203    YPermitin    27       

Выполнение внешней обработки в фоновом задании 147

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    9810    Eret1k    22       

Выгрузка документа по условию 5

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    4795    m-rv    2       

Как прикрутить ГУИД к регистру сведений 23

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    7330    m-rv    16       

О расширениях замолвите слово... 191

Статья Программист Стажер Нет файла v8 Бесплатно (free) Практика программирования Разработка

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    16321    ellavs    122       

Git-репозитории для 1С-кода (опыт использования при небольших проектах) 200

Статья Программист Стажер Нет файла v8 Windows Бесплатно (free) Практика программирования Разработка

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    12680    ellavs    83       

Трюки с внешними источниками данных 164

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    12797    YPermitin    52       

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS) 162

Статья Программист Нет файла v8 v8::Права Бесплатно (free) Практика программирования БСП (Библиотека стандартных подсистем) Роли и права

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    15424    ids79    9       

EnterpriseData – часть 2. Процесс выгрузки данных 127

Статья Программист Нет файла v8 v8::УФ Россия Бесплатно (free) Практика программирования Обмен через XML

Основные этапы выгрузки данных через ED, обработчики событий выгрузки, правила обработки данных, правила конвертации объектов, конвертация свойств первого и второго этапов, процедуры БСП, используемые при выгрузке данных, структура «КомпонентыОбмена».

26.12.2018    12689    ids79    27       

Новый подход к обмену данными EnterpriseData 203

Статья Программист Нет файла v8 v8::УФ Россия Бесплатно (free) Практика программирования Обмен через XML

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

14.12.2018    21367    ids79    72       

Формирование WORD документов на основании шаблонов 5

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Абонемент ($m) Универсальные печатные формы

Очередное решение формирования word документов на основании шаблонов. Отличие данного решение, что 1с работает не напрямую с WORD, а через приложение, что увеличивает скорость работы.

4 стартмани

13.12.2018    3315    2    MaxxiMiliSan    2       

EnterpriseData - пример доработки правил конвертации без использования КД 3.0 в расширении конфигурации 118

Статья Программист Нет файла v8 v8::УФ БП3.0 УТ11 Россия Windows Бесплатно (free) Практика программирования Обмен через XML

В статье подробно описан реальный пример доработки обмена данными через EnterpriseData (универсальный формат обмена) между конфигурациями УТ 11.4 и Бухгалтерия 3.0

16.11.2018    18868    ids79    20       

Программное заполнение пользовательских параметров и отборов СКД 135

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

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

13.11.2018    19570    Unk92    18       

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С 126

Статья Программист Нет файла v8 v8::blocking 1cv8.cf Бесплатно (free) Математика и алгоритмы Практика программирования

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    20802    ids79    40       

Вспомогательные инструкции в коде 1С 104

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    20423    tormozit    100       

Произвольный код в фоновом режиме 164

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

Задача: реализовать выполнение произвольного кода в фоновом режиме без изменения конфигурации, т.е. во внешней обработке.

03.09.2018    14561    nikita0832    41       

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C 144

Статья Программист Нет файла v8 Россия Бесплатно (free) Математика и алгоритмы Практика программирования

У многих начинающих 1С программистов часто возникают вопросы про клиент-серверное взаимодействие в 1С и чтобы разобраться в непростых механизмах платформы, необходимо понять, что же такое контекст, для чего предназначены директивы компиляции, что представляют собой контекстные/внеконтекстные вызовы и как наиболее оптимально описывать прикладные задачи в модулях управляемых форм.

23.08.2018    21214    Rain88    42       

Повышаем эффективность разработки правил обмена 123

Статья Программист Нет файла v8 КД ОС Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8

Как повысить скорость и качество разработки правил обмена? Как вести групповую разработку правил обмена? Как облегчить сопровождение правил обмена после передачи в эксплуатацию? Об этом и многом другом вы можете узнать из этой статьи.

25.06.2018    19291    olegtymko    47       

Введение в механизм представлений в ЗУП ред. 3 153

Статья Программист Нет файла v8 v8::СПР ЗУП3.x Бесплатно (free) Практика программирования

В нашей организации на первом же телефонном собеседовании на должность разработчика по ЗУП ред. 3 вас обязательно спросят о том, что такое "Представления".

04.06.2018    24323    xrrg    82       

Как сделать запрос на изменение данных 75

Статья Программист Нет файла v8 v8::Запросы 1cv8.cf Бесплатно (free) Практика программирования

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    21156    m-rv    21       

Строим графы средствами 1С (без GraphViz) 42

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Множество статей на Инфостарте описывают, как работать с компонентой GraphViz, чтобы построить ориентированный граф. Но практически нет материалов, как работать с такими графами средствами 1С. Сегодня я расскажу, как красиво строить графы с минимальным пересечением. Нам этот метод пригодился для отрисовки алгоритмов в БИТ.Финансе, т.к. типовой механизм не устраивал. Еще это может быть полезно для визуализации различных зависимостей: расчета себестоимости, графы аффилированности компаний и т.д. Надеюсь, эта статья поможет сделать мир 1С красивее и гармоничней:) Итак, поехали...

23.05.2018    16943    slozhenikin_com    19       

Распределение расходов пропорционально продажам 9

Статья Программист Пользователь Нет файла v8 v8::ОУ УТ10 УУ Финансовый учет и бюджетирование (FRP) Учет доходов и расходов Бесплатно (free) Практика программирования

Финансовая модель. Распределение административных расходов по подразделениям пропорционально продажам за месяц. Дополнительные реквизиты против бизнес-процессов!

13.05.2018    11315    Rustig    9       

Просмотр временных таблиц запроса в отладчике без изменения кода 126

Статья Программист Нет файла v8 v8::Запросы 1cv8.cf Бесплатно (free) Практика программирования

Данный способ можно использовать для просмотра содержимого временных таблиц запросов (менеджеров временных таблиц) без внесения изменений в код.

24.04.2018    24323    avfed@rambler.ru    19       

Минимализмы 3 351

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Универсальные функции

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    35530    ildarovich    44       

Этюды по программированию. Взаимодействие с Microsoft Word 109

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Часто приходится заниматься созданием сложных документов Word с таблицами, вложенными фрагментами, хитрым оформлением и прочими радостями жизни. Это - попытка как-то структурировать полученный опыт, чтобы не приходилось перерывать ворох старых обработок в поисках крупиц истины. Надеюсь, эта статья будет полезна и Вам.

11.12.2017    25815    milkers    23       

Метод формирования движений в типовых регистрах нетиповыми регистраторами 31

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

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

05.12.2017    21290    itriot11    34       

1С: Конвертация данных 3. Инструкции и примеры. EnterpriseData (универсальный формат обмена) 720

Статья Программист Нет файла v8 КД Бесплатно (free) Перенос данных из 1C8 в 1C8 Практика программирования Обмен через XML

Что такое КД3? Как начать использовать? Полезные дополнения к документации. Что нужно исправить в типовых обработках и конфигурации. Как изменить правила обмена не снимая конфигурацию с поддержки. Как отлаживать правила обмена?

19.11.2017    137423    MaxS    251       

Заполнение данных по ИНН контрагента с помощью альтернативного сервиса огрн.онлайн 131

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Код для заполнения данных по ИНН контрагента из ЕГРЮЛ с сайта огрн.онлайн.

01.11.2017    22662    slava_1c    49       

Программные перечисления, ч.2: приемы кэширования при разработке 66

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Все знают, что такое кэш, и зачем он нужен. Но в 1С разработчик обычно использует кэширование только на уровне конфигурации, а в какой-нибудь обработке скорее ломает голову над запросом - как получить все данные за один заход... Хочется рассказать о том, как можно добиться хороших результатов с стратегией "разделяй и властвуй".

30.10.2017    21034    unichkin    17       

Разбираемся с настройками компоновки данных 159

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Краткая шпаргалка по программной работе с настройками СКД

29.10.2017    24010    json    9       

Работа с Excel 288

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Загрузка и выгрузка в Excel

Собрал различные полезности для работы с Excel из 1С. Иногда приходится форматировать документ Excel программно из 1С. Так вот, чтобы не искать постоянно на просторах интернета как сделать левое выравнивание в ячейке Excel из 1С и т.п. решил опубликовать это...

23.10.2017    24627    arakelyan    39       

Добавление команд печати в конфигурациях на БСП 2.4.3 (в частности, в самописных документах в Бухгалтерии 3.0 после релиза 3.0.52.35) 143

Статья Программист Нет файла v8 v8::БУ БП3.0 Россия Бесплатно (free) Печатные формы документов Практика программирования БСП (Библиотека стандартных подсистем)

В статье https://infostart.ru/public/237013/ пользователя nick max рассматривался список действий для подключения команд печати в Бухгалтерии 3.0, работающей на БСП 2.3.6. В новом релизе Бухгалтерии 3.0.52.35 от 15.09.2017г. стала использоваться БСП 2.4.3, из-за чего произошли изменения в процедурах общих модулей, связанных с механизмом печати, и в процедурах их вызова в формах документов и в формах списков. Рассмотрим их.

18.09.2017    46713    bugtester    43