#0
by inimeg
Прочитал соответствующий топик v8: V8.COMConnector и Delphi Все здорово но что это за интерфейс IV81COMConnector? Как мне его подключить? Откуда взять? И еще вопрос. Попробовал реализовать через V8.Application (Automation). Автор пишет что проблема с русскими именами пропала. А у меня както она на месте. Все теже "Метод Справочники не поддерживается объектом автоматизации". Что я делаю не так? Где чего не подключил-включил? Работаю на Delphi2005+1C v8.1 (v8.0 таже проблема) Заранее благодарен за любую полезную информацию на эту тему. А то с 8 всего 3 дня как познакомились в отличии от 7. И отношения никак не наладятся ;)
#4
by inimeg
У меня такое подозрение что в Delphi2005 что-то с OLE изменили. Работают только английские аналоги методов 1C да и то не все а через 1...ж(
#6
by inimeg
Кураж - Спасибо. Это я уже читал. Про Эмуляцию EvalExpr там хорошо написано. Но вот с остальным... Беда в том что я пока вобще не могу так настроить соединение с 1С чтобы мог использовать конструкции языка на русском. ж( shachneff - А ты не мог бы поделится каркасом приложения? Интересует как ты до интерфейса IV81COMConnector достучался. Может быть у меня в этом проблема?
#7
by shachneff
Я тогда решал задачу автоматического запуска обработок... Давно это было, а потом появились регламентные задания и все дельфевые приложения канули в лету... Но если не срочно, то я могу попробовать дома повторить подвиг...
#8
by inimeg
shachneff - буду признателен за помошь. Срок исполнения как всегда вчера, но я пока всеравно ковыряюсь безуспешно, так что буду ждать. Если озарение прийдет раньше отпишусь.
#10
by laview
А может быть кто нибудь скажет, что лучше Delphi или Visual Studio? 1C советует все делать на Visual Studio, а я в институте Delphi изучал. Он мне понятнее. В чем между ними разница с точки зрения создания Web приложений для 1С?
#13
by shachneff
Вот мой код, который был в примере, но поправленный под 8.1. uses var end. Обрати внимание на 2 последних модуля в секции uses. Так же необходимо импортировать в проект модуль V81_TLB (Project - Import Type Library. Встать на "1CV81 COM Connector". Нажать Create Unit. Для того, чтобы это получилось, на компе должна быть установлена 1С 8.1
#14
by laview
А готовые шаблоны (которые вместе с web расширением) v8webApplication и v8webService в Delphi тоже можно использовать?
#15
by inimeg
Hadgehogs- соединится получается. Соединение есть. А вот конструкции типа s1C8_ole.Справочники выдают ошибку. Вот что конкретно не работает. shachneff- Вот ведь...Project - Import Type Library нету такого пункта в Delphi2005 ж(
#16
by inimeg
Так... Новые сведения с полей. Вобщем как подключить V81_TLB в Delphi2005 разобрался. Новый Com Object Delphi 32 и там в качестве родителя выбираем IV8COMConnector. Теперь беда другая. На этой строке ShowMessage(MainObject.Метаданные.Справочники.Банки.Комментарий); Выдает окно Method 'P P C oPг'PoPSPSC<P ' not supported by automation object. Такое впечатление что русские наименования после компиляции не подходят под кодировку с которой работает 1С. Есть соображения на этот счет?
#18
by shachneff
Плюс я натравил Дельфю на типовую Управление Торговлей. У тебя таких метаданных может не быть!.
#19
by inimeg
shachneff метаданные точно есть. Типовая Бухгалтерия. В отладчике пишет Project SDIAPP.exe raised exception class EOleError with message 'Method 'Meтaдaнныe' not supported by automation object'. А вот в рантайме выводит
#20
by inimeg
shachneff метаданные точно есть. Типовая Бухгалтерия. В отладчике пишет Project SDIAPP.exe raised exception class EOleError with message 'Method 'Meтaдaнныe' not supported by automation object'. А вот в рантайме выводит Method 'P P C oPг'PoPSPSC<P ' not supported by automation object. Если меняю Meтaдaнныe на синони Metadata то пишет тоже самое но для Справочники Если их меняю на Catalogs то ругается на Банки и т.д. Нашол в настройках проекта пункт code page. Может с ним поиграться?
#21
by shachneff
Ну поиграйся с преобразованием строки в кодировку UTF-8, а затем эту строку выполни...
#23
by inimeg
Вроде как 1С работает с кодировкой UTF-8 Я прав? А числовое представление этой кодировки что-то найти не могу. В code page можно только числовое значение ввести.
#24
by inimeg
shachneff ж) Опередил. Погоди, а как можно строку типа ShowMessage(MainObject.Метаданные.Справочники.Банки.Комментарий); Задать в UTF-8 ? этож посути команда... блин.. что-то я туплю ж(
#27
by inimeg
БиньковскийВиталий- ;) Если бы все было так просто ж) Это не решение. Балабес - это к чему?
#28
by inimeg
Числовое представление нашол 65001. Поменял. Не помогло. Поменял кодировку у pas. Не помогло. Не представляю куда теперь двигаться дальше. Срочно нужна помошь ж)
#29
by shachneff
Специально ради тебя дома скачаю Дельфю 2005 и покажу, как решить твою проблему. Решу виртуально, поэтому стребую виртуальное пиво.
#31
by БиньковскийВиталий
Ситуация у тя сложная, если верно, в 2005 текст юникоде. Есть сложный путь, как то делал. Нужно подменить делфевый механизм диспетчеризации типа Variant. у меня в результате было примерно так (коммент из реализации) (не пинайте, писалось хрен знает когда) {--------------------- Mpc-интерпретация вызовов IDispatch --------------------} { количество параметров - не менее одного имя функции или процедуры (любое, Ini есть Variant - переменная) - последний параметр (чаще единственный): при вызове как функции - значение по умолчанию, возвращается если параметр не сохранялся ранее. всегда необходим по крайней мене для опознавания типа искомого значения. Важное замечание: При передаче float - абсолютных значений (пример MayLastRadius := Ini.MayLastRadius(3.14)) количество знаков должно быть более 4 (MayLastRadius := Ini.MayLastRadius(3.14000), иначе будет производиться поиск Currency - значения, при сохранении параметр также будет записан как Currency, и при последуюжем чтении будет ошибка. При этом MayLastRadius := Ini.MayLastRadius(6.28 / 2) будет нормально распознан как поиск Double - значения. Это не относится к параметрам по ссылке: var при вызове как процедуры - сохраняемое знаачение. предпоследний параметр: при количестве параметров более двух - уточнение имени параметра, удобен при сохранении в цикле. тип может быть любым, логичен Integer или string. при уточнении ключа (параметров более двух) и отсутствии необходимости уточнения имени параметра передать пустую строку при количестве параметров равным двух - уточнение ключа. можно вызвать FullNameComponent: запись при количестве параметров более двух - все до предпоследнего рассматриваются как уточнение ключа относительно базового (Kernel.MainKey) все приводятся к string, допустима передача к примеру счетчика цикла. последний из них может не заканчиваться ''. передаваемые параметры могут иметь тип Variant, но тогда должны быть инициализированны(иметь тип), иначе будет сгенерированно исключение. исключение будет сгенерированно также при отсутствии параметров (см. выше) var begin (шииирина и высота формы) begin (шииирина и высота формы) (удаляем старый состав и ширину колонок) (сохраняем новый состав и ширину колонок) for i := 0 to HeaderSections.Count - 1 do }
#32
by inimeg
БиньковскийВиталий - преклдоняю колено перед вашей выкладкой, но.... К чему она? Ничего не понятн, ровным счетом ничего. Можно более доступным языком?
#33
by БиньковскийВиталий
никто не говорил что реализация тривиална. когда вы обращаетесь к полям вариантной переменной, делфи вызывает функцию диспетчеризации. в вашем случае - MainObject.Метаданные. при старте её адрес лежит в VarDispProc. я её подменяю при инициализации модуля: моя реализация MpcVarDispInvoke var SaveVarDispProc: Pointer; {указатель на оригинальную функцию диспетчеризации OLE} procedure MpcVarDispInvoke(Result: PVariant; const Instance: Variant; case ArgType of varStrArg: if ByRef then Result := PString(Params^)^ else Result := PString(Params)^; varOleStr: if ByRef then Result := PWideString(Params^)^ else Result := PWideString(Params)^; varBoolean: if ByRef then Result := PBool(Params^)^ else Result := PBool(Params)^; varByte, varSmallint, varInteger: if ByRef then Result := PInteger(Params^)^ else Result := PInteger(Params)^; varSingle: if ByRef then Result := PSingle(Params^)^ else Result := PSingle(Params)^; varDouble: if ByRef then Result := PDouble(Params^)^ else Result := PDouble(Params)^; varDate: if ByRef then Result := PDateTime(Params^)^ else Result := PDateTime(Params)^; varCurrency: if ByRef then Result := PCurrency(Params^)^ else Result := PCurrency(Params)^; varVariant: if ByRef then Result := PVariant(Params^)^ else Result := PVariant(Params)^; else raise Exception.CreateFmt('Invalid DataType - %d', [ArgType]); if ArgCount < 1 then raise Exception.Create('Not enough actual parameters'); if i = ArgCount - 1 then if ByRef then if Reg.OpenKey(Key, False) and Reg.ValueExists(NameProp) then case ArgType of
#34
by БиньковскийВиталий
моя реализация пишет/читает в реестр, в вашей нужно заменить одну кодировку на другую
#35
by БиньковскийВиталий
пройди отладчиком (в assm!) при работе с вариантной переменной, там видно как компилятор подставляет вызов "родной процедуры", изучи её сырцы, куда параметры он сует. из этого видно:
#36
by inimeg
БиньковскийВиталий - спасибо. Попробую вчитаться. Буду иметь в виду этот вариант решения, хотя он мне и кажется сложным. Всеравно спасибо за помошь.
#38
by inimeg
БиньковскийВиталий - теоретически сложности нет. Прийдется конечно вынести весь функционал работы с 1С из приложения написаного на 2005 в службу и направлять команды синхронизации уже ей скажем по TCP протоколу. Просто хотелось без лишних усложнений, но видимо не получится. Сейчас попробую конечно еще все это проверить на 2007 может там прокатит.
#39
by inimeg
Решение найдено. Для того что бы компилятор Delphi корректно компилировал структуры типа ole1Cv8.Метаданные.Справочники , в понятной для 1Сv8.1 кодировке необходимо у файла проекта выставить кодировку UTF8. Тоесть не у проекта а у самого пасника. ж) Как всегда все оказалось проще чем казалось на первый взгляд. Спасибо всем за помошь в поиске решения.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- v8 Как задать программно ориентацию страницы ландшафт?
- Вывод отчета по горизонтали
- Отбор в форме списка задач
- Что такое дамп и где его посмотреть?
- Объект СравнениеЗначений и с чем его едят?
- как выгрузить платежки в формате казначейства?
- Конвертация Данных. Дублируется номенклатура
- v7: Свертка базы 1с:Бухгалтерия 7.7
- 1С v77 Подогнать размер колонки в журнале
- v7: Как в запросе по регистру накопления получить ссылку на регистратор?
- 8.1: можно ли запросом получить список измененных объектов РИБ?
- где находятся "свойства Таблицы"
- v7: УПП Как ввести начальный страховой стаж сотрудника?!
- Поиск закономерностей 3 класс
- Как упаковывать данные в MS SQL Server 2000?
- Кто-нибудь слышал о программе Ветразь?
- Тип(ДокументСсылка) "Тип не определен"
- Нужно сделать копию базы SQL
- Пустые страницы при печати
- Ошибка общего модуля