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

Тема в разделе "1C и всё что с ней связано", создана пользователем vbs, 6 май 2010.

  1. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Проблема такая :
    Внутри базы открываю через 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
    Боюсь, что я с синтаксисом что-то намудрил, подскажите, если кто в курсе
     
  2. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    Первое, что бросилось в глаза в синтакс-помощнике

    Операция
    Operation

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    к своей-то родной операции легко обратиться, проблема с операцией документа из OLE-базы
    Сумму операции оттуда видно, а вот счет и субконто - OLE и все тут
     
  4. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Код ( (Unknown Language)):
    Если Операция.Кредит.Счет.Код = "..."
     
  5. Hryv

    Hryv Гость

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

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

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

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

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

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

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

    Hryv Гость

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    В который уже раз убеждаюсь, что все гениальное просто.
    Спасибо большое, а то забыл уже технологию, последний раз лет 10 назад что-то подобное делал :what?:
     
Загрузка...

Поделиться этой страницей