Скорее всего действует отсутствие доступной доки. У нас эксперименты закончились поражением .
Обработку сваять можно. Пиши подробнее в чем затыка.
-----------------------------------------------------------------------
Условия задачи таковы.
Есть список сотрудников в программе "Кадры" на Кларион.
Каждый день появляются новые работники. Кто-то увольняется.
Необходимо все эти изменения передавать в справочник "Сотрудники" 1с-Бухгалтерия. Желательно все делать автоматом раз в день. В типовую конфигурацию вмешиваться нельзя.
Пробую использовать OLE.
Я взял за основу пример взаимодействия Clarion и 1с Антона Балкина, создал класс для удобства работы.
Glo:OneC.FEQ - это класс для работы с 1с
Str string(30) !ID объекта 1c
CODE
Str=Glo:OneC.FEQ{'CreateObject("Reference.Сотрудники")'}
RetVal=Glo:OneC.FEQ{StrRef&'.ВыбратьЭлементы(0)'}
LOOP
RetVal = Glo:OneC.FEQ{StrRef&'.ПолучитьЭлемент()'}
IF RetVal=0 THEN BREAK.
do LoadRec
END
LoadRec ROUTINE
Glo:OneC.FEQ{Str &'.New'}
Glo:OneC.FEQ{Str & '.Наименование'} = L.R.Descr
Glo:OneC.FEQ{Str&'.Код'} = L.R.Code
Glo:OneC.FEQ{Str&'.ДатаРождения'} = format( L.R.BirthDay , @d6.)
Glo:OneC.FEQ{Str&'.Должность'} = clip(L.R.Dolgn)
Glo:OneC.FEQ{Str&'.ДокументДатаВыдачи'} = format( L.R.DokData , @d6.)
Glo:OneC.FEQ{Str&'.ДокументКемВыдан'} = L.R.KemVid
Glo:OneC.FEQ{Str&'.ДокументНомер'} = L.R.DokNomer
Glo:OneC.FEQ{Str&'.ДокументСерия'} = L.R.DokSeria
Glo:OneC.FEQ{Str&'.Телефон'} = L.R.Telefon
Glo:OneC.FEQ{Str& '.Write()'}
Все нормально записывается. Если сотрудник уже есть, то данные обновляются, если сотрудника нет - запись добавляется. Все типы данных базовые - строки, числа. Поэтому проблем не возникает.
Но у сотрудника есть пол. И еще какие-то агрегатные атрибуты. Ссылки на справочники(подразделение) и перечесления(пол), если проще.
Вот с этим затык. Как только я не извращался - ничего не помогает. Пишет в базу ноль вместо ID пола.
И что самое интересное, читается агрегатный тип без проблем:
RefDep = Glo:OneC.FEQ{StrRef&'.Подразделение'} !Вернет строку ID Подразделения и прочитает из связного справочника:
DepKod = Glo:OneC.FEQ{RefDep & '.Код'}
DepName = Glo:OneC.FEQ{RefDep & '.Наименование'}
Pol = Glo:OneC.FEQ{StrRef & '.Пол.Идентификатор()'} !Вернет "Мужской"
А пишется... - не пишется вообще.
Ни так (для отладки попробовал)
Glo:OneC.FEQ{StrRef&'.Пол'} = ' GJA' !Если пол мужской, то в dbf файле "это" написано.
Ни даже так:
Glo:OneC.FEQ{Str&'.Пол'} = Glo:OneC.FEQ{'Перечисление.Пол.ЗначениеПоИдентификатору(Пол.Мужской.Идентификатор())' }
Как записывать агрегатный тип через OLE - я так и не понял. Обработой из 1с можно, но только как ее запустить в "автоматическом" режиме не касаясь стандартной конфигурации - я не знаю.
Вот вкратце и все. Поражение вышло, однако.
Может быть есть опыт победителей?
С уважением,
Александр