1c77 проводки в документе Ole-базы

vbs

Well-known member
18.02.2007
1 708
1
#1
Проблема такая :
Внутри базы открываю через OLE другую базу (обе Бух 4.5)
Надо проанализировать проводки в OLE-базе

OldRN = OldBase.CreateObject("Document.РасходнаяНакладная");
DT = OldBase.CreateObject("ValueTable"); // приходится так, иначе выдает "плохой тип переменной"
if OldRN.FindByNum(Doc.DocNum,Doc.DocDate,) = 1 then // документ прекрасно находится
Message("В старой базе найдена накладная "+OldRN.DocNum+" "+OldRN.DocDate);
ORN = OldRN.CurrentDocument();
ORN.UnloadTable(DT); // здесь все ОК - доступ к табличной части есть, выгрузка нужна для дальнейшего анализа
Oper = ORN.Operation;
Oper.SelectEntries();
while Oper.GetEntry() = 1 do
//формирование нужной информации

// а вот здесь что-то не то - никак не сравнить
Oper.Credit.Account с нужным счетом
enddo
endif;
В отладчике смотреть невозможно - выдается Oper.Credit.Account = OLE
Боюсь, что я с синтаксисом что-то намудрил, подскажите, если кто в курсе
 

gorlanovmax

Well-known member
19.06.2008
286
0
#2
Первое, что бросилось в глаза в синтакс-помощнике

Операция
Operation

Синтаксис:
Операция
Назначение:
Доступ к бухгалтерской операции документа.
Замечание:
Атрибут имеет смысл только для тех видов документов, для которых в конфигурации установлен признак ''Бухгалтерский учет''. Данный атрибут не используется как самостоятельное значение, а позволяет обращаться к атрибутам и методам операции.
 

vbs

Well-known member
18.02.2007
1 708
1
#3
к своей-то родной операции легко обратиться, проблема с операцией документа из OLE-базы
Сумму операции оттуда видно, а вот счет и субконто - OLE и все тут
 
H

Hryv

#5
Как раз похожей фигней страдаю
Надо по коду или по наименованию искать
Вот для справочников наваял
Код:
//*----*----*----*----*----*----*----*----*----*----*----*----*----*----*
Функция НайтиЭлемент(Элемент, ПоЧем=0, Владелец="") // ПоЧем=0 - поиск по коду, иначе - по наименованию
Найден = ПолучитьПустоеЗначение(Элемент);
Если ПустоеЗначение(Элемент)=1 Тогда
Возврат Найден;
КонецЕсли;	
//Если ТипЗначения(Элемент)<>11 Тогда // не справочник - здесь пришлось закоментарить, именно потому что возвращает не справочник, а OLE
//	Возврат Найден;
//КонецЕсли;											
Если СокрЛП(Элемент.Вид())="" Тогда
Возврат Найден;
КонецЕсли;									 

Спр1 = СоздатьОбъект("Справочник."+Элемент.Вид());
Флаг = 0;
Если Владелец<>"" Тогда
Спр1.ИспользоватьВладельца(Владелец);
Флаг = 1;
КонецЕсли;
Если ПоЧем=0 Тогда
Если Спр1.НайтиПоКоду(СокрЛП(Элемент.Код), Флаг)=1 Тогда
Найден = Спр1.ТекущийЭлемент();
КонецЕсли;
Иначе	
Если Спр1.НайтиПоНаименованию(СокрЛП(Элемент.Наименование), Флаг, 0)=1 Тогда
Найден = Спр1.ТекущийЭлемент();
КонецЕсли;
КонецЕсли;

Возврат Найден;
КонецФункции //НайтиЭлемент

Добавлено: И для перечислений

Код:
//*----*----*----*----*----*----*----*----*----*----*----*----*----*----*
Функция НайтиПеречисление(Элемент)
Найден = ПолучитьПустоеЗначение(Элемент);
Если ПустоеЗначение(Элемент)=1 Тогда
Возврат Найден;
КонецЕсли;	
//Если ТипЗначения(Элемент)<>10 Тогда // не перечисление
//	Возврат Найден;
//КонецЕсли;											
Если СокрЛП(Элемент.Вид())="" Тогда
Возврат Найден;
КонецЕсли;											

Переч = Перечисление.ПолучитьАтрибут(Элемент.Вид());
Найден = Переч.ЗначениеПоИдентификатору(Элемент.Идентификатор());

Возврат Найден;
КонецФункции //НайтиПеречисление
 
H

Hryv

#6
Это все чтобы найти в текущей базе элемент с таким же кодом или наименованием как у элемента в базе открытой через OLE
Также перечисление по идентификатору
 

vbs

Well-known member
18.02.2007
1 708
1
#7
В который уже раз убеждаюсь, что все гениальное просто.
Спасибо большое, а то забыл уже технологию, последний раз лет 10 назад что-то подобное делал :what?: