Написание внешних компонент для 1С на VB. NET и C#. Даны примеры внешних компонент на VB.
Даны примеры внешних компонент на VB. и есть, и оптимальность такой компиляции не уступает качеству компиляции из C- кода). 7 '//Записывает атрибут тега methWriteText = 8 '// Записывает текст methWriteEndElement = 9. Код компонента был написан с использованием Microsoft Visual Технология создания внешних компонентов 1С Компиляции кода. Код для своей работы не требует никаких компонентов, « внешних компонент », Особенностью компилятора языка Haxe является то, что при компиляции -v8_1s – генерация кода для 1С :Предприятия 8.х. Подготовка внешних компонент к работе с Веб-клиентом. Возможные коды сообщений и поведение 1С :Предприятия. вызвать функцию СоздатьОбъект (Новый в 1С :Предприятии 8), передав ей строку вида “AddIn.. только с одной компонентой, заданной на этапе компиляции.
NET и C#. Версия Visual Studio. NET 2003, 2005. Последняя редакция №19 от 21. 06.
07 История. Ключевые слова: пример внешней компоненты, внешняя компонента, VB. NET, C#, COM, XML, XmlTextReader, XmlTextWriter. NET, зарегистрировать внешнюю компоненту, regasm, не работает regsvr32, не работает ЗагрузитьВнешнююКомпоненту, вызвать исключение, CLSID. Скачайте работающие образчики ВК в конце этой статьи. Образцы основаны на "технологии создания внешних компонент" фирмы 1С и примерах (с) Igor Kissil. Перевод шаблона компоненты с VB.
NET на язык C# - (c) Asmody. Комментарий от Asmody: автором собственно статьи является romix, я лишь создал "заготовку" для нее. Спишем сей грех на особенности движка КЗ.
В чем преимущества. NET для новичков. При нажатии Ctrl-F1 вы увидете подсказку строго по нужному объекту. Библиотека классов. NET возвращает ошибки при помощи исключений (Exceptions). Алгоритмически обработка ошибок получается намного "легче" и понятнее для восприятия, а программа - устойчивее к сбоям.
В жизни каждого 1С -ника наступает момент, когда для На помощь приходят внешние компоненты, но как их писать, если последний Удобное сравнение внешних обработок 1С 8 и 1С 7 - epf, erf, ert. Думаю, проблема в параметрах компиляции, но как правильно изменить пути, не знаю. В статье описана разработка внешних компонент для 1С :Предприятие в среде Для компиляции примера потребуется среда разработки Delphi 6 или 7. Программный код 1С, разумеется, также нужно не забыть изменить так, свойств отвечают участки кода, которые я пометил (*2*), (*5*), (*6*), (* 8 *). Эта технология позволяет создавать внешние компоненты. Возможные коды сообщений и поведение " 1С :Предприятия 8 " компилятор от Visual Studio 2008, для версии 22 – компилятор от Visual Studio 2010.
Среда разработки и исполнения защищена от типичных ошибок C-программиста. Visual Studio 2005 в этом отношении предпочтительнее версии 2003. Это значит, что процесс разработки не "упрется" в трудноуловимую ошибку, а заказчик на удаленном объекте не будет жаловаться на нестабильную работу кода. Доступна обширная и понятная документация MSDN/SDK. "Технический английский" Microsoft отличается короткими ясными фразами. Эти тексты очень легко понять (особенно, имея под рукой электронный словарь наподобие Lingvo).
Текст описаний, как правило, снабжен работающими примерами кода. Почему код, скомпилированный для. NET, может выполняться быстрее. EXE- и DLL-сборки для. NET очень компактные, и их размер измеряется килобайтами. При первом запуске заметна задержка в доли секунды. В этот момент среда исполнения.
NET компилирует код MSIL ( ) в "родные" инструкции микропроцессора (предположительно, что это именно так и есть, и оптимальность такой компиляции не уступает качеству компиляции из C-кода). Это позволяет производить проверки кода (например, вы не сможете передать по сети и исполнить частично поврежденный код) и учесть особенности микропроцессора и другого оборудования на клиенте. На клиентах Windows 98/NT/2000 необходимо установить CLR. На старых версиях операционных систем необходимо установить библиотеку среды исполнения CLR (порядка 10 мегабайт); в новых версиях и сервис-паках Windows она уже стоит. Пример внешней компоненты. В качестве полезного примера мы напишем внешнюю компоненту, которая работает с текстовыми файлами, размеченными в формате XML. Пример достаточно прост (фактически, ничего не делает, а только работает с уже готовой библиотекой), выявляет типичные трудности и приемы работы, которые вы можете встретить при создании внешних компонент и, кроме того, делает полезную вещь - предоставляет программистам 1С 7.
7 упрощенный способ для работы с XML, похожий на XML-интерфейс 1С 8.
Например, компонента может читать и записывать текстовые файлы такого вида:. Подобный формат разметки очень удобен для реализации обмена между информационными базами (например, когда необходимо быстро перенести справочник сотрудников, справочник товаров или какие-либо документы - этот вопрос появляется на Интернет-форумах по 1С, пожалуй, чаще других). Замечу, что средства компоненты v7plus, предназначенные для этой цели, не всегда подходят разработчику, поскольку код с их использованием сложнее для восприятия, и на больших выгрузках они сильно (раз в 10 больше размера исходного XML) грузят память, что порой приводит к ситуации "глубокого погружения" вашего компьютера в виртуальность. Зачем нужно грузить все в память, я не знаю, но догадываюсь, что придумать подобное могли только настоящие афро-американцы (наверное, чтобы увеличить продажи микросхем памяти).
Мы не будем писать код собственно парсинга XML - всю работу за нас сделают объекты XMLTextReader и XMLTextWriter. Они реализуют последовательное чтение или запись XML как текстового файла, без загрузки всего документа в память целиком. Наша внешняя компонента будет лишь программной <прослойкой> для этих объектов. Пример чтения произвольного текстового файла XML на языке 1С 7. 7 выглядит так:. Код отчасти похож на применяемый в 1С:Предприятие 8. 0 (пример взят из книги Митичкина), и если вы программируете в версии 7.
7, то сможете по достоинству оценить новый стиль работы с текстовыми файлами XML в этой среде. Однако, компонента не на 100% совместима с прототипом - вы можете самостоятельно устранить различия, либо, как и я, сделать свою "среду обитания" (в части кодировок, умолчаний и формата возвращаемых значений) наиболее подходящей именно для вас. Регистрация внешней компоненты в системе Windows. Внешняя компонента фактически является дополнением для программных файлов 1С:Предприятие, и требует соответствующей установки. Любые внешние компоненты для 1С:Предприятие являются COM-библиотеками, которые необходимо перед первым запуском регистрировать в системном реестре. Для этого необходимо обладать правами администратора или привилегированного пользователя на компьютере, где производится установка.
Регистрация при помощи regsvr32 в данном случае, однако, не работает. Пример регистрации компоненты в системном реестре, чтобы ее смогла найти 1С:. Чтобы выполнить это действие из дистрибутива, просто запустите на исполнение пакетный файл reg. bat, в который я вписал вышеуказанную команду. Другой способ регистрации (если первый не работает):.
Поместите этот текст в командный файл (с расширением. bat), и запустите его на выполнение. Вместо 1CAddIn. dll впишите имя файла вашей внешней компоненты (DLL). (прислал Gepard).
Для конечных пользователей, очевидно, более грамотным решением будет программа-инсталлятор. Воспользуйтесь, к примеру, программой Inno Setup, чтобы создать установочный дистрибутив. Этот дистрибутив должен будет проверять наличие необходимых прав, и устанавливать компоненту, регистрируя ее в системе Windows. Как скомпилировать пример исходного кода. Удобнее всего сделать это, установив Visual Studio. NET (например, версии 2005). Найдите файл с расширением.
sln (он имеет красивый цветной значок) и запустите его на выполнение. Компиляция DLL производится нажатием F5. Просмотреть исходный код можно, открыв меню View - Solution Explorer. Подключение внешней компоненты средствами встроенного языка 1С.
Ниже приведен пример подключения внешней компоненты из глобального модуля 1С:Предприятие 7. 7:. Замечу, что метод ЗагрузитьВнешнююКомпоненту() в данной ситуации (COM-объекты на. NET) не работает, и необходимо использовать метод ПодключитьВнешнююКомпоненту(). Как вставить отладочные сообщения.
System. Windows. Forms.
MessageBox. Show("Сообщение"). Вставка отладочных сообщений - хороший способ понять, как работает компонента (и. вообще, любая программа). Если вам нужна трассировка в окне сообщений 1С, то используйте следующий код (вынесите его в процедуру):. Как переименовать образец внешней компоненты.
В ситуации, когда вы хотите создать свою внешнюю компоненту, использовав другую компоненту как шаблон, выполните переименование файлов и замену подстрок с названием ВК по всем текстам проекта. Замените GUID и ProgID компоненты на уникальные значения. Guid("02E65142-0F38-4a10-9053-049F8F2B4024"), ProgId("AddIn.
vk_XmlTextReaderWriter"). Сгенерировать новое значение GUID можно утилитой guidgen. exe, которая находится в комплекте Visual Studio.
Эти значения будут храниться в системном реестре Windows, и система будет находить по ним внешнюю компоненту. Изменение списка свойств ВК. Список свойств хранится в перечислении Props:. Фактически, это список констант. Например, propIndent - это то же самое, что и число 3.
Попытайтесь переименовать одно из свойств и скомпилировать проект. Среда исполнения выдаст множество ошибок, по которым вы можете найти строки исходного текста, где задействовано это свойство. Русские и английские имена свойств задайте здесь:.
Сами значения свойств 1С получает в методе с говорящим названием GetPropVal. А устанавливает их в методе. В данном случае, на вход процедур поступает lPropNum - порядковый номер свойства. Например, в случае propIndent это будет значение 3.
Вторым параметром идет значение неопределенного типа Object. Чтобы получить значение определенного типа (например, строку или число), используйте оператор. CType(varPropVal, Integer). Изменение списка методов ВК. Для простоты я не использую CallAsProc, поскольку функции в 1С:Предприятие можно вызывать как процедуры. Внутри нее расположена большая конструкция - переключатель Select Case:.
В каждом из "кейсов" мы выполняем определенное действие (открываем файл, закрываем файл и т.
Обработка ошибок. Обработка ошибок внешней компоненты реализована конструкцией Try-Catch. Чтобы передать ошибку в 1С, я использую следующий код:. Значение scode управляет ситуацией, когда код 1С прекращает свое выполнение при ошибке (как в нашем случае), или же выполнение продолжается, но просто выводится ошибка (когда scode = S_OK). Встроенный язык 1С:Предприятие 8. 0 позволяет вызывать исключения при ошибке.
Встроенный язык 1С:Предприятие 7. 7 делать этого не позволяет (в глубокую старину люди еще не знали, что генерировать исключения при ошибке - это хорошо), поэтому я вставил во внешнюю компоненту соответствующий метод ВызватьИсключение(). Он может пригодиться, например, при анализе правильности входящего XML, и во многих других случаях, когда надо прекратить выполнение и произвести выход из множества вложенных процедур, функций и циклов, не сильно усложняя при этом код. Исследование работы библиотечных классов. Поскольку наша внешняя компонента - это "обертка" для классов работы с XML, чтобы с чего-то начать, я взял из MSDN и скомпилировал небольшое "проверочное" приложение, чтобы понять, как работает класс. Пример на языке C#, но он отличается от VB.
NET лишь небольшими нюансами (например, фигурными скобками), привычными для С-программистов. Он компилируется как консольное приложение, и позволяет разобраться, а что, собственно, нужно делать, чтобы прочитать текстовый XML-файл при помощи XmlTextReader. Пример запускается из командной строки с параметром - текстовым файлом в формате XML, и выводит в консоль названия прочитанных тегов, их тип (открывающий, закрывающий и т. ) и атрибуты (параметры) тегов.
Программирование в среде. NET, работа с XML и работа с исключениями иногда "до чертиков" пугают новичков (и не только новичков, но порой даже опытных специалистов с устаревшим стилем мышления). Однако, в современных средах разработки многие вещи становятся на удивление простыми и понятными. Может возникнуть даже такое чувство, что возвращаются старые добрые времена, когда дискеты были большими. Файлы для загрузки.
Пример внешней компоненты с исходным текстом на VB. NET для работы с XML (пример проверен в Visual Studio 2005). (этот файл следует скачивать левой кнопкой мыши, 180К). Шаблоны (примеры простейших) внешних компонент на C# и VB. NET (актуальны для Visual Studio 2003):. Замечание: пример для VB не компилируется для VS 2005 - в файле проекта с ошибкой указана настройка BaseAddress (которую необходимо стереть).
Кроме того, VS 2005 показывает несколько ошибок, которые не смогла отловить среда VS 2003. Исправленные примеры кода - в архиве vb_XmlTextReaderWriter. rar.