8.х Ошибка при получении остатка из регистра через OLE

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Steel Rain, 6 апр 2011.

  1. TopicStarter Overlay
    Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Всем доброго времени суток.

    Есть задача получить данные из базы 7.7. Конфигурация не типовая. Имеется регистр ВзаиморасчетыНовые:
    Код:
    Измерения                                                          Ресурсы
    Договор - Справочник.Договоры                          Сумма - Число
    ТорговаяТочка - Справочник.ТорговыеТочки
    Док - Документ
    
    
    Справочник ТорговыеТочки подчинен справочнику Контрагенты.
    Мне нужно получить значение Суммы в разрезе Торговых точек. Пишу следующим образом:
    Код:
    //ну тут подключение к базе бла бла бла... Семерка
    Семерка = Новый COMОбъект("V77S.Application");
    Регистр77 = Семерка.CreateObject("Регистр.ВзаиморасчетыНовые");
    Контрагент77 = Семерка.CreateObject("Справочник.Контрагенты");
    ТТ77 = Семерка.CreateObject("Справочник.ТорговыеТочки");
    
    Контрагент77.ВыбратьЭлементы();
    Пока Контрагент77.ПолучитьЭлемент() = 1 Цикл
    Если (Контрагент77.ЭтоГруппа() = 1) ИЛИ (Контрагент77.ПометкаУдаления() = 1) Тогда
    Продолжить;
    КонецЕсли;
    ТТ77.ИспользоватьВладельца(Контрагент77.ТекущийЭлемент());
    ТТ77.ВыбратьЭлементы();
    Пока ТТ77.ПолучитьЭлемент() = 1 Цикл
    Если ТТ77.ПометкаУдаления() = 0 Тогда
    Сумма = Регистр77.СводныйОстаток( ,ТТ77.ТекущийЭлемент(), , "Сумма");
    //вот тут ругается, текст ошибки ниже
    Сообщить(" " + ТТ77 + "   " + Сумма);
    КонецЕсли;
    КонецЦикла;    
    КонецЦикла;
    
    
    
    {Форма.Форма(34)}: Ошибка при вызове метода контекста (СводныйОстаток): Типы не совпадают (1)
    Сумма = Регистр77.СводныйОстаток( ,ТТ77.ТекущийЭлемент(), , "Сумма");

    Платформа 8.1
    ЧЯДНТ? Или оно так вообще не работает? Просто Остаток, при указании всех измерений выдает, а вот сводный, только по одному измерению не хочет :( Заранее признателен за помощь.
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Попробуйте вот так:
    Код:
    Сумма = Регистр77.СводныйОстаток("" ,ТТ77.ТекущийЭлемент(),"", "Сумма");
    
    
    
  3. TopicStarter Overlay
    Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Ну да, так ошибку не выдает. Но и результат тоже. На выходе везде
    COMОбъект 0

    Я пробовал ещё создавать пустые элементы типа Справочник.Договоры и Документ
    Код:
    	Договор77 = Семерка.CreateObject("Справочник.Договоры");
    Док77 = Семерка.CreateObject("Документ");
    
    Сумма = Регистр77.СводныйОстаток( Договор77 ,ТТ77.ТекущийЭлемент(), Док77, "Сумма");
    
    
    ровно такой же результат :(
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Попробуйте через объект "Регистры"
  5. TopicStarter Overlay
    Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    эээ... не совсем понял, можно поподробнее?
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    Регистр77 = Семерка.CreateObject("Регистры");    
    РегРасчеты=Регистр77.ВзаиморасчетыНовые;
    
    
  7. TopicStarter Overlay
    Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Нет, к сожалению, и так не получается. По всякому попробовал.
  8. TopicStarter Overlay
    Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Похоже восьмерка не может передать пустой параметр в этот метод. А если указать явно, что там пустое значение нужного типа, то семерка воспринимает это как условие отбора. Соответственно результат получается нулевой, т.к. у всех записей регистра эти измерения заполнены.
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Очень странно... Должно работать...
    Попробуйте еще ПолучитьПустоеЗначение(). Тогда он будет хотя бы типизирован......
    Ну а если как вариант через EvalExpr?
  10. TopicStarter Overlay
    Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Код:
    Сумма = Регистр77.СводныйОстаток(Семерка.ПолучитьПустоеЗначение(Договор77),ТТ77.ТекущийЭлемент(),Семерка.ПолучитьПустоеЗначение(Док77),"Сумма");
    
    
    
    Вот так заработало! Спасибо.
    Честно говоря, в шоке. Ткнул пальцем в небо. Был в полной уверенности, что обращение к внутренним функциям OLE базы возможно только в англоязычном варианте.

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