1с получитьмакет управляемые формы

«Подводные камни» при работе с макетами типа ActiveDocument 1С 8.3 УФ. Клиент-Сервер. Режимы работы Тонкий, Веб клиенты

Итак, в чем суть моей статьи?

1. Есть сервер (x64), с установленным Office 2016 (x64), есть 1С 8.3.8 также x64 (имеется в виду сервер 1С). Пользователи подключаются как через тонкого клиента, так и через веб клиент.

2. Есть куча типовых договоров и накладных счет-фактур, оформленных (подготовленных) отделом продаж. Там шрифт, абзац и т.д., естественно, все оформлено в Word,Excel 2016 (x64), естественно, нет желания все это рисовать в 1С, а есть желание засунуть в макеты формата ActiveDocument

1. Как сохранить файл Word,Excel и передать этот файл клиенту (клиент тонкий и веб)?

2. Какой вариант лучше выбрать: ActiveDocument или ДвоичныеДанные? Хотя для меня это звучит примерно как, что выбрать Водку С Пивом или Пиво С Водкой :). Один фиг, надо забить документы данными из 1С и передать их Клиенту.

Ну да ладно пропустим лирику, я выбираю ActiveDocument, не буду описывать весь алгоритм, просто перечислю «подводные» камни и их решение. Все нижеизложенное это мои личные измышления и в никакой мере не претендуют на истину в последней инстанции. Возможно, вы решили эти проблемы или решите по другому.

1. Камень «первый«. Не работает метод SaveAs (как для MSWord, так и для MSExcel). При попытке записать ДвоичныеДанные 1С просто вылетает. Смотрим фрагмент листинга:

Ссылочка //infostart.ru/public/407448/ (выдержка из статьи «Как передать документ Word (ActiveDocument или ДвоичныеДанные) с сервера на клиент»

Опытном путём выявлено, что 1С-ка вырубается с ошибкой, если удалить файл, преобразованный в двоичные данные, и попробовать эти двоичные передать на клиент.

На сервере 1С:Предприятия произошла неисправимая ошибка. Приложение будет закрыто

Я пытался побороть эту ошибку, помещая во временное хранилище двоичные данные, переводя двоичные данные в Неопределено, но победить не удалось. Стоит заметить, что временный файл на сервере 1С-ка со временем сама удаляет корректно.

Возможная ошибка на сервере при вызове метода SaveAs:

Ошибка при вызове метода контекста (SaveAs)
Документ.SaveAs(ИмяВрем);
по причине:
Произошла исключительная ситуация (Microsoft Word): Ошибка команды

Мне поначалу эту ошибку не удалось победить, поэтому я стал использовать ДвоичныеДанные. Позже нашёл решение проблемы: необходимо по пути C:\Windows\SysWOW64\config\systemprofile\ и C:\Windows\System32\config\systemprofile\ создать папки Desktop. Туда никаких файлов никто не пишет, похоже, программе важен факт наличия этой папки. Решение нашёл по ссылке: http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=581998&threadtype=0

Создание папок
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
проблему решило. Тема закрыта.

В чем причина? Причина в том, что код

Всегда вызывает экземпляр объекта COM (x32) независимо от того какой разрядности Office установлен. Вы никогда не задумывались, почему в макет ActoveDocument нельзя вставить файлы с расширением docx,xlsx

9ecfe945c75285cb07b01cb75a07f1f7

1. Либо сервер и все ПО должно быть x32. Тогда ничего делать (в смысле переписывать код) не надо

2. Либо переписать код, таким образом

Думаю, тут все понятно, сначала мы создали экземпляр COM нужной разрядности, создали пустой файл и сохранили во временную папку, далее работает с COM x32, заполняем данными и напоследок копируем содержимое всего документа и сохраняем в ранее подготовленный файл.

Все то же самое, но только для Excel

ну вот «первый» камень я решил, на сервере x64 с Office x64, все работает точно как часы, без ошибок и не надо создавать никаких папок и все прочее.

Камень «второй«. фрагмент кода

