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

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

  • автор:

Name already in use

1c-homeworks / homework-4-4.md

  • Go to file T
  • Go to line L
  • Copy path
  • Copy permalink
  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

Задание к занятию «Регистры сведений»

Создать периодический регистр сведений «Цены» для хранения цен номенклатуры с историей.

Требования к результату

Выгрузка информационной базы (.dt) с конфигурацией из предыдущих заданий с новым регистром «Цены», который:

  • содержит измерение Номенклатура, ресурс Цена и реквизит Установил;
  • является периодическим с точностью до секунды;
  • скрыт из командного интерфейса.

В форме списка справочника «Номенклатура» должен находиться динамический список с ценами и соответствующая ему таблица. Список должен быть отобран по активному товару (услуге) и упорядочен по убыванию дат. При создании новых записей регистра Цены в реквизит Установил должен автоматически подставляться текущий сотрудник.

УФ — как обойти все элементы коллекции данных формы?

как програмно обойти все имеющиеся колонки колллекции?

не элементы формы, а именно колокнт ДанныхФормыКоллекция

Партнерская программа EFSOL Oblako

ДанныеФормыКоллекция (FormDataCollection)
Элементы коллекции:

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

ВыгрузитьКолонки (UnloadColumns)
Синтаксис:

Тип: Строка.
Список колонок для выгрузки в формате: «Колонка1, Колонка2. «. Если список не задан, то будут выгружены все колонки.
Возвращаемое значение:

Создает таблицу значений с заданным списком колонок.

Сервер, толстый клиент, внешнее соединение.
Примечание:

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

(3) опять не то — это объект
а надо реквизит формы — что бы были и колонки которые добавил в реквизит формы програмно

(4) для того что бы обойти колонки
в обном месте насоздавал колокно, теперь надо все эти колокни получить и обработать

(6) это элементы формы — их может и не быть

ну например рассчет суммы/разницы/максимума от двух добавленых колонок

Для каждого ТекРеквизит Из РеквизитыФормы Цикл
.
КонецЦикла;

УправляемаяФорма (ManagedForm)
ПолучитьРеквизиты (GetAttributes)
Синтаксис:

Тип: Строка.
Указывает путь к родительскому реквизиту. Если параметр опущен или указана пустая строка, возвращаются реквизиты верхнего уровня.
Возвращаемое значение:

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

Войдите как ученик, чтобы получить доступ к материалам школы

Внутренний язык программирования 1С 8.3 для начинающих программистов: циклы в 1С часть 3

Автор уроков и преподаватель школы: Владимир Милькин

Друзья, вы помните урок, в котором мы рассматривали цикл Для? Тогда я намеренно не стал рассказывать об особой форме этого цикла. Она используется только для обхода коллекций, например, массивов и списков значений.

Теперь, когда мы уже знаем что такое коллекция и для чего она нужна — время пришло.

Цикл Для Каждого

Конструкция цикла выглядит вот так:

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

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

Предположим, что у нас есть такой массив:

И мы хотим написать цикл, который выводит элементы этого массива от первого до последнего.

Сначала давайте напишем такой обход при помощи обычного цикла Для:

Да, этот код хорош, но в нём легко допустить ошибку, например:

  • мы можем по ошибке указать в качестве начального значения цикла не 0, а 1
  • мы можем забыть отнять 1 от количества для верного определения индекса последнего элемента

И это будет очень коварная ошибка, так как программист (из-за замыливания глаза) сможет долго не замечать и не находить её.

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

Вот как будет выглядеть обход нашего массива при помощи цикла Для Каждого:

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

Дерево значений 1С

Дерево значений 1С – это универсальная коллекция значений, в которой данные можно расположить в иерархическом порядке в виде дерева. По сути, дерево значений в 1С 8.3 — это таблица значений, где у строк могут быть подчиненные строки. Одна строка дерева значений может иметь несколько подчиненных строк, но в тоже время она может иметь только одну строку, которой подчинена, строку-родителя, или не иметь родителя вообще. Строка без родителя – это строка верхнего уровня, или первая строка.

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

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

То есть, такой код, при выполнении на тонком клиенте, работать не будет:

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

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

