• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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
Боюсь, что я с синтаксисом что-то намудрил, подскажите, если кто в курсе
 
G

gorlanovmax

Первое, что бросилось в глаза в синтакс-помощнике

Операция
Operation

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

vbs

к своей-то родной операции легко обратиться, проблема с операцией документа из OLE-базы
Сумму операции оттуда видно, а вот счет и субконто - OLE и все тут
 
V

vitfil

Код:
Если Операция.Кредит.Счет.Код = "..."
 
H

Hryv

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

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

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


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

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

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

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

Hryv

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

vbs

В который уже раз убеждаюсь, что все гениальное просто.
Спасибо большое, а то забыл уже технологию, последний раз лет 10 назад что-то подобное делал :what?:
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!