Отключить внешнюю компоненту 1с
· для банковских выписок;
· для мониторинга банков;
· для склонения имен;
· сервисом «СПАРК риски»;
· для формирования штрихкодов;
2. Как избавится от данной ошибки в системе 1С
Зачастую за сервисы, которые используются в базе отвечают конкретная константа и функциональная опция, поэтому в первую очередь следует проверить, установлено ли на данной константе в состояние «Истина».
Если ошибка в системе 1С появилась недавно, а до этого момента все работало нормально, предлагается почистить кэш 1С, а также перезагрузить сервер. Если данная рекомендация не помогла, следует проверить наличие регистра сведений «Кэш файлов». Для этого нужно в главном меню открыть пункт «Все функции», далее выбрать «регистры сведений», а затем найти регистр «Кэш файлов» и нажать кнопку «Очистить кэш». После этого нужно перезапустить платформу.
Если в результате данных манипуляций ошибка все еще появляется, следует проверить, как называется данная компонента в конфигураторе и зарегистрировать ее в системе Windows. Для этого нужно открыть командную строку Windows под правами администратора и использовать команду regsvr32 "", где "" – путь к компоненте (*.dll). Пример регистрации компоненты «comcntr.dll»:
После удачной регистрации компоненты обязательно нужно перезапустить службу агента 1С.
Может возникнуть вопрос, «где же взять файл компоненты?». Некоторые компоненты идут в самой поставке платформы 1С. Ярким примером такой компоненты является «comcntr.dll». Данная компонента отвечает за COM соединения, что позволяет обмениваться данными между базами и сервисами по данной технологии. Остальные компоненты зачастую предоставляются сервисами, которые вы используете.
В данной статье мы рассмотрели основные возможности устранения ошибки отсутствия файла компоненты 1С. Но важно понимать, что при работе с таким многогранным и сложным продуктом как 1С трудности возникать будут – увы, как бы хороши ни были программные решения 1С, ничто в этом мире не идеально. Поэтому если у Вас возникают вопросы, не стесняйтесь обратиться за помощью. Наши специалисты всегда рады помочь в решении сложных задач!
Спасибо за уделенное внимание и пусть Ваши дела всегда идут только в гору!
Специалист компании ООО «Кодерлайн»
Кулажевский Сергей Дмитриевич
Вас могут заинтересовать следующие статьи:
Например, не получится переписать компоненту, если вы не её автор и исходников просто нет. Либо если для ее работы недостаточно поддерживаемых технологией Native API простейших типов (число, строка, булево, дата).
При работе с файловой базой особых проблем нет. Регламентное задание вызывается в фоновом процессе обычного пользователя. Поэтому ему доступны клиенские вызовы. В серверной базе при запуске регламентного задания клиентского контекста нет, соответственно вызов ПодключитьВнешнююКомпоненту() недоступен.
Подробнее о том, почему недоступен, можно почитать на ИТС.
В этом случае можно вызывать компоненту на клиенте. Для этого достаточно выполнить из регламентного задания на сервере запуск еще одного сеанса 1С в котором на клиенте выполнить нужные действия. Ну и не забыть потом завершить запущенный сеанс.
Допустим, у нас в регламентном задании выполняется формирование и сохранение отчета, использующего для склонения ФИО внешнюю COM-компоненту NameDeclension.dll. На файловой базе такое регламентное задание будет работать корректно, на серверной компоненту подключить не получится.
Для устранения проблемы добавим в модуль регламентных заданий процедуру, которая в серверном режиме запустит еще один сеанс и в нем выполнит из внешней обработки вызов формирования отчета на клиенте.
Код внешней обработки, которая просто вызовет в контексте клиента печать нужного отчета из модуля регламентных заданий и завершит сеанс после формирования отчета.
Удобство решения в том, что при настройке регламентных заданий не важно, в каком режиме будет выполняться запуск задания. Если база файловая, то сразу запустится нужная процедура. Если база серверная и при запуске клиентский контекст отсутствует, то выполнится инициализация нового сеанса и в нем процедура корректно отработает в контексте клиента.
Код для обычного приложения. Теоретически полностью аналогично будет работать и в управляемом.
p.s. Также этот подход можно использовать для выполнения любых клиентских процедур в регламентных заданиях.
Зачастую у программистов возникают проблемы с подключением внешних компонент (например, драйверов торгового оборудования), когда пользователи работают с 1С, подключаясь к серверу через терминал.
Это связано с некоторыми особенностями работы функции глобального контекста ПодключитьВнешнююКомпоненту().
Зачастую у программистов возникают проблемы с подключением внешних компонент (например, драйверов торгового оборудования), когда пользователи работают с 1С, подключаясь к серверу через терминал.
При этом пользователи видят, например, картинку представленную в анонсе статьи.
В то время как при работе с локальных компьютеров никаких проблем с подключением внешних компонент нет.
С чем это связано? Это связано с тем, что, когда пользователи работают через сервер терминалов, они имеют меньше прав, чем при работе на локальном компьютере.
В этом легко убедиться, если зайти на сервер терминалов под учетной записью с административными правами.
Причина такой разницы заключается в том, что 1С не может зарегистрировать внешнюю компоненту в реестре, когда пользователь работает в терминале под обычными правами, т.к. у обычного пользователя нет прав на запись в ветку системного реестра HKEY_CLASSES_ROOT.
В публикациях на тему подключения внешних компонент в терминале предлагаются самые разные методы решения этой проблемы.
1. Запустить первый раз 1С под административными правами.
Этот вариант далеко не всегда срабатывает. Ниже объясню, почему.
2. Дать обычным пользователям терминала права на запись в ветку системного реестра HKEY_CLASSES_ROOT.
Недостаточно "продвинутым" пользователям лучше этого не делать, иначе могут быть проблемы.
3. С помощью различных "примочек" регистрировать ВК от имени пользователя с полными правами.
Тоже не есть хорошо.
Так как же все таки лучше выйти из этой ситуации?
Я предлагаю свой вариант решения этой проблемы. По моему мнению - простой и красивый, не предлагавшийся на инфостарте ранее.
Дело оказалось в том, что в типовых конфигурациях 1С (например "Управление Торговлей") используется такой синтаксис метода глобального контекста ПодключитьВнешнююКомпоненту():
ОбъектДрайвера = Новый ("AddIn.АТОЛСканер.Scaner45");
Как видим, ВК драйвера подключается из макета "ДрайверАТОЛСканерШтрихкода" справочника "ПодключаемоеОборудование".
Что же при этом происходит?
1С сохраняет компоненту во временной папке пользователя, например "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"
и пытается зарегистрировать ее в ветке реестра HKEY_CLASSES_ROOT именно по этому пути.
На терминале у обычных пользователей нет прав на изменение этой ветки реестра, поэтому компонента у них не подключается.
Теперь о том, как выйти из этой ситуации.
Метод глобального контекста ПодключитьВнешнююКомпоненту() имеет несколько вариантов синтаксиса. Вот этим мы и воспользуемся.
Итак, по шагам:
1. Регистрируем внешнюю компоненту утилитой regsvr32.exe на сервере терминалов в папке C:\WINDOWS\SYSTEM32 для 32-разрядной ОС или в папке C:\WINDOWS\SYSWOW64 для 64-разрядной ОС.
2. Используем один из двух дополнительных вариантов синтаксиса метода ПодключитьВнешнююКомпоненту():
Вариант 1:
ОбъектДрайвера = Новый ("AddIn.АТОЛСканер.Scaner45");
Вариант 2:
ОбъектДрайвера = Новый (ProgID);
На мой взгляд, вариант № 2 предпочтительнее.
При этом 1С не пытается перерегистрировать ВК по новому пути в реестре и таким образом, все проблемы решаются.
Ну вот собственно и все. Успехов в работе!
Специальные предложения
В то время как при работе с локальных компьютеров никаких проблем с подключением внешних компонент нет.
Глубоко ошибаешься. В путних сетках и тут проблемы, потому что в путних сетках и локальных административных прав у юзверя быть не должно. А то они там нарегят/наинсталлируют!
Там и софт по минимуму, все что нужно - в терминале. :)
Но, если так необходимо, то, думаю, на локальной машине данная методика также будет работать, т.о. "ложка не существует". :)
Очередной баян для новичков в работе с внешними ВК.
Со времен 77 здесь ничего не изменилось :)
Но за изложение плюсую.
Ничего не изменилось говорите?
Вы хоть в сути описанной в статье проблемы разобрались?
Разве в 77 внешние компоненты хранились в макетах справочников?
Разве 77 сохраняла их во временном каталоге пользователя и пыталась их потом там зарегистрировать?
(6) А если еще подумать?
В 77 также были случаи неверной регистрации ВК - например, Админ в терминале заходит в одну базу и регистрирует ВК из каталога базы, а пользователь, у которого эта ВК юзается, но в другой базе, не может запустить эту ВК, если у него прав на папку с первой базой :(
Поэтому, например, для нормальной работы в 77 и придумано куча решений - тот же вариант с RunAs или загрузка обычных ВК через спец.ВК от Саши Орефкова и т.п.
Я же говорю - по работе с ВК ничего не изменилось!
А описанные проблемы - это проблемы прикладного кода, в частности, кода по работе с торговым оборудованием.
Разработчики этого кода либо не знали о сабжевой проблеме, либо пренебрегли ей :(
ЗЫ кстати, в 77 ВК также можно было хранить в макетах, правда, с использованием доп.ВК :)
ЗЗЫ а еще обрати внимание - плюс-то я тебе все-таки поставил :)
Вот это по моему мнению как раз и есть "париться" - т.е. разобравшись в сути проблемы только наполовину, искать обходные пути для ее решения.
Вот это по моему мнению как раз и есть "париться" - т.е. разобравшись в сути проблемы только наполовину
Ага, наполовину. Суть проблемы элементарна - отсутствие прав.
Ссылка раз и навсегда решает проблему того же regsvr32 БлаБла у любого юзверя выполнением RunAs от имени пользователя с админскими правами.
Ну-ка расскажи в чем ты там ПОЛНОСТЬЮ разобрался?
На терминале у обычных пользователей нет прав на изменение этой ветки реестра, поэтому компонента у них не подключается.
.
Итак, по шагам:
1. Регистрируем внешнюю компоненту утилитой regsvr32.exe на сервере терминалов в папке C:\WINDOWS\SYSTEM32 для 32-разрядной ОС или в папке C:\WINDOWS\SYSWOW64 для 64-разрядной ОС.
Ну в чем профит-то? В том что вы взяли её и зарегистрировали? Явно кто-то в чем-то полностью переразобрался.
Не понял смысл статьи.
Админ и так знает, как зарегистрировать dll-ку, у 1Сника при нормальном распределении обязанностей нет никаких прав на серваке.
Вот именно - отсутствие прав это вторая половина проблемы.
А первая и основная половина состоит в том, почему 1С пытается перерегистрировать ВК, и как этого избежать.
Потому что не надо использовать (в т.ч. и фирме 1С) дебильную ПодключитьВнешнюю.. с разными там синтаксисами,
а надо использовать ЗагрузитьВнешнююКомпоненту(ПолныйПутьКДЛЛ), а либы лучше всего хранить в КаталогПрограммы(), либо (для файлухи и 7.7) в КаталогИБ()
cool.vlad4 пишет:
Ну в чем профит-то? В том что вы взяли её и зарегистрировали? Явно кто-то в чем-то полностью переразобрался
Не спешите с выводами не разобравшись.
Дело в том, что вы ее хоть сто раз зарегистрируйте, но если вы оставите без изменений типовой код,
1С будет безуспешно пытаться ее перерегистрировать снова и снова.
(12) Не спешите с выводами, по поводу того, что я спешу с выводами не разобравшись. В типовой так сделано, потому, что ребята делали универсально, они не могут сидеть за вашим компьютером и регистрировать от имени администратора компоненту, не зная пароля тем более. А админы прекрасно об этом знают и ручками зарегят или скрипт напишут(run as). А ваша статья просто кэпство, но самое противное - преподносится как доселе неведомое чудо.
Ну что тут сказать? Значит невнимательно читали статью, или никогда не сталкивались с такими проблемами.
Конечно, админ знает, как зарегистрировать dll-ку.
Он ее и регистрирует. Но потом оказывается что у рядовых пользователей она в терминале не подключается.
Вот в чем суть проблемы то!
У вас видимо патологическое отвращение к чужим разработкам.:)
Конечно, это не чудо. Но тем не менее, я когда столкнулся с этой проблемой, нигде в инете не нашел объяснения причин этой проблемы. Везде освещалась только вторая часть проблемы (недостаток прав на реестр) и способы ее обхода. И нигде не говорилось об основной части проблемы - почему 1С пытается перерегистрировать ВК по новому пути.
Согласен, не спорю. Спасибо.:)
artbear пишет:
А описанные проблемы - это проблемы прикладного кода, в частности, кода по работе с торговым оборудованием.
Разработчики этого кода либо не знали о сабжевой проблеме, либо пренебрегли ей :(
Совершенно верно. Но рядовому программеру от этого как бы не легче.
А эта статья конечно не претендует на какую-то особенность и гениальность.
Это просто статья человека который столкнулся с проблемой, и не нашел приемлемого для себя метода ее решения в инете.
Это попытка самостоятельно разобраться в проблеме и поделиться своим решением с другими - быть может сэкономив кому то время на решение аналогичных проблем.
Здесь есть одно большое НО.
А мне нужно было подключать сканер штрих-кодов в ТОНКОМ клиенте.
(19) сканер штрих-кода успешно подключается в тонком клиенте, пример реализации можно посмотреть в УПП 1.3, в последних двух релизах
А скажи на милость: на фига в ТЕРМИНАЛЕ еще и тонкий клиент?
Терминал сам по себе уже тонким клиентом является
Abadonna пишет:
А скажи на милость: на фига в ТЕРМИНАЛЕ еще и тонкий клиент?
Терминал сам по себе уже тонким клиентом является
Ну, тут уж как бы наше руководство так решило для единообразия.
Как пел Высоцкий, "Жираф большой - ему видней".:)
Все работают с 1С в тонком клиенте управляемого приложения.
Чтобы можно было и через терминал подключаться и просто с локальной машины.
fishca пишет:
сканер штрих-кода успешно подключается в тонком клиенте, пример реализации можно посмотреть в УПП 1.3, в последних двух релизах
Пример реализации я брал из УТ11.
Он то конечно подключается, если у пользователя достаточно прав на запись в ветку реестра .
А вот если у пользователя недостаточно этих прав, тогда и начинаются проблемы которые описаны в этой статье.
После выполнения regsvr32 весь код укладывается в одну строку:
ОбъектДрайвера = Новый COMОбъект("AddIn.Scaner45");
Чтобы не быть голословным - рис.
(24)
"После выполнения regsvr32 весь код укладывается в одну строку:
ОбъектДрайвера = Новый COMОбъект("AddIn.Scaner45"); "
А страница свойств компоненты появится при таком подходе ?
Abadonna пишет:
После выполнения regsvr32 весь код укладывается в одну строку:
ОбъектДрайвера = Новый COMОбъект("AddIn.Scaner45");
Ну, раз говоришь что работает, верю.
Хотя мне это кажется странным. По идее не должно было.:)
Именно, что должно . :)))
Это как раз стандартное обращение к зарегенным в реестре интерфейсам COM, Active-X
В 7.7 это было бы так: Lib=СоздатьОбъект("Miracle.VCL")
В Дельфи: Lib:=CreateOleObject('Miracle.VCL')
И в любой другой виндовой хрени аналогично ;)
Да, но в 7.7 перед этим вызывался метод ЗагрузитьВнешнююКомпоненту("FormEx.dll");
Без этого СоздатьОбъект() не работало.
Ладно, начнем ликбез по порядку :))))
1. ЗагрузитьВнешнююКомпоненту от 1С - как раз и производит регистрацию в реестре интерфейса соотвествующей либы, написанной по технологии создания внешних компонент от 1С (ТСВК). Вот именно в этом случае, и возникает трабла с правами на запись в реестр, неважно в каком месте: на терминале или локальном компе
2. СоздатьОбъект - уже и создавала (в аналогии 8.2) Новый COMОбъект по указанному progid
В 8.2, как в обычной виндовой программе, все точно так же.
Если ЛЮБАЯ ВК написана по технологии COM и предварительно зарегена через regsvr32 (т.е. уже есть progid), никаких
Подключить/ЗагрузитьВнешнююКомпоненту уже не надо ни в 7.7, ни в 8.2.
В моем примере выше либа для 7.7 писалась не по ТСВК, она обязательно требовала regsvr32, но при этом совершенно не понимала никаких Подключить/ЗагрузитьВнешнююКомпоненту
+(29) А FormEx.dll - вообще супер-специфичная либа, там Лёха залез в самое нутро 1С, последние её версии вообще в реестре следов не оставляют, и ЗагрузитьВнешнююКомпоненту("FormEx.dll") пройдет всегда, у любого юзверя, с любыми правами
УТ 10.3. Платформа 8.2.13.202. У меня при настройке перенаправленого в терминальный сервер торгового оборудования выпадает 1С при тестировании драйвера. Однако если на это не заморачиваться, то Интерфейс Кассира работает и чеки пробиваются. Может кому-то пригодится, т.к. мы очень долго не понимали в чем дело и не пробовали пробить чек из Интерфейса Кассира ))))
В описанном мной случае проблемы возникали когда ВК хранится в макете справочника.
При подключении она сохраняется во временный файл временного каталога пользователя.
Поэтому для использования RegsvrEx нужно знать полный путь к этому временному файлу.
Ну а вообще использование нескольких дополнительных разработок вместо стандартного
типового механизма и маленькой правки кода не кажется мне оптимальным.:)
(33) Смею заметить, ничего против Вашей публикации не имею :). "стандартный типовой механизм" не всегда вставляет, иногда своя реализация кажется более универсальной :).
Спасибо за просвещение, а то у БиТ купили продукт, а они используют свой сервер лицензий, и для этого пытаются регистрировать внешние компоненты, до сих пор приходилось делать запуск под Админом, теперь попробуем переписать чтобы было по человечески.
Спасибо за статью. Столкнулся с аналогичным случаем при работе с эмулятором фискального регистратора. Конечно же лучше запускать 1С через тонкий клиент с машины к которой подключено оборудование, но некоторые клиенты настаивают на использовании терминала ( тем более если фискальный регистратор виртуальный - используется эмулятор). Почему-то после обновления УТ11 до 11.1 вдруг 1С стала просить драйвера на эмулятор фискального регистратора, хотя сканнер штрих-кодов продолжает прекрасно работать.
Добавил бы уточнения к алгоритму решения этой проблемы: ( которые кстати подчерпнул из вашего же комментария только в другом форуме )
В общих макетах лежат драйвера различного оборудования. Там собственно и хранилась нужная мне dll.
Щелкаем на этом макете и нажимаем кнопочку "Выгрузить в файл".
Файлу даем любое имя и расширение zip.
Открыв архив видим несколько файлов, в том числе нужный мне FPEmulator1C.dll. Распаковываем и копируем его в зависимости от разрядности windows в папку для 32х - C:\Windows\Sysytem32 , для 64х - C:\Windows\SysWOW64.
Запускаем Пуск/Все программы / Стандартные / Командная строка - только правой кнопкой мыши вибираем "Запуск от имени администратора" . В командной строке переходим в нужную папку (C:\Windows\Sysytem32 или C:\Windows\SysWOW64 ).
В командной строке - cd C:\Windows\Sysytem32
Пробуем регистрировать его с помощью команды regsvr32.exe .
В командной строке - regsvr32 FPEmulator1C.dll
Если все успешно тогда переписываем код в конфигурации в соответствии со статьей.
Эта статья дает представление о работе внешних компонент в системе «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), предназначенную непосредственно для хранения данных
- идентификатор типа данных
- Определение типа данных, которые в данный момент хранятся в переменной
- Обращение к соответствующему полю смеси, для непосредственного доступа к данным
Приложение
Данное расширение понадобится тем, у кого при запуске конфигурации Бухгалтерия предприятия, редакция 3.0 появляется ошибка "Не найден файл внешней компоненты". Лечили путем выгрузки загрузки конфигурации через dt файл. Решили отключить проверку компоненты штрихкода при запуске.
Подключается как расширение. Бухгалтерия предприятия, редакция 3.0 (3.0.95.15)
Для подключения необходимо перейти в подсистему Администрирование - Расширения - Добавить из файла.
Отключение проверки компоненты штрихкода при запуске конфигурации Бухгалтерия предприятия, редакция 3.0
Специальные предложения
Просмотры 1793
Загрузки 0
Рейтинг 2
Создание 27.07.21 10:00
Обновление 27.07.21 10:00
№ Публикации 1487470
Тип файла Расширение (cfe)
Конфигурация 1С:Бухгалтерия 3.0
Операционная система Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Да
См. также
Восстановление битой ссылки на раз-два Промо
Простой способ восстановить битую ссылку типа " (20:94b81c6f65428d5911e2a8bebc48d793)".
1 стартмани
26.04.2013 39416 718 Vin_Tik 36
Работа с регистрами (универсальная) для УФ
Обработка позволяет корректировать записи регистров накопления и сведений любой конфигурации.
1 стартмани
31.03.2022 1059 13 gofforsk 0
Удаление записей регистров накопления с возможностью выбора режима загрузки (обмен данными), с отбором на СКД (УФ)
Позволяет удалить отобранные (отбор на СКД) записи регистров накоплений с настройкой режима обмена данными. Может понадобиться для исправления ошибок закрытых периодов.
1 стартмани
23.03.2022 1177 11 Fant1q71 1
Групповая обработка справочников и документов 8.3 на СКД
Работает на платформе версии не ниже 8.2.16! Работает в интерфейсе "Такси"
3 стартмани
22.10.2021 2280 29 serovmsk 3
Поиск, восстановление битой ссылки, 8.3, v 0.2 Промо
Обработка для работы с битой ссылкой, 8.3, v 0.1 Позволяет быстро найти и восстановить битую ссылку.
1 стартмани
24.10.2014 42117 329 infostart user 14
Проверка настройки заполнения для скриптов 1С:Документооборот
Доброго времени суток, коллеги. После обновления базы 1С:Документооборот , при проверке заполнения файла по шаблону вылезла ошибка "Следующие реквизиты или скрипты настройки заполнения файла заданы не корректно. ". Захотел узнать, какие ещё скрипты заполнены не корректно. Написал обработку для проверки и исправления всех скриптов.
1 стартмани
19.09.2021 3126 8 Andrei_Ivanov 6
Групповое управление настройками обработки ошибок
Более удобная обработка, чем платформенная.
1 стартмани
19.07.2021 1446 0 Yashazz 2
Исправление ошибки работы отчетов на СКД в ЗУП 3.1.18.83
В ЗУП 3.1.18 последних версий не работают некоторые отчеты на СКД или группировки выводятся раскрытыми до нижнего уровня. Решение.
1 стартмани
01.07.2021 10359 11 zen3000 7
Лекарство на случай, если перестала работать форма списка для сделок. (ERP). Промо
Форма списка справочник сделки стала выпадать с ошибкой? Или все еще в порядке, но хочется спокойно съездить в отпуск, без паники, что менеджеры устроят бунт.
1 стартмани
28.07.2016 27374 0 milkers 2
Групповое перепроведение с отбором по контрагентам, видам документов, ответственным
Обработка позволяет адресно перепроводить документы с отбором по необходимым видам документов, контрагентам, ответственным.
1 стартмани
21.06.2021 1433 12 vasilnikol 2
Исправление дампа ошибки. "Прекращена работа программы "1CV8C". v8_C2E6_1b.1CBarcodWin32_9_0_12_8.dll"
После обновления платформы 1С на версию 8.3.18.1289, 1С Розница 2.3.8.27 стала вылетать без видимых ошибок при печати штрихкодов (этикетка, ценник и т.д.).
1 стартмани
11.06.2021 5172 24 ClickUp 7
Исправление ошибки "Макет не существует. Операция прервана" в ЗУП 3.1.18.46 и ЗУП 8.3.18.83
Расширение для исправления ошибки "Макет не существует. Операция прервана" при печати внешних печатных форм.
1 стартмани
10.06.2021 4466 52 Homhem 0
Замена конфигурации в правилах переноса данных. Промо
Те, кто часто занимается созданием правил конвертации данных в конфигурации «Конвертация данных” (речь о редакции 2.1 (2.1.5.1)), знают, что после замены в правилах конвертации одной конфигурации (приемник или источник) все правила конвертации свойств и объектов закрашиваются красным цветом и требуют утомительной ручной правки.
1 стартмани
24.01.2012 50263 572 milkers 68
Исправление ошибки "Не удалось выполнить обработчик обновления" при обновлении БГУ на релиз 2.0.78.38
1 стартмани
08.06.2021 4461 8 the1 2
Исправление ошибки состояния сотрудника 1С ЗУП Зарплата и управление персоналом, редакция 3.1 (3.1.17.94) 1С:Предприятие 8.3 (8.3.18.1208)
В тех базах, где в прошлых периодах был переход с ЗУП версии 2.5, столкнулся с ошибкой неуникальности записей динамического списка, которая возникает из-за дублирования записей регистра "СостоянияСотрудников" по периодам. Обработка переформировывает записи этого регистра с нуля. Тестировано Зарплата и управление персоналом, редакция 3.1 (3.1.17.94) 1С:Предприятие 8.3 (8.3.18.1208)
1 стартмани
07.04.2021 2301 4 o.kovalev 0
Превращение доработанной конфигурации в типовую или исправление ошибки "Имеются записи с одинаковыми измерениями"
Помогает решить проблему связанную с дублями в регистрах сведений при возвращении к типовой конфигурации. Ошибка "Имеются записи с одинаковыми измерениями".
1 стартмани
12.02.2021 13354 143 pyrkin_vanya 43
Свертка 60, Свертка 62, Исправление ошибок взаиморасчетов, Исправление 60, Исправление 62 Промо
Исправляет все возможные ошибки по счетам расчетов с контрагентом, делает дебетовое сальдо на активном счете и кредитовое на пассивном. кроме того зачитывает все суммы по контрагенту и договору. Сворачивает 60 и 62 счета. Умеет работать с документами взаиморасчетов или без них.
1 стартмани
21.10.2010 43052 682 GoodWinSpr 37
Восстановление базы 1С из бэкапа SQL при помощи Python
Скрипт для создания копии базы на сервере SQL и добавления базы в кластер 1С.
1 стартмани
16.12.2020 6591 3 user1287977 1
Проверка сохранности остатков регистров при обновлении
Предложен механизм проверки сохранности остатков регистров при обновлении
1 стартмани
11.12.2020 2838 4 ipoloskov 0
Просмотр и восстановление любых таблиц БД для компоненты 1CDLib + Быстрая очистка регистра "Замеры времени"
Доработанная обработка для компоненты 1CDLib для просмотра и восстановления любых таблиц БД из БД донора. Тестировалось на версии платформы 8.3.17.1549.
1 стартмани
09.11.2020 7606 84 sxp 2
С помощью этой обработки можно зарегистрировать объекты (документы и их движения, справочники, ) на узлах обмена.
1 стартмани
15.02.2013 36040 99 logarifm 6
Тестирование любых конфигураций
Расширение для тестирования любых конфигураций на управляемых формах, в том числе тестируется запись, проведение и другие стандартные операции.
1 стартмани
29.10.2020 4403 21 ManyakRus 20
Универсальная корректировка регистров
Универсальная корректировка регистров (обработка для заполнения документа "Корректировка регистров")
3 стартмани
06.08.2020 5893 56 Pashka_SV 7
Поиск и замена значений в 1С (обычные и управляемые формы)
Внешняя обработка Поиск и замена значений в 1С (аналог типовой обработки) - позволяет сделать поиск и замену ссылочных значений в базе
1 стартмани
04.08.2020 6259 44 Denr83 0
Универсальный загрузчик XML-Uniloader Промо
Этот универсальный инструмент обязан входить в джентельменский набор любого специалиста по обмену данными. Он позволяет загрузить данные в базу из файла выгрузки, созданного типовой обработкой «Выгрузка-загрузка данных». Он позволяет загрузить данные из файла выгрузки РИБ. При этом используется развитая система работы с ошибками, ведется протокол, процесс загрузки не мешает работать другим пользователям.
1 стартмани
24.07.2012 36791 260 fixin 34
Просмотр и восстановление ссылки на актуальный электронный документ. 1С: УПП
Обработка может быть полезна на случай, если вдруг пропали ссылки на актуальные электронные документы.
1 стартмани
30.07.2020 4547 0 yarrr 0
Осторожно! Склеивание дублей контрагентов (партнеров). Или как сломать и починить базу
Исправление ситуации после склейки контрагентов (партнеров).
1 стартмани
09.07.2020 6301 7 milkers 7
Установка имени предопределенных данных
Обработка для установки имени предопределенных данных для исправления ошибки "Предопределенный элемент отсутствует в данных".
1 стартмани
20.06.2020 5911 6 simon_sidoruk 0
Анализ времени документов основной цепочки Промо
Массово изменяет время документов на правильное
1 стартмани
02.05.2009 23667 510 logarifm 19
Информация при запуске в БП 3.0 - ошибка кодировки
Расширение для БП 3.0, исправляет использование неверной кодировки при выводе в форму htm файла. Такое бывает, когда ОС сервера и клиента на разных языках.
1 стартмани
01.05.2020 6867 1 JorjKrut 1
2 стартмани
28.04.2020 8569 6 Ион 3
Ошибка при вызове метода контекста (Записать): Значение поля "Номер" не уникально
Если сбилась нумерация документов и при записи нового выдается ошибка (Ошибка при вызове метода контекста (Записать): Значение поля "Номер" не уникально), используя эту обработку можно восстановить нумерацию.
1 стартмани
25.03.2020 6114 17 rebuzx 6
Восстановление ставок и сумм НДС у документа "Поступление на расчетный счет" Промо
Представляю Вам программу, которая позволит вам восстановить (пересчитать) суммы НДС в документе "Поступление на расчетный счет" для конфигурации Бухгалтерия 2.0
10 стартмани
24.04.2012 27788 64 aximo 3
Исправление ошибки 500 при обращении к "Честный знак" api/v3/auth/cert/ для УТ 11.4.11.84
Расширение исправляет ошибку работы с компонентой для подписания. Ошибка проявляется при авторизации на сервере "Честный знак" при использовании криптопровайдера VipNET CSP.
1 стартмани
22.03.2020 11559 8 boba13 2
Сверка данных между двумя идентичными по конфигурации базами по действиям пользователя
Помощь администратору при восстановлении данных после некорректных действий пользователя.
1 стартмани
16.03.2020 5625 2 itsys 1
Длина ключа индекса превышает максимально допустимую. Решение с использованием технологического журнала
При разработке конфигурации в клиент-серверном варианте могут возникнуть проблемы при загрузке конфигурации в файловый вариант. В статье описан один из вариантов решения проблемы.
1 стартмани
28.01.2020 8059 3 newtraveller 0
Распределение зарплаты по заказам и номенклатурным группам по данным БУ. Промо
Распределение зарплаты, начисленной (расчитанной) по пустым заказам и номенклатурным группам в УПП на зарплату, начисленную по конкретным заказам и номенклатурным группам с указанием основного вида начисления, принимаемого за "базу". Теперь и для РАУЗ.
1 стартмани
28.02.2012 28349 47 Балабас 20
Исправление ошибки "Для одного ссылочного кода существует более одной таблицы в базе данных" в БД SQL
3 стартмани
23.01.2020 19687 208 rokhin 58
Проверка дублирования идентификаторов структуры хранения базы данных 1С
1 стартмани
20.01.2020 2525 3 prof-press_it 6
Автоматическое восстановление предопределенных элементов конфигурации
Обработка предназначена для полностью автоматического восстановления отсутствующих/поврежденных предопределенных элементов конфигурации (ошибка "Предопределенный элемент отсутствует в данных"). Особенно обработка полезна в случае наличия в базе большого количества таких элементов, что требует больших временных затрат на ручное исправление.
2 стартмани
13.01.2020 5481 40 denmax 7
Зарплата и управление персоналом, редакция 3.1 (3.1.12.76) - не отображается состояние сотрудника
После обновления конфигурации Зарплата и управление персоналом, редакция 3.1 до актуального релиза (3.1.12.76) в форме списка справочника Сотрудники перестает отображаться текущее состояние сотрудника (Работает, Уволен и т.п.)
2 стартмани
26.12.2019 9257 1 capitan 8
Поиск и Восстановление битых ссылок (Объект не найден) (обычные и управляемые формы)
Обработка для поиска и восстановления данных по битой ссылке (Объект не найден). Вы можете узнать информацию по удаленному объекту (его уникальный идентификатор, где используется), чтобы в бэкапной базе найти и восстановить этот объект. Данные битой ссылки восстанавливаются по COM соединению с копии базы.
1 стартмани
21.12.2019 8919 110 Denr83 0
Исправление ошибки платформы 8.3.16 - разворота группы подписей в формах документов. ЗУП 3.1
После обновления платформы на релиз 8.3.16 в документах, где используются подписи ответственных лиц, при развороте группы аварийно закрывалось приложение.
1 стартмани
02.12.2019 21054 12 skudnovv 11
Исправление ошибки в ЗУП 3.1 "Удаление сторнирующей записи невозможно" через расширение
Решение вопроса по ЗУП 3.1 "Удаление сторнирующей записи невозможно" - решение с помощью расширения, чтобы можно было удалять по кнопке "Delete".
1 стартмани
23.11.2019 9351 20 Klinov 6
Списание зависших сумм без количества со счета на счет
Списание сумм без количества со счета на счет через документ операция
1 стартмани
22.10.2019 13045 27 Dmitryflagman 3
Табличная часть имеет записи, не относящиеся ни к одной записи главной таблицы. Файловая база 1С. Исправление ошибки
Памятка-инструкция по исправлению этой ошибки.
1 стартмани
16.10.2019 11754 6 Dipod 14
Ошибка SDBL: Ожидается имя таблицы (pos=6). Причины, лечение, обход. Поиск отсутствующих таблиц изменений
Получили ошибку Ошибка SDBL: Ожидается имя таблицы (pos=6) ? Надеюсь, мой опыт борьбы с этим явлением Вам поможет.
1 стартмани
04.09.2019 18213 76 burmsergey 6
Проверка работы расширений после обновлений
Иногда бывает, что после обновления конфигурации некоторые расширения перестают работать и часто такие ошибки выявляются только в процессе тестирования или рабочем режиме. При правильной разработке и проектировании расширения можно свести к минимуму такие ошибки, но иногда их не избежать. Если в базе расширений не более 5-10, то проверить каждое после обновления не составляет труда, а вот если их больше 50 - проверка отнимает слишком много времени Поэтому была написана обработка, которая в автоматическом режиме проверяет расширения, подключенные в программе. Обработка универсальная и будет работать в любой программе, в которой есть расширения.
Читайте также: