Что значит экспорт в 1с
Описание процедур и функций
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1. Описание процедур и функций рекомендуется выполнять в виде комментария к ним. Необходимость комментирования отдельных участков кода процедур и функций должна определяться разработчиком исходя из сложности и нестандартности конкретного участка кода.
При разработке на платформе 1С:Предприятие 8.3 текст комментария также выводится в контекстной подсказке процедур, функций и их параметров. Подробнее см. раздел «Контекстная подсказка при вводе текстов модулей» главы 27 «Инструменты разработки» в документации к платформе.
При разработке в 1C:Enterprise Development Tools (EDT) текст комментария также используется для уточнения типизации параметров и возвращаемого значения процедур и функций, и тем самым помогает выявлять ошибки кодирования на этапе разработки.
2. Обязательного комментирования требуют процедуры и функции входящие в программный интерфейс модулей - такие процедуры и функции предназначены для использования в других функциональных подсистемах (или в других приложениях), за которые могут отвечать другие разработчики, поэтому они должны быть хорошо документированы.
3. Прочие процедуры и функции (в том числе обработчики событий модулей форм, объектов, наборов записей, менеджеров значений и т.п.) рекомендуется комментировать, если требуется пояснить назначение процедуры (функции) или особенности её работы. Также рекомендуется описывать причины невыполнения некоторых действий, если они кажутся неочевидными для данной процедуры или функции.
Но если процедура (функция) не сложна для понимания и ее назначение и порядок работы следуют из ее названия и имен формальных параметров, комментарий допускается не писать.
4. Следует избегать комментариев, не дающих дополнительных пояснений о работе не-экспортной процедуры (функции).
Например, неправильно:
В этих примерах комментарии избыточны, так как из названий процедур очевидно, что это обработчики событий. А с их описанием и назначением параметров можно ознакомиться в синтакс-помощнике.
Этот комментарий не дает никакой дополнительной информации о функции.
5. Комментарий размещается перед объявлением процедуры (функции) и имеет следующий вид.
5.1. Секция "Описание" (англ. "Description" ) содержит описание назначения процедуры (функции), достаточное для понимания сценариев ее использования без просмотра ее исходного кода. Также может содержать краткое описание принципов работы и перекрестные ссылки на связанные процедуры и функции.
Может быть единственной секцией для процедур без параметров. Описание не должно совпадать с именем процедуры (функции). Для процедур и функций секция должна начинаться с глагола. Для функций это, как правило: «Возвращает…». В тех случаях, когда возвращаемый результат является не основным в работе функции, – то с основного действия, например: «Проверяет…», «Сравнивает…», «Вычисляет…» и т.п. Не рекомендуется начинать описание с избыточных слов «Процедура. », «Функция. », а также с имени самой процедуры (функции), от удаления которых смысл не меняется.
5.2. Секция "Параметры" (англ. "Parameters" ) описывает параметры процедуры (функции). Если их нет, секция пропускается. Предваряется строкой "Параметры:", затем с новой строки размещаются описания всех параметров.
5.2.1. Описание параметра начинается с новой строки, далее имя параметра, затем дефис и список типов (*), далее дефис и текстовое описание параметра.
Имя параметра необходимо стремиться выбирать таким образом, чтобы его назначение было понятно в контексте функции без дополнительных пояснений
Описание типа является обязательным. Тип может быть описан явно, при этом может быть указан или один тип или список типов. Под «списком типов» подразумеваются имена типов, разделенные запятыми. Имя типа может быть простым (в одно слово) или составным - в два слова, разделенных точкой.
Например: Строка, Структура, Произвольный, СправочникСсылка.Сотрудники .
В качестве типов значений следует использовать только существующие в платформе типы, а также специальные типы, предусмотренные в EDT: ОпределяемыйТип.<Имя> , СправочникСсылка , ОбъектМетаданныхОтчет , РасширениеДекорацииФормыДляНадписи и т.п.
Текстовое описание параметра рекомендуется заполнять в том случае, когда только имени параметра в контексте функции не достаточно для понимания его назначения, либо требуется дать дополнительную информацию о типе, поясняющие назначение параметра, а также может приводиться наглядный пример с ожидаемым значением параметра.
// Проверяет, что переданные адреса включены в задачу. Если проверка не проходит – генерируется исключение.
//
// Параметры:
// Адреса - Строка - строка, содержащая электронные адреса
// ЗадачаИсполнителя - ЗадачаСсылка.ЗадачаИсполнителя – проверяемая задача
//
Процедура ПроверитьАдресаЗадачи( Адреса, ЗадачаИсполнителя )
В данном примере текстовое описание для параметра «Адреса» нужно чтобы
- указать правило передачи нескольких адресов (через зяпятую);
- привести пример.
Текстовое описание для параметра ЗадачаИсполнителя не нужно.
5.2.2. Для параметров типа Структура и ТаблицаЗначений также задается описание их свойств и колонок, которые начинаются с новой строки и предваряются символом *.
Например:
При этом текстовое описание свойства (колонки) рекомендуется заполнять в том случае, когда только имени свойства в контексте параметра не достаточно для понимания назначения свойства или требуется дать дополнительную информацию о типе.
5.2.3. Для параметров типа Массив следует указывать тип элементов с помощью ключевого слова "из" (англ. "of" ):
В описании массивов, структур и таблиц значений могут быть вложенные описания, при этом перед именами вложенных свойств число звездочек увеличивается: для первого уровня вложенности 2 звездочки, для второго 3 и т.д.
5.2.4. Также для параметра типа СтрокаТаблицыЗначений ( СтрокаДереваЗначений ) возможно задать состав свойств, соответствующий колонкам его таблицы-владельца (дерева-владельца):
Например:
// СведенияОРегионе – СтрокаТаблицыЗначений: см. РегистрыСведений.АдресныеОбъекты.КлассификаторСубъектовРФ
где КлассификаторСубъектовРФ - экспортная функция модуля менедежра регистра сведения АдресныеОбъекты, которая возвращает таблицу значений.
5.2.5. Также для каждого параметра можно задать одно или несколько дополнительных описаний типов параметра. Каждое дополнительное описание начинается с новой строки, затем обязательный дефис, далее список типов параметра далее дефис и текстовое описание.
Например:
5.2.6. Описание также могут быть заданы с помощью ссылки на функцию-конструктор в формате "см. ПутьКФункции" (англ "see MethodPath" ).
Например:
// ПараметрыУказанияСерий - см. НоменклатураКлиентСервер.ПараметрыУказанияСерий
// Дубли - см. ОбработкаОбъект.ПоискИУдалениеДублей.ГруппыДублей
// РеквизитыКомпонент - Массив из см. ВнешниеКомпоненты.РеквизитыКомпоненты
При разработке кода, обращающегося к реквизитам конкретного объекта метаданных или формы, можно ссылаться на типы реквизитов этого объекта (формы):
Также в редких случаях, когда подходящей функции-конструктора не существует и ее невозможно создать, допустимо указывать ссылку на другую процедуру (при полном совпадении параметров) или на параметр другой процедуры или функции, например:
// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту
//
Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт
// Параметры:
// НастройкиФормы - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.НастройкиФормы
// Источники - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.Источники
// ПодключенныеОтчетыИОбработки - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.ПодключенныеОтчетыИОбработки
// Команды - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.Команды
//
Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт
5.3. Секция "Возвращаемое значение" (англ. "Returns" ) описывает тип и содержание возвращаемого значения функции. Для процедур эта секция отсутствует. Предваряется строкой "Возвращаемое значение:". Затем с новой строки тип возвращаемого значения, дефис и текст описания. При использовании возвращаемого значения составного типа следует каждый тип писать с новой строки и с дефиса. Например:
Текстовое описание возвращаемого значения рекомендуется заполнять в том случае, когда только одного описания функции не достаточно, либо требуется дать дополнительную информацию о типе, например, о составе свойств или колонок возвращаемого значения. Также может быть приведен пример с ожидаемым значением возвращаемого значения, либо сквозной пример размещается в секции "Пример" ниже.
Для возвращаемых значений также действуют требования п.5.2.2 и 5.2.3.
5.4. Секция "Пример" (англ. "Example" ) содержит пример использования процедуры, или функции. Предваряется строкой "Пример:". Далее с новой строки пример использования. Имя процедуры (функции) следует писать вместе с именем общего модуля, в котором она расположена. Из примера должно быть понятно, что передается на входе и что возвращается на выходе.
Например, неправильно:
5.4.1. В переопределяемых модулях в секции "Пример" следует размещать пример реализации переопределяемой процедуры, а не пример ее вызова. Например, для процедуры ПриОпределенииОбщихПараметровБазовойФункциональности(ОбщиеПараметры):
5.5. В редких случаях, когда сразу несколько параметров имеют дополнительные типы, рекомендуется добавить секцию "Варианты вызова" (англ. "Сall options" ), в которой дать описания наиболее частых или всех возможных вариантов вызова функции с различными комбинациями типов параметров. Секция начинается фразой "Варианты вызова:" с новой строки, затем идут описания вариантов, каждое начинается с новой строки. Каждый вариант вызова представляется в виде имени функции со списком типов, перечисленных через запятую в круглых скобках, затем следует дефис и текстовое описание варианта.
5.6. В любом месте документирующего комментария можно добавить переход к другим объектам конфигурации, процедурам и функциям (в частности, для перехода к функциям-конструкторам структур). При использовании 1C:Enterprise Development Tools среда оформит такие переходы в виде гиперссылки.
Например:
5.7. В случаях когда возникает необходимость отметить процедуру (функцию) как устаревшую, в первой строке ее описания размещается слово "Устарела" (англ. "Deprecated" )..
Например:
6. Если требуется прокомментировать процедуру или функцию с директивой компиляции, то вначале следует размещать комментарий, а затем -
директиву компиляции. Например:
Такой стиль размещения комментария позволяет в первую очередь обращать внимание на определение функции и директиву компиляции, а потом - на комментарий, который может занимать достаточно большое количество строк.
7. Код процедур и функций должен отделяться друг от друга в тексте модуля пустыми строками.
Примеры описания процедур и функций
Пример описания функции с одним параметром:
Пример описания процедуры без параметров:
Для автоматического упорядочивания комментариев к процедурам или функциям с директивами компиляции можно воспользоваться приложенной обработкой ФорматированиеДирективКомпиляции.epf .
Ключевое слово Процедура начинает секцию исходного текста, выполнение которого можно инициировать из любой точки программного модуля, просто указав Имя_процедуры со списком параметров (если параметры не передаются, то круглые скобки, тем не менее, обязательны). Если в модуле обычного приложения, модуле управляемого приложения или общем программном модуле в теле описания процедуры использовано ключевое слово Экспорт , то это означает, что данная процедура является доступной из всех других программных модулей конфигурации.
При выполнении оператора Возврат процедура заканчивается и возвращает управление в точку вызова. Если в тексте процедуры не встретился оператор Возврат , то после выполнения последнего исполняемого оператора происходит выполнение неявного оператора Возврат . Конец программной секции процедуры определяется по оператору КонецПроцедуры .
Переменные, объявленные в теле процедуры в разделе Объявления локальных переменных , являются локальными переменными данной процедуры, поэтому доступны только в этой процедуре (за исключением случая передачи их как параметров при вызове других процедур, функций или методов).
Имя_проц | Назначает имя процедуры. |
Знач | Необязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, то есть изменение значения формального параметра при выполнении процедуры никак не повлияет на фактический параметр, переданный при вызове процедуры. Если это ключевое слово не указано, то параметр процедуры передается по ссылке, то есть изменение внутри процедуры значения формального параметра приведет к изменению значения соответствующего фактического параметра. |
Парам1 , . ПарамN | Необязательный список формальных параметров, разделяемых запятыми. Значения формальных параметров должны соответствовать значениям передаваемых при вызове процедуры фактических параметров. В этом списке определяются имена каждого из параметров так, как они используются в тексте процедуры. Список формальных параметров может быть пуст. |
= ДефЗнач | Необязательная установка значения параметра по умолчанию. Параметры с установленными значениями по умолчанию можно располагать в любом месте списка формальных параметров. |
Экспорт | Необязательное ключевое слово, которое указывает на то, что данная процедура является доступной из других программных модулей. |
// Объявления локальных переменных | Объявляются локальные переменные, на которые можно ссылаться только в рамках этой процедуры. |
// Операторы | Исполняемые операторы процедуры. |
Возврат | Необязательное ключевое слово, которое завершает выполнение процедуры и осуществляет возврат в точку программы, из которой было обращение к процедуре. Использование данного оператора в процедуре не обязательно. |
КонецПроцедуры | Обязательное ключевое слово, обозначающее конец исходного текста процедуры, завершение выполнения процедуры. Возврат в точку, из которой было обращение к процедуре. |
Функция
Ключевое слово Функция начинает секцию исходного текста функции, выполнение которой можно инициировать из любой точки программного модуля, просто указав Имя_функции со списком параметров (если параметры не передаются, то круглые скобки, тем не менее, обязательны). Если в модуле обычного, управляемого приложения, внешнего соединения, сеанса или общем программном модуле в теле описания функции использовано ключевое слово Экспорт , то это означает, что данная функция является доступной из всех других программных модулей конфигурации.
Функции отличаются от процедур только тем, что возвращают Возвращаемое значение . Конец программной секции функции определяется по оператору КонецФункции .
Вызов любой функции в тексте программного модуля можно записывать как вызов процедуры, то есть в языке допускается не принимать от функции возвращаемое значение .
Переменные, объявленные в теле функции в разделе Объявления локальных переменных , являются локальными переменными данной функции, поэтому доступны только в этой функции (за исключением случая передачи их как параметров при вызове других процедур, функций или методов).
С помощью механизма XDTO можно описать систему типов и значений, с помощью которой можно легко выполнить сериализацию/десериализацию в XML/JSON.
XDTO можно сравнить со схемой XML. С помощью механизма XDTO можно создать XML-схему, а потом на основании этой схемы сформировать XML-документ.
XDTO может применяться в следующих случаях:
- Для описания типов параметров и возвращаемых значений Web-сервисов.
- Для описания структуры данных, используемой при обмене с внешними системами (в том числе с другими базами на платформе 1С).
- Для создания собственных типов и значений, используемых внутри конфигурации 1С.
Создание XDTO-пакета
В качестве примера рассмотрим следующую задачу: нужно настроить обмен документами между двумя различными конфигурациями на 1С. В обеих конфигурациях используются 2 типа документов: приходные и расходные накладные. Состав и наименование реквизитов в разных конфигурациях отличается.
Для обмена будет использоваться определенный формат следующего вида:
Есть корневой элемент Документ, который имеет 2 свойства: Тип и Состав. Состав включает в себя массив строк со свойствами: Номенклатура, Количество и Сумма.
Для описания данного формата будем использовать XDTO-пакет. XDTO-пакет можно сравнить со схемой XML, в нем мы укажем какие типы будут использоваться внутри пакета и каким образом они должны быть сериализованы в XML.
Добавим в пакет новый Тип объекта:
В свойствах укажем Имя Документ:
Это корневой узел нашего формата.
В свойствах укажем Имя Тип:
В данном свойстве будет строкой храниться тип выгружаемого документа. Поэтому нужно заполнить свойство Тип, чтобы при записи в XML платформа знала как нужно его сериализовать.
Чтобы заполнить тип сначала нужно нажать на зеленую галочку возле свойства:
Данный тип соответствует типу 1С Строка.
Добавим для объекта Документ еще одно свойство Состав, но тип пока заполнять не будем. Должно получиться так:
Теперь добавим новый тип объекта Состав. Он будет использоваться для сериализации табличной части документа. Добавим для него одно свойство Строка, тип пока не будем указывать:
Так как в табличной части может быть несколько строк, то для свойства Строка в свойстве Максимальное количество нужно указать -1 (предварительно нужно нажать на зеленую галку):
Это означает, что в данном свойстве может храниться неограниченное количество значений (аналогично массиву).
Теперь для свойства Документа Состав в качестве типа укажем только что созданный объект Состав. Чтобы его выбрать нужно развернуть пространство имен созданного нами XDTO-пакета:
И наконец для свойства Строка объекта Состав укажем тип Строка (только что созданный нами тип объекта):
На этом создание XDTO-пакета завершено. Для удобства переименуем его в Документ (нужно щелкнуть по пакету правой кнопкой, выбрать Свойства и изменить свойство Имя):
Сериализация XDTO в XML
Теперь напишем простую процедуру для сериализации приходного документа в XML через механизм XDTO.
Сначала рассмотрим некоторые понятия, которые будут использоваться в процессе сериализации:
Как выполнить экспортируемую процедуру объекта, находясь в его форме?
Задача, которую будем рассматривать, заключается в вызове экспортируемой процедуры документа. Например, документ имеет процедуру, которая позволяет пересчитать все цены, содержащиеся в табличной части документа, и применить к ним скидку в 10 %. Нужно вызвать эту процедуру, находясь в форме документа.
Для вызова такой процедуры необходимо прежде всего иметь сам объект документа, но прикладные объекты существуют только на сервере. На клиенте их нет. Поэтому поступим следующим образом.
Выполним контекстный серверный вызов. На сервере преобразуем основной реквизит формы в прикладной объект, выполним экспортируемую функцию этого объекта и преобразуем объект обратно в основной реквизит формы.
В результате выполненные на сервере изменения данных формы будут автоматически переданы на клиента, когда на него вернется выполнение программного кода.
Например, локальная команда формы, вызывающая серверную процедуру, будет выглядеть следующим образом:
Контекстная серверная функция ПересчитатьЦеныНаСервере() будет выглядеть следующим образом:
В этой функции сначала мы преобразуем данные реквизита формы Объект в прикладной объект типа ДокументОбъект.Накладная .
После этого мы вызовем экспортируемую процедуру этого прикладного объекта – НачислитьСкидку() . В результате ее работы все цены, содержащиеся в табличной части объекта, будут уменьшены на 10 %.
Затем мы преобразуем данные прикладного объекта обратно в реквизит формы Объект . То есть новые цены в табличной части теперь будут и в форме, которая пока находится на сервере.
Когда выполнение всех серверных процедур, которые мы вызвали, будет закончено, контекст формы на сервере будет собран, отправлен на клиента и там автоматически обновлен. В результате мы увидим в открытом документе на клиенте уже новые цены в табличной части документа.
Читайте также: