Обойти все записи как элементы коллекции этотобъект
Перейти к содержимому

Обойти все записи как элементы коллекции этотобъект

  • автор:

Обойти все записи как элементы коллекции этотобъект

Нужно передать ТаблицуЗначений с сервера на клиент для записи в Excel. Для этого в обработке сделал табличную часть.
В Управляемой форме 8.3 Пытаюсь обратиться к табличной части обработки «ЭтотОбъект.ТзСправ» где — «ТзСправ» — моя табличная часть. В отладке пишет что поле объекта не обнаружено.

Ок, посмотрел путь. Оказалось «Объект.ТЗСправ» — тип данные формы коллекция пытаюсь сделать «Объект.ТЗСправ = РезультатЗапроса.Выгрузить();» Пишет что «Нельзя изменять поле, содержащее объекты данных формы»
Ненавижу управляемые формы

(1) Да, подскажите, пожалуйста, что с этим делать?

Коллекции значений в 1С

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

В материале освещены сразу два вопроса из собеседования программиста 1С:

  1. Чем отличается структура от соответствия?
  2. Можно ли сделать запрос по таблице значений?

Разработчику во встроенном языке доступны следующие объекты, описывающие коллекции:

Содержание скрыть

Массив

Объект описывает коллекцию значений массива. У каждого элемента есть индекс. В 1С можно создавать многомерные массивы, например так:

Массив1 = Новый Массив(10,2,4) 

В массиве можно искать элементы методом Найти(), но поскольку у массива нет индексов данный поиск выполняется не быстро. Метода сортировки массива разработчики 1С не добавили. Возможно, это сделано не просто так, т.к. сортировать можно другие коллекции

Массивы используются для передачи параметров в запрос, для выгрузки колонки таблицы значений, могут служить источником для списка значений.

Фиксированный массив

Тот же массив, но его элементы нельзя изменить, т.е. у него есть только методы Получить(), Найти(), ВГраница() и Количество(). Создается на основе обычного массива.

Данный объект как правило используется в свойствах интерфейсных объектов (элементов управления)

Список значений

Список значений можно представить в качестве следующей таблицы значений:

Список = Новый ТаблицаЗначений; Список.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево")); Список.Колонки.Добавить("Значение"); Список.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Список.Колонки.Добавить("Картинка", Новый ОписаниеТипов("Картинка")); 

Как видно из структуры объекта, в поле «Значение» может быть любой объект.

Данный объект, в отличие от массива, уже содержит методы сортировки как по полю Значение, так и по полю Представление. Список значений можно заполнить элементами массива, используя метод ЗагрузитьЗначения().

Списки используются для передачи параметров в запрос, в качестве объекта сравнения в СКД и построителе, а также в отборах в интерфейсе.

Данный объект может быть отображен в интерфейсе, кроме того он имеет методы позволяющие показать диалог установки отметок в списке, диалог выбора значения из списка.

Структура

Структура представляет собой коллекцию пар КлючИЗначение. При этом ключ может быть только строковым и должен удовлетворять требованиям, предъявляемым к именованию переменных встроенного языка, т.е. ключом не может выступать строка «123ключ». К значениям структуры можно обращаться как к свойствам объекта. При этом ключ используется как имя свойства.

Пары Ключ-значение можно обойти циклом Для каждого … Из … Цикл, проверить существует ли свойство(ключ) структуры можно методом Свойство().

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

Соответствие

Соответствие как и структура представляет собой коллекцию пар КлючИЗначение. При этом, у соответствия в качестве ключа может выступать любое значение! Рекомендуется, чтобы в качестве ключа выступало значение примитивного типа или другого типа, значение которого может только присваиваться, но не может менять свое содержимое. Еще одной особенность соответствия является то, что это индексированная коллекция, т.е. поиск значения по ключу осуществляется очень быстро.

Пары Ключ-значение можно обойти циклом Для каждого … Из … Цикл.

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

Таблица значений

Таблица значений предназначена для хранения значений в табличном виде. Все основные операции с таблицей производятся именно через этот объект. Он позволяет манипулировать строками таблицы значений и предоставляет доступ к коллекции колонок. Колонки могут быть различных типов (в том числе множественных).

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

Можно выполнить запрос по таблице значений. Для этого необходимо чтобы все колонки таблицы значений были строго типизированы, т.е. вот такую таблицу нельзя отправить в запрос:

Таблица = Новый ТаблицаЗначений; Таблица.Колонки.Добавить("Значение");/pre> p>А такую можно:/p> pre>Таблица = Новый ТаблицаЗначений; Таблица.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево")); Таблица.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); 

Причем, в запросе необходимо сразу поместить выбранную таблицу во временную, а после этого выполнять действия с ней.

В управляемом приложении данный объект доступен только на сервере! Другими словами, попытка создать на клиенте равно как и передать таблицу значений с сервера на клиент приведет к ошибке.

Обойти все записи как элементы коллекции этотобъект

Описание:

Список значений — это не сохраняемый в базе данных объект, который позволяет строить для решения интерфейсных задач динамические наборы значений и манипулировать ими (добавлять, редактировать, удалять элементы, сортировать). Он может быть наполнен значениями любого типа, т.е. в одном списке типы хранимых значений могут быть разными. Одним из примеров использования данного объекта может служить организация выбора конкретного документа из списка возможных документов, сформированного по сложному алгоритму.

Элементы коллекции: ЭлементСпискаЗначений

Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.

Возможно обращение к элементу коллекции посредством оператора [. ]. В качестве аргумента передается индекс элемента (нумерация с 0).

Свойства:

ДоступныеЗначения Применяется в случаях, когда требуется ограничить возможность задания значений для элементов списка некоторым подмножеством значений допустимого типа (если для списка установлено описание типа). Неопределено — ограничения отсутствуют. Установка этого свойства влияет на работу диалога редактирования списка значений, элементов управления «Таблица» и «Поле ввода», связанных со списком значений, а также на программное добавление-вставку нового элемента списка значений и установку значений элементам списков.
ТипЗначения Определяет тип (см. ОписаниеТипов) для значений, которые могут храниться в элементах данного списка значений.

Методы:

Вставить (Индекс, Значение, Представление, Пометка, Картинка) Вставляет новый элемент в список значений на позицию с указанным индексом.
ВыбратьЭлемент (Заголовок, Элемент) Вызывает окно для интерактивного выбора одного из элементов, входящих в список значений. Элемент — элемент, на который следует изначально спозиционировать список значений при интерактивном выборе. Если значением параметра не является элемент списка значений, входящий в данный список, позиционирования не произойдет.
ВыгрузитьЗначения () Создает массив и копирует в него значения элементов списка значений.
Добавить (Значение, Представление, Пометка, Картинка) Добавляет новый элемент в конец списка значений.
ЗагрузитьЗначения (МассивЗначений) Загружает список значений значениями из переданного массива. При этом все прежние элементы списка удаляются.
ЗаполнитьПометки (Пометка) Устанавливает пометку у всех элементов списка значений.
Индекс (Элемент) Получает индекс элемента в списке значений. Если не найдено, то возвращается -1.
Количество () Получает количество элементов списка значений.
НайтиПоЗначению (ИскомоеЗначение) Осуществляет поиск значения элемента списка значений. Если ни один элемент не хранит значения, равного искомому, то возвращается значение Неопределено.
НайтиПоИдентификатору (Идентификатор) Получает элемент списка значений по идентификатору. Если элемент не найден, то возвращается Неопределено.
ОтметитьЭлементы (Заголовок) Устанавливает или снимает (интерактивно) пометки у элементов списка значений. Возвращает Истина, если в диалоге нажата кнопка «ОК», Ложь — в противном случае.
Очистить () Очищает список значений, удаляя из него все элементы.
ПоказатьВыборЭлемента ( ОписаниеОповещенияОЗакрытии, Заголовок, Элемент) Вызывает окно для интерактивного выбора одного из элементов, входящих в список значений.
ПоказатьОтметкуЭлементов ( ОписаниеОповещенияОЗакрытии, Заголовок) Предназначен для интерактивной установки состояний пометок у элементов списка значений.
Получить (Индекс) Получает значение по индексу. Работает аналогично оператору [].
Сдвинуть (Элемент, Смещение) Сдвигает элемент списка значений на заданное количество позиций вперед или назад.
Скопировать () Создает копию списка значений.
СортироватьПоЗначению (Направление) Сортирует список значений в порядке возрастания или убывания хранимых элементами значений. См. пример ниже.
СортироватьПоПредставлению ( Направление) Сортирует список значений по возрастанию или по убыванию в алфавитном порядке представлений входящих в состав списка значений элементов. См. пример ниже.
Удалить (Элемент) Удаляет элемент из списка значений, где Элемент — индекс удаляемого элемента, либо сам элемент.

Конструкторы:

Новый СписокЗначений

Оглавление (нажмите, чтобы раскрыть)

  • Как создать список значений
  • Как добавить элемент в список значений
  • Как вставить элемент в список значений
  • Как обойти элементы списка значений
  • Как очистить список значений
  • Как узнать количество элементов списка значений, а также получить элемент списка по его индексу
  • Как найти элемент списка по его значению
  • Как узнать индекс элемента в списке
  • Как отсортировать список по его значениям
  • Как удалить элемент из списка значений
  • Как сдвинуть элемент списка значений
  • Как сделать копию списка
  • Как выгрузить значения списка в массив
  • Как загрузить значения списка из массива
  • Как сделать немодальный выбор значения из списка значений
  • Как сделать немодальную отметку значений из списка значений
  • Как сделать модальный выбор значения из списка
  • Как сделать модальную отметку значений из списка значений
  • Скачать и выполнить эти примеры на компьютере
&НаКлиенте Процедура ВыполнитьКод(Команда) /// Как создать список значений в 1с 8.3, 8.2 Список = Новый СписокЗначений; /// Как добавить элемент в список значений в 1с 8.3, 8.2 // параметры метода добавить: // - значение // - представление // - отметка (необ.) // - картинка (необ.) Список.Добавить( 1980, // значение элемента "Год рождения Васи" // представление ); Список.Добавить(1985, "Год рождения Юли"); // значения могут быть разных типов Список.Добавить("Полина", "Имя ребёнка"); /// Как вставить элемент в список значений в 1с 8.3, 8.2 // вставляем в позицию №2 (элементы нумеруются с 0) // элемент со значением 2010 и представлением // "Год рождения их совместной дочки" Список.Вставить(2, 2010, "Год рождения их совместной дочки"); /// Как обойти элементы списка значений в 1с 8.3, 8.2 Для Каждого Элемент Из Список Цикл Сообщить( Элемент.Представление + ": " + Строка(Элемент.Значение) ); КонецЦикла; /// Как очистить список значений в 1с 8.3, 8.2 Список.Очистить(); Список.Добавить("Понедельник"); Список.Добавить("Вторник"); Список.Добавить("Среда"); /// Как узнать количество элементов списка значений, а также /// получить элемент списка по его индексу в 1с 8.3, 8.2 // нумерация с нуля Для Индекс = 0 По Список.Количество() - 1 Цикл Сообщить(Список[Индекс]); КонецЦикла; /// Как найти элемент списка по его значению в 1с 8.3, 8.2 ЗначВторник = Список.НайтиПоЗначению("Вторник"); /// Как узнать индекс элемента в списке в 1с 8.3, 8.2 Сообщить(Список.Индекс(ЗначВторник)); // 1, так как нумерация с нуля /// Как отсортировать список по его значениям в 1с 8.3, 8.2 // было: понедельник, вторник, среда Список.СортироватьПоЗначению(НаправлениеСортировки.Убыв); // стало: среда, понедельник, вторник /// Как удалить элемент из списка значений в 1с 8.3, 8.2 // удаляем первый элемент // параметр: элемент списка // или индекс элемента // можно так Список.Удалить(Список[0]); // или так // Список.Удалить(0); /// Как сдвинуть элемент списка значений в 1с 8.3, 8.2 // сдвигаем нулевой элемент на одну позицию вперёд // было: понедельник вторник Список.Сдвинуть(0, 1); // стало: вторник понедельник /// Как сделать копию списка в 1с 8 КопияСписка = Список.Скопировать(); Цвета = Новый СписокЗначений; Цвета.Добавить("Красный"); Цвета.Добавить("Зелёный"); Цвета.Добавить("Синий"); /// Как выгрузить значения списка в массив в 1с 8.3, 8.2 МассивЦветов = Цвета.ВыгрузитьЗначения(); /// Как загрузить значения списка из массива в 1с 8.3, 8.2 Цвета.ЗагрузитьЗначения(МассивЦветов); КонецПроцедуры /// Как сделать немодальный выбор значения из списка /// значений в 1с 8.3, 8.2 &НаКлиенте Процедура КакСделатьНемодальныйВыборЗначения(Команда) Цвета = Новый СписокЗначений; Цвета.Добавить("Красный"); Цвета.Добавить("Зелёный"); Цвета.Добавить("Синий"); // процедура ПослеВыбораЭлемента определена чуть ниже ОповещениеПослеВыбораЭлемента = Новый ОписаниеОповещения( "ПослеВыбораЭлемента", ЭтотОбъект ); Цвета.ПоказатьВыборЭлемента( ОповещениеПослеВыбораЭлемента, "Выберите любимый цвет" ); КонецПроцедуры &НаКлиенте Процедура ПослеВыбораЭлемента(Элемент, Параметры) Экспорт Если Элемент <> Неопределено Тогда Сообщить(Элемент.Значение); КонецЕсли; КонецПроцедуры /// Как сделать немодальную отметку значений из списка /// значений в 1с 8.3, 8.2 &НаКлиенте Процедура КакСделатьНемодальнуюОтметкуЗначений(Команда) Цвета = Новый СписокЗначений; Цвета.Добавить("Красный"); Цвета.Добавить("Зелёный"); Цвета.Добавить("Синий"); // процедура ПослеОтметкиЭлементов определена чуть ниже ОповещениеПослеОтметкиЭлементов = Новый ОписаниеОповещения( "ПослеОтметкиЭлементов", ЭтотОбъект ); Цвета.ПоказатьОтметкуЭлементов( ОповещениеПослеОтметкиЭлементов, "Выберите любимые цвета" ); // а вот так можно разом установить все отметки // списка в определенное значение Цвета.ЗаполнитьПометки(Истина); КонецПроцедуры &НаКлиенте Процедура ПослеОтметкиЭлементов(Элементы, Параметры) Экспорт Если Элементы <> Неопределено Тогда Для Каждого Цвет Из Элементы Цикл Если Цвет.Пометка Тогда Сообщить(Цвет.Значение); КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры /// Как сделать модальный выбор значения из списка в 1с 8.3, 8.2 &НаКлиенте Процедура КакСделатьМодальныйВыборЗначения(Команда) Цвета = Новый СписокЗначений; Цвета.Добавить("Красный"); Цвета.Добавить("Зелёный"); Цвета.Добавить("Синий"); ВыбЦвет = Цвета.ВыбратьЭлемент("Выберите любимый цвет"); Если ВыбЦвет <> Неопределено Тогда Сообщить(ВыбЦвет.Значение); КонецЕсли; КонецПроцедуры /// Как сделать модальную отметку значений из списка /// значений в 1с 8.3, 8.2 &НаКлиенте Процедура КакСделатьМодальнуюОтметкуЗначений(Команда) Цвета = Новый СписокЗначений; Цвета.Добавить("Красный"); Цвета.Добавить("Зелёный"); Цвета.Добавить("Синий"); Если Цвета.ОтметитьЭлементы("Выберите любимые цвета") Тогда Для Каждого Цвет Из Цвета Цикл Если Цвет.Пометка Тогда Сообщить(Цвет.Значение); КонецЕсли; КонецЦикла; КонецЕсли; // а вот так можно разом установить все отметки // списка в определенное значение Цвета.ЗаполнитьПометки(Истина); КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере

Список значений в языке 1С 8.3, 8.2 (в примерах)

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Чтение записей непериодического независимого регистра сведений

Распечатать

Сначала создаем переменную НаборЗаписей, в которую считываем все записи регистра. Считанные записи можно выгрузить в таблицу значений или перебрать в цикле перебора коллекции. Внутри цикла переменная Запись предоставит доступ к самой записи. Например, для считывания содержимого полей записи.
Кроме того, эти же данные можно получить посредством запроса со следующим текстом:
Код 1C v 8.х

 ВЫБРАТЬ 
*
ИЗ
РегистрыСведений.СобственныеКонтрагенты

В дальнейшем результат выполнения запроса можно также выбрать или выгрузить на таблицу значений
Разместил: E_Migachev Версии: | 8.x | 8.2 УП | Дата: 14.09.2010 Прочитано: 28956

Распечатать

Возможно, вас также заинтересует

Похожие FAQ

Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить — сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1C: Enterprise Development Tools 52
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools — это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=» D:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *