1с при создании на сервере
Введение в управляемая форма 1С реквизиты элементы команды
Рекомендуется модифицировать управляемые формы типового решения 1С программно для удобного будущего обновления и исключения конфликтов, а также для удобной работы с изменениями и надежности при использовании механизма расширений.
В некоторых типовых конфигурациях 1С (ЕРП 2, УТ 11) используется механизм упрощенного изменения конфигурации. Статьи о типовом механизме можно найти в разделе полезных ссылок. Данный механизм используется в БСП, и его необходимо знать при модификации типовых конфигураций.
При добавлении элементов на форму программно можно отредактировать практически любое свойство из панель свойств, которое можно установить вручную в конфигураторе.
Также все описанные в текущем разделе процедуры и функции находятся во внешней обработке УпрФормы.
Программное переопределение обработчиков событий формы и элементов формы
В теле модуля формы:
А в новой процедуре нужно добавить вызов основной, если такая процедура есть.
Аналогично можно поступить и с обработчиками элементов формы:
Программное создание групп формы.
Доступные виды групп формы:
Программное добавление команды на форму.
Удалить команду можно при помощи метода коллекции формы команд: Команды.Удалить(<Команда>). Удалять можно только те команды, которые были созданы программно.
Программное создание декораций форм.
Программное добавление реквизита на форму.
Добавлять новые реквизиты в управляемую форму и удалять необходимо с помощью метода ИзменитьРеквизиты(), куда в параметры передается массив добавляемых реквизитов и массив удаляемых. Удалять при этом можно только те реквизиты, которые были созданы программно.
Вывод реквизитов на форму.
Вызов процедур при создании на сервере 1С
После описания всех процедур выводим их в процедуре ПриСозданииНаСервере. Также можно изменить программно некоторые свойства формы, например, заголовок. Чтобы был виден только наш заголовок, нужно отключить свойство Автозаголовок.
Некоторые советы при программном редактировании формы
Итак, взглянем на получившийся результат. Все элементы на форме созданы программно:
При установке второй версии для параллельной работы установка аналогичная за исключением пункта:
Снимаем флаг «Установить сервер 1С:Предприятия 8 как сервис Windows(рекомендуется)»
Далее готовим строку:
Мы используем: sc create
Строка выглядит как:
sc create "<Агент сервера 1С:Предприятия 8.Х.Х.ХХХХ>" binpath= "<место расположения ragent.exe>" -srvc -agent -regport 1641 -port 1640 -range 1660:1591 -d \"<место расположения папки сервера 1С>""
<Агент сервера 1С:Предприятия 8.Х.Х.ХХХХ> - указываем имя службы. Главное так, чтобы и вы, и те, кому предстоит поддерживать сервер 1С, могли в дальнейшем, легко ее идентифицировать.
<место расположения ragent.exe>" -srvc -agent -regport 1641 -port 1640 -range 1660:1691 -d \"<место расположения папки сервера 1С>
Строку службы все как обычно:
<место расположения ragent.exe>
Если порт 1540 уже занят (если один сервер в виде службы уже установлен), то ставим следующий или любой, какой понравится, например, вместо:
1541 -port 1540 -range 1560:1591
1641 -port 1640 -range 1660:1691
Вместо <место расположения папки сервера 1С> указываем строку, где планируем расположить папку с файлами сервера. Рекомендую не хранить эту папку на диске С:\, Разбивайте диск сервера на 2. Под систему и под сервер 1С. Тогда в случае, если файлы журнала регистрации займут все место на диске, Вы без проблем зайдете на сервер и почистите их. Чего нельзя сказать, если вы своими файлами журнала регистрации займете все место на системном диске.
Далее заходим в командную строку от админа:
И выполняем команду:
sc create "Агент сервера 1С:Предприятия 8.Х.Х.ХХХХ" binpath= "\"C:\Program Files\1cv8\8.Х.Х.ХХХХ\bin\ragent.exe\" -srvc -agent -regport 1741 -port 1740 -range 1760:1591 -d \"E:\1C_Bases\srvinfo_8_Х_Х_ХХХХ\""
В итоге получим службу:
Если службы не появилось, нажмите кнопку Обновить.))))
Если передумали, то можно удалить только что созданную службу:
sc delete "<Агент сервера 1С:Предприятия 8.Х.Х.ХХХХ>"
где <Агент сервера 1С:Предприятия 8.Х.Х.ХХХХ> - имя службы
Далее заходим в службу:
Ставим переключатель в положение «С системной учетной записью»
И в этом случае можно почистить кэш (это бывает полезно при разного рода непонятном поведении 1С)
Удалить эти файлы можно только при остановленной службе.
Если Вы остановили службу, а файлы не удаляются, значит, нужно зайти в Task manager и проверить его на наличие зависших:
В случае обнаружения выполнить end task.
- 3.Как перенести БД с платформы на платформу, без потери журнала регистрации?
После того как вы установите (смотри пункт 1.) новую версию сервера, у Вас появится желание перевести одну или все БД с текущей версии платформы (сервера) на ту, что вы только что установили.
Сделать это просто: открываем свойства БД на текущем сервере
Кроме того, открываем новый сервер:
Создаем новую БД и копируем в нее все параметры из текущей, единственное, пароль для пользователя у Вас должен быть
По окончании с текущего сервера БД удаляем
Далее заходим в папку, где ранее располагались файлы БД до переноса. Узнать это место просто:
При открытии формы нового объекта (элемента справочника, документа) и при открытии формы существующего объекта возникает различная последовательность событий.
Форма нового объекта
Если открывается форма нового объекта, то сначала происходит начальное заполнение объекта данными (событие Обработка заполнения в модуле объекта, форма которого открывается), а затем вызываются два события формы: сначала на сервере (При создании на сервере) и затем на клиенте (При открытии). Эти два события позволяют подготовить форму к открытию (рис. 1).
Рис. 1. Последовательность событий при открытии формы нового объекта
№ | Модуль | Метод (процедура) |
1 | Модуль объекта (сервер) | Компиляция и код внизу модуля |
2 | Модуль объекта (сервер) | ОбработкаЗаполнения() |
3 | Модуль формы (сервер) | ПриСозданииНаСервере() |
4 | Модуль формы (клиент) | ПриОткрытии() |
Слева показан клиентский контекст, в котором вызываются события формы. Посередине и справа – серверный контекст, в котором вызываются как события формы, так и события самого прикладного объекта, форма которого открывается.
Форма существующего объекта
Если открывается форма существующего объекта, то последовательность событий будет иной (рис. 2). Сначала на сервере вызываются два события формы. Одно (При чтении на сервере) – чтобы подготовить дополнительные данные, которые зависят от данных объекта. Другое (При создании на сервере) – чтобы максимально подготовить форму к открытию. И наконец, на клиенте вызывается еще одно событие формы (При открытии), чтобы выполнить действия, связанные с открытием формы, которые на сервере выполнить невозможно.
Рис. 2. Последовательность событий при открытии формы существующего объекта
№ | Модуль | Метод (процедура) |
1 | Модуль объекта (сервер) | Компиляция и код внизу модуля |
2 | Модуль формы (сервер) | ПриЧтенииНаСервере() |
3 | Модуль формы (сервер) | ПриСозданииНаСервере() |
4 | Модуль формы (клиент) | ПриОткрытии() |
Из всех перечисленных событий нас прежде всего будут интересовать два события формы: При создании на сервере и При открытии.
Все, что можно сделать на сервере для подготовки формы к открытию, нужно делать в обработчике события При создании на сервере.
В обработчике события При открытии нужно делать только то, что на сервере сделать невозможно. Например, выдать предупреждение, задать вопрос. Или же выполнить те действия, которые выполняются именно тогда, когда форма наверняка открывается. Например, открыть связанную форму, которая «сама по себе» не существует, а существует, только если открыта родительская форма. Потому что обработчик При открытии – последний перед открытием формы, в котором можно отказаться от ее открытия. И если не происходит отказа от открытия родительской формы, то, значит, она наверняка будет открыта.
Последовательность событий, которые происходят при открытии формы нового элемента, можно представить следующей схемой:
Прежде всего, при заполнении нового объекта данными, можно попробовать обойтись вообще без написания какого-либо кода. Для этого у реквизитов объектов конфигурации есть свойства ЗначениеЗаполнения и ЗаполнятьИзДанныхЗаполнения.
Эти свойства позволяют визуально (в конфигураторе) задать правила, по которым реквизит будет заполняться данными при создании нового объекта.
Если этих возможностей недостаточно, то тогда нужно использовать возможности встроенного языка.
Действия с данными объекта нужно выполнять в модуле объекта, в обработчике события ОбработкаЗаполнения. Этот событие возникает только при создании новых объектов, при открытии форм существующих объектов это событие не вызывается. Поэтому в нем не нужно узнавать, новый это объект, или нет. Нужно только описать алгоритм заполнения объекта данными. При этом следует учитывать, что это событие будет вызываться в нескольких случаях:
- при интерактивном создании нового объекта,
- при вводе на основании,
- при выполнении метода объекта Заполнить().
При этом параметр Основание, передаваемый в этот обработчик, может иметь различные значения в зависимости от того, каким образом создается новый элемент.
Например, он может иметь тип ссылки, если новый объект вводится на основании.
Или он может иметь тип Структура, если новый объект создается интерактивной командой из списка, в котором установлен отбор. В этом случае структура будет содержать значения элементов отбора этого списка.
Также этот параметр может иметь тип Неопределено, если новый элемент создается интерактивной командой из панели действий. То есть в своем алгоритме начального заполнения полезно анализировать этот параметр.
Что касается внешнего вида формы нового объекта, то им нужно управлять в обработчике события формы ПриСозданииНаСервере.
Это событие возникает и для новых, и для существующих объектов. Поэтому в нем нужно убедиться в том, что открывается форма именно нового объекта. Убедиться в этом можно проанализировав параметр формы Ключ.
Если объект новый, в этом параметре будет пустая ссылка. Если это существующий объект – в этом параметре будет ссылка на этот объект:
Если требуется выполнять какие-то действия в обработчике события формы ПриОткрытии, то в нем ситуация аналогичная, нужно анализировать параметр формы Ключ.
Для тех кто не хочет читать все что выше, код проверки на ЭтоНовый в Управляемом приложении:
Читайте также: