1с 8.2 вернуть тз с сервера на клиент и перебрать

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

  1. RZX

    RZX Active Member

    Регистрация:
    3 ноя 2009
    Сообщения:
    42
    Симпатии:
    0
    Всё, сдаюсь...
    Прошу помощи по решению следующего вопроса.

    Я работал в основном с 1С 8.1 на обычных формах. Тут столкнулся с тем, что человеку нужен простенький отчетик в 1С 8.2 на управляемых формах.
    Запрос набросал минут за 10, он еще будет правится - не в нем суть. Как вернуть результат в клиентскую часть - сижу уже несколько дней.

    Есть обработка, на которой мы устанавливаем ДатаС, ДатаПо, Контрагент.

    Таб - реквизит формы типа ТаблицаЗначений.

    И есть модуль формы (серверная часть не очень интересует, она небольшая, поэтому я ее полностью привел):

    Код ( (Unknown Language)):
    &НаСервере
    Функция ВыборкаДанных(ДатаС, ДатаПо, Контрагент)
     
    ТаблЗнач = Новый ТаблицаЗначений;
    ТаблЗнач.Колонки.Добавить("Номенклатура");
     
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура,
    | СУММА(ОтчетОРозничныхПродажахТовары.Количество) КАК Количество,
    | Штрихкоды.Штрихкод,
    | ЦеныНоменклатурыСрезПоследних.Цена КАК Закупочная,
    | ЦеныНоменклатурыСрезПоследних1.Цена КАК Розничная,
    | СУММА(ОтчетОРозничныхПродажахТовары.Количество) * (ЦеныНоменклатурыСрезПоследних1.Цена - ЦеныНоменклатурыСрезПоследних.Цена) КАК КомиссионноеВознаграждение
    |ИЗ
    | Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары,
    | РегистрСведений.Штрихкоды КАК Штрихкоды,
    | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаПо, ) КАК ЦеныНоменклатурыСрезПоследних,
    | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаПо, ) КАК ЦеныНоменклатурыСрезПоследних1,
    | РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
    |ГДЕ
    | ОтчетОРозничныхПродажахТовары.Ссылка.Дата >= &ДатаС
    | И ОтчетОРозничныхПродажахТовары.Ссылка.Дата <= &ДатаПо
    | И ОтчетОРозничныхПродажахТовары.Номенклатура = Штрихкоды.Владелец
    | И ЦеныНоменклатурыСрезПоследних.ВидЦены.Ссылка = &ВидЦеныЗакупочная
    | И ОтчетОРозничныхПродажахТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
    | И ОтчетОРозничныхПродажахТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних1.Номенклатура
    | И ЦеныНоменклатурыСрезПоследних1.ВидЦены.Ссылка = &ВидЦеныРозничная
    | И НоменклатураКонтрагентов.Контрагент = &Контрагент
    | И НоменклатураКонтрагентов.Номенклатура = ОтчетОРозничныхПродажахТовары.Номенклатура
    |
    |СГРУППИРОВАТЬ ПО
    | ОтчетОРозничныхПродажахТовары.Номенклатура,
    | Штрихкоды.Штрихкод,
    | ЦеныНоменклатурыСрезПоследних.Цена,
    | ЦеныНоменклатурыСрезПоследних1.Цена";
     
     
    Запрос.УстановитьПараметр("ДатаС", ДатаС);
    Запрос.УстановитьПараметр("ДатаПо", ДатаПо);
    Запрос.УстановитьПараметр("Контрагент", Контрагент);
    Запрос.УстановитьПараметр("ВидЦеныЗакупочная", Справочники.ВидыЦен.НайтиПоНаименованию("закупочная"));
    Запрос.УстановитьПараметр("ВидЦеныРозничная", Справочники.ВидыЦен.НайтиПоНаименованию("розница"));
     
    ТаблЗнач = Новый ТаблицаЗначений;
    ТаблЗнач = Запрос.Выполнить().Выгрузить();
    ЗначениеВРеквизитФормы(ТаблЗнач,"Отчет.Таб"); // это вот так нужно передавать?
    // или можно как-то по другому?
     
    КонецФункции
     
    Код ( (Unknown Language)):
    &НаКлиенте
    Процедура Сформировать(Команда)
    //
    ВыборкаДанных(Отчет.ДатаС, Отчет.ДатаПо, Отчет.Контрагент);
     
    Для каждого Эл из Отчет.Таб Цикл
     
    Сообщить(Эл);
    КонецЦикла;
     
    КонецПроцедуры
     
    [offtop]
    Смотреть курсы по СКД и УФ на 100500 часов нет времени (обязательно как-нибудь это сделаю). Просто человеку нужно очень срочно, а я сижу уже несколько дней и без результата.
    [/offtop]

    Получается что:
    1. На тонком клиенте недоступна таблица значений (то есть ее нельзя вернуть по Возврат)
    2. На тонком клиенте недоступна ЗначениеФормыВРеквизит
    3. На тонком клиенте недоступна ЗначениеИзСтрокиВнутр
    4. На тонком клиенте недоступна табличная часть формы (то есть ее нельзя заполнить на сервере)

    То, как приведено в коде выше, единственный способ, который я нашел и который что-то возвращает.

    А возвращается в Отчет.Таб какая-то хрень, которая называется ДанныеФормыКоллекция. Что это и как с этим работать из СП непонятно. Я сомневаюсь, что это то, что мне нужно для вывода данных.

    Кто сталкивался с такой штукой? Подскажите, как все-таки вернуть данные из запроса и отобразить из на клиенте в управляемой форме.
    Спасибо!
     
  2. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    Сделайте табличную часть с нужным перечнем колонок (естественно, с соответствующими типами значений, с аналогичными запросу именами колонок) и можно просто Отчет.<ИмяТабличнойЧасти> = Запрос.Выполнить().Выгрузить(); внутри серверной процедуры ВыборкаДАнных().

    Но, по хорошему, лучше бы запилить это отчетом, на СКД. Делается это за 10 минут.
     
  3. ЧИА

    ЧИА Active Member

    Регистрация:
    22 окт 2009
    Сообщения:
    33
    Симпатии:
    0
    Если еще актуально...
    Для того, чтобы работать с таблицей значений на клиенте (а также и на сервере), можно в управляемой форме в разделе "Реквизиты" добавить реквизит, например, тзНашаТаблица с типом значения "ТаблицаЗначений". Тут же добавить и описать все колонки этой таблицы.
    тзНашаТаблица готова к эксплуатации.
     
  4. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Клиент серверное разделение - бессердечная ты сука!(с)

    Варианта 2 - первый таки СКД, благо там всего пара хитростей есть.
    Второй - бацайте табличный документ на сервере и возвращайте на клиент, а там выводить. Но это через жопу автогеном.
     
Загрузка...

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