Внешние функции обработки СБИС для 1С 8.х — различия между версиями
(→Внешние функции для выгрузки документов) |
(→Переопределяемые функции выгрузки документов) |
||
Строка 59: | Строка 59: | ||
Если стандартный механизм формирования документа совсем не подходит и нельзя обойтись вышеописанными механизмами, в этом случае мы можем полностью переопределить функции формирования структуры документа. Для этого: | Если стандартный механизм формирования документа совсем не подходит и нельзя обойтись вышеописанными механизмами, в этом случае мы можем полностью переопределить функции формирования структуры документа. Для этого: | ||
* В обработке ВнешниеФункции_Клиент создаем форму «Файл_[Формат файла]_[Версия формата файла]» | * В обработке ВнешниеФункции_Клиент создаем форму «Файл_[Формат файла]_[Версия формата файла]» | ||
− | * Переносим в нее функции из формы Файл_Шаблон | + | * Переносим в нее функции ПолучитьДанныеИзДокумента1С и ПолучитьТабличнуюЧастьДокумента1С из формы Файл_Шаблон и пишем в этих функциях свой код формирования структуры документа. Не забываем в конце добавить свое вложение в состав пакета: |
+ | Контекст.СоставПакета.Вложение.Добавить(Вложение); | ||
=Внешние функции для загрузки документов= | =Внешние функции для загрузки документов= |
Версия 17:36, 13 ноября 2015
Так как код самой обработки Sbis1C ни при каких условиях менять нельзя, для внесения изменений под клиента предусмотрена дополнительная внешняя обработка ВнешниеФункции_Клиент.epf. Данная обработка отсутствует в стандартной поставке и создается самостоятельно с помощью конфигуратора 1С. Внешние функции пишутся при необходимости изменить выгрузку или загрузку документов, если изменения требуют определенных вычислений и нельзя обойтись простой правкой файла настроек.
Содержание
Внешние функции для выгрузки документов
Внешние функции в файлах настроек
Параметры в файлах настроек могут определяться через функцию.
Вызов функций, описанных в файлах настроек, происходит после того как рассчитаны все другие параметры, определенные НЕ через функции. То есть сначала идет одно обращение на сервер 1С, где мы получаем напрямую все данные из документа, описанные в файле настроек, а потом уже на клиентской стороне вычисляются параметры, определенные с помощью функций.
Чтобы определить параметр через клиентскую функцию:
- Создаем внешнюю обработку ВнешниеФункции_Клиент.epf в конфигураторе 1С (меню Файл/Новый/Внешняя обработка). Имя обработки так же указываем ВнешниеФункции_Клиент
- В обработке создаем форму "РаботаСДокументами1С" (название можно скопировать из основной обработки)
- В модуле формы пишем экспортную функцию с одним параметром (для единообразия называем параметр "Контекст")
- Параметр Контекст представляет из себя структуру, поля которой соответствуют параметрам блока мФайл в файле настроек (по которому выгружается документ), а в значениях полей - уже рассчитанные значения параметров, которые определены не через функции, то есть примерно такая структура:
Если параметр, который мы рассчитываем с помощью функции, лежит внутри тега мСторона или мТаблДок и других подобных, то в Контексте будет структура, соответствующая данному блоку файла настроек.
Важно! Для управляемых форм! Для ускорения процесса выгрузки необходимо минимизировать количество обращений к серверу 1С. Получение любого реквизита документа, организации, контрагента и т.д. - это обращение к серверу. Поэтому по возможности все реквизиты, которые необходимы для вычислений во внешней функции, определяем в файле настроек, чтобы все они были рассчитаны за одно обращение к серверу.
Например, мы пишем функцию, определяющую название организации, которая возвращает полное наименование организации, если оно заполнено, иначе - сокращенное наименование. При этом оба реквизита НаименованиеПолное и НаименованиеСокращенное должны быть добавлены в файл настроек:
<СторонаНаименованиеПолное>[Сторона].НаименованиеПолное</СторонаНаименованиеПолное>
<СторонаНаименованиеСокращенное>[Сторона].НаименованиеСокращенное </СторонаНаименованиеСокращенное>
<Сторона_Наименование>{сбисНаименованиеОрганизации()}</Сторона_Наименование>
В этом случае внешняя функция может исполняться на клиенте (не забываем указать соответствующую директиву) и не дергать лишний раз сервер. В Контексте уже будут лежать рассчитанные значения параметров СторонаНаименованиеПолное и СторонаНаименованиеСокращенное:
&НаКлиенте
Функция сбисНаименованиеОрганизации(Контекст) Экспорт
Если ЗначениеЗаполнено(Контекст.СторонаНаименованиеПолное) Тогда
Возврат Контекст.СторонаНаименованиеПолное;
Иначе
Возврат Контекст.СторонаНаименованиеСокращенное;
КонецЕсли;
КонецФункции
Внешние функции, вызываемые из обработки
В стандартном механизме формирования электронного документа есть два места для "встраивания", то есть для внесения изменений в выгружаемый документ:
1. Функция сбисПослеФормированияСтроки(НоваяСтрока, Кэш, Контекст, Стр) - предназначена для внесения изменений в строки табличной части, а также определяет, нужно ли добавлять данную строку в документ.
- Возвращает Истину - в этом случае строка добавляется в документ, или Ложь - в этом случае строка не добавляется в документ (см. пример)
- Вызывается после формирования структуры строки стандартным механизмом в форме Файл_Шаблон. Сама функция пишется в обработке ВнешниеФункции_Клиент в форме «Файл_[Формат файла]_[Версия формата файла]». Например, при формировании накладной создается форма "Файл_ЭДОНакл_3_01". Если нужно написать данную функцию для нескольких типов документов, то для каждого создается своя форма. Нельзя выносить во внешние функции форму "Файл_Шаблон"!
Параметры Функции:
- НоваяСтрока - структура строки, которая будет добавлена в выгружаемый документ. То есть именно в нее при необходимости нужно вносить изменения.
- Кэш - общий кэш обработки
- Контекст - структура с данными по текущей выгрузке документов
- Стр - структура строки, заполненная по файлу настроек
2. Функция сбисПослеФормированияДокумента(Док, Кэш, Контекст) - предназначена для внесения изменений в сформированный документ. Также используется при необходимости добавить к пакету печатную форму документа в формате pdf.
- Вызывается после формирования структуры документа стандартным механизмом в форме Файл_Шаблон. Сама функция пишется в обработке ВнешниеФункции_Клиент в форме «Файл_[Формат файла]_[Версия формата файла]».
Параметры Функции:
- Док - структура выгружаемого документа. В нее при необходимости нужно вносить изменения.
- Кэш - общий кэш обработки
- Контекст - структура с данными по текущей выгрузке документов
Переопределяемые функции выгрузки документов
Если стандартный механизм формирования документа совсем не подходит и нельзя обойтись вышеописанными механизмами, в этом случае мы можем полностью переопределить функции формирования структуры документа. Для этого:
- В обработке ВнешниеФункции_Клиент создаем форму «Файл_[Формат файла]_[Версия формата файла]»
- Переносим в нее функции ПолучитьДанныеИзДокумента1С и ПолучитьТабличнуюЧастьДокумента1С из формы Файл_Шаблон и пишем в этих функциях свой код формирования структуры документа. Не забываем в конце добавить свое вложение в состав пакета:
Контекст.СоставПакета.Вложение.Добавить(Вложение);