Всем привет, сегодня обновляя конфигурацию столкнулся с ранее неизвестным мне объектом или возможностью 1с платформы - работа с addin компонентой.
В предыдущей итерации конфигурации определенный набор значений собирался по конфигурации при помощи встроенной в конфигурацию обработки, а в модуле менеджера была экспортная функция для получения данного набора. При помощи расширения, в одной из функций текст запроса был изменен, чтобы получить дополнительные поля из регистра.
В новой версии этой обработки уже нет, а в том месте, где происходило обращение к ней появилось обращение к компоненте:
AddInTempate = "CommonTemplate.CodeCompletionAddIn";
AddInAttached = AttachAddIn(AddInTempate, "CodeCompletionAddIn", AddInType.Native);
If AddInAttached Then
CodeCompletionAddIn = New("AddIn.CodeCompletionAddIn.TestAddIn");
Result = CodeCompletionAddIn.Unpack();
UUID = New UUID();
BinaryData = New BinaryData(Result);
Address = PutToTempStorage(BinaryData, UUID);
BinaryData.Write(CoreMethodsTempFileName());
Показать
TempFileName = TempFilesDir()+ "ExternalDataProcessor.epf";
File = New File(TempFileName);
If Not File.Exist() Then
BinaryData = Address;
BinaryData.Write(TempFileName);
EndIf;
ProtectionDescription = New UnsafeOperationProtectionDescription();
ProtectionDescription.UnsafeOperationWarnings = False;
ExternalDataProcessor = ExternalDataProcessors.Create(TempFileName, False, ProtectionDescription);
ExternalDataProcessor.InitializeAdditionalPropertiesForPosting(DocumentRef, StructureAdditionalProperties);
Показать
По коду несложно догадаться, что функции по сбору данных выполняются через ту же обработку, но она скомпилирована в компоненту и помещена в общий макет.
В качестве решения пришлось делать повторный запрос, и дополнять набор записей, дополнительными значениями, но мне бы хотелось как то получить доступ к данной компоненте и подредактировать её, что бы сразу получить все необходимые данные.
Из общего макета я могу получить лишь файлы libepf_win32.dll и libepf_win64.dll, а так же MANIFEST.XML. А что дальше делать пока что непонятно.
(11) помимо прочтения статьи нужно знать язык С++ и уметь на нем программировать.
Не знаю как точно там сделано, но как вариант, обработка в виде двоичных данных помещена в ресурсы самой библиотеки (dll) и сохраняется в файл по вызываемому методу.
(7)
Наверняка есть возможность из своей обработки создать компоненту и поместить её в макет?
Из обработки... ну можно, наверно, запустить компилятор С++ и собрать компоненту. Только смысл. Это не 1С. Даже близко. И подходы там другие. Подсмотреть код и подправить под себя, как в обработках 1С, не получится.
(1) Судя по коду, из компоненты внешняя обработка сохраняется во временные файлы.
Ну так поставьте точку останова после того как обработка сохраняется во временные файлы и возьмите обработку из этого каталога.
(2) Вы верно подметили, обработка сохраняется в каталог временных файлов, с её помощью создается набор данных, а затем она очищается с другими временными файлами.
Мне нужно изменить набор данных который возвращает обработка (из общего макета) на постоянной основе. Изменив обработку во временном каталоге своей цели я не достигну, может быть вы знаете как эту обработку поместить в макет под видом внешней компоненты?
(3)А зачем?
Сделайте расширение - добавьте в него рабочую доработанную обработку.
Замените вызов типовой процедуры, которая использует обработку из компоненты на вашу обработку из расширения.
(4) По сути это уже было сделано, сейчас уже всё работает, но для меня интересно было бы узнать как изменить саму компоненту, можно ли получить доступ и исходить, посмотреть что внутри. Темы была создана что бы узнать от знающих коллег возможность такого решения и примерные к нему шаги.
(7) Можно и саму обработку поместить в макет - но смысл? Они придумали супер защиту от мамкиных хакеров: обработку прятать в dll. Вы лучше напишите кто разработчик и что за конфигурация. Что бы другие не вляпались.
(11) помимо прочтения статьи нужно знать язык С++ и уметь на нем программировать.
Не знаю как точно там сделано, но как вариант, обработка в виде двоичных данных помещена в ресурсы самой библиотеки (dll) и сохраняется в файл по вызываемому методу.
(7)
Наверняка есть возможность из своей обработки создать компоненту и поместить её в макет?
Из обработки... ну можно, наверно, запустить компилятор С++ и собрать компоненту. Только смысл. Это не 1С. Даже близко. И подходы там другие. Подсмотреть код и подправить под себя, как в обработках 1С, не получится.
(12)
Хорошо, видимо это действительно не так необходимо для 1Сника, будем считать за ответ - необходимость знать C++ и разбираться в его использовании для связки с компонентами 1С.
(8)
(8) Просто интересно узнать как это делается, в будущем может пригодится или на собеседовании могут спросить.
Поставщик 1C International, конфигурация Drive 1.4