1с тип макета active document

Обновлено: 08.07.2024

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

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

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

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

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

Теперь кидаем на форму документа кнопку Сформировать и по нажатию на нее пишем код который открывает наш макет Word ищем закладку по имени и вставляет туда текст:
Код 1C v 8.х
Это пример вывода множества строчек из табличной части  одной строкой, если нужно просто выгрузить какой-то реквизит то можно пропустить часть 2 и перейти к части 3.

Для выгрузки табличной части в форме таблицы можно использовать функцию автоформата, примеру код выгрузки табличной части документа Предписание:
Код 1C v 8.х
Ну вот и все =)
Автор: saylolpls

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

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

В модуле формы документа создаем кнопку, и в ее обработчике пишем:
Код 1C v 8.х

2) добавляем не поле, а Закладку
Меню Вставка - Закладка и далее указываем ее имя ("ИмяЗакл")
Код 1C v 8.х

Код 1C v 8.2 УП

Electronic Software Distribution

Размер1=Формат(Сумма, "ЧЦ=15; ЧДЦ=2;ЧРД=' '");
Размер1ЦелаяЧасть=Формат(Цел(Сумма), "ЧРД=' '");
Размер1Дробнаячасть=Сумма-Цел(Сумма);
Размер1Дробнаячасть1=?(Размер1Дробнаячасть=0,"00",Размер1Дробнаячасть*100);
Сумма_стр=ЧислоПрописью(Сумма,, "Рубль, руб., руб., м, копейка, коп., коп., ж, 2");

MSWord.Content.Find.Execute("[НазваниеОрганизации]". Организация);
MSWord.Content.Find.Execute("[НомерДок]". НомерПриказа);
MSWord.Content.Find.Execute("[КодПоОКПО]". КодПоОКПО);
MSWord.Content.Find.Execute("[ДатаДок]". ДатаПриказа);
MSWord.Content.Find.Execute("[Работник]". СотрудникФИО);
MSWord.Content.Find.Execute("[ТабельныйНомер]". ТабельныйНомер);
MSWord.Content.Find.Execute("[Подразделение1]". Подразделение);
MSWord.Content.Find.Execute("[Должность1]". Должность);
MSWord.Content.Find.Execute("[Мотив]". Приказ);
MSWord.Content.Find.Execute("[Вид_п]". Награда.Наименование);
MSWord.Content.Find.Execute("[Основание]". Основание);
MSWord.Content.Find.Execute("[Сумма_руб]". Размер1ЦелаяЧасть);
MSWord.Content.Find.Execute("[Сумма_коп]". Размер1Дробнаячасть1);
MSWord.Content.Find.Execute("[Сумма_стр]". Сумма_стр);
MSWord.Content.Find.Execute("[ДолжностьРук]". ДолжностьРуководителя);
MSWord.Content.Find.Execute("[ФИОРук]". ФИОРуководителя);

Платформа 8.2.13, делаю обработку загоняю в макет двоичных данных ексель формата 97-2003, пишу код :
ТаблДок=Новый ТабличныйДокумент;
АктивныйДокумент=ПолучитьМакет("Макет");
КомОбъект=АктивныйДокумент.Получить();
КомОбъект.ActiveSheet.Cells(5,3).Value=10;
КомОбъект.ActiveSheet.Cells(6,3).Value=20;
КомОбъект.ActiveSheet.Cells(7,3).Value=30;
КомОбъект.Application.Visible = 1;
КомОбъект.Windows (1) .Visible = 1;
Запускаю, на мгновение открывается пустое окно Екселя, без рабочих книг и сразу закрывается.
В чем пробелма ??

у себя делаю на платформе 8.2.14.96 офис 2010
тут по сути могут быть лишь два типа ошибок. либо платформа не умеет использовать либо VBA вашего офиса. не правильно отрабатывает. последнее врядли .т.к это типовые команды VBA они еще в 97 офисах работали.

Макет – это один из самых универсальных объектов 1С Предприятия 8. Использование макетов широко применяется как в оформлении различных документов (отчеты, печатные формы и т.д.), так и в решении нестандартных задач (например хранение файлов внутри конфигурации).

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

Принцип работы.

К сожалению (или к счастью) работа с макетом ActiveDocument возможна только программная. Т.е. чтобы при нажатии кнопки пользователю открылся наш word-вский файлик, нужно написать код! (ВАУ)

Сама схема кода следующая:

1 – Получаем макет ActiveDocument

2 – Инициализируем COM-объект нашего ActiveDocument

3 – Работаем с этим COM-объектом (заполняем данные, редактируем, выводим на экран)

И вот тут начинается самое интересное…

Когнитивный диссонанс

Вот самые первые строчки, на которые натыкается в гугле юный неофит. В файловом варианте такой код сработает корректно (неважно в толстом или тонком клиенте). Т.к. и сервер и клиент у нас находятся на одной машине, и MS Word тоже установлен на этой машине.

А давайте представим, что у нас клиент-сервер, да ещё и сервер находится на другой машине. Будет оно работать в тонком клиенте? Нет. И тут возникнет когнитивный диссонанс. WTF? O_o

Во-первых, получить макет (любой) можно только &На Сервере. Результатом нашего получения будет объект «Оболочка ActiveDocument». «Фигня!» - скажет опытный гуру конфигурирования – «вернём &НаКлиент, как и в случае с табличным документом!»

Не фигня. Оболочка ActiveDocument существует только на сервере и вернуть её на клиент не получится (а нам-то нужно запустить Word именно на клиентской машине).

Во-вторых, инициализировав COM-объект &НаСервере, вернуть его на клиент, также не получится

(и кстати, если сделать наоборот - с клиента на сервер, тоже не прокатит)

Танцы с бубном

Как быть? Ведь нужно инициализировать COM-объект на клиенте, причем из данных, получаемых только на сервере и которых на клиент передать нельзя.

Решение у этой задачи самое корявое, которое только может быть. Но давайте вспомним, зачем мы вообще используем ActiveDocument? Правильно, чтобы внести изменения в шаблон через конфигуратор «на лету». Это и есть та единственная причина, по которой мы используем ActiveDocument. Иначе бы мы использовали тип макета «Двоичные данные».

А вот само решение точно такое же, как при использовании макета с двоичными данными! Т.е. сначала нам нужно сохранить ActiveDocument в файл, а потом, используя этот файл, инициализировать COM-объект (причем сделать это нужно на клиенте!).

Таким образом наша предыдущая схема превращается вот во что:

1 – &НаСервере Получаем макет ActiveDocument

2 – &НаСервере Сохраняем полученный макет в файл и возвращаем на клиент полное имя файла (полный путь + наименование с расширением)

3 – &НаКлиенте Инициализируем COM-объект из файла

4 - &НаКлиенте заполняем и выводим этот COM-объект

Небольшой листинг кода:

Заключение

Естественно, пример с MS Word самый простой и банальный. Вы можете запихнуть туда и другие файлики).

Сравнение возможностей интеграции 1С:Предприятия 8 с ActiveX, ActiveDocument и Automation-объектами

Возможности платформы 1С:Предприятия 8 позволяют решать разнообразные задачи из области автоматизации деятельности организаций, однако при реальных внедрениях зачастую возникают различные специализированные задачи, для решения которых необходимо привлекать дополнительные инструменты. Решать такие задачи 1С:Предприятие 8 позволяет, давая возможность включать в конфигурацию объекты и элементы пользовательского интерфейса, реализованные в других приложениях или библиотеках. В этом разделе описаны три различных технологии, с помощью которых разработчики решений могут расширять среду 1С:Предприятия 8 и предоставлять пользователю дополнительные возможности как по работе с данными, так и в области пользовательского интерфейса.

Automation

Технология Automation предназначена для программного использования объектов, чаще всего не имеющих визуального представления (исключения составляют, например, объекты Microsoft Office Word.Application и Excel.Application). Объекты, обладающие пользовательским интерфейсом, всегда визуализируются в отдельном окне, отличном от окна 1С:Предприятия 8. В общем случае применение этой технологии состоит из двух частей - создание объекта по его идентификатору и последующее использование объекта. Создание объекта выполняется оператором Новый COMObject(ИдентификаторОбъекта), а использование созданного объекта ничем не отличается от использования остальных объектов 1С:Предприятия 8. Дополнительные возможности предоставляет функция ПолучитьCOMОбъект() - с ее помощью можно создать Automation-объект из файла или подключиться к уже существующему в операционной системе экземпляру Automation-объекта:

ExcelApp = Новый COMОбъект("Excel.Application");
ExcelApp.WorkBooks.Open("c:\file.xls", 0);
ExcelApp.Quit();

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

ActiveX

Эта технология предназначена для внедрения в формы и табличные документы 1С:Предприятия 8 дополнительных элементов управления. Дополнительные элементы управления по своему поведению максимально приближены к "родным" элементам управления 1С:Предприятия 8 - для всех элементов управления одинаково организованы визуальное редактирование свойств элементов управления, связь с обработчиками событий, выбор шрифта и цвета. Однако следует заметить, что, помимо общих черт, ActiveX могут обладать серьезными отличиями - такими, как визуальные отличия от общего вида интерфейса 1С:Предприятия 8 или отсутствие локализации на определенный язык. Доступ к элементам управления ActiveX осуществляется также, как и в случае Automation - как к обычным объектам 1С:Предприятия 8. Следут заметить, что списки ActiveX-объектов, встраиваемых в формы и табличные документы, различаются - это обусловлено деталями реализации этих объектов, однако работа с этими объектами ведется одинаково независимо от способа встраивания. К объектам, встраиваемым только в табличные документы, относятся, в частности, некоторые объекты Microsoft Office - такие, как Word или Excel.


Технология ActiveX применяется в случае, когда для решения задачи требуется визуальное взаимодействие с объектами (управление или отображение), реализованными как ActiveX-объекты. При этом желательно максимально сохранить общий вид пользовательского интерфейса 1С:Предприятия 8, поэтому если задача может быть решена с использованием элементов управления из состава 1С:Предприятия 8, то такой вариант выглядит предпочтительнее.

ActiveDocument

Технология ActiveDocument предназначена для редактирования документов внешними по отношению к 1С:Предприятию 8 редакторами. Эта технология позволяет редактировать документы визуально (например, Word или Excel) непосредственно в окне 1С:Предприятия 8, при этом элементы пользовательского интерфейса (меню, панели команд и т.д.) заменяются на предоставляемые редактором. Документы могут быть предварительно отредактированы и сохранены в макетах конфигурации, а затем макеты могут использоваться пользователями как основы для создания окончательных версий документов. Следует заметить, что использование макетов ActiveDocument в режиме Предприятия осуществляется только программно - визуальное редактирование возможно только на этапе создания и редактирования конфигурации.


Эта технология применяется в случае, когда в конфигурации необходимо хранить данные, редактируемые другим приложением - такие, например, как шаблоны для факсов или деловых писем, созданные в Microsoft Word, или шаблоны прайс-листов в Microsoft Excel. Такая необходимость возникает, как правило, при регламентировании формата документов (как во внутреннем документообороте, так и при обмене документами со сторонними организациями и клиентами), однако при отсутствии ограничений на формат документа рекомендуется использовать существующие в 1С:Предприятии 8 возможности по оформлению электронных и печатных документов.

Читайте также: