Как правильно передавать данные из серверной функции на клиент в 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как правильно передавать данные из серверной функции на клиент в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #37013
      Фото аватараOdineski
      Участник

        &НаСервере
        Функция ВыполнитьПроведениеНаСервере(НачДата,КонДата)

        Запрос = Новый Запрос;
        Запрос.Текст =
        «ВЫБРАТЬ
        | РеализацияТоваровУслуг.Дата КАК Дата,
        | РеализацияТоваровУслуг.Ссылка КАК Ссылка
        |ИЗ
        | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        |ГДЕ
        | РеализацияТоваровУслуг.Дата МЕЖДУ &НачДата И &КонДата»;

        Запрос.УстановитьПараметр(«КонДата», КонДата);
        Запрос.УстановитьПараметр(«НачДата», НачДата);

        РезультатЗапроса = Запрос.Выполнить();

        Возврат РезультатЗапроса.Выбрать();

        КонецФункции

        &НаКлиенте
        Процедура ВыполнитьПроведение(Команда)

        Сообщить(«————————————————————«, СтатусСообщения.БезСтатуса);
        Сообщить(«Начала обработки документов РеализацияТоваровУслуг «, СтатусСообщения.БезСтатуса);

        Выборка = ВыполнитьПроведениеНаСервере(Объект.НачДата,Объект.КонДата);

        Пока Выборка.Следующий() Цикл

        //Объект = Выборка.ПолучитьОбъект();
        //СсылкаНаЭлемент = Выборка.Ссылка;
        //Форма = СсылкаНаЭлемент.ПолучитьФорму();
        //Форма.Открыть();
        //
        //
        //Попытка
        // Объект.Записать();
        Сообщить(«Документ: «+Выборка.Ссылка+» полностью измен!»);
        //Исключение
        // Сообщить(«————————————————————«, СтатусСообщения.БезСтатуса);
        // Сообщить(«Документ не записан » + ОписаниеОшибки(), СтатусСообщения.Важное);
        // Форма.Закрыть();
        // Возврат;
        //КонецПопытки;
        //
        //Форма.Закрыть();

        КонецЦикла;

        Сообщить(«————————————————————«, СтатусСообщения.БезСтатуса);
        Сообщить(«Обработка документов», СтатусСообщения.БезСтатуса);

        КонецПроцедуры

        &НаКлиенте
        Процедура ПриОткрытии(Отказ)

        Объект.НачДата = ‘20260416’;
        Объект.КонДата = КонецДня(‘20260416’);

        КонецПроцедуры

      • #37014
        bot_avaOdin — Одинэсник
        Участник

          Ваша проблема — вы пытаетесь вернуть из серверной функции ВыполнитьПроведениеНаСервере объект выборки (РезультатЗапроса.Выбрать()), а потом на клиенте пытаетесь по нему пройтись циклом. Но объект выборки — это серверный объект, он не может быть передан напрямую на клиент.

          Как правильно сделать:

          1. На сервере выполните запрос, получите выборку.
          2. Преобразуйте выборку в массив или таблицу значений (например, Выгрузить()), чтобы передать на клиент.
          3. На клиенте перебирайте полученный массив или таблицу значений.

          Пример исправления:

          На клиенте:

          Ключевые моменты:

          РезультатЗапроса.Выбрать() — серверный объект, нельзя передавать на клиент.
          — Используйте Выгрузить() для передачи данных из запроса на клиент.
          — На клиенте перебирайте таблицу значений, а для работы с документом используйте Ссылка.ПолучитьОбъект().
          — Если нужно изменить и записать документ, делайте это на клиенте или через серверные процедуры.

          Так ваш код будет работать корректно и без ошибок.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С