есть не очень хорошо, потому как идет запись в папку: «c:\Users\ че там. «, вообще эта папка всегда в черном списке всех фаерволов, антивирусов и прочее, прочее, хотя бы открыть центр управления безопасностью Word или Excel. Глянем и мы туда

651eb86e3175bca1f0081f678c5ab58d

придется возится с этим, иначе есть вероятность появления «странных» ошибок. Поэтому я предлагаю следующее:

1. Открываем Конфигуратор и добавляем новый РегистрСведений

80769689e8b5e4dbf1b0cdce1b2d9882

здесь мы будем хранить наши готовые Word, Excel файлы уже заполненные, конечно:

2. Дописываем выше написанный код следующим образом:

Что мы делаем, мы записываем готовый файл в регистр сведений и затем удаляем сам временный файл, решаем проблему «Центра безопасности Word,Excel». Осталось только одно показать этот готовый файл Клиенту (клиент тонкий и веб)

1. Во-первых, клиент у нас работает как через Тонкий, так и через Веб режимы, поэтому заранее в свойствах Конфигуратор ставим следующие значения:

ad4de3b43ab537a6585e4d3031d67af3

Чтобы не было проблем при работе с браузером

2. Используем обработчики ожидания, чтобы избежать проблем с синхронностью вызов (это касается только режим Веб)

3. И последнее, подключаем Расширение для работы с Файлами (помним что в режиме Тонкий клиент, это расширение включено всегда). И через код:

передаем файл Клиенту используя механизм НавигационнаяСсылка, получаем следующие сообщения в браузере (Тонкий само собой работает):

d07c222e710f322c101bfd05b4688ecb

296829d790b3b4eb6c3f1588b2833c9d

ну вот, кажется, все. Надеюсь, это поможет кому-нибудь.

По поводу Word, Excel файлы вставлять в виде ДвоичныхДанные? проблема-то в чем?

1. Мы либо должны вытащить из макета эти ДвоичныеДанные и заполнить данными из 1С и ВНИМАНИЕ снова записать в виде ДвоичныхДанных (Водка С Пивом или Пиво С Водкой)

2. Либо мы должно получить макет ДвоичныеДанные на стороне Клиента и там заполнить его, НО COM объект поддерживается только браузером IE и то с танцами с настройками ActiveX, другие браузеры давно отказались от использования ActiveX

Источник

ПолучитьМакет в 1С 8.3

Статья рассказывает о том, как создать и подключить внешнюю печатную форму в обычном и управляемом приложении в 1С 8.2 и 8.3

Как получить макет на клиенте?

В этом нам поможет отдельная функция, работающая на стороне сервера. С помощью функции «РеквизитФормыВЗначение()» мы передадим объект в виде нашей внешней обработки в серверную функцию и там получим макет. В качестве реквизита формы выступает основной реквизит, выделенный на самой форме жирным шрифтом. Подробный код функции содержит следующие строки:

&НаСервере Функция ПолучитьМакетНаСервере()

Передача объекта с клиентской формы на сервер;

Получение макета по наименованию. Наименование задается при добавлении макета во внешнюю обработку;

Возвращаем полученный макет на клиент;

Возврат НовыйМакет; КонецФункции

Это изменение призвано оптимизировать работу тонкого клиента и перенести «тяжелые» операции на сервер. Подобные разграничения пропагандирует компания 1С, стараясь оставить на стороне клиента лишь работы по прорисовке интерфейса. Чуть больше строк кода даст нам прирост производительности и более стандартизированный код. Если придерживаться единых стандартов 1С при разработке, то будет намного удобнее и понятнее поддерживать сложные конфигурации.

Для обычных форм:

Внешняя печатная форма в управляемом приложении

Начнем с того, что в настоящее время встречается чаще — с управляемого приложения. В тексте ниже будет приведен пример создания и подключения внешней печатной формы для документа «Приходный кассовый ордер» (Бухгалтерия предприятия, редакция 3.0).

Создание

Как уже было сказано выше, внешняя печатная форма — это просто-напросто внешняя обработка соответствующая некоторым требованиям. Первым требованием является реализация в модуле печатной формы экспортной функции СведенияОВнешнейОбработке().

Итак, создаем новую внешнюю обработку и в модуле объекта этой обработки размещаем примерно такой код:

Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = Новый Структура;

//указываем сведения о внешней печатной форме

ПараметрыРегистрации.Вставить(“Наименование”, “Печатная форма для ПКО”);

ПараметрыРегистрации.Вставить(“Информация”, “Внешняя печатная форма для документов”);

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

//определим документы и/или справочники

//в которых будет использоваться эта печатная форма

ПараметрыРегистрации.Вставить(“Назначение”, Новый Массив);

//используется для дополнительных отчетов

//подключенных к подсистеме “Варианты отчетов”

//если требуются исключения из безопасного режима, их можно запросить

ПараметрыРегистрации.Вставить(“Разрешения”, Новый Массив);

//определяем таблицу команд

Команда.Представление = “Печатная форма для ПКО (внешняя)”;

Команды = Новый ТаблицаЗначений;

Команды.Колонки.Добавить(“Представление”, Новый ОписаниеТипов(“Строка”));

Команды.Колонки.Добавить(“Идентификатор”, Новый ОписаниеТипов(“Строка”));

Команды.Колонки.Добавить(“Использование”, Новый ОписаниеТипов(“Строка”));

Команды.Колонки.Добавить(“ПоказыватьОповещение”, Новый ОписаниеТипов(“Булево”));

Команды.Колонки.Добавить(“Модификатор”, Новый ОписаниеТипов(“Строка”));

Команды.Колонки.Добавить(“ЗаменяемыеКоманды”, Новый ОписаниеТипов(“Строка”));

Код в основном прокомментирован, но некоторые моменты нужно обговорить отдельно. Функция СведенияОВнешнейОбработке() является общей для всех внешних объектов. Вид внешнего объекта указывается в параметре «Вид» (у нас указана «ПечатнаяФорма»).

Большинство параметров не являются обязательными для заполнения. В нашем случае обязательно указать параметры «Вид», «Версия» и «Команды» — это обязательные параметры для всех видов внешних объектов («Команды» необязательны для отчетов). Кроме этого будет полезно указать параметры «Назначение». Но вообще, желательно указывать как можно больше информации — это поможет не запутаться как Вашим клиентам так и Вам самим.

Параметр «БезопасныйРежим» со значением «Истина» накладывает следующие ограничения:

Параметру «БезопасныйРежим» рекомендуется присваивать значение «Истина». Если необходима какая-либо функциональность, запрещаемая безопасным режимом, то можно получить дополнительное разрешения на эту функциональность (как в примере выше).

Кроме функции СведенияОВнешнейОбработке() необходимо реализовать еще одну экспортную функцию — Печать(). Эта функция должна иметь следующие параметры:

Пример реализации функции Печать():

Источник

ПолучитьМакет в 1С 8.3

nastroika i dorabotka 1s

Фиксированная стоимость и сроки. Оперативно. Оплата полезных фактических трудозатрат.

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

Как получить макет на клиенте?

В этом нам поможет отдельная функция, работающая на стороне сервера. С помощью функции «РеквизитФормыВЗначение()» мы передадим объект в виде нашей внешней обработки в серверную функцию и там получим макет. В качестве реквизита формы выступает основной реквизит, выделенный на самой форме жирным шрифтом. Подробный код функции содержит следующие строки:

Передача объекта с клиентской формы на сервер;

Получение макета по наименованию. Наименование задается при добавлении макета во внешнюю обработку;

Возвращаем полученный макет на клиент;

Это изменение призвано оптимизировать работу тонкого клиента и перенести «тяжелые» операции на сервер. Подобные разграничения пропагандирует компания 1С, стараясь оставить на стороне клиента лишь работы по прорисовке интерфейса. Чуть больше строк кода даст нам прирост производительности и более стандартизированный код. Если придерживаться единых стандартов 1С при разработке, то будет намного удобнее и понятнее поддерживать сложные конфигурации.

Источник

Работа с макетами в 1С 8.3

Создание макета в 1С 8.3

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

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

Алгоритм действий при создании макета:

Находим подраздел «Макеты» и щелкаем по нему правой кнопкой мыши, нажимаем «добавить».

rabota s maketami1

В открытом диалоговом окне нужно будет придумать и ввести имя документа и его синоним. Автоматически система сделает синоним таким же, как и имя, но вы можете поменять его на другой при желании. В данном случае мы выберем тип макета «Табличный документ». После того, как вы нажмёте «Готово», возникнет окно, напоминающее обычный лист в Excel.

rabota s maketami2

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

rabota s maketami3

Таким образом мы дали платформе понять, о какой области идет речь при обращении по указанному имени. Теперь добавим в область для вывода конкретных данных переменные, к примеру, «Документ№» и «Номер». Пока что это просто текст, который можно только вывести на экран без изменений.

rabota s maketami4

rabota s maketami5

Этих начальных знаний вполне хватит, чтобы полностью сформировать простой макет.

rabota s maketami6

Изменение макета в 1С 8.3

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

rabota s maketami7

А сейчас ответим на вопрос: «Что нужно сделать, чтобы начать редактировать?». Во-первых, нужно найти тот макет, который вы собрались менять. Если это отчёт или внешняя обработка, тогда макет должен быть в файле. Во всех остальных случаях его следует искать в конфигураторе. Если в структуре объекта отсутствуют макеты, то нужно разобраться, где вызывается функция вывода на печать и располагается шаблон. Найдя шаблон, вы можете начать его редактировать. 1С обладает достаточно большим перечнем возможностей по изменению шаблонов:

rabota s maketami8

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

Источник

Пользовательские макеты для внешних печатных форм (обработок)

Многие из нас знакомы с замечательным механизмом БСП «Макеты печатных форм», позволяющим пользователю самостоятельно менять макеты из метаданных конфигурации. В этой статье мы рассмотрим, как при помощи механизма расширения (модулей) данный функционал можно распространить на дополнительные обработки внешних печатных форм.

Релизацию задачи можно разделить на три шага перехвата и модернизации механизмов:

При разработке внешних печатных форм следует придерживаться определенных правил.

Разберем каждый из шагов подробнее.

1. Перехват и модернизации механизма заполнения типового списка макетов

Механизм находится в процедуре формы РегистрСведений.ПользовательскиеМакетыПечати.Форма.МакетыПечатныхФорм.ЗаполнитьТаблицуМакетовПечатныхФорм().

Добавляем форму МакетыПечатныхФорм в расширение, в модуле формы прописываем следующий код:

Схематично вышеприведенный код работает следующим образом:

cb1b777e2898659e7e901d87b72c2600

2. Перехват и модернизации механизма получения макета по имени объекта метаданных

Механизм находится в функции ОбщийМодуль.УправлениеПечатью.МакетПечатнойФормы(ПутьКМакету)

Добавляем общий модуль УправлениеПечатью в расширение. В модуле расширения пишем следующий код:

Схематично вышеприведенный код работает следующим образом:

2fac06f4201487132d83d8d2b4b61b6d

3. Перехват и модернизации механизма записи модернизированного пользовательского макета

Механизм находится в функции ОбщийМодуль.УправлениеПечатью.ЗаписатьМакет(ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище).

Общий модуль УправлениеПечатью мы уже добавили в наше расширение, поэтому сразу добавляем в модуль УравлениеПечатью следующий код:

Схема работы кода выглядит аналогично п.2.

4. Особенности печати пользовательского макета для внешней печатной формы

Разрабатывая внешнюю печатную форму, необходимо помнить о нескольких несложных правилах:

Вот, собственно, и все. Буду раз вашим комментариям.

Системные требования

Платформа: не ниже v8.3.11

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • 1с поле формы установить значение
  • 1с поле формы поле объекта недоступно для записи