Само по себе дерево значений не имеет смысла, для того, чтобы можно было с ним работать у этого дерева нужно создать колонки. Для этого, нужно использовать свойство дерева значений Колонки, которое имеет тип КоллекцияКолонокДереваЗначений, у объекта данного типа имеется ряд методов, с которыми вы можете познакомиться в синтакс-помощнике, а нас конкретно интересует метод Добавить. Этот метод добавляет новые колонки в дерево значений. Он имеет следующий синтаксис:

Где Имя – это имя колонки (уникальное в рамках этого дерева); Тип – в этом параметре описывают возможные типы колонки, делается при помощи объекта ОписаниеТипов; Заголовок – название колонки и Ширина — ширина колонки в символах.

Например, добавим нашему дереву регионов три колонки:

Мы добавили три колонки, две из которых имеют тип строка, а одна имеет тип число.

Строки дерева значений 1С

Строки дерева значений 1С бывают двух видов. Это строки верхнего (или первого) уровня. Те строки, у которых нет ни каких родителей, и которые ни кому не подчинены. И подчиненные строки – это строки более низких уровней. У подчиненных строк заполнено свойство Родитель, в котором указывается родительская строка, т.е. та строка, которой подчинена эта текущая строка (у строк верхнего уровня свойство Родитель пустое). Для того, чтобы создать строку верхнего (или первого) уровня, нужно воспользоваться свойством Строки дерева значений. Это свойство имеет тип КоллекцияСтрокДереваЗначений. И у объекта этого типа есть метод Добавить, который создает новую строку верхнего (первого) уровня. Причем, этот метод является функцией, которая возвращает строку дерева значений. А у этой строки мы, как к свойствам, можем обращаться к колонкам дерева значений.

В этом коде добавлено две строки верхнего уровня дерева регионов.

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

Например, так мы создаем две строки второго уровня:

А так, мы создаем строки третьего уровня (две для Удмуртии и одну для Татарстана):

Обход дерева значений 1С

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

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

Если нам нужно обойти строку следующего уровня, то в этот раз следует уже циклом Для каждого Цикл обходить свойство Строки текущей строки дерева значений.

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

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

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

Дерево значений 1С

Ну и для того, чтобы наш список выглядел более наглядно, будем при выводе строк второго и третьего уровня добавлять тире. Для этого создадим функцию, которая добавляет тире, количество которых зависит от уровня вложенности. А узнать уровень вложенности строки можно при помощи метода строки дерева значений Уровень(), который возвращает уровень вложенности строки начиная с 0.

Дерево значений 1С

Дерево значений 1С на управляемой форме

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

Дерево значений на управляемой форме 1С

Само по себе такое дерево бессмысленно. Нужно добавить ему колонки. Если мы хотим дереву значений на форме добавить колонку, то необходимо сначала выделить дерево на форме, а потом нажать на кнопку «Добавить колонку реквизита».

Дерево значений на управляемой форме 1С

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

Дерево значений на управляемой форме 1С

В моей учебной конфигурации имеется справочник Регионы, который является иерархическим (иерархия элементов).

Иерархический справочник на управляемой форме 1С

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

Заполнить это дерево можно несколькими способами. В первом способе, мы в рекурсивной процедуре обходим выборку из запроса, и если у этой выборки имеется выборка вложенных записей, то вызываем эту же процедуру.

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

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

Дерево значений на управляемой форме 1С

Также с деревом значений на форме можно работать напрямую. Дерево значений на управляемой форме конвертируется в объект ДанныеФормыДерево, который моделирует работу дерева на управляемой форме. Для того, чтобы обратиться к элементам верхнего уровня этого объекта нам необходимо воспользоваться методом ПолучитьЭлементы(), который возвращает объект имеющий тип ДанныеФормыКоллекцияЭлементовДерева, этот тип является коллекцией, и как любую коллекцию его можно обойти циклом и получить элемент этой коллекции, а уже у элемента этой коллекции посредством метода ПолучитьЭлементы() можно получить подчиненные ему строки и т.д.

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

Дерево значений на управляемой форме 1С

Статьи о других универсальных коллекциях значений в 1С

Более подробно о работе с другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

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

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