ДанныеФормыСтруктураСКоллекцией.Выгрузить

Методы · Unload

Создает таблицу значений и копирует в нее данные коллекции. Имена колонок таблицы значений совпадают с именами колонок коллекции. Колонка, содержащая номер строки, выгружается в колонку с именем НомерСтроки.

Синтаксис

Выгрузить(<Строки>, <Колонки>)
Выгрузить(<ПараметрыОтбора>, <Колонки>)
Полное описание, параметры и ограничения

ДанныеФормыСтруктураСКоллекцией.Выгрузить (FormDataStructureAndCollection.Unload)

ДанныеФормыСтруктураСКоллекцией (FormDataStructureAndCollection)

Выгрузить (Unload)

Доступен, начиная с версии 8.2.

Вариант синтаксиса: Выгрузить колонки

Синтаксис:
Выгрузить(<Строки>, <Колонки>)
Параметры:

<Строки> (необязательный)
Тип: Массив.
Массив строк для выгрузки.
Если не указан, выгружаются все строки коллекции.

<Колонки> (необязательный)
Тип: Строка.
Строка, задающая список колонок для копирования в формате: "Колонка1, Колонка2,...,КолонкаN".
Если список не задан, то будут скопированы все колонки.
Вариант синтаксиса: Выгрузить по отбору

Синтаксис:
Выгрузить(<ПараметрыОтбора>, <Колонки>)
Параметры:

<ПараметрыОтбора> (необязательный)
Тип: Структура.
Ключ структуры - идентификатор колонки, а значение структуры - значение отбора.

<Колонки> (необязательный)
Тип: Строка.
Список колонок для копирования в формате: "Колонка1, Колонка2,...,КолонкаN".
Описание варианта метода:
Если указан отбор, то только строки из отбора будут выгружены.
Если отбор не указан, то будут выгружены все строки коллекции.
Если указаны колонки, то только эти колонки будут выгружены.
Иначе, будут выгружены все колонки коллекции.
Возвращаемое значение:
Тип: ТаблицаЗначений.

Описание:

Создает таблицу значений и копирует в нее данные коллекции. Имена колонок таблицы значений совпадают с именами колонок коллекции. Колонка, содержащая номер строки, выгружается в колонку с именем НомерСтроки.

Доступность:

Сервер, мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.2.

Методическая информация

Практические примеры

Найти Книгу и выгрузить независимый снимок её полей

НайтиСтроки выдаёт ссылки на строки модели, а Выгрузить — самостоятельную серверную ТаблицуЗначений. Показываем оба варианта выгрузки.

Где и как запускать

Полный модуль управляемой формы своей внешней обработки, ПриСозданииНаСервере.

Подготовка

  1. Используйте отдельную свою конфигурацию УчебнаяКонфигурацияСинтаксиса. В Конфигураторе создайте независимый непериодический регистр сведений УчебныеСтроки. Не используйте существующий рабочий регистр.

  2. Добавьте измерения Номер типа Число (10, 0) и Товар типа Строка (64). Добавьте ресурсы Количество типа Число (10, 0), Сумма типа Число (12, 2). Обновите только свою учебную конфигурацию базы.

  3. Создайте собственную внешнюю обработку с пустой управляемой основной формой. Реквизит УчебныеЗаписи и таблицу вручную не добавляйте: их создаёт код.

  4. Вставьте весь модуль выбранного урока. В свойствах формы назначьте событию ПриСозданииНаСервере одноимённую процедуру. Сохраните EPF и откройте её в своей учебной базе.

  5. Набор создаётся пустым и заполняется только в памяти. В коде нет Прочитать, Записать, транзакций, привилегированного режима, запросов, файлов или сети. Таблица на форме только для просмотра.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Реквизиты = Новый Массив;
    Реквизиты.Добавить(Новый РеквизитФормы("УчебныеЗаписи",
        Новый ОписаниеТипов("РегистрСведенийНаборЗаписей.УчебныеСтроки")));
    ЭтаФорма.ИзменитьРеквизиты(Реквизиты);
    Набор = РегистрыСведений.УчебныеСтроки.СоздатьНаборЗаписей();
    Для Каждого ИсходнаяСтрока Из СтрРазделить("1|Книга|3|750;2|Ручка|1|50;3|Коробка|2|60", ";") Цикл
        Поля = СтрРазделить(ИсходнаяСтрока, "|");
        Запись = Набор.Добавить();
        Запись.Номер = Число(Поля[0]);
        Запись.Товар = Поля[1];
        Запись.Количество = Число(Поля[2]);
        Запись.Сумма = Число(Поля[3]);
    КонецЦикла;
    ЭтаФорма.ЗначениеВРеквизитФормы(Набор, "УчебныеЗаписи");
    Записи = ЭтаФорма.УчебныеЗаписи;
    Если ТипЗнч(Записи) <> Тип("ДанныеФормыСтруктураСКоллекцией") Тогда
        ВызватьИсключение "Ожидалась модель набора записей, а не обычная таблица формы";
    КонецЕсли;
    Сообщить(Записи.Количество() = 3);
    Сообщить(Записи.Итог("Сумма") = 860);
    Отбор = Новый Структура("Товар", "Книга");
    Найденные = Записи.НайтиСтроки(Отбор);
    Если Найденные.Количество() <> 1 Тогда
        ВызватьИсключение "В собственных исходных строках должна быть одна Книга";
    КонецЕсли;
    Книга = Найденные[0];
    ПоМассиву = Записи.Выгрузить(Найденные, "Товар,Количество,Сумма");
    ПоСтруктуре = Записи.Выгрузить(Отбор, "Товар,Количество,Сумма");
    Сообщить(ПоМассиву.Количество() = 1);
    Сообщить(ПоСтруктуре.Количество() = 1);
    Сообщить(ПоМассиву.Получить(0).Сумма = 750);
    Сообщить(ПоСтруктуре.Колонки.Количество() = 3);
    Книга.Количество = 4;
    Книга.Сумма = 1000;
    Сообщить(Найденные[0].Количество = 4);
    Сообщить(Найденные[0].Сумма = 1000);
    Сообщить(ПоМассиву.Получить(0).Количество = 3);
    Сообщить(ПоСтруктуре.Получить(0).Сумма = 750);
    Сообщить(Записи.Количество() = 3);
    Сообщить(Записи.Итог("Сумма") = 1110);
    Сообщить(ПоМассиву.Итог("Сумма") = 750);
    Сообщить(ПоСтруктуре.Итог("Сумма") = 750);
    Таблица = ЭтаФорма.Элементы.Добавить("ТаблицаУчебныхЗаписей", Тип("ТаблицаФормы"));
    Таблица.ПутьКДанным = "УчебныеЗаписи";
    Таблица.Заголовок = "Только собственные строки в памяти — регистр не записывается";
    Таблица.ТолькоПросмотр = Истина;
    Таблица.АвтоВводНезаполненного = Ложь;
    Таблица.АвтоВводНовойСтроки = Ложь;
    Для Каждого ИмяКолонки Из СтрРазделить("Номер,Товар,Количество,Сумма", ",") Цикл
        Поле = ЭтаФорма.Элементы.Добавить("УчебноеПоле" + ИмяКолонки, Тип("ПолеФормы"), Таблица);
        Поле.Вид = ВидПоляФормы.ПолеВвода;
        Поле.ПутьКДанным = "УчебныеЗаписи." + ИмяКолонки;
        Поле.Заголовок = ИмяКолонки;
    КонецЦикла;
КонецПроцедуры

Разбор по шагам

  1. Найти одну Книгу по структуре Товар=Книга, проверить количество до обращения к индексу 0.

  2. Выгрузить выбранные строки двумя способами: массивом строк и структурой отбора. Во втором аргументе указать одинаковые три колонки.

  3. Изменить только собственную Книгу в модели на количество 4 и сумму 1000. Найденные содержит живую ссылку и видит новые значения.

  4. Обе выгруженные таблицы остаются снимками с количеством 3 и суммой 750. Остальные две строки остаются в модели; отбор не удаляет их.

  5. Итог модели теперь 1000+50+60=1110. Никакой автоматической формулы суммы нет — оба значения изменяются явно.

Как проверить результат

  1. Все булевы сообщения Истина. На форме Книга 4/1000, Ручка 1/50 и Коробка 2/60.

  2. Снимки содержат только одну Книгу 3/750 и три колонки. Их итог 750, итог модели 1110.

Ожидаемый результат

Наглядно разобраны живые строки, независимые выгрузки и два родственных, но разных контракта.

На что обратить внимание

  1. Выгрузить доступен только на сервере; не переносите вызов в тонкий клиентский обработчик.

  2. НайтиСтроки возвращает ссылки, а не резервную копию. Для независимого снимка нужна выгрузка.

  3. Структура отбора этой операции не равна отбору записи регистра и не меняет SQL-запросы.

  4. Отбор не сортирует результат, а набор имён колонок не является произвольным выражением запроса.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Очистить свою модель и восстановить её из снимка без записи базы

Сначала сохраняем ТаблицуЗначений в памяти, очищаем только учебные данные формы, затем загружаем снимок обратно по именам колонок.

Где и как запускать

Полный модуль управляемой формы своей внешней обработки, ПриСозданииНаСервере.

Подготовка

  1. Используйте отдельную свою конфигурацию УчебнаяКонфигурацияСинтаксиса. В Конфигураторе создайте независимый непериодический регистр сведений УчебныеСтроки. Не используйте существующий рабочий регистр.

  2. Добавьте измерения Номер типа Число (10, 0) и Товар типа Строка (64). Добавьте ресурсы Количество типа Число (10, 0), Сумма типа Число (12, 2). Обновите только свою учебную конфигурацию базы.

  3. Создайте собственную внешнюю обработку с пустой управляемой основной формой. Реквизит УчебныеЗаписи и таблицу вручную не добавляйте: их создаёт код.

  4. Вставьте весь модуль выбранного урока. В свойствах формы назначьте событию ПриСозданииНаСервере одноимённую процедуру. Сохраните EPF и откройте её в своей учебной базе.

  5. Набор создаётся пустым и заполняется только в памяти. В коде нет Прочитать, Записать, транзакций, привилегированного режима, запросов, файлов или сети. Таблица на форме только для просмотра.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Реквизиты = Новый Массив;
    Реквизиты.Добавить(Новый РеквизитФормы("УчебныеЗаписи",
        Новый ОписаниеТипов("РегистрСведенийНаборЗаписей.УчебныеСтроки")));
    ЭтаФорма.ИзменитьРеквизиты(Реквизиты);
    Набор = РегистрыСведений.УчебныеСтроки.СоздатьНаборЗаписей();
    Для Каждого ИсходнаяСтрока Из СтрРазделить("1|Книга|3|750;2|Ручка|1|50;3|Коробка|2|60", ";") Цикл
        Поля = СтрРазделить(ИсходнаяСтрока, "|");
        Запись = Набор.Добавить();
        Запись.Номер = Число(Поля[0]);
        Запись.Товар = Поля[1];
        Запись.Количество = Число(Поля[2]);
        Запись.Сумма = Число(Поля[3]);
    КонецЦикла;
    ЭтаФорма.ЗначениеВРеквизитФормы(Набор, "УчебныеЗаписи");
    Записи = ЭтаФорма.УчебныеЗаписи;
    Если ТипЗнч(Записи) <> Тип("ДанныеФормыСтруктураСКоллекцией") Тогда
        ВызватьИсключение "Ожидалась модель набора записей, а не обычная таблица формы";
    КонецЕсли;
    Сообщить(Записи.Количество() = 3);
    Сообщить(Записи.Итог("Сумма") = 860);
    Снимок = Записи.Выгрузить();
    Сообщить(Снимок.Количество() = 3);
    Сообщить(Снимок.Итог("Сумма") = 860);
    Записи.Очистить();
    Сообщить(Записи.Количество() = 0);
    Сообщить(Снимок.Количество() = 3);
    Снимок.Сортировать("Сумма Убыв,Номер Возр");
    Записи.Загрузить(Снимок);
    Сообщить(Записи.Количество() = 3);
    Сообщить(Записи.Итог("Количество") = 6);
    Сообщить(Записи.Итог("Сумма") = 860);
    Сообщить(Записи.Получить(0).Товар = "Книга");
    Сообщить(Записи.Получить(1).Товар = "Коробка");
    Сообщить(Записи.Получить(2).Товар = "Ручка");
    Сообщить(Снимок.Итог("Сумма") = 860);
    Таблица = ЭтаФорма.Элементы.Добавить("ТаблицаУчебныхЗаписей", Тип("ТаблицаФормы"));
    Таблица.ПутьКДанным = "УчебныеЗаписи";
    Таблица.Заголовок = "Только собственные строки в памяти — регистр не записывается";
    Таблица.ТолькоПросмотр = Истина;
    Таблица.АвтоВводНезаполненного = Ложь;
    Таблица.АвтоВводНовойСтроки = Ложь;
    Для Каждого ИмяКолонки Из СтрРазделить("Номер,Товар,Количество,Сумма", ",") Цикл
        Поле = ЭтаФорма.Элементы.Добавить("УчебноеПоле" + ИмяКолонки, Тип("ПолеФормы"), Таблица);
        Поле.Вид = ВидПоляФормы.ПолеВвода;
        Поле.ПутьКДанным = "УчебныеЗаписи." + ИмяКолонки;
        Поле.Заголовок = ИмяКолонки;
    КонецЦикла;
КонецПроцедуры

Разбор по шагам

  1. Выгрузить все колонки и строки перед очисткой. Снимок — отдельная таблица на сервере, не файл резервного копирования.

  2. Очистить только модель своего набора: число строк становится 0, снимок по-прежнему содержит три строки.

  3. Отсортировать независимый снимок по сумме по убыванию и загрузить его в ту же модель. Колонки совмещаются по именам.

  4. Проверить восстановленные количество 6 и сумму 860. Получить три строки в ожидаемом порядке 750, 60, 50.

  5. Набор не преобразуется обратно для записи. Текущее содержимое реального регистра не читается и не меняется.

Как проверить результат

  1. Все булевы сообщения Истина. На форме Книга 750, Коробка 60, Ручка 50.

  2. Восстановлены значения и порядок собственных строк; сохранение прежних идентификаторов строк этим уроком не обещается.

Ожидаемый результат

Получен полный обратимый в памяти опыт очистки и загрузки модели набора.

На что обратить внимание

  1. Очистить модель и Записать пустой набор — совершенно разные действия. Второго вызова в уроке нет.

  2. Загрузить только серверный метод. Снимок должен иметь колонки и типы, совместимые с собственной схемой.

  3. Не выгружайте живую базу и не переносите сюда рабочий набор с последующим Записать: это уже другой рискованный процесс.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.