Программисту, имеющего немного опыта на платформе 1С 8.2, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта, а-а-а-а-аааа!!.....
Именно такое сложное чувство непонимания было поначалу и у меня. В процессе обучения и реального опыта была создана эта шпаргалка, целью которой было "разложить всё по полочкам", чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи объектов.
Для чего нам вообще нужны эти обработчики?
Очень часто программисту требуется переопределить стандартное поведение системы во время записи объектов, а именно: отменить запись, в случае каких-то условий; запросить дополнительную информацию у пользователя; дозаполнить реквизиты; что-то ещё записать в базу данных на основании этой записи; что-то изменить на форме после записи и т.д. и т.п. Каждый программист рано или поздно сталкивается с подобными задачами, потому знать назначение и последовательность запуска этих событий программисту, работающему на платформе 1С 8.2, необходимо.
В модуле формы или в модуле объекта?
Сначала надо определиться нужны ли нам данные формы? Будет ли запись записываться программным способом или только интерактивно? Будем ли вести диалог с пользователем?
Дело в том, что часть событий выполняется на уровне модуля формы и это значит, что они выполняются только при интерактивной записи, а также в этих событиях мы можем обращаться к данным формы, вести диалог с пользователем.
Другая часть событий выполняется на уровне модуля объекта, как при интерактивной, так и при программной записи.
Потому можно сразу определиться с обработчиком модуля формы или модуля объекта будем работать.
Модуль формы: на клиенте или на сервере?
Далее, если выбран модуль формы, то надо определиться какой обработчик потребуется: исполняемый на клиенте, или исполняемый на сервере. Если потребуется диалог с пользователем, то на клиенте, в противном случае на сервере. Их можно отличить по имени директивы компиляции или по имени обработчика (когда на сервере, это пишется в имени, например ПередЗаписьюНаСервере()).
Как выбрать конкретный обработчик?
Выбор зависит от поставленной задачи. Что конкретно можно делать в каждом обработчике опишу ниже, а пока пример.
Пример выбора обработчиков событий записи объекта:
Бывают задачи, когда потребуется использовать несколько обработчиков для решения одной задачи. Например, надо запросить информацию у пользователя во время записи: «Будем создавать новый документ на основании этой записи?» и, если пользователь ответит утвердительно, то надо создать новый документ с ссылкой на записываемый объект. Причем запись нового документа надо выполнять в транзакции, т.к. если текущая запись по каким то причинам будет отменена, то и уже созданный и записанный документ не должен остаться в базе данных.
Для решения этой задачи потребуется использовать обработчики события модуля формы по двум причинам:
1) Диалог с пользователем возможен только на клиенте, а клиентеские обработчики есть только в модуле формы. Для диалога будем использовать клиентскую процедуру модуля формы ПередЗаписью(), и сохраним ответ пользователя в параметре этой процедуры «ПараметрыЗаписи».
2) А в процедуре ПриЗаписиНаСервере() модуля формы примем этот параметр и в зависимости от него будем создавать документ или нет. Почему именно эта процедура? Ссылка будет получена только после записи, но поскольку нам нужно записывать в транзакции, то нужно использовать процедуры ДО завершения транзакции, но уже имеющие ссылку на записываемый объект. ПередЗаписью() не подходит , так как ещё нет ссылки, а ПослеЗаписи() не подходит, так как транзакция уже завершена. Остаётся ПриЗаписи(), но перед нами встаёт выбор: модуля формы или модуля объекта? Поскольку обработчик события ПриЗаписи() модуля объекта не содержит параметр, содержащий ответ пользователя, а событие ПриЗаписиНаСервере() модуля формы содержит, то ответ очевиден-используем это событие ПриЗаписиНаСервере() модуля формы потому что:
1) Это событие выполняется в транзакции 2) Содержит параметр «ПараметрыЗаписи», в котором уже содержится ответ пользователя, который передался из процедуры ПередЗаписью() 3) Ссылка уже создана и можно создавать новый документ, используя эту ссылку.
Ну и теперь последовательность запуска событий (в том порядке, в каком они перечислены) и небольшие подробности :
Во многих обработчиках есть параметр «Отказ». Там, где этот параметр присутствует означает, что в этом обработчике ещё можно отказаться от записи, присвоив параметру «Отказ» значение Истина, и тогда запись произведена не будет. 1) Модуль формы ПередЗаписью(Отказ, ПараметрыЗаписи)
Выполняется на клиенте!
Этот обработчик следует использовать, если необходимо организовать диалог с пользователем перед тем, как записать объект. Запросить дополнительную информацию, предупредить о чём-либо, дать возможность отказаться и т.п.
Второй параметр этого обработчика «ПараметрыЗаписи» имеет тип «Структура». У документов эти параметры заполняются системой предопределенными параметрами РежимЗаписи, РежимПроведения. Можно добавить свои.
Эти параметры передаются между событиями формы ПередЗаписьюНаСервере, ПриЗаписиНаСервере, ПослеЗаписиНаСервере, где их можно благополучно использовать. Например, при записи регистра сведений, надо сделать запись в другой регистр сведений старое значение ресурса. Можно передать старое значение в эти самые параметры и уже в ПриЗаписиНаСервере сделать запись в другой регистр. 2) Модуль формы ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
3) Модуль объекта ОбработкаПроверкиЗаполнения (Отказ, ПроверяемыеРеквизиты)
Эти два обработчика проверки заполнения реализуются через параметр «ПроверяемыеРеквизиты» типа Массив, содержащий реквизиты, которые надо проверять (т.е. которым установлено свойство проверки заполнения «Выдавать ошибку»)
И если из этого массива убрать реквизит, то проверяться он не будет, если добавить, то будет выполняться проверка заполнения.
Таким образом, можно сказать, что эти два обработчика событий предназначены :
Для включения в проверку заполнения тех реквизитов, у которых в свойствах «ПроверкаЗаполнения» указано «Не проверять». Для этого надо добавить этот реквизит в массив параметр «ПроверяемыеРеквизиты»
Для того, чтобы исключить из автоматической проверки реквизиты, у которых установлено свойство проверки заполнения «Выдавать ошибку» в зависимости от каких-то условий. Для этого надо удалить этот реквизит из массива параметра «ПроверяемыеРеквизиты»
Имеется несколько особенностей, которые необходимо учитывать:
Если у формы из которой записывается объект в свойствах не установлено «ПроверятьЗаполнениеАвтоматически», то тогда эти обработчики проверки заполнения не вызываются и проверки не происходят!
Вызываются только при интерактивной записи! При программной записи не вызываются. Для проверки нужно использовать метод объекта ПроверитьЗаполнение(), который инициирует запуск этих событий.
Для документов, имеющих возможность проведения , эти события проверки заполнения вызываются только при проведении!
Оба эти события выполняются на сервере, отличие в том, что ОбработкаПроверкиЗаполненияНаСервере() это событие модуля формы и, следовательно, есть доступ к данным формы. А ОбработкаПроверкиЗаполнения() - событие модуля объекта. 4) Модуль формы ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
В этом обработчике можно дозаполнять реквизиты объекта или провести дополнительные проверки. Есть доступ к данным формы. Есть параметр ТекущийОбъект.
Параметр ТекущийОбъект имеет тип класса «объект» в зависимости от типа записываемого объекта (СправочникОбъект,ДокументОбъект и т.д). Т.е. экземпляр класса объект создан, и можно обратиться к его свойствам и методам, но в базу данных ещё не записан. Начало транзакции 5) Модуль объекта ПередЗаписью(Отказ)
В этом обработчике можно дозаполнять реквизиты объекта или провести дополнительные проверки.
Для документов в параметры данного обработчика добавляются ещё два параметра:РежимЗаписи, РежимПроведения. Запись 6) Модуль объекта ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
Возникает в момент, когда выполняется установка номера нового документа, задачи или бизнес-процесса.
Или ПриУстановкеНовогоКода(СтандартнаяОбработка,Префикс)
Возникает в момент, когда выполняется установка нового кода элемента справочника, узла плана обмена или кода плана видов характеристик.
Эти событии вызываются для объектов у которых указано свойство «Автонумерация» и только для новых объектов.
Если установить параметру СтандартнаяОбработка значение Ложь, то новый номер генерироваться не будет и можно программно задать код объекта в данном обработчике. 7) Модуль объекта ПриЗаписи(Отказ)
Вызывается после записи объекта в базу данных, но до окончания транзакции записи.
Ссылка уже есть и можно записать в базу данных дополнительные данные на основании текущего объекта, используя эту ссылку.
Например, при записи создавать другой документ, содержащий реквизит ссылку на записываемый. 8) Модуль формы ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Вызывается после записи объекта в базу данных, но до окончания транзакции записи. Есть доступ к данным формы. Есть последний шанс отказаться от записи.
Параметр ТекущийОбъект имеет тип класса «объект» в зависимости от типа записываемого объекта (СправочникОбъект,ДокументОбъект и т.д). Можно обратиться к его свойствам и методам. Завершение транзакции 9) Модуль формы ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
Выполняется на сервере.
Можно использовать для того, чтобы визуально что-то отобразить на форме. 10) Модуль формы ПослеЗаписи(ПараметрыЗаписи)
Выполняется на клиенте!
Можно использовать для того, чтобы визуально что-то отобразить на форме или выдать предупреждение пользователю.
Вариант 1: ОкноКлиентскогоПриложения (ClientApplicationWindow)
ПолучитьНавигационнуюСсылку (GetURL)
Синтаксис:
Возвращаемое значение:
Тип: Строка.
Описание: Получает навигационную ссылку в формате 1С:Предприятия на текущую форму.
Доступность: Тонкий клиент, веб-клиент, толстый клиент, внешнее соединение.
Вариант 2: Глобальный контекст (Global context)
ПолучитьНавигационнуюСсылку (GetURL)
Синтаксис:
Параметры: <Объект> (обязательный)
Тип: Ссылка на объект информационной базы. Ссылка на объект. <ИмяРеквизита> (необязательный)
Тип: Строка. Имя реквизита объекта или ресурса Регистра сведений, для которого нужно выяснить ссылку. Если это реквизит табличной части объекта, то параметр указывается как <имя табличной части>.<имя реквизита>, то есть с разделителем "." (точка).
<Индекс> (необязательный)
Тип: Число. Индекс строки в табличной части, в том случае если объект является реквизитом табличной части. Первая строка имеет индекс равный 0.
Возвращаемое значение: Тип: Строка.
Описание: Получает текст ссылки на объект информационной базы или его реквизит в формате 1С:Предприятия.
В первом случае принимает в качестве параметра ссылку на объект (это может быть как ссылка, так и ключ записи регистра сведений). Объектом могут быть: справочник, документ, ключ записи регистра сведений, бизнес процессы, задачи.
Во втором, в качестве параметров принимает ключ объекта (это может быть как ссылка, так и ключ записи регистра сведений) и имя реквизита (ресурса). Если нужно получить ссылку на реквизит табличной части, перед именем реквизита необходимо добавить имя табличной части и точку ".".
Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Примечание: Выполняет обращение к серверу только при получении ссылки на реквизит. При получении ссылки на объект информационной базы запрос на сервер не выполняется.
Получить навигационную ссылку для константы?
Вопрос: В конфигурации есть константа с типом ХранилищеЗначения для хранения изображения. Пытаюсь реализовать Загрузку и Выгрузку изображения: СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Константы.Логотип.Получить());
где СсылкаНаКартинку - реквизит формы с типом строка, а на форме есть элемент, у которого путь к данным = СсылкаНаКартинку
Возможно ли реализовать отображение картинки таким образом, или стоит хранить картинку где-либо еще? Ответ:
Навигационную ссылку на константу получить не получится(
Получится только так:
т.е. в процедуру ПриСозданииНаСервере поместить картинку во временное хранилище и она там сидит пока закроете форму
Есть форма списка справочника "Сотрудники".
В нем есть реквизит "Фото", который имеет тип "СправочникСсылка.ХранилищеДополнительнойИнформации" (справочник "ХранилищеДополнительнойИнформации" по структуре полностью совпадает анологичным справочником в 1С 8.1).
В реквизиты формы списка добавил "АдресКартинки" тип "строка", в элементы добавил поле "Картинка" (вид - поле картинки) с путем к данным "АдресКартинки". Как вывести Картинку?
Ответ:
"Хранилище" - это "стандартный" реквизит справочника "ХранилищеДополнительнойИнформации".
Имеется регистр сведений с именем "Изображения" следующей структуры:
Измерения:
- ИдИзображения (тип - уникальный идентификатор);
Реквизиты:
- Изображение (тип - ХранилищеЗначений)
Реализовать возможность записи изображений в него, проблемы не составило. А застрял на получении навигационной ссылки на нужную запись регистра? Ответ - Для регистра сведений первым параметром должен быть ключ записи, а не ссылка на объект.
Т.е. если есть регистр сведений ХранилищеКартинок с изменением Ном (тип справочник Ном) и ресурс Картинка (тип хранилище значений) - код для получения навигационной ссылки должен быть примерно таким:
При использовании в web-клиенте
Стояла следующая задача: отправлять уведомления о изменениях в документах на почту и вкладывать в письмо гиперссылку на измененный документ. База опубликована на web-севере. Полученная в 1С ссылка методом ПолучитьНавигационнуюСсылку() имела следующий вид https://localhost/#e1cib/data/Документы.Счет?ref="ab99005056c0000811e00f627bcddd55"
Вложенная в таком виде ссылка не открывала нужный документ, а лишь инициировала переход в базу.
Как оказалось проблема была в следующем, в URL-адресах не должны присутствовать кавычки, их заменяем на %22 https://localhost/#e1cib/data/Документы.Счет?ref=%22ab99005056c0000811e00f627bcddd55%22
Консоль - Корень дерева - <имя вашего сервера 1C> - "Кластеры" - <номер порта вашего сервера 1С> - "Рабочие серверы" - <Имя вашего сервера 1С> - "Рабочие процессы": правой кнопкой мыши и в контекстом меню выбрать пункт "Создать"
В свойствах рабочего процесса так же можно настроить что он является резервным или основным.
Рекомендации:
для сервера x64 1 рабочий процесс основной, 1 резервный
для сервера х86 основных рабочих процессов должно быть равно количеству ядер, резервных меньше.
Надумал когда-то задачу себе: выгрузить содержимое табличного документа в Google Document. Одним из вариантов использования данного функционала может быть выгрузка состояния заказов пользователей из базы в 1с в google spreadsheet. Если клиент знает адрес данного документа, то они могут ознакомиться с состоянием дел не звоня менеджеру. Может кто еще придумает варианты использования – пишите в комментарии, буду рад.
Последовательность выгрузки документа такова: сначала получаем список таблиц, которые есть у пользователя в системе Google Document. Затем после определения таблицы выгрузки пользователю предлагаем выбрать лист, в который будет выгружаться содержимое. Во время выбора всех этих параметров так же предоставляется возможность создания новых элементов (таблиц, листов). Уже после определения листа выгрузки обходим все ячейки документа и их содержимое переносим в таблицу на соответствующее место. Вопрос сохранения форматирования табличного документа в данной задаче не рассматривался.
Для написания функционала использовалась информация про google document API. Для того чтобы получить доступ к данным необходимо чтобы 1с сначала прошла аутентификацию. Про аутентификацию приложений можно почитать в соответствующем документе. Для того чтобы пройти аутентификацию мы должны сначала получить маркер, затем этот маркер прописывать каждый раз при обращении к серверу.
Функция получения маркера следующая:
Функция получения маркера в качестве входного параметра получает вид службы, для которой будет проходить аутентификация. Это очень важный момент. Например, полученный маркер для Календаря не даст возможности работать с документами.
Для получения списка таблиц отправляется GET запрос по адресу «https://spreadsheets.google.com/feeds/spreadsheets/private/full». В запросе параметр «Authorization» определяется значением полученного маркера аутентификации. В результате выполнения запроса в ResponseText мы получаем xml, который для удобство дальнейшего разбора перегоняется в ДеревоЗначений.Функция получения списка таблиц имеет следующий вид:
Теперь остановимся на самой выгрузке значения в ячейку google таблицы. Для определения значения в ячейке выполняется POST запрос по адресу листа таблицы, который пользователь определил до этого. Успешность выполнения обновления контролируется по значению Status, в случае удачного обновления он должен быть равен 201. Функция обновления значения ячейки на листе Google таблицы имеет следующий вид:
Введение
Многие из Вас, наверное, сталкивались с такой проблемой как, удаление элементов в справочниках, а значит, знают, какую кучу проблем это приносит. Я видал много способов восстановления порушенного справочника. Все их можно свести к следующему:
Заводится новый элемент справочника, аналогичный удаленному элементу, а потом он заносится во все документы, вместо удаленного элемента. Дальше все различается только способом занесения элемента в документы. Кто все исправляет в руки, кто пишет обработку - все зависит от опыта и квалификации исполнителя. После чего, необходимо перепровести все измененные документы. В общем, долгая и нудная работа, не всегда дающая 100% результат правильного восстановления. Есть, правда, один быстрый способ, основанный на формате DBF, точнее методах работы с ним.
Вот об этом мы и поговорим. Итак, что нам для этого надо. Иметь голову, наполненную мозгами, умелые ручки, знания основ перевода чисел из одной системы счисления в другую и любой редактор DBF файлов. Я, к примеру, использую winDBFview фирмы "Гэндальф".
Часть 1. Нам повезло.
С начала, собственно, о формате DBF и методах работы с ним. Думаю, рассказывать обо всем формате нет смысла, это тема отдельной статьи, поэтому расскажем о нем вкратце, для понимания тех действий, которые необходимо совершить.
Итак, что такое DBF формат и с чем его едят. Файл DBF можно разделить на две части: заголовок и, собственно, набор данных. В заголовке находится вся служебная информация, показывающая из каких полей состоит запись, типы этих полей, размер данных в полях, количество записей, размер записи, и откуда в файле начинаются записи, но это сейчас ни к чему. В наборе данных находятся, собственно, записи данных. В начале каждой записи стоит специальный байт - признак удаления. То есть когда вы говорите программе удалить запись, она ее фактический не удаляет, а ставит в первый байт записи метку о том, что данная запись удалена.
Отсюда следует, что если найти запись соответствующую удаленному элементу и сбросить признак удаления, переиндексировать базу, то можно обнаружить что, правильно удаленный
элемент будет восстановлен не только в справочнике, но всех документах.
Для тех, кто не знает что почем, показываю на примере:
Рабочая конфигурация ТиС, удалили элемент справочника товаров.
Запускаем winDBFview и выбираем Файл - Открыть. В появившемся окне диалога находим папку, в которую установлена база и открываем там файл. А какой? Вот ведь вопрос: как узнать? Да просто. Запускаем какую-нибудь оболочку, переходим в папку с базой и находим файл"1Cv7.DD". Открываем его для просмотра и находим там следующую строчку - "Справочник Номенклатура" - в нашем случае, у вас, вместо "Номенклатура" ставим название порушенного справочника (как он называется в конфигураторе) . И видим приблизительно следующее (см. рис. 1). То, что у меня выделено под надписью "Name" и есть искомое нами имя файла. Открываем его в редакторе DBF файлов, и смотрим. В поле CODE содержится код элемента справочника, а в поле DESCR наименование элемента. Как будете искать - уже дело техники и возможностей редактора. Найдя нужный элемент, сбрасываем байт пометки на удаления и сохраняем сделанные изменения.
Часть 2. Нам не повезло.
Но может быть, что вы не смогли быстро приехать к месту событий (всякое в жизни бывает). Приступили к восстановлению элемента. Запустили редактор. И начали искать и не нашли удаленный элемент. Куда он делся? Опять вернемся к формату DBF, и посмотрим, что происходит при добавлении новой записи. С начала программа ищет помеченные на удаление записи и если не находит, то добавляет новую запись. А если находит, вы правы, пишет вместо нее. И что делать, неужто опять все в руки?
Внимательно смотрим листинг файла "1Cv7.DD". Видите перед полем CODE поля ID и PARENTID. Для чего они нужны. Из описания поля (см. рис. 1), следует, что это какой-то идентификатор объекта. Оказывается 1С все равно, на тот код, что вы указали в справочнике элементов. Сама для себя она каждому объекту присваивает свой код. Значит, если мы узнаем этот код, то сможем создать запись полный аналог удаленной. Хм.... А как узнать этот код?
Есть много способов. Я, надеюсь, предлагаю вам самый простой. Итак, начнем.
Запускаем 1С. Лезем в Сервис - Монитор пользователей - Журнал регистрации. В появившемся диалоге делаем отбор: "во всем журнале, отбор по признаку удаление элемента справочника", жмем "ОК".
И смотрим журнал (см. рис. 2). Видите, там, где написано "Номенклатура 2258 04 ....", это и есть удаленный элемент справочника, его нам и надо восстановить. Сверху присутствует
строка: "<Объект не найден>(36201/)", 36201 - это и есть ID объекта. Создаем в справочнике новый элемент - полный аналог удаленному элементу. Выходим из 1С. Запускаем редактор, находим созданный нами элемент и поле ID ставим найденный. Внимательный читатель может сразу заметить существенное различие между соседними записями. Вот сейчас мы и переведем найденный идентификатор к нужному виду.
Перевод из одной системы счисления в другую, подробно изучается в школах и институтах, поэтому на этом останавливаться не будем. Изучив весь справочник, замечаем, что в идентификатор состоит из цифр и заглавных букв латинского алфавита. То есть может содержать все цифры от "0" до "9", и буквы от "A" до "Z". Значит, используется тридцати шестеричная система счисления 10 цифр плюс 26 букв. Приступим:
* 36201 делим на 36, получаем 1005 в остатке 21;
* 1005 делим на 36, получаем 27 в остатке 33;
В конце имеем три числа: 27, 33, 21. Заменяем их соответствующими значениями из приведенной ниже таблицы и получаем ID объекта RXL. Записываем его вместо ID созданного нами элемента. Номер можно получить средствами самой 1С использую функцию _IdToStr() и наоборот получит десятичное число из его тридцати шестеричного представления _StrToId().
Запускаем 1С, индексируем базу и смотрим, что имеем (см. рис. 3)
Что и требовалось получить. Пользуйтесь.
Для того, чтобы процессы кластера серверов 1С:Предприятия соединялись друг с другом, используются адреса, которые определены в качестве значений свойства "Компьютер" диалога свойств рабочих серверов. Для кластера необходимо, чтобы значением свойства "Компьютер" был либо IP-адрес в точечной нотации, либо такой символический адрес, по которому может быть определен IP адрес при помощи функции gethostbyname. Эта функция определена в программном интерфейсе протокола TCP. Определение IP-адреса может выполнятся на основании локальной таблицы символических адресов (C:\WINNT\system32\drivers\etc\hosts) и по таблицам адресов в доступных DNS серверах. Кластер не будет работать, если по символическому адресу рабочего сервера его IP-адрес не определяется или определяется неправильно. Важным пунктом является то, чтобы имена компьютеров и их адреса, которые определены в Windws, не противоречили их именам в DNS.
Процессы кластера могут использовать следующие порты на каждом из рабочих серверов:
— IP порт рабочего сервера (обычно 1540);
— IP порты из диапазонов IP портов рабочего процесса (обычно 1560-1591);
— порт кластера (обычно 1541) - для центрального сервера.
Если не хотите разрешать передачу данных портам, можно разрешить ее процессам кластера (ragent, rmngr, rphost).
Необходимо два этапа для соединение клиентского приложения 1С:Предприятия 8.1 с сервером:
1. установка соединения с менеджером кластера. Для этого используется адрес центрального сервера и порт кластера.
2. установка соединения клиентского приложения с одним из рабочих процессов. Адрес - значение свойства "Компьютер" соответствующего рабочего сервера и порт рабочего процесса, который выбирается из диапазона IP портов рабочего сервера.
Также хотелось бы напомнить, что для доступа к серверу 1С:Предприятие 8.1 с других компьютеров он должен быть в сети. Поэтому должны быть выполнены необходимые настройки.
Круглов Дмитрий дмитриевич:
Скрипт определяет наличие предыдущих платформ и деинсталлирует их..
далее устанавливает последнююю версию, прописывает нужные базы и прямые ярлыки
Рябко Михаил Евгеньевич:
При установке файла 1CEnterprise 8.2.msi через GPO платформа ставилась, но потом ее не могли удалить (после выключения из групповых политик установки). Никакой unistaller ee не брал. Потом почистили реестр, вроде победили.
Более того, инсталлер не прописывал ярлыки в каталог %SystemRoot%\Installer\{8150646B-4F88-4415-AF2A-F96199E3DA37},из за этого все ярлыки были без картинок.
Даже если бы все работало, этот способ не очень понравился, т.к. для 8.2 через те же GPO нельзя прописать базы. А смысл тогда?
Далее пробовали через скрипт. Такое же непредсказуемое поведение по деинсталляции платформы. Кроме этого появлялось 2 ярлыка после установки. Один - который прописан в скрипте, другой - после работы инсталлятора. Ну ладно, написал файл трансформации, чтобы лишний ярлык не создавал, но проблема ошибки при выполнения скрипта ("Требуется объект") и деинсталляции осталась.
Точно также проблема деинсталляции и с ярлыками остается при прямой установке 1CEnterprise 8.2.msi (без трансформации, запуском из проводника), разве что из списка программ удаляется, а все файлы остаются.
В итоге пришли к решению в лоб. Раз уж запуск 1cestart.exe на расшаренной папке дает более-менее положительный результат вручную, то нужно и идти по этому пути. Написал скрипт установки. Вроде работает. Правда, чтобы ограничится установкой без запуска, пришлось создать базу-пустышку и намеренно внести ошибку в параметр запуска. Далее по комментариям все должно быть понятно.
А так есть подозрение, что причина в кривом файле 1CEnterprise 8.2.msi (ярлыки то хотя бы он должен создавать нормально?). То ли дело установка через Setip.exe - тут все в шоколаде и работает.
Итак, альтернативный скрипт (сохранить с расширением *.vbs)
В качестве примера использования можно указать вот такую ситуацию: в зависимости от типа клиента (договора, документа и т.п) формируются разные тексты договоров с разным количеством таблиц. В реальности, конечно должены использоваться и макет и описанные здесь динамические механизмы.
В моем примере я заранее создал новый пустой документ. Тестировалось на Office 2007.
Часто при создании документа из макета используют метод замены кусков текста. В примере представлен другой вариант выполнения того же действия - с использованием закладок. Также представлен пример построения нумерованного списка, вставки картинки, настройки ее параметров.
Пример использования описанных возможностей прост. При формировании коммерческого предложения бывает необходимо описать список условий, добавить изображение образца продукции.
Для отображения закладок включите эту опцию в настройках вашего Word'а.
В моем примере я заранее создал новый пустой документ, путь к документу и картинке прописан в тексте. Не забудте указать свои пути.
В ходе работы мне понадобилось формировать печатные формы по заданному макету поставщика. Решил делать с использованием СКД, но столкнулся с тем, что нужно выводить произвольный заголовок, но непонятно как. Немного поискав и посмотрев примеры нашел способ сделать это быстро и просто. Внимание – написанное ниже предполагает, что вы знаете, что такое СКД и как примерно работают в СКД макеты.
По шагам рассмотрю как вывести шапку для счет-фактуры:
1. Создаем в схеме новую группировку без указания поля (детальные записи)
2. Установим имя группировке
3. Удалим у данной группировки из выбранных полей автополе
4. В других настройках выберем макет оформления «Без оформления» (иначе на наш макет будет накладываться стандартный макет и вокруг всех ячеек будет рамка)
5. На вкладке макеты добавляем наши данные
6. Добавляем макет группировки и указываем наше имя группировки из п.2 и указываем область с нашими данными
Надоели просить меня запостить рабочие модули работы с AD, вот запостил, в качестве бонуса убийца любого процесса в памяти любого компа. p.s. для работы нужны определенные права.
Автор: vde69
Возникла задача отправлять счета почтой. PDFcreator не подошёл поскольку не удалось вместить счёт на одну страницу по ширине. Решил попробовать OpenOffice. Как сохранять в PDF нашёл быстро, а вот как уместить счёт на одну страницу вширь искал долго.
В версии 1С 8.2.232 появилась возможность сохранять табличный документ в xls файл на сервера под линуксом. А вот работать с Опеном офисом из-под линукса пока не получается. Собственно комментари ненужны. Вот весь код. Самое интересное это бодание со стилями страниц в Опене Офисе. Жаль что этот фрагмент работает только на клиенте. На сервере вопрос не решается *08
Автор: Трактор
Функция позволяющая выполнить выгрузку табличного документа в PDF средствами OpenOffice