1с как обратиться к метаданным внешней обработки
Описан способ внеконтекстного вызова методов объекта обработки (отчета) в управляемой форме для выполнения некоторых действий или возврата результатов каких-то вычислений, зависящих только от значений переданных методу параметров. Обсуждена применимость предлагаемого способа. Предлагаются способы обхода ограничений для случая запуска обработки в фоновом задании.
Сразу хочется отметить, что речь пойдет о повторном использовании методов, которые фактически являются «статическими» в терминологии ООП, то есть не связанных с конкретным экземпляром объекта. Такие методы, не изменяя состояния (данных) самого объекта, выполняют некоторые действия или (и) возвращают результаты каких-то вычислений.
Как известно, платформа 1С-8.2/8.3 предоставляет возможность повторного использования кода путем размещения его в экспортных процедурах и функциях в следующих местах конфигурации:
- Модули объектов "Форма" и "УправляемаяФорма" ;
- Общие модули конфигурации;
- Модули менеджеров объектов;
- Модули объектов;
Рассмотрим подробней каждый из вариантов с точки зрения использования в управляемых формах в обработках или отчетах.
Модули объектов форм (по замечанию awk):
Этот вариант переиспользования не очень удобен по ряду причин:
- Объекты "Форма" или "УправляемаяФорма" отдельно создать можно только на стороне клиентов (метод ПолучитьФорму () не доступен на сервере). Поэтому на стороне сервера применение этого варианта переиспользования кода ограничено серверным контекстом управляемых форм.
- В силу узкой специализации объектов "Форма" или "УправляемаяФорма" , призванных решать интерфейсные задачи.
На практике этот вариант переиспользования кода в основном используется для нестандартного начального заполнения данных формы до ее открытия или как один из возможных вариантов организации взаимодействия между между формами (в подчиненной форме через атрибут "ВладелецФормы" можно вызвать экспортный метод формы-владельца).
Общие модули конфигурации:
Этот вариант является самым простым с точки зрения использования на стороне клиента в управляемых формах, поскольку общие модули и их методы можно сделать непосредственно доступными для использования на клиенте:
Недостаток размещения кода в общих модулях заключается в уменьшении универсальности обработки (отчета).
Ее функционал «размазывается» по конфигурации. При переносе функционала в другое прикладное решение приходится помнить, что кроме самой обработки также требуется подтянуть «то, пятое, десятое».
А для универсальных обработок, используемых в качестве внешних, такая зависимость от общих модулей может оказаться вообще неприемлемой.
Модули менеджеров объектов:
Модуль менеджера объекта является естественным местом размещения кода общего назначения, не связанного с конкретным экземпляром объекта.
К сожалению, в нынешней реализации управляемого приложения модуль менеджера объекта не доступен на стороне клиента.
Поэтому вызов методов этого модуля приходится выполнять через вспомогательные серверные внеконтекстные методы формы:
В принципе такой вариант размещения кода является приемлемым для обработки с точки зрения производительности и переносимости. Но здесь возникает затруднение, если предполагается использовать обработку (отчет) в качестве внешней обработки (внешнего отчета).
Дело в том, что у внешних обработок и отчетов нет менеджера объекта как такового.
А при сохранении встроенной обработки во внешнюю обработку модуль ее менеджера попросту теряется (кстати, без предупреждения).
В этом случае остается единственное место для размещения повторно используемого кода – модуль объекта обработки (отчета).
Модули объектов:
Модуль объекта также не доступен на стороне клиента в управляемой форме.
Вызов методов объекта в общем случае возможен через вспомогательные серверные, но уже контекстные методы формы:
Серверные контекстные вызовы являются «затратными». Их использование оправдано, если в массовом порядке изменяются данные формы или когда для выполнения каких-то действий требуются данные всей формы или связанного с ней объекта.
Поэтому рекомендуется по возможности избегать использования серверных контекстных вызовов.
Что же делать, если метод объекта фактически является «статическим» и не использует данные самого объекта?
Например, пусть метод возвращает список значений меню, динамически зависящего только от значений переданных методу параметров. Ясно, что использование контекстного серверного вызова в этой ситуации явно неоправданно.
В специально предназначенном строковом реквизите обработки при инициализации модуля объекта сохраняется внутреннее строковое представление типа объекта обработки/отчета:
// установим внутреннее строковое представление типа значения объекта обработки
ЭтотОбъект . ОбработкаТип = ЗначениеВСтрокуВнутр ( ТипЗнч ( ЭтотОбъект ));
Этот способ хорош тем, что "сразу" инициалициализирует нужный реквизит объекта обработки/отчета во всех формах, где объект обработки/отчета используется.
В принципе реквизит обработки можно заменить реквизитом самой формы.
Тогда описанное выше действие нужно будет выполнять в обработчике «ПриСозданииНаСервере» :
&НаСервере
Процедура ПриСозданииНаСервере ( Отказ , СтандартнаяОбработка )
Обработка = РеквизитФормыВЗначение ( "Объект" );
// установим внутреннее строковое представление типа значения объекта обработки
ЭтаФорма . ОбработкаТип = ЗначениеВСтрокуВнутр ( ТипЗнч ( Обработка ));
ЗначениеВРеквизитФормы ( Обработка , "Объект" );
КонецПроцедуры
Значение этого реквизита в дальнейшем используется во вспомогательных внеконтекстных серверных методах формы для создания объекта обработки. Ну, а сам вызов методов объекта обработки на стороне клиента выглядит следующим образом:
Таким образом, решается поставленная задача:
вызовы методов объекта осуществляется при внеконтекстных серверных вызовах со стороны клиента в управляемой форме.
Кроме этого описанный выше подход более универсален, чем использование модуля менеджера объекта.
Так как при таком создании объекта в явном виде не используется информация о том, что за объект создается (объект обработки, отчета или чего другого), а также информация об имени метаданных объекта.
Применение:
Описанный в данной публикации подход может оказаться полезным, если у разрабатывемого объекта планируется создание как управляемого, так и обычного интерфейса.
Ограничения применения:
В случае внешних отчетов и обработок предлагаемый подход можно использовать только в том соединении с информационной базой, в котором был открыт файл обработки/отчета (был откомпилирован модуль объекта из файла).
При использовании в другом соединении (например, в фоновом задании или во внешнем соединении) у нас не получится создать объект внешней обработки/отчета по переданному внутреннему строковому представлению типа объекта обработки/отчета (смотрите первый пример ниже по тексту).
Поскольку в этом случае функция ЗначениеИзСтрокиВнут () вернет значение Тип ( “Неопределено” ) вместо типа нужного нам объекта.
Например, может возникнуть вполне естественное желание запустить на выполнение обработку в фоновом задании.
Для этого потребуется экспортный метод некоего общего модуля, позволяющего выполнять произвольный код на стороне сервера.
Пусть это будет общий модуль «УТР_Сервер» и метод «ВыполнитьНаСервере» (реальный пример из конфигурации «Управление аптечной сетью» ):
Процедура ВыполнитьНаСервере ( Строка , ПереданноеЗначение =Неопределено) Экспорт
Выполнить( Строка );
КонецПроцедуры
Запустить обработку на выполнение в фоновом задании с передачей типа объекта обработки для его создания можно попытаться так:
стПараметры = Новый Структура ( "А" , стАргументы );
стПараметры . Вставить ( "ОбработкаТип" , ОбработкаТип );
КодВыполнения =
"П = ПереданноеЗначение;
|// по переданному типу объекта обработки - НЕ РАБОТАЕТ .
|Обработка = Новый(ЗначениеИзСтрокиВнутр(П.ОбработкаТип));
|Обработка.МетодПроцедура2(П.А.Арг1,П.А.Арг2,П.А.Арг3);
|" ;
ИмяМетодаФЗ = "УТР_Сервер.ВыполнитьНаСервере" ;
ПараметрыФЗ = Новый Массив ;
ПараметрыФЗ . Добавить ( КодВыполнения ); // исполняемый код, запускающий обработку на сервере
ПараметрыФЗ . Добавить ( стПараметры ); // параметры исполняемого кода
ЕррорИнфо = "" ;
Попытка
Задание = ФоновыеЗадания . Выполнить (
ИмяМетодаФЗ , ПараметрыФЗ , ОбработкаИмя + "_" + ФоновоеЗаданиеКлюч , "Выполнение обработки """ + ОбработкаИмя + """" );
Если ТаймаутФЗ > 0 Тогда
Задание . ОжидатьЗавершения ( ТаймаутФЗ );
КонецЕсли;
ЗаданиеGUID = Задание . УникальныйИдентификатор ;;
Исключение
ЗаданиеGUID = Неопределено;
ЕррорИнфо = ОписаниеОшибки ();
КонецПопытки;
Возврат ЗаданиеGUID ;
КонецФункции
Обход ограничений:
Что же делать, если очень хочется выполнить метод объекта внешней обработки/отчета именно в фоновом задании?
Тогда придется как-то передать фоновому заданию двоичные данные обработки (отчета) для создания ее (его) объекта.
Для этого есть три основных способа:
1) Передать через аргумент метода фонового задания навигационную ссылку на данные обработки/отчета в информационной базе
(для этого обработка должна быть сохранена в информационное базе,
например, в справочнике «ДополнительныеОтчетыИОбработки» ):
&НаСервереБезКонтекста
Функция ПолучитьНавигационнуюСсылкуДопОбработки ( ИмяОбработки )
УстановитьПривилегированныйРежим (Истина);
Запрос = Новый Запрос ;
Запрос . Текст =
"ВЫБРАТЬ
| Т.Ссылка КАК Ссылка
|ИЗ
| Справочник.ДополнительныеОтчетыИОбработки КАК Т
|ГДЕ
| Т.ПометкаУдаления = ЛОЖЬ
| И Т.ИмяОбъекта = """ + ИмяОбработки + """
| И Т.Вид = ЗНАЧЕНИЕ(Перечисление.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка)
| И Т.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется)" ;
Выборка = Запрос . Выполнить (). Выбрать ();
Пока Выборка . Количество () = 0 Цикл
Возврат "" ;
КонецЦикла;
Выборка . Следующий ();
Возврат ПолучитьНавигационнуюСсылку ( Выборка . Ссылка , "ХранилищеОбработки" );
КонецФункции
стПараметры = Новый Структура ( "А" , стАргументы );
стПараметры . Вставить ( "ОбработкаАдрес" , ПолучитьНавигационнуюСсылкуДопОбработки ( ОбработкаИмя ));
КодВыполнения =
"П = ПереданноеЗначение;
|// по навигационной ссылке двоичных данных обработки в ИБ
|Обработка = ВнешниеОбработки.Создать(ВнешниеОбработки.Подключить(П.ОбработкаАдрес,,Ложь));
|Обработка.МетодПроцедура2(П.А.Арг1,П.А.Арг2,П.А.Арг3);
|" ;
ИмяМетодаФЗ = "УТР_Сервер.ВыполнитьНаСервере" ;
ПараметрыФЗ = Новый Массив ;
ПараметрыФЗ . Добавить ( КодВыполнения ); // исполняемый код, запускающий обработку на сервере
ПараметрыФЗ . Добавить ( стПараметры ); // параметры исполняемого кода
ЕррорИнфо = "" ;
Попытка
Задание = ФоновыеЗадания . Выполнить (
ИмяМетодаФЗ , ПараметрыФЗ , ОбработкаИмя + "_" + ФоновоеЗаданиеКлюч , "Выполнение обработки """ + ОбработкаИмя + """" );
Если ТаймаутФЗ > 0 Тогда
Задание . ОжидатьЗавершения ( ТаймаутФЗ );
КонецЕсли;
ЗаданиеGUID = Задание . УникальныйИдентификатор ;;
Исключение
ЗаданиеGUID = Неопределено;
ЕррорИнфо = ОписаниеОшибки ();
КонецПопытки;
Возврат ЗаданиеGUID ;
КонецФункции
2) Передать через аргумент метода фонового задания полный путь к файлу обработки/отчета
(полный путь можно получить из атрибута объекта “ИспользуемоеИмяФайла”,
этот путь должен быть доступен на стороне сервера):
стПараметры = Новый Структура ( "А" , стАргументы );
стПараметры . Вставить ( "ОбработкаПутьФайла" , Обработка . ИспользуемоеИмяФайла );
КодВыполнения =
"П = ПереданноеЗначение;
|// по пути к файлу обработки
|Обработка = ВнешниеОбработки.Создать(П.ОбработкаПутьФайла,Ложь);
|Обработка.МетодПроцедура2(П.А.Арг1,П.А.Арг2,П.А.Арг3);
|" ;
ИмяМетодаФЗ = "УТР_Сервер.ВыполнитьНаСервере" ;
ПараметрыФЗ = Новый Массив ;
ПараметрыФЗ . Добавить ( КодВыполнения ); // исполняемый код, запускающий обработку на сервере
ПараметрыФЗ . Добавить ( стПараметры ); // параметры исполняемого кода
ЕррорИнфо = "" ;
Попытка
Задание = ФоновыеЗадания . Выполнить (
ИмяМетодаФЗ , ПараметрыФЗ , ОбработкаИмя + "_" + ФоновоеЗаданиеКлюч , "Выполнение обработки """ + ОбработкаИмя + """" );
Если ТаймаутФЗ > 0 Тогда
Задание . ОжидатьЗавершения ( ТаймаутФЗ );
КонецЕсли;
ЗаданиеGUID = Задание . УникальныйИдентификатор ;;
Исключение
ЗаданиеGUID = Неопределено;
ЕррорИнфо = ОписаниеОшибки ();
КонецПопытки;
Возврат ЗаданиеGUID ;
КонецФункции
В
3) Передать через аргумент метода фонового задания сами двоичные данные файла обработки/отчета
(их можно получить конструктором по значению атрибута объекта “ИспользуемоеИмяФайла”):
стПараметры = Новый Структура ( "А" , стАргументы );
стПараметры . Вставить ( "ОбработкаДанные" ,Новый ДвоичныеДанные ( Обработка . ИспользуемоеИмяФайла ));
КодВыполнения =
"П = ПереданноеЗначение;
|// по двоичным данным обработки
|ИмяФайла = ПолучитьИмяВременногоФайла("".epf"");
|П.ОбработкаДанные.Записать(ИмяФайла);
|Обработка = ВнешниеОбработки.Создать(ИмяФайла,Ложь);
|Обработка.МетодПроцедура2(П.А.Арг1,П.А.Арг2,П.А.Арг3);
|" ;
ИмяМетодаФЗ = "УТР_Сервер.ВыполнитьНаСервере" ;
ПараметрыФЗ = Новый Массив ;
ПараметрыФЗ . Добавить ( КодВыполнения ); // исполняемый код, запускающий обработку на сервере
ПараметрыФЗ . Добавить ( стПараметры ); // параметры исполняемого кода
ЕррорИнфо = "" ;
Попытка
Задание = ФоновыеЗадания . Выполнить (
ИмяМетодаФЗ , ПараметрыФЗ , ОбработкаИмя + "_" + ФоновоеЗаданиеКлюч , "Выполнение обработки """ + ОбработкаИмя + """" );
Если ТаймаутФЗ > 0 Тогда
Задание . ОжидатьЗавершения ( ТаймаутФЗ );
КонецЕсли;
ЗаданиеGUID = Задание . УникальныйИдентификатор ;;
Исключение
ЗаданиеGUID = Неопределено;
ЕррорИнфо = ОписаниеОшибки ();
КонецПопытки;
Возврат ЗаданиеGUID ;
КонецФункции
В
Описание файлов поставки:
Пример.epf – демонстрационная обработка с примерами использования
(в том числе разные варианты выполнения в фоновом задании):
Доброго всем времени. Волею 1С переходим с ЗИКБУ 1.0 на ЗГКУ 3.1.5.99. Внешняя обработка, НЕуправляемое приложение. Раньше для доступа к полю Комментарий ВнешнейОбработки можно было написать так:
ЭтаФорма.Заголовок = ЭтаФорма.Заголовок + ". " + ЭтотОбъект.Метаданные().Комментарий;
Теперь не могу найти "ЭтотОбъект". Не подскажете, куда копнуть? Спасибо.
в УФ, ссылку на этот объект надо получать через РеквизитФормыВЗначение. На сервере.
А ваша задача решается, например в обработчике ПриСозданииНаСервере - это серверный обработчик.
либо отдельной функцией, вызвав ее- например в "ПриОткрытии"
П.С.
Я археолог ))) купился на поднявшуюся старую тему. Ну да ладно, решения все равно не было.
(2)Нет, комментарий обработки, как видно из обращения через Метаданные()
(1)"Раньше" - где и когда? в ОФ эта строка работает.
Спасибо всем ответившим. Далее по порядку.
(2) Роман . Ну да, из самой обработки и ее же комментарий. Там у меня стоит номер версии и даты и его и их я показываю в заголовке основной формы обработки. Чтобы знать - с какой версией работают.
(3) Екатерина. Ну раньше - это в ЗИКБУ 1.0 (8.2.ххх) Там были только обычные приложения. А вот что такое ОФ - теряюсь просто в догадках. Или уже УФ ?
(4) Екатерина. Ваш пример не совсем мне понятен. Я запускаю свою обработку, скажем через
"Открыть файл" в обработке уже прописан ее комментарий, который я и хочу показать в заголовке
основной формы этой обработки. Зачем - уже написал (2). Вот это предложение мне и непонятно.
Возврат Обработки.ИМЯОБРАБОТКИ.Создать().Метаданные().Комментарий;
Что я должен создать, ведь метаданные там присутствуют, просто я их хочу получить в самой же обработке. Раньше (ЗИКБУ 1.0 8.2. было :
ЭтаФорма.Заголовок = ЭтаФорма.Заголовок + ". " + ЭтотОбъект.Метаданные().Комментарий;
Теперь же (ЗКГУ 3.1 8.3.10.ххххх нет ЭтогоОбъекта . ) Пишу версию и дату пока ручками в процедуре ПриОткрытии() этой формы, что в общем то одно и тоже. Интересно просто нумизматически, куда подевался ЭтотОбъект и кто исполняет теперь его функции ?
Спасибо еще раз всем, если есть что по решению этой темы - отвечайте.
(5) ОФ - обычные формы, УФ - управляемые формы.
Конструкция Обработки.ИМЯОБРАБОТКИ.Создать().Метаданные().Комментарий возвращает как раз ваш комментарий. Как по-другому до него добраться я не придумала, может быть опытные и подскажут другое решение. Ждите.
в УФ, ссылку на этот объект надо получать через РеквизитФормыВЗначение. На сервере.
А ваша задача решается, например в обработчике ПриСозданииНаСервере - это серверный обработчик.
либо отдельной функцией, вызвав ее- например в "ПриОткрытии"
П.С.
Я археолог ))) купился на поднявшуюся старую тему. Ну да ладно, решения все равно не было.
"Давным давно, кажется в позапрошлую пятницу" (с), появилась у меня необходимость удалить пару строчек в табличной части одного справочника. Да вот незадача - у данного справочника форма не отображала эту самую табличную часть, поэтому пришлось "колхозить" по-быстрому!
ОБЪЕКТ
Во внешних обработках в качестве объекта можно выбрать в принципе любой объект. При этом на форме появятся соответствующие глобальные команды и команды по-умолчанию.
Вот здесь у нас "классический" объект "Внешняя обработка". При этом никто не мешает нам поменять его на что угодно, например, на справочник "Контрагенты":
У меня тут база новая, поэтому я наглядности ради добавил в справочник только контактную информацию, которая, как всем известно, на форму выводится совсем не в виде табличной части.
Но в нашей внешней обработке никто не мешает нам вывести данную табличную часть на форму и тем самым получить к ней доступ:
В итоге у нас появляется возможность не только посмотреть, но и отредактировать то, чего нет на форме объекта в конфигурации.
КАК ПОЛУЧИТЬ ДОСТУП К ОБЪЕКТУ?
С отображением объекта у нас все отлично, но при открытии обработки в объекте будет находиться новый пустой объект, который мы даже можем записать. Как получить доступ к уже имеющемуся объекту?
Очень просто. Для этого в серверной процедуре или функции модуля формы существует замечательный метод: "ЗначениеВРеквизитФормы".
Т.е. мы можем написать такой вот код, чтобы "загрузить" в объект выбранное значение:
Ну и "ВыбратьСсылку" - это обработчик команды, а "ПриВыбореСсылки" - оповещение сразу на сервере (раньше, кстати, писать для подобных серверных процедур "Экспорт" было необязательно, но в последнее время правила игры поменялись.
В итоге у нас получилась обработка, которая может запросто позволить нам поменять данные любого объекта. Такой подход открывает множество возможностей для изменения объектов, а универсальности этим возможностям может добавить механизм создания реквизитов управляемой формы, о котором я писал в частности тут.
ЭПИЛОГ
А если кто-то хочет разобраться и с другими механизмами, то добро пожаловать в статьи:
Всем добра! Надеюсь, что кто-то сможет почерпнуть для себя из этих статей что-то новое.
В этой статье мы узнаем, что такое обработки в платформе 1С 8.3 и для каких целей они нужны. Научимся создавать обработки в качестве объектов метаданных конфигурации 1С, научимся создавать внешние обработки, создавать формы обработок, добавлять обработки в подсистемы и давать права на обработки пользователям, а также узнаем, как открыть внешнюю обработку в 1С.
В платформе 1С, помимо объектов конфигурации, которые так или иначе связаны ведением учета (например, Справочники – для хранения однотипной информации, Документы – для отображения событий), существует объект, который напрямую не связан с ведением учета, и с помощью которого можно осуществлять различные вспомогательные действия (групповая обработка справочников и документов, загрузка – выгрузка информации и т.д.). Этот объект – Обработка. Обработки могут быть как объекты какой-то конфигурации, а также внешние – в этом случае сама обработка будет храниться где-то на жестком диске, её можно будет открыть в пользовательском клиенте 1С предприятия, и выполнить нужные действия.
Создать обработку 1С
Для того, чтобы создать обработку, в конфигураторе 1С в дереве метаданных необходимо выделить ветку Обработки, вызвать контекстное меню и выполнить команду «Добавить».
После выполнения этой команды, будет создана пустая обработка, которая появится в дереве метаданных в соответствующей ветке, а также откроется окно менеджера обработки.
Обработка создана, и вы можете с ней работать: задать имя обработки, синоним и т.д.
Создать внешнюю обработку 1С
Для того, чтобы создать внешнюю обработку, нужно или выполнить команду «Новый» по пути «Главное меню» — «Файл».
Или нажать на кнопку «Новый» в меню «Стандартная».
После откроется окно «Выбор вида документа», в котором необходимо выбрать «Внешняя обработка».
Откроется окно менеджера внешней обработки, и вы можете проделать с ней все нужные операции.
После того, как внешняя обработка создана, её желательно сохранить на жестком диске (и делать это периодически во время работы с ней в конфигураторе). Для того, чтобы сохранить внешнюю обработку необходимо или нажать на кнопку «Сохранить» меню «Стандартная».
Или выполнить команду «Сохранить» по пути: «Главное меню» — «Файл».
Или просто нажать сочетание клавиш Ctrl + S.
После этих действий откроется окно, в котором можно выбрать каталог, где будет храниться эта внешняя обработка, а также ввести название файла.
После сохранения, у внешней обработки сверху будет прописан путь к ней.
Замечу, что файлы всех внешних обработок имеют расширение epf.
Добавить внешнюю обработку 1С
Иногда возникают задачи добавить внешнюю обработку в конфигурацию 1С. Чтобы это сделать, необходимо выделить ветку «Обработки» дерева метаданных конфигурации, вызвать контекстное меню и выполнить в нем команду «Вставить внешнюю обработку, отчет…».
В открывшемся окне необходимо выбрать нужную обработку.
После, обработка появится в дереве.
Сохранить обработку 1С в файл
Может возникнуть обратная задача: сохранить обработку из какой-то конфигурации в файл, т.е. сделать внешнюю обработку из простой обработки.
Делается это достаточно просто: нужно выделить обработку в дереве конфигурации, вызвать контекстное меню и выполнить команду «Сохранить как внешнюю обработку, отчет…»
Откроется окно «Сохранить как», в котором нужно выбрать месторасположение обработки, а также, если это необходимо, изменить название.
Подсистема обработки 1С
Обработку, которую мы создали в дереве метаданных можно включить в любую подсистему, тогда у нас появится возможность отобразить её в пользовательском интерфейсе. Для того, чтобы включить обработку в подсистему, необходимо зайти на закладку «Подсистемы» менеджера обработки и поставить флаг напротив нужной подсистемы.
Можно включить в подсистему другим способом. Необходимо выделить нужную обработку, вызвать контекстное меню и выполнить в этом меню команду «Дополнительно».
В правой части рабочего стола откроется окно «Дополнительно», в котором на закладке «Подсистемы» можно привязать эту обработку к нужной подсистеме, установив флаг рядом с подсистемой.
После того, как мы поставим флажки, то обработка включится в состав подсистемы.
Но, если мы попробуем её найти в пользовательском клиенте, то ни чего не найдем. Также, её не будет в командном интерфейсе подсистемы.
Причина этому – отсутствие основной формы обработки.
Основная форма обработки 1С
Для того, чтобы обработка появилась в командном интерфейсе, необходимо создать основную форму обработки.
Для этого, нужно в менеджере обработки перейти на вкладку «Формы», в которой нажать на кнопку «Добавить». После, откроется конструктор формы обработки, в котором можно ввести название новой обработки, её синоним, и самое главное установить флаг «Назначить форму основной».
Если вы нажмете на кнопку «Далее», то можете выбрать какие реквизиты обработки будут включены на форму, а если нажать на кнопку «Готово», то форма будет создана без реквизитов.
После этого, обработка появится в командном интерфейсе подсистемы.
Замечу, что основная форма обработки указана в свойстве обработки «Основная форма», если мы это свойство очистим.
То даже при наличии формы, обработка не будет отображаться в командном интерфейсе подсистемы.
Права на обработку 1С
Чтобы пользователь мог работать с обработкой, ему нужно дать права на неё. Для этого, необходимо у соответствующей роли для обработки установить права Использовать и Просмотр.
Если вы установите только право Использовать, то пользователь не сможет видеть обработку в интерфейсе. Он сможет только обращаться в ней посредством программного кода.
Если Вы внедряете обработку в какую-то типовую конфигурацию, то лучше для этого создать отдельную роль, а не изменять текущую. Тогда у вас будет меньше проблем с обновлением в будущем.
Открыть обработку 1с
Для того, чтобы открыть обработку 1С в пользовательском клиенте «1С: Предприятия», необходимо, чтобы она была добавлена в командный интерфейс нужной подсистемы, а также на обработку были даны пользователю соответствующие права. Если всё это сделано, то обработка появится в меню «Сервис» подсистемы, в которую её добавили.
И при выполнении команды с именем обработки будет открыта форма обработки.
Я немного изменил управляемую форму обработки, добавив надпись.
Управляемая форма открылась в независимом окне, если мы хотим, чтобы она открылась поверх окон, то нужно у основной формы обработки установить в свойство «Режим открытия окна» или значение «Блокировать весь интерфейс», или значение «Блокировать окно владельца».
После таких настроек, обработка будет открываться по верх окон.
Открыть внешнюю обработку 1С
Если вы хотите открыть внешнюю обработку 1С, то следует выполнить команду «Открыть», которая находится по пути «Сервис и настройки» — «Файл» (для версии платформы начиная с 8.3.15).
В окне «Открыть» необходимо найти и выбрать нужную вам обработку.
После выйдет предупреждение безопасности, если вы знаете, что это за обработка, то нажимаете кнопку «Да».
Форма внешней обработки открылась.
Замечу, что в моем случае открылась форма обработки в отдельном окне, потому что, во-первых, я создал основную форму внешней обработки, а во-вторых, установил у основной формы в свойство «Режим открытия окна» значение блокировать окно владельца.
Чтобы пользователь мог открывать внешние обработки, ему необходимо установить право «Интерактивное открытие внешних обработок».
Другие статьи по конфигурированию в 1С:
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
Платформе 1С 8.3. менеджер 1С необходим для организации работы с объектами метаданных. Посредством менеджера 1С создаются новые экземпляры справочников, документов, осуществляется поиск и выборка объектов, получаются формы и макет, а также выполняется другая работа, не связанная с конкретным экземпляром объекта.
Менеджер объекта 1С
Для доступа к тому или иному объекту конфигурации 1С необходимо сначала обратиться к менеджеру этого объекта. Например, для управления документом, как объектом конфигурации, следует обратиться к менеджеру документа, а для управления справочником, как объектом конфигурации, нужно обратиться к менеджеру справочника.
Для обращения к менеджеру объекта, сначала необходимо воспользоваться свойством глобального контекста. Например, для обращения к документу нужно воспользоваться свойством Документы, а для обращения к справочнику — Справочники.
Узнать, какое свойство за какой объект отвечает, можно в синтакс-помощнике в разделе Глобальный контекст, подразделе Свойства.
Если в модуле написать название свойства глобального контекста, и поставить «.» (или Ctrl + Space), то появится контекстная подсказка в которой, будут отображены все объекты этого прототипа, существующие в конфигурации на данный момент. Например, справочники.
После выбора конкретного объекта, мы уже обратимся к менеджеру этого объекта. Например, к менеджеру справочника.
И нам будут доступны все свойства и методы менеджера объекта. Заметим, что менеджер объекта даёт доступ не к конкретному экземпляру объекта, а ко всему объекту в целом.
Все свойства и методы менеджера нужного объекта можно посмотреть в синтакс-помощнике. Например, для справочника будет следующий путь.
А для документа, следующий:
Так мы получаем доступ к менеджеру конкретного справочника Контрагенты.
А так, к менеджеру документа Счет.
Естественно, и справочник Контрагенты, и документ Счет уже созданы в конфигурации.
Если после получения доступа к менеджеру объекта, мы поставим точку или выполним комбинацию клавиш Ctrl + Space, то появится контекстная подсказка со свойствами и методами менеджера объекта.
Подробно об этих методах можно почитать в синтакс-помощнике. Например, о методах менеджера справочника.
Например, в случае справочника, при помощи этих методов можно найти элемент, создать элемент, получить выборку и т.д.
Создать экземпляр объекта справочника можно так:
Где СоздатьЭлемент() – это функция менеджера справочника, которая возвращает новый экземпляр объекта.
А получить выборку элементов справочника можно так:
Где Выбрать() – это функция менеджера справочника, которая возвращает выборку элементов.
Модуль менеджера 1С
Помимо методов менеджеров объектов, которые предоставляет платформа 1С можно создать собственные методы того или иного объекта. Делается это в модуле менеджера 1С. Открыть модуль менеджера объекта 1С достаточно просто: необходимо в дереве конфигурации выделить нужный объект, вызвать контекстное меню, и выполнить команду «Открыть модуль менеджера» этого меню.
Теперь, мы можем обратиться к этому методу посредством менеджера конкретного справочника.
Т.е. с помощью модуля менеджера мы можем создавать свойства и методы, которые будут применимы только к конкретному справочнику, документу и т.д.
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
Читайте также: