8.х Передать ТЗ на сервер на УФ

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

  1. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.830
    Симпатии:
    34
    Баллы:
    54
    Пишу в модуле формы(УП с УФ):

    Код:
    &НаКлиенте //выполняется сом-соединение строго на клиенте.
    Процедура Сравнить()
    v8 = Новый COMОбъект("V83.COMConnector");
      Попытка
      Connection=v8.Connect(СтрокаПодключения);
      Исключение
      Сообщить("Не удалось подключиться к БД");
      Возврат;
      КонецПопытки;
      ЗапросУТ=Connection.NewObject("Запрос");
      ЗапросУТ.Текст="ВЫБРАТЬ
      |   Контрагенты.ИНН,
      |   Контрагенты.НаименованиеПолное
      |ИЗ
      |   Справочник.Контрагенты КАК Контрагенты
      |ГДЕ
      |   Контрагенты.ПометкаУдаления = ЛОЖЬ
      |   И Контрагенты.ИНН <> """"";
         
    РезультатУТ = ЗапросУТ.Выполнить().Выгрузить(); //тут на сколько я понял получается не ТЗ, а ком-объект.
    
    КонецПроцедуры;
    Далее мне надо как-то передать РезультатУТ в виде ТЗ на сервер, чтобы там использовать в качестве параметра для запроса.

    Как это сделать????!

    Код:
    РезультатУТ = ЗапросУТ.Выполнить().Выгрузить();
    //....что-то там...???
    ВыполнитьЗапросНаСервере(ТЗ);
    КонецПроцедуры;
    
    &НаСервере
    Процедура ВыполнитьЗапросНаСервере(РезультатУТ)
    
    ЗапросБП = Новый Запрос();
       
        ЗапросБП.Текст = "ВЫБРАТЬ
                         |    РезультатУТ.ИНН КАК ИННУТ
                         |ПОМЕСТИТЬ ВТ
                         |ИЗ
                         |    &РезультатУТ КАК РезультатУТ
                         |;
                         |
                         |////////////////////////////////////////////////////////////////////////////////
                         |ВЫБРАТЬ
                         |    Контрагенты.Код,
                         |    Контрагенты.ИНН,
                         |    Контрагенты.НаименованиеПолное,
                         |    ЕСТЬNULL(ВТ.КодУТ, ""Нет соотв."") КАК Код_УТ,
                         |    ЕСТЬNULL(ВТ.ИННУТ, ""Нет соотв."") КАК ИНН_УТ
                         |ИЗ
                         |    Справочник.Контрагенты КАК Контрагенты
                         |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ
                         |        ПО Контрагенты.ИНН = ВТ.ИННУТ
                         |ГДЕ
                         |    Контрагенты.ПометкаУдаления = ЛОЖЬ
                         |    И Контрагенты.ЭтоГруппа = ЛОЖЬ
                         |    И Контрагенты.ИНН <> """"";
    
          ЗапросБП.УстановитьПараметр("РезультатУТ",РезультатУТ);
          РезультатБП = ЗапросБП.Выполнить().Выгрузить();
    
    
    КонецПроцедуры;
    зы: тексты запросов для примера....
  2. 1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    162
    Баллы:
    104
    Ну так напиши функцию ПреобразоватьСОМвТЗ(результатУТ)
    Либо сразу заполняй ТЗ в источнике выборкой результата запроса внешнего соединения
  3. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.411
    Симпатии:
    974
    Баллы:
    204
    Сделай реквизит формы "РезультатУТ" типа ТаблицаЗначений с двумя колонками: ИНН и НаименованиеПолное

    и делай РезультатУТ.Загрузить(Запрос.Выполнить().Выгрузить())
  4. 1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    162
    Баллы:
    104
    кода меньше, но с другой стороны - форма все время будет хранить эту ТЗ :)
  5. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.411
    Симпатии:
    974
    Баллы:
    204
    ну будет хранить, и чего? если ТЗ большая, то можно сделать очистку после использования данных
  6. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.830
    Симпатии:
    34
    Баллы:
    54
    а если кол-во колонок будет меняться?... каждый раз переделывать реквизит формы?
  7. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.411
    Симпатии:
    974
    Баллы:
    204
    заводи несколько, если нужно хранить несколько разных ТЗ, либо выгребай все в одну, потом запросами разрулишь.
  8. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.830
    Симпатии:
    34
    Баллы:
    54
    ок. а оно поймет что надо сом-объект загрузить как ТЗ?
  9. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.411
    Симпатии:
    974
    Баллы:
    204
    COM объект и локальный объект действует согласно своего типа :)

    Ты ж не удивляешься тому, что например УдаленнаяБаза.Справочники.МойСправочник, будучи так же Com-объектом может сформировать выборку методом Выбрать(), выборка при этом будет так же Com-объект, но у него уже будет метод Следующий() :)
  10. 1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    162
    Баллы:
    104
    Ст, попробуй - расскажешь :) Что-то мне тоже не верится, что ТЗ "проглотит" метод Загрузить(СомОбъект)
    Тут еще тоже оригинальный вариант имеется.
  11. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.830
    Симпатии:
    34
    Баллы:
    54
    Видел этот вариант, но он выполняется только на стороне сервера, а у меня на клиенте сом-объект получается....
  12. 1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    162
    Баллы:
    104
    на клиенте сом-объект... зачем?)
  13. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.830
    Симпатии:
    34
    Баллы:
    54
    На клиенте не доступен метод:
    Код:
     Ошибка при вызове метода контекста (Загрузить)
          м_ТЗ.Загрузить(ЗапросУТ.Выполнить().Выгрузить());
    по причине:
    Метод недоступен на клиенте
    --- Объединение сообщений, 10 авг 2017 ---
    Потому что соединение с внешней базой и запрос к ней выполняются на стороне клиента и только на ней. зачем...? хз, вопрос к разрабам...
  14. 1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    162
    Баллы:
    104
    ложь и провокация :)
  15. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.830
    Симпатии:
    34
    Баллы:
    54
    Почему? на сервере элементарно может не быть зарегистрирована компонента - посему не взлетит.
  16. 1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    162
    Баллы:
    104
    Ну так это уже другая проблема и никак не относится к конктексту выполнения кода.
    --- Объединение сообщений, 10 авг 2017 ---
    Код:
    Ошибка при вызове метода контекста (Загрузить)
          м_ТЗ.Загрузить(ЗапросУТ.Выполнить().Выгрузить());
    по причине:
    Метод недоступен на клиенте
    Попробуй обратиться к данныеформыколлекция, а не к ТЗ своей
    Последнее редактирование: 10 авг 2017
  17. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.830
    Симпатии:
    34
    Баллы:
    54
    Перенес всю процедуру на сервер.
    Всё равно не переваривает сом-объект и вываливается с ошибкой:
    Код:
    Ошибка при вызове метода контекста (Загрузить)
    м_ТЗ.Загрузить(ЗапросУТ.Выполнить().Выгрузить());
    по причине:
    Несоответствие типов (параметр номер '1')
    Код запроса:
    Код:
     ЗапросУТ.Текст="ВЫБРАТЬ
                         |    ""00-00"" КАК КодУТ,
                         |    Контрагенты.ИНН КАК ИННУТ,
                         |    Контрагенты.НаименованиеПолное КАК Наименование
                         |ИЗ
                         |    Справочник.Контрагенты КАК Контрагенты
                         |ГДЕ
                         |    Контрагенты.ПометкаУдаления = ЛОЖЬ
                         |    И Контрагенты.ИНН <> """"";
    
    м_ТЗ.Загрузить(ЗапросУТ.Выполнить().Выгрузить());
    
    тз.jpg
  18. 1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    162
    Баллы:
    104
    Длина строковых полей соответствует? Ну, я так и думал, что Номад обманул :)
  19. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.411
    Симпатии:
    974
    Баллы:
    204
    значит только формирование тз из сом-объекта тупым построчным копированием спасет.

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