1с как работать с расширением
Механизм расширения конфигурации 1C
Приветствую уважаемый читатель, в данной статье предлагаю ознакомиться с Механизмом расширения конфигурации 1С 8.3, в частности мы познакомимся с его работой в режиме Адаптация, а также рассмотрим пример программного изменения Формы объекта при помощи расширения. Ну, а сейчас немного теории…
Как указано в описании: «Механизм расширения конфигурации – это специальный механизм, предназначенный для доработки расширяемой конфигурации без изменения этой конфигурации (в том числе без снятия с поддержки).»
Основным назначением расширения конфигурации является доработка прикладных решений (конфигураций) под нужды клиента. При этом нет необходимости в снятии дорабатываемой конфигурации с поддержки. В результате сохраняется простота сопровождения и обновления типового прикладного решения, стоящего на поддержке.
При разработке расширений следует учитывать следующие факты:
— в системе могут функционировать более одного расширения.
— расширяемая конфигурация в любой момент может быть изменена, например, в результате обновления и разработчик расширения никак не может повлиять на возможность или невозможность обновления
Расширение может иметь одно из следующих назначений:
Исправление — предназначено для оперативного исправления ошибок в прикладном решении. В таких расширениях часто применяется метод с помощью аннотации Вместо. Как правило это назначение предназначено для определенной версии прикладного решения. При выходе следующей версии этого решения автор расширения должен проводить анализ применимости созданных расширений в новой версии.
Адаптация — предназначено для адаптации прикладного решения под условия конкретного заказчика. Предполагается, что в каждый момент времени в информационной базе существует минимальное количество таких расширений. Если в одно расширение невозможно включить весь набор изменений, то рекомендуется расширения с назначением Адаптация разбивать по максимально крупным блокам расширяемого прикладного решения.
Дополнение — предназначено для реализации новых возможностей прикладных решений, которые минимально привязаны к конкретной версии прикладного решения. В качестве примера можно привести создание нового набора отчетов, который отсутствует в прикладном решении. Предполагается, что таких расширений может быть произвольное количество.
Расширение создается в конфигураторе, хранится в информационной базе и может быть выгружено в файл. Для подключения расширения, сохраненного в файл, в прикладное решение нет необходимости использовать конфигуратор. Подключить расширение можно с помощью стандартного функционала (Все функции Стандартные Управление расширениями конфигурации). Подключить расширение также используя программный интерфейс, предоставляемый платформой.
Ограничения использования расширений:
Расширения конфигурации не поддерживают создание следующих собственных объектов:
— Подписки на события.
— Функциональные опции и параметры функциональных опций.
— Бизнес-процессы и задачи.
— Внешние источники данных.
Не поддерживается расширение следующих объектов:
— Нельзя создавать подчиненные подсистемы.
— Если объект не может быть собственным объектом расширения его расширение также не поддерживается.
— Состав значений перечислений;
Не поддерживается добавление реквизитов и табличных частей для:
— План видов характеристик;
— План видов расчетов.
Не поддерживается изменение структуры регистров всех видов. Поддерживается только расширение состава регистраторов.
В базовых версиях прикладных решений работа с расширениями не поддерживается.
Стоит помнить, что Механизм расширения конфигурации – это перспективный постоянно развивающийся механизм и с выходом новых версий платформ их функционал только расширяется и лишается текущих недочетов.
Как добавить расширение конфигурации 1С 8.3
Предлагаю рассмотреть задачу добавления нового Справочника «Категория должности по Классификатору Предприятия» с выводом его значения на Форму Справочника Должности, на базе Конфигурации ЗУП 3.1
Для создания расширения необходимо запустить 1С в режиме конфигуратора.
В конфигураторе необходимо зайти в меню «Конфигурация» и выбрать пункт «Расширения конфигурации». Откроется окно со списком расширений (если они есть). Далее нажмем кнопку «Добавить». Мы увидим диалоговое окно создания расширения:
Стоит отдельно выделить поле Назначение – необходимо выбрать его значение в зависимости от решаемой задачи – т.к. мы выполняем добавление объектов по требованиям конкретного заказчика – нам подойдет вариант «Адаптация».
После нажатия на кнопку «ОК» — двойным кликом по появившейся строке откроем Конфигурацию расширения. Мы увидим практически пустое дерево конфигурации.
Добавим в расширение справочник Категория должности по Классификатору Предприятия. Стоит обратить внимание, что в название всех объектов процедур и функций созданных в расширении, добавляется его префикс (в нашем случае Расш1_);
Разместим наш новый Справочник в Подсистеме «ШтатноеРасписание» для этого необходимо добавить эту подсистему в Расширение – Перейдем в дерево основной Конфигурации и нажмем правой кнопкой мыши на строке с нужной подсистемой и выберем пункт «Добавить в расширение».
Теперь мы можем управлять ее составом, добавим наш новый объект в подсистему.
Далее добавим в расширение Справочник Должности и добавим для него новый реквизит КатегорияДолжности с типом СправочникСсылка.Расш1_КатегорияДолжностиПоКлассификаторуПредприятия
Далее необходимо решить задачу с выводом реквизита КатегорияДолжности на форму Справочника Должности, реализовать это можно двумя способами:
— Интерактивно, добавив Форму «ФормаЭлемента» в расширение
— Программно, не добавляя Форму Справочника в расширении, а добавив подходящую процедуру, вызываемую в обработчике Формы «ПриСозданииНаСервере» в расширение.
Останавливаться на плюсах и минусах каждого решения не будем, а ниже рассмотрим оба варианта.
Интерактивное изменение Формы в расширении.
Для того чтобы вывести Реквизит на форму интерактивно: необходимо добавить саму Форму «ФормаЭлемента» в расширение. Обращу ваше внимание на следующий момент – для того чтобы появилась возможность Интерактивного добавления Реквизита объекта на форму необходимо сам Объект тоже добавить в расширение.
Далее добавим новый Реквизит в подходящую Группу на форме.
Запустив 1С в режиме Предприятия убедимся, что новый Справочник появился в интерфейсе
А открыв элемент справочника Должности, увидим, что добавляемый реквизит Категория должности также в нужном месте.
Программное изменение Формы в расширении.
Для того чтобы программно добавить элемент на форму нам необходимо определится в каком месте это сделать оптимально с точки зрения простоты дальнейшей поддержки и обновления конфигурации.
Предлагаю воспользоваться одной из процедур вызываемых в обработчике Формы «ПриСозданииНаСервере», в которую передается наша Форма в качестве параметра например УправлениеСвойствами.ПриСозданииНаСервере.
Перейдем в Общий модуль УправлениеСвойствами где находится данная процедура, и кликнем правой кнопкой мыши по процедуре ПриСозданииНаСервере. В выпадающем меню выберем пункт «Добавить в расширение»
Система предложит нам выбрать одну из аннотаций, подробнее о каждой из них рассмотрим в следующих публикациях, а сейчас выберем «Вызывать после»
После проделанных процедур увидим что в Расширение был добавлен общий модуль УправлениеСвойствами и процедура Расш1_ПриСозданииНаСервере с аннотацией &После(«ПриСозданииНаСервере»)
Далее в добавленную процедуру поместим следующий код:
Запустим 1С в режиме предприятия и убедимся, что на форме также появился добавленный реквизит «КатегорияДолжности (пр.)»
Готовое расширение можно выгрузить в файл перейдя в конфигураторе в меню «Конфигурация» и выбрать пункт «Расширения конфигурации». В открывшемся списке расширений по правой кнопкой мыши можно вызвать выпадающее меню, либо выбрать пункт командной панели «Конфигурация» и выбрать пункт «Сохранить конфигурацию в файл…». На выходе мы получим Файл типа *.cfe который можно передать заказчику.
Таким образом, мы научились создавать собственные расширения на примере конкретного кейса.
Расширения конфигурации позволяют значительно упростить адаптацию типового прикладного решения к потребностям конкретного внедрения, конкретного заказчика.
Назначение
Часто заказчик хочет что-то добавить или что-то изменить в типовой конфигурации «под себя». Стратегия, предлагаемая расширениями, заключается в том, что изменять типовую конфигурацию не нужно. Все изменения выполняются в расширении, которое, по сути, тоже является конфигурацией.
После этого, в режиме 1С:Предприятие, расширение просто подключается к типовой конфигурации. Платформа автоматически, в режиме 1С:Предприятие, объединяет расширение с типовой конфигурацией. В результате заказчик работает с изменённым, по его желаниям, типовым решением.
Когда поставщик выпускает новую версию типовой конфигурации, выполняется её автоматическое обновление, поскольку режим поддержки типовой конфигурации не менялся. Она осталась на полной поддержке поставщика. А при запуске обновлённого прикладного решения платформа снова автоматически объединит изменённую типовую конфигурацию с расширением. И заказчик продолжит работать с изменённым, по его желаниям, типовым решением.
Сценарии использования
Расширения незаменимы тогда, когда прикладное решение работает в режиме разделения данных. Например, в модели сервиса. Один из абонентов хочет иметь пару дополнительных отчётов. В то время как остальные абоненты хотят работать с неизмененной типовой конфигурацией.
Тогда именно для этого абонента можно разработать расширение, в котором и реализовать все его пожелания. Абонент подключит себе это расширение и будет работать с изменённой конфигурацией. В то время как для остальных абонентов никаких изменений не произойдет. Потому что все расширения подключаются и запускаются в разрезе текущих значений разделителей. При этом существует возможность применить расширение и для всех областей разделённой информационной базы.
Другая ситуация — это доработки типовой конфигурации под конкретного заказчика у него на внедрении. Или же доработки типовой конфигурации, которые выполняют для себя IT специалисты заказчика собственными силами. Если все эти доработки выполнить в расширении, то типовая конфигурация останется на полной поддержке, что значительно упростит её дальнейшее сопровождение.
Информация о расширении
В расширениях реализованы свойства для хранения информации о самом расширении и его поставщике: «Краткая информация», «Подробная информация», «Авторские права», «Адрес информации о поставщике», «Адрес информации о конфигурации». Значения этих свойств отображаются в диалоге «О программе».
Устройство
Расширение очень похоже на обычную конфигурацию. Оно также представляется в виде дерева объектов. Для работы с расширением используются те же приёмы работы, что и с обычной конфигурацией.
Важной особенностью расширения является наличие заимствованных объектов. Позаимствовать можно любой объект типовой конфигурации с помощью команды контекстного меню:
Заимствованные объекты нужны расширению для того, чтобы быть уверенным в том, что в типовой конфигурации есть все те объекты и их свойства, которые необходимы для правильной работы расширения. При каждом подключении расширение проверяет, что заимствованные объекты не изменились в основной конфигурации.
Подключение расширения
Расширение создаётся в конфигураторе. После того, как оно отлажено и проверено, его можно сохранить в файл:
Этот файл можно передать заказчику. Заказчик самостоятельно загрузит его в свою информационную базу в режиме 1С:Предприятие с помощью стандартной функции Управление расширениями конфигурации.
Проверка возможности применения
Проверить возможность применения расширения к конкретной конфигурации можно до её реального запуска вместе с конфигурацией:
- с помощью интерактивных команд в конфигураторе;
- при пакетном запуске конфигуратора;
- из встроенного языка;
- в стандартной обработке Управление расширениями конфигурации перед добавлением или перед загрузкой расширения, автоматически или с помощью интерактивных команд.
Порядок применения расширений
Важной характеристикой расширения является его назначение. Оно выбирается из нескольких фиксированных значений, предусмотренных в платформе. Назначение должно соответствовать той функциональности, которая реализована в расширении, потому что порядок применения расширений к информационной базе определяется именно их назначением. В первую очередь применяются расширения с назначением Исправление, затем Адаптация, после этого Дополнение. Такой подход позволяет избежать конфликтов между функциональностью расширений с разным назначением.
Деактивация расширений
Деактивированные расширения не применяются к конфигурации, при этом оставаясь в информационной базе. Это позволяет посмотреть, как конфигурация работает без расширения. Такая возможность особенно востребована для расширений, дорабатывающих прикладные объекты конфигурации, так как удаление таких расширений влечёт за собой потерю расширенных данных.
Файл 1С с расширением *dt — это файл, который можно получить при создании копии базы через Конфигуратор. С помощью него в дальнейшем можно восстановить копию базы. Рассмотрим подробнее, как работать с этим файлом, на примере программы 1С:Бухгалтерия предприятия.
Как получить файл dt
Зайдем в программу через Конфигуратор под пользователем с полными правами.
Откроем меню «Администрирование — Выгрузить информационную базу».
Укажем папку для сохранения файла и название файла, нажмем «Сохранить». Название файлу рекомендуем давать понятное, осмысленное, а не оставлять по умолчанию. Так будет проще ориентироваться, если файлов будет несколько.
Получите понятные самоучители по 1С бесплатно:
В итоге в папке будет файл dt.
Как загрузить файл dt
Далее рассмотрим, как загрузить файл dt. На практике есть несколько частых сценариев:
- Переносим базу на другой компьютер.
- Продолжаем работать на текущем компьютере в имеющейся базе. Копия же нужна, например, чтобы поэкспериментировать.
- Текущая рабочая база нам не нужна, мы хотим ее заменить на копию.
В зависимости от этого немного отличаются дальнейшие действия.
В первом и втором случаях проще всего создать новую пустую базу и загрузить туда копию.
В третьем случае загружаем копию прямо на рабочую базу.
Загрузка копии в пустую базу
Для начала создадим пустую базу. Нажмем кнопку «Добавить».
Отметим, что при переносе базы на другой компьютер, может вообще не быть других баз. В таком случае список в 1С будет пустым. В остальном порядок действий такой же. Ну и разумеется, нужно файл dt перенести на этот компьютер, например, на флешке.
Выбираем пункт «Создание новой информационной базы».
Выбираем пункт «Создание информационной базы без конфигурации…».
Можно создать базу и из шаблона, но это займет больше времени. Быстрее создать пустую базу, учитывая то, что на нее мы будем грузить копию.
Укажем название базы и папку для ее хранения.
Затем заходим в созданную базу в Конфигураторе.
Переходим в меню «Администрирование — Загрузить информационную базу».
Выбираем наш файл с расширением *dt и нажимаем «Открыть».
Нажимаем «Да» на предупреждение.
Через некоторое время база будет загружена.
Здесь нажмем «Нет», если не нужно заходить повторно в Конфигуратор загруженнной базы.
В итоге мы получим базу с данными из копии.
Загрузка копии в рабочую базу
В этом случае новую базу создавать не нужно.
Просто заходим в Конфигуратор той базы, которую нужно заменить на копию.
Затем выполняем описанные выше действия по загрузке файла dt.
В данной статье предлагаю рассмотреть, что такое «расширение конфигурации», как добавить расширение или же отключить его. Начиная с версии 1C 8.3.6.1977 в платформе введен новый механизм – расширения конфигурации. Сначала немного теории.
Что такое расширения?
Расширения представляют в 1С собой что-то вроде параллельных конфигураций, которые автоматически объединяются с основной конфигурацией поставщика. Причем в расширениях можно добавлять как свои объекты, так и заимствовать объекты основной конфигурации.
Для чего нужны расширения?
В первую очередь расширения созданы для облегчения внесения изменений в программу. То есть, если пользователи просят добавить какой-либо функционал, то до появления расширений программистам приходилось снимать конфигурацию с полной поддержки и менять типовую конфигурацию.
Снятие с полной поддержки влечет за собой ряд неудобств:
- пропадает возможность автоматического обновления, что приводит как минимум к увеличению времени на то, чтобы обновить конфигурацию;
- требуется высокая квалификация специалиста, обслуживающего программу;
- если изменения вносились в стандартные объекты типовой конфигурации, то при обновлении они могут пропасть, то есть замениться опять на типовые, от поставщика.
При использовании расширений при внесении изменений программист не будет трогать типовую конфигурацию. Все изменения будут делаться при помощи расширений, которые (как я писал выше) тоже являются конфигурациями. Таким образом, основная конфигурация останется на полной поддержке.
После обновления основной конфигурации, если произошли в новом релизе какие-то изменения с объектом, который ранее был изменен расширением, то изменения все равно возьмутся из расширения. То есть расширения имеют больший приоритет, чем основная конфигурация.
Видео — расширения в 1С за 45 минут
Пример добавления расширения в 1С
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Чтобы показать, что такое расширение, лучше привести пример его создания в конфигураторе 1С.
В конфигураторе зайдем в меню «Конфигурация» и выберем пункт «Расширения конфигурации». Откроется окно со списком расширений (если они есть). Нажмем кнопку «Добавить» и добавим новое расширение. Теперь можно открыть конфигурацию расширения:
Как видно, конфигурация расширения имеет точно такую же структуру, как и основная. Только она изначально совершенно чистая, без объектов.
Недавно я писал статью о том, как самим сделать обработку для перенумерации объектов. На её примере я хочу сделать ее встроенной при помощи расширения.
В обработке у меня есть поле со ссылкой на справочник «Организации». Поэтому мне этот справочник необходим. Но мы не будем создавать новый справочник «Организации», тем более что платформа этого и не позволит. Нельзя, чтобы в конфигурации расширения были объекты, одноименные с объектами в основной конфигурации.
Поэтому справочник мы позаимствуем из основной конфигурации:
Теперь нажмем правой кнопкой мышки на «Обработки» и выберем «Вставить внешнюю обработку, отчет…» Таким образом, добавим новую обработку в конфигурацию расширения. Если Вы используете мою обработку, то сразу переименуйте ее, так как в основной конфигурации уже есть обработка с таким именем.
Ну и последний штрих. Я хочу, чтобы моя обработка отражалась в меню «Администрирование». Для этого позаимствуем одноименную подсистему основной конфигурации. Не забудьте указать в обработке, что она относится к этой подсистеме.
Вот такая структура у меня получилась:
Посмотрим, что у нас получилось. Обновляем конфигурацию базы данных и запускаем программу в режиме 1C: Предприятие, и идем в меню «Администрирование». Да, чуть не забыл, конфигурацию расширения необходимо закрыть, иначе программа не запустится:
Таким образом, мы добавили в программу новую обработку, не изменив при этом основную конфигурацию.
Расширение можно выгрузить в файл и загрузить потом в другую конфигурацию. Это очень удобно для разработчиков. Получив заказ, программист на своей конфигурации делает расширение и передает его потом заказчику.
В заключение хочу сказать, что работа с расширениями еще не закончена. Постоянно добавляются новые возможности, расширяется круг объектов, с которыми можно работать. Поэтому, если Вы решили активно работать с расширениями, чаще обновляйте платформу.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Эта статья дает представление о работе внешних компонент в системе «1С: Предприятие».
Будет показан процесс разработки внешней компоненты для системы «1С: Предприятие» версии 8.2, работающей под управлением ОС семейства Windows с файловым вариантом работы. Такой вариант работы используется в большинстве решений, предназначенных для предприятий малого бизнеса. ВК будет реализована на языке программирования C++.
Внешние компоненты «1C: Предприятие»
- с использованием Native API
- с использованием технологии COM
Структура ВК
Внешняя компонента системы «1С: Предприятие» представлена в виде DLL-библиотеки. В коде библиотеки описывается класс-наследник IComponentBase. В создаваемом классе должны быть определены методы, отвечающие за реализацию функций внешней компоненты. Более подробно переопределяемые методы будут описаны ниже по ходу изложения материала.
Запуск демонстрационной ВК
- Выполнить сборку внешней компоненты, поставляемой с подпиской ИТС и предназначенной для демонстрации основных возможностей механизма внешних компонент в 1С
- Подключить демонстрационную компоненту к конфигурации 1С
- Убедиться в корректной работоспособности заявленных функций
Компиляция
Демонстрационная ВК расположена на диске подписки ИТС в каталоге «/VNCOMP82/example/NativeAPI».
Для сборки демонстрационной ВК будем использовать Microsoft Visual Studio 2008. Другие версии данного продукта не поддерживают используемый формат проекта Visual Studio.
Открываем проект AddInNative. В настройках проекта подключаем каталог с заголовочными файлами, необходимыми для сборки проекта. По умолчанию они располагаются на диске ИТС в каталоге /VNCOMP82/include.
Результатом сборки является файл /bind/AddInNative.dll. Это и есть скомпилированная библиотека для подключения к конфигурации 1С.
Подключение ВК к конфигурации 1С
Создадим пустую конфигурацию 1С.
Ниже приведен код модуля управляемого приложения.
Если при запуске конфигурации 1С не было сообщено об ошибке, то ВК была успешно подключена.
В результате выполнения приведенного кода в глобальной видимости конфигурации появляется объект ДемоКомп, имеющий свойства и методы, которые определены в коде внешней компоненты.
Демонстрация заложенного функционала
Произвольное имя внешней компоненты
Задача: Изменить имя внешней компоненты на произвольное.
В предыдущем разделе использовался идентификатор AddInNativeExtension, смысл которого не был пояснен. В данном случае AddInNativeExtension — это наименование расширения.
В коде ВК определен метод RegisterExtensionAs, возвращающий системе «1С: Предприятие» имя, которое необходимо для последующей регистрации ВК в системе. Рекомендуется указывать идентификатор, который в известной мере раскрывает суть внешней компоненты.
Приведем полный код метода RegisterExtensionAs с измененным наименованием расширения:
В приведенном примере имя ВК изменено на SomeName. Тогда при подключении ВК необходимо указывать новое имя:
Расширение списка свойств ВК
- Изучить реализацию свойств ВК
- Добавить свойство строкового типа, доступное для чтения и записи
- Добавить свойство строкового типа, доступное для чтения и записи, которое хранит тип данных последнего установленного свойства. При установке значения свойства никаких действий не производится
- Убедиться в работоспособности произведенных изменений
Полное описание методов, включая список параметров подробно описан в документации, поставляемой на диске ИТС.
Рассмотрим реализацию приведенных методов класса CAddInNative.
В демонстрационной ВК определены 2 свойства: Включен и ЕстьТаймер (IsEnabled и IsTimerPresent).
В глобальной области видимости кода библиотеки определено два массива:
которые хранят русское и английское названия свойств. В заголовочном файле AddInNative.h определяется перечисление:
- Добавить имя добавляемого свойства в массивы g_PropNames и g_PropNamesRu (файл AddInNative.cpp)
- В перечисление Props (файл AddInNative.h) перед ePropLast добавить имя, однозначно идентифицирующее добавляемое свойство
- Организовать память под хранение значений свойств (завести поля модуля компоненты, хранящие соответствующие значения)
- Внести изменения в методы GetPropVal и SetPropVal для взаимодействия с выделенной на предыдущем шаге памятью
- В соответствии с логикой приложения внести изменения в методы IsPropReadable и IsPropWritable
Перечисление Props будет иметь вид:
Для значительного упрощения кода будем использовать STL C++. В частности, для работы со строками WCHAR, подключим библиотеку wstring.
Для сохранения значения метода Тест, определим в классе CAddInNative в области видимости private поле:
Для передачи строковых параметров между «1С: Предприятие» и внешней компонентов используется менеджер памяти «1С: Предприятие». Рассмотрим его работу подробнее. Для выделения и освобождения памяти соответственно используются функции AllocMemory и FreeMemory, определенные в файле ImemoryManager.h. При необходимости передать системе «1С: Предприятие» строковый параметр, внешняя компонента должна выделить под нее память вызовом функции AllocMemory. Ее прототип выглядит следующим образом:
где pMemory — адрес указателя, в который будет помещен адрес выделенного участка памяти,
ulCountByte — размер выделяемого участка памяти.
Пример выделения памяти под строку:
Для удобства работы с строковыми типами данными опишем функцию wstring_to_p. Она получает в качестве параметра wstring-строку. Результатом функции является заполненная структура tVariant. Код функции:
Тогда соответствующая секция case оператора switch метода GetPropVal примет вид:
Метода SetPropVal:
Для реализации второго свойства определим поле класса CaddInNative
в котором будем сохранять тип последнего переданного значения. Для этого в метод CaddInNative::SetPropVal добавим команду:
Теперь при запросе чтения значения второго свойства будем возвращать значение last_type, чего требует обозначенное задание.
Проверим работоспособность произведенных изменений.
Для этого приведем внешний вид конфигурации 1С к виду:
Расширение списка методов
- Расширить функционал внешней компоненты следующим функционалом:
- Изучить способы реализации методов внешней компоненты
- Добавить метод-функцию Функц1, которая в качестве параметра принимает две строки («Параметр1» и «Параметр2»). В качестве результата возвращается строка вида: «Проверка. Параметр1, Параметр2»
- Убедиться в работоспособности произведенных изменений
- Добавить имя метода в массивы g_MethodNames и g_MethodNamesRu (файл AddInNative.cpp)
- Добавить осмысленный идентефикатор метода в перечисление Methods (файл AddInNative.h)
- Внести изменения в код функции GetNParams в соответствии с логикой программы
- При необходимости внести изменения в код метода GetParamDefValue, если требуется использовать значения по умолчанию параметров метода.
- Внести изменения в функцию HasRetVal
- Внести изменения в логику работы функций CallAsProc или CallAsFunc, поместив туда непосредственно исполняемый код метода
Отредактируем функцию GetNProps, чтобы она возвращала количество параметров метода «Тест»:
Внесем изменения в функцию CAddInNative::GetParamDefValue:
Благодаря добавленной строке
в случае отсутствия одного или нескольких аргументов соответствующие параметры будут иметь пустое значение (VTYPE_EMPTY). Если необходимо наличие значения по умолчанию для параметра, следует задать его в секции eMethTest оператора switch функции CAddInNative::GetParamDefValue.
Так как метод «Тест» может возвращать значение, необходимо внести изменения в код функции HasRetVal:
И добавим исполняемый код метода в функцию CallAsFunc:
Скомпилируем компоненту и приведем код конфигурации к виду:
Таймер
- Изучить реализацию таймера в демонстрационной ВК
- Модифицировать метод «СтартТаймер», добавив возможность передавать в параметрах интервал срабатывания таймера (в миллисекундах)
- Убедиться в работоспособности произведенных изменений
Рассмотрим реализацию таймера в демонстрационной ВК.
Так как мы рассматриваем процесс разработки внешней компоненты для ОС семейства Windows, не будем рассматривать реализацию таймера в других операционных системах. Для ОС GNU/Linux, в частности, реализация будет отличаться синтаксисом функции SetTimer и TimerProc.
В исполняемом коде вызывается метод SetTimer, в который передается функция MyTimerProc:
Идентефикатор созданного таймера помещается в переменную m_uiTimer, чтобы в последствии его можно было отключить.
Функция MyTimerProc выглядит следующим образом:
Приведем код метода CallAsProc к виду:
Теперь проверим работоспособность. Для этого в модуле управляемого приложения конфигурации напишем код:
Взаимодействие с системой «1С: Предприятие»
Тип данных tVariant
При обмене данными между внешней компонентой и системой «1С: Предприятие» используется тип данных tVariant. Он описан в файле types.h, который можно найти на диске с ИТС:
- смесь (union), предназначенную непосредственно для хранения данных
- идентификатор типа данных
- Определение типа данных, которые в данный момент хранятся в переменной
- Обращение к соответствующему полю смеси, для непосредственного доступа к данным
Приложение
Читайте также: