8.х COM соединение. Проблема с параметром запроса

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Euronymous, 5 июн 2016.

  1. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Доброго времени суток.
    Проблема с запросом по COM-соединению.

    Код:
        Перем ТЗ;
       
        МассивНоменклатуры = COM.NewObject("Массив");
        Для Каждого Строка из ТЗНоменклатуры Цикл
            Номенклатура = COM.Справочники.Номенклатура.ПолучитьСсылку(COM.NewObject("УникальныйИдентификатор", СокрЛП(Строка.Номенклатура.Идентификатор)));
            МассивНоменклатуры.Add(Номенклатура);
        КонецЦикла;   
       
        Если МассивНоменклатуры.Количество() <> 0 Тогда
            Запрос = COM.NewObject("Запрос");
            Запрос.Текст =
            "ВЫБРАТЬ
            |ЦеныНоменклатурыСрезПоследних.ТМЦ КАК Номенклатура,
            |ЦеныНоменклатурыСрезПоследних.ОтпускнаяЦена КАК Цена,
            |ЦеныНоменклатурыСрезПоследних.СтавкаНДС,
            |ЦеныНоменклатурыСрезПоследних.СтавкаНП
            |ИЗ
            |РегистрСведений.ЦеныТМЦ.СрезПоследних(
            |&ДатаДок,
            |ТипЦены = &ТипЦены
            |И ТМЦ В (&МассивНоменклатуры)
            |И ТМЦ.ЭтоГруппа = ЛОЖЬ
            |И Регистратор ССЫЛКА Документ.УстановкаОтпускныхЦен) КАК ЦеныНоменклатурыСрезПоследних";
            Запрос.УстановитьПараметр("МассивНоменклатуры", МассивНоменклатуры);
            Запрос.УстановитьПараметр("ДатаДок",            КонецДня(СтруктураПараметров.ДатаДок));
            Запрос.УстановитьПараметр("ТипЦены",            COM.Справочники.ТипыЦен.GetRef(COM.NewObject("УникальныйИдентификатор", СтруктураПараметров.ТипЦены.Идентификатор)));
            ТЗ = COM.NewObject("ТаблицаЗначений");
            ТЗ = Запрос.Выполнить().Выгрузить();   
        Иначе
            ТЗ = Новый ТаблицаЗначений;
            ТЗ.Колонки.Добавить("Номенклатура");
            ТЗ.Колонки.Добавить("Цена");
            ТЗ.Колонки.Добавить("Процент");
            ТЗ.Колонки.Добавить("СтавкаНДС");
        КонецЕсли;
    
    Проблема именно с номенклатурой или массивом номенклатуры, если их задать в качестве параметра - запрос возвращает пустые цены, если не же не задавать этот параметр вообще, то запрос возвращает правильные данные.
    В консоли запросов той самой внешней базы всё отрабатывается без проблем.
    В чём может быть сбой?
  2. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Через COM доступны только простые типы данных - строка, число, булево. Никаких ссылочных типов не передается.
  3. shurikvz
    Online

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Код на глаз рабочий.

    В цикле, там где получение номенклатуры и добавление в массив, чему равна Номенклатура? Она вообще в удаленной базе существует, находится?
  4. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    Код:
    Запрос.УстановитьПараметр("ТипЦены", COM.Справочники.ТипыЦен.GetRef(COM.NewObject("УникальныйИдентификатор", СтруктураПараметров.ТипЦены.Идентификатор)));
    
    Вот тут идентификатор должен быть строкой
  5. shurikvz
    Online

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    У него тогда бы ругалось на несоответствие типа параметров. Да и там же реквизит справочника, он наверно и так строка.
  6. Yurifm
    Online

    Yurifm Новичок в 1С

    Регистрация:
    29 май 2015
    Сообщения:
    15
    Симпатии:
    3
    Баллы:
    4
    Не так давно решал что-то подобное, использовал для справочника не UID а код элемента, его же и передавал в ВТ запроса. а там делал соединение по коду тек базы и базы ком. Ну а вообще странно, что не взлетает...Если найдете ответ опишите пож.
  7. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    По-моему бред
  8. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    К сожалению это не бред :) Зачем через COM гнать "сложные" типы данных, например, ссылочный ?
  9. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Существует, тип COM-объект
  10. shurikvz
    Online

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Тип КомОбъект - это отлично. Если развернуть - что там? Номенклатура то найдена, или пустая ссылка внутри?
  11. Yurifm
    Online

    Yurifm Новичок в 1С

    Регистрация:
    29 май 2015
    Сообщения:
    15
    Симпатии:
    3
    Баллы:
    4
    Там ссылка будет ком объект. Достаточно просто глянуть реквизит - код или наименование, если заполнено занчит все ок. ИЛИ выполнить проверку комобъект.Пустая()
  12. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Всё заполнено! Номенклатуру находит! Она же из этой базы и добавляется, т.е. не может не находится :)
  13. Yurifm
    Online

    Yurifm Новичок в 1С

    Регистрация:
    29 май 2015
    Сообщения:
    15
    Симпатии:
    3
    Баллы:
    4
    Попробуйте через ВремТабл сделать. Создайте таблицу значений с колонками соотв. типа, заполните её, подтяните в запрос, и потом наложите обор соединением внутренним.

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