1C OLE Delphi #158413


#0 by Vitus
Помогите, пожалуйста, решить проблему!!! Подключаюсь к примеру к базе 1С: Зарплата и кадры (через OLE), и хочу из справочника "Сотрудники" получить поля: Код, Наименование, Должность. Первые два поля - проблем не возникает, а третье не дает, говорит что "Invalid Variant Operation"!!! И вообще она не хочит отдавать поля у которых тип указан в виде, например, как у должности -  Справочник.Должности. Я уже все перепробовал. Подскажите решение проблемы... Код:     OleSotr:=Ole1C.CreateObject('Справочник.Сотрудники');     if not VarIsEmpty(OleSotr) then begin       if OleSotr.ВыбратьЭлементы>0 then begin          while OleSotr.ПолучитьЭлемент>0 do
#1 by Андрюха
Имхо, дело тут не в Delphi, а в чём-то другом. Сделай сначала свою обработку для работы из другой базы 1С, а когда в ней отловишь баги - перепишешь на Delphi.
#2 by PaulBC
Может, OleSotr.Должность.Наименование?
#3 by AAAChel
Должность - это агрегатный тип данных, в каком виде ты бы собирался получить его в дельфи?) ему нет у тебя соответствия
#4 by Vitus
В виде поля Наименование из справочника Должности!!! Что можно сделать?
#5 by PaulBC
пробовал?
#6 by Vitus
Не помогло, выдало ошибку "метод Наименование not supported by automation object" :(
#7 by PaulBC
Должность - периодический реквизит
#8 by Vitus
И что делать? Как мне получить текущее (на сегодняшний день) значение этого аттрибута для конкретной записи???
#9 by PaulBC
Как-то так наверно:
#10 by Vitus
Не помогло:(
#11 by MMF
ListBox1.Items.Add(OleSotr.Код+'  '+OleSotr.Наименование+'  '+ OleSotr.GetAttrib('Должность'));
#12 by MMF
а стоп, должность это ж справочник наверное
#13 by Vitus
А StufPost - это что такое? OleVariant?
#14 by GrayT
Ну да по идее. Хранит ссылку на объект должность StufPost := OleSotr.GetAttrib('Должность');
#15 by Vitus
Что-то тогда эта идея не работает:(
#16 by GrayT
Не помню, давно игрался. Попробуй тут посмотреть
#17 by Vitus
Я читал, статья для начинающих, не более
#18 by GrayT
а-а-а-. ну извини.
#19 by ШтушаКутуша
"Должность"-справочник и периодический элемент,тогда:  try    if isPeriodic(FName,id)=1 then        if cur_period.ИспользоватьОбъект(CVar(id),CDisp(FRef.ТекущийЭлемент))=0 then
#20 by ШтушаКутуша
+19 где Fv77.Periodically это: CreateObject("Периодический"), Fv77 это v77.Application
#21 by romix
Через ОЛЕ невозможно получить значения, отличные от простых типов: числа, строки, даты...
#22 by dk
А если попробовать что-то вроде OleSotr.EvalExpr('Строка(' + OleSotr.Должность + ')')
#23 by ШтушаКутуша
еще как можно.
#24 by ШтушаКутуша
+23 приведенный код-рабочий
#25 by romix
Ну да, надо приводить к строке, потом передавать. Например, вместо элемента справочника передавать его код, а вместо документа - ЗначениеВСТроку.
#26 by ШтушаКутуша
не так,щас неявно ты подразумевал маршаллинг,а ты заметил в приведение к типам CVar=OleVariant и CDisp=IDispatch? так вот,здесь маршаллинг обеспечивается самой технологией COM/OLE
#27 by Vitus
Спасибо за большое количество вариантов, сейчас попробую:)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С