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

  • Автор темы Автор темы vbs
  • Дата начала Дата начала
V

vbs

Проблема такая :
Внутри базы открываю через 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
Боюсь, что я с синтаксисом что-то намудрил, подскажите, если кто в курсе
 
Первое, что бросилось в глаза в синтакс-помощнике

Операция
Operation

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

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

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


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

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

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

Возврат Найден;
КонецФункции //НайтиПеречисление
 
Это все чтобы найти в текущей базе элемент с таким же кодом или наименованием как у элемента в базе открытой через OLE
Также перечисление по идентификатору
 
В который уже раз убеждаюсь, что все гениальное просто.
Спасибо большое, а то забыл уже технологию, последний раз лет 10 назад что-то подобное делал :what?:
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab