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

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

Итог по дереву

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

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

  • Всего ценных бумаг, из них
  • Обращающиеся на рынке ценных бумаг, из них
  • Акции
  • Облигации
  • Необращающиеся на рынке ценных бумаг, из них
    • Акции
    • Облигации
    • Векселя
    • Для решения данной задачи подготовим пустое дерево значений, которое будет повторять структуру отчета.

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

      На следующем шаге получим список ценных бумаг, составляющих портфель,определим для них оценочную стоимость и занесём информацию по каждому активу в соответствующий узел, подготовленного дерева. Таким образом мы заполним его (ДЗ) детальными записями, которые и являются расшифровкой показателей первого уровня группировки. Теперь необходимо получить итоги по всем узлам или уровням заполненной информационной структуры.Для этого нам понадобится вспомогательная рекурсивная функция #0000ff" >мИтогПоРесурсу, которая приводится ниже.

      Кроме этого нам потребуется еще одна вспомогательная функция #0000ff" >мРазбор . Ее назначение — прочитать входную строку, в которой перечислены имена колонок дерева значений, разделенные запятой и заполнить этими именами массив, который и является возвращаемым значением. Текст функции приводится ниже.

      Ну и наконец, главная функция для подсчета итогов на всех уровнях дерева значений.

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

      Читайте также:  Как расчертить лист в ворде на квадраты

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

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

      Программное создание дерева значений

      Как уже упоминалось выше, каждая строка имеет свойство Строки , которое содержит коллекцию дочерних строк. И сам объект ДеревоЗначений имеет свойство Строки , которое содержит коллекцию строк верхнего уровня.

      • Добавляет колонку в конец коллекции колонок дерева значений.
      • Возвращаемое значение: КолонкаДереваЗначений .
      • Добавляет строку в конец коллекции строк данного уровня дерева значений.
      • Возвращаемое значение: СтрокаДереваЗначений .

        Заполнить табличное поле на форме

        Визуальное представление дерева значений на форме обеспечивает элемент Таблица .

        Пример программного заполнения дерева значений для управляемых форм:

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

        Свернуть и развернуть строки дерева значений

        Свернуть и развернуть дочерние строки элемента дерева значений можно с помощью методов Свернуть() и Развернуть() .

      • Сворачивает узел в указанной строке дерева.
      • ИдектификаторСтроки — идентификатор строки таблицы.
      • Разворачивает узел в указанной строке дерева.
      • ИдектификаторСтроки — идентификатор строки таблицы.
      • СПодчиненными — определяет необходимость раскрытия подчиненных узлов.
      • Получает коллекцию элементов дерева верхнего уровня.
      • Возвращаемое значение: ДанныеФормыКоллекцияЭлементовДерева .
      • Получает коллекцию дочерних элементов.
      • Возвращаемое значение: ДанныеФормыКоллекцияЭлементовДерева .

      Для представления в форме объектов конфигурации (справочники, документы и т.п.) существуют специальные типы данных:

      • ДанныеФормыСтруктура — содержит набор свойств произвольного типа. Свойствами могут быть другие структуры, коллекции или структуры с коллекциями. Таким типом представляется, например, в форме СправочникОбъект .
      • ДанныеФормыКоллекция — это список типизированных значений, похожий на массив. Доступ к элементу коллекции осуществляется по индексу или по идентификатору. Доступ по идентификатору может отсутствовать в некоторых случаях. Это обусловлено типом прикладного объекта, который представлен этой коллекцией. Идентификатором может быть любое целое число. Таким типом представляется, например, в форме табличная часть.
      • ДанныеФормыСтруктураСКоллекцией — это объект, который представлен в виде структуры и коллекции одновременно. С ним можно обращаться как с любой из этих сущностей. Таким типом представляется, например, в форме набор записей.
      • ДанныеФормыДерево — объект предназначен для хранения иерархических данных.
      Читайте также:  Как настроить нвидиа инспектор под варфейс

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

      Удалить строку и очистить дерево значений

      Поиск в дереве значений

      Среди наиболее часто используемых методов стоит отметить метод Найти() коллекции строк дерева значений.

      • Значение (обязательный, тип Произвольный ). Искомое значение.
      • Колонки (необязательный, тип Строка ). Список имен колонок, в которых будет осуществляться поиск, разделенных запятыми. Если параметр не указан, поиск осуществляется по всем колонкам дерева. Значение по умолчанию — Пустая строка.
      • ВключатьПодчиненные (необязательный, тип Булево ). Определяет, будут ли участвовать в поиске строки подчиненных коллекций (если таковые имеются). Если Истина — строки подчиненных коллекций участвуют в поиске. Значение по умолчанию — Ложь .

      Метод осуществляет поиск значения в дереве в указанных колонках коллекции строк дерева значений. Возвращает строку (тип СтрокаДереваЗначений ), которая содержит искомое значение. Если значение не найдено, то возвращается значение Неопределено . Предназначен для поиска уникальных значений.

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

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

      Автоподсчёт итогов по колонке в табличной части 1С

      И так преступим, запускаем 1С в режиме конфигуратора. Далее переходим в созданный ранее документ. Открываем его и переходим на вкладку формы и открываем её.

      Читайте также:  Как разобрать мышь qumo dragon war

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

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

      Теперь на нужно чтобы в колонке Сумма подсчитывался итого. Для этого на вкладке Элементы ищем пункт с Название МатериалыСумма и кликаем на нем два раза. Справа появиться свойства поля в них ищем пункт
      ТекстПодвала и вписываем Итого. А в пункте ПутьКДаннымПОдвала кликаем на три точечки.

      В открывшемся окне нужно выбрать ИтогоСумма.

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

      Вот мы и сделали автоматический подсчет итогов по колонке. Таким образом можно подсчитать итого во всех колонках и в любых документах.

      Скриншоты, опубликованные в данной статье, являются цитатами и иллюстрациями программного продукта “1C:Предприятие”, авторское право на который принадлежит ЗАО 1С.

      Ссылка на основную публикацию
      Adblock detector