8.х Передача массива с сервера на клиента

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Ivan2014, 2 фев 2015.

  1. TopicStarter Overlay
    Ivan2014
    Offline

    Ivan2014 Опытный в 1С

    Регистрация:
    10 апр 2014
    Сообщения:
    384
    Симпатии:
    2
    Баллы:
    29
    В серверной процедуре объявлен и заполнен массив.
    В модуле форме он объявлен как экспортная переменная
    Код:
    перем МассивТЗ Экспорт;
    &НаКлиенте
    Процедура Загрузить(Команда)
       Если ЗначениеЗаполнено(Объект.НачальнаяДата)=Ложь Или ЗначениеЗаполнено(Объект.КонечнаяДата)=Ложь Тогда
         Предупреждение("Заполните дату отчета!");
         Возврат;
       КонецЕсли;
       ЗагрузитьНаСервере();
       ТЗ=МассивТЗ;
    КонецПроцедуры
    
    Выдает ошибку
    {Форма.Форма.Форма(174,7)}: Переменная не определена (МассивТЗ)
    Что не верно в коде?
    Спасибо.
  2. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    и где же вы ее определили? вы присваиваете ТЗ ее значение, а где оно?
    Ivan2014 нравится это.
  3. TopicStarter Overlay
    Ivan2014
    Offline

    Ivan2014 Опытный в 1С

    Регистрация:
    10 апр 2014
    Сообщения:
    384
    Симпатии:
    2
    Баллы:
    29
    Я не приводил весь код:
    Код:
    &НаСервере
    Процедура ЗагрузитьНаСервере()
    //код
    МассивТЗ=Новый Массив;
        Для Каждого Элемент Из ТЗ Цикл
            СтруктураВТЗ=Новый Структура;
            СтруктураВТЗ.Вставить("Контрагент",Элемент.Контрагент);
            СтруктураВТЗ.Вставить("ДоговорКонтрагента",Элемент.ДоговорКонтрагента);
            СтруктураВТЗ.Вставить("Дата",Элемент.Дата);
            СтруктураВТЗ.Вставить("Номенклатура",Элемент.Номенклатура);
            СтруктураВТЗ.Вставить("КоличествоИтог",Элемент.КоличествоИтог);
            СтруктураВТЗ.Вставить("Цена",Элемент.Цена);
            СтруктураВТЗ.Вставить("СуммаИтог",Элемент.СуммаИтог);
            СтруктураВТЗ.Вставить("АЗС",Элемент.АЗС);
            СтруктураВТЗ.Вставить("Адрес",Элемент.Адрес);
            МассивТЗ.Добавить(СтруктураВТЗ);
        КонецЦикла;
    //код
    
    На сервере все нормально, массив заполняется.
  4. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну так вы его на Сервере и заполнили, а для Клиента он никто...
    Ivan2014 нравится это.
  5. rshakiro
    Offline

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

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    Используйте функцию (на сервере) и возвращайте в ней Ваш массив
    Ivan2014 нравится это.
  6. TopicStarter Overlay
    Ivan2014
    Offline

    Ivan2014 Опытный в 1С

    Регистрация:
    10 апр 2014
    Сообщения:
    384
    Симпатии:
    2
    Баллы:
    29
    Я об этом и думал, но у меня не получилось.
    Мне нужно таких 5 таблиц на клиента передавать.
    Все вычисления у меня идут в процедуре. Как мне из нее в функцию передать нужную информацию?
    --- Объединение сообщений, 2 фев 2015 ---
    У меня в процедуре есть например ТЗ, что далее с ней делать? Можно на пальцах рассказать кто может?
  7. alexburn
    Online

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Разберитесь в клиент-серверном взаимодействии, подобные вопросы сразу отпадут.
    Ivan2014 нравится это.
  8. rshakiro
    Offline

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

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    В функцию можно передать "инфу" через параметры... Может Вам несколько функций создать... Я не знаю Вашей полной задачи
    Код:
    &НаСервере
    Функция ЗагрузитьНаСервере()
    //код
    МассивТЗ=Новый Массив;
        Для Каждого Элемент Из ТЗ Цикл
            СтруктураВТЗ=Новый Структура;
            СтруктураВТЗ.Вставить("Контрагент",Элемент.Контрагент);
            СтруктураВТЗ.Вставить("ДоговорКонтрагента",Элемент.ДоговорКонтрагента);
            СтруктураВТЗ.Вставить("Дата",Элемент.Дата);
            СтруктураВТЗ.Вставить("Номенклатура",Элемент.Номенклатура);
            СтруктураВТЗ.Вставить("КоличествоИтог",Элемент.КоличествоИтог);
            СтруктураВТЗ.Вставить("Цена",Элемент.Цена);
            СтруктураВТЗ.Вставить("СуммаИтог",Элемент.СуммаИтог);
            СтруктураВТЗ.Вставить("АЗС",Элемент.АЗС);
            СтруктураВТЗ.Вставить("Адрес",Элемент.Адрес);
            МассивТЗ.Добавить(СтруктураВТЗ);
        КонецЦикла;
    Возврат МассивТЗ;
    КонецФункции
    Ivan2014 нравится это.
  9. TopicStarter Overlay
    Ivan2014
    Offline

    Ivan2014 Опытный в 1С

    Регистрация:
    10 апр 2014
    Сообщения:
    384
    Симпатии:
    2
    Баллы:
    29
    Я так и хотел сделать (разбить на функции), но тут проблема что между функциями придется передавать таблицы значений (кроме того что еще нужно массив на клиента возвращать), так как они нужны для расчетов. Это не получилось реализовать.
    Решил сделать одну большую функцию, создать массив, и заполнить его другими массивами. Так проще. Не знаю насколько правильно это. Но работает.
    Спасибо за уделенное время.
  10. alexburn
    Online

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Самое простое - передать через параметры формы.
    Ivan2014 нравится это.
  11. TopicStarter Overlay
    Ivan2014
    Offline

    Ivan2014 Опытный в 1С

    Регистрация:
    10 апр 2014
    Сообщения:
    384
    Симпатии:
    2
    Баллы:
    29
    Спасибо, посмотрю.
    --- Объединение сообщений, 3 фев 2015 ---
    А вообще заполнение макета печатной формы в 8.3 положено производить на клиенте или на сервере?
  12. alexburn
    Online

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Вот смотрите. Чтобы обработать данные, нужен сервер. Чтобы отобразить данные-нужен клиент. Так что заполнение макета идет на сервере, ибо он заполняется данными, и только потом отображается на клиенте.
    Ivan2014 нравится это.
  13. TopicStarter Overlay
    Ivan2014
    Offline

    Ivan2014 Опытный в 1С

    Регистрация:
    10 апр 2014
    Сообщения:
    384
    Симпатии:
    2
    Баллы:
    29
    Спасибо, буду дальше сам разобраться чтобы понять что к чему.
  14. KrivosheevEV
    Offline

    KrivosheevEV Новичок в 1С

    Регистрация:
    3 мар 2014
    Сообщения:
    35
    Симпатии:
    2
    Баллы:
    4
    И это ужасное решение.

    Код:
    Перем ЗначениеСтроки;
    
    Процедура Процедура1()
      ЗначениеСтроки = "1";
    КонецПроцедуры
    
    Процедура Процедура2()
      Сообщить (ЗначениеСтроки);
    КонецПроцедуры
    
  15. alexburn
    Online

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Кривошеев, смысл вашего поста ?????? Объявление глобальной переменной ?

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