Запрос в дерево значений управляемая форма

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

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

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

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

Для разработки данного примера будем использовать типовую конфигурацию Бухгалтерия предприятия, редакция 3.0 (3.0.135.22)

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

Нам потребуется новая внешняя обработка. Создаем ее и поехали!

Размещаем дерево значений на управляемой форме

Идем в реквизиты формы и создаем новый элемент типа «Дерево значений». Сам реквизит так и назовем «Дерево».

Внутри дерева нам понадобятся следующие колонки:

  • Флаг – Тип: булево – с помощью него пользователь будет отмечать нужные элементы
  • Контрагент – Тип: СправочникСсылка.Контрагенты
  • Документ – Тип: ДокументСсылка.СчетНаОплатуПокупателю

Превратим дерево в таблицу – для этого перетащим его мышкой на форму. Под словом «превратим» надо понимать, что после помещения на форму дерево предстает перед нами в форме таблицы, хранящей в себе данные типа «ДеревоЗначений».

В тоже время тип реквизита «Дерева» может быть также «ТаблицаЗначений» — это полезно просто понимать, но для нашей задачи не нужно.

Для красоты сделаем в таблице следующее:

    Уберем из состава команд «Добавить», «Скопировать» и «Изменить». Чтобы пользователи не портили получаемые для обработки данные, эти действия должны быть заблокированы.

В итоге получим такой вид нашей таблицы:

Читайте также:  Денежное дерево при косметологии

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

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

Чтобы флаг отображался как флаг (галочка) нужно проверить, чтобы у соответствующей колонки свойство «Вид» имело значение «Поле флажка»

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

У таблицы есть свойство «Отображение», которое может принимать значения «Список», «Иерархический список», «Дерево». Распространенная ошибка заключается в установке этого свойства в значение «Дерево». Если при этом таблица хранит в себе реквизит типа «ТаблицаЗначений», — а не дерево! – то ожидать от нее поведения, характерного для дерева, такого как сворачивание-разворачивание группировок, не стоит. Как работает это свойство и чего от него стоит ожидать мы увидим далее. В нашем случае это свойство установлено правильно по умолчанию.

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

Получать будем, конечно же запросом. В запросе нам понадобятся те же самые поля, которые мы определили для нашего дерева, т.е. «Флаг», «Контрагент» и «Документ».

Но сначала создадим команду и вынесем ее на командную панель таблицы «Дерево». Команду назовем «Заполнить».

Также подготовим даты, необходимые нам для выборки счетов.

Теперь создадим процедуры на клиенте и сервере и привяжем клиентскую процедуру к команде «Заполнить».

Текст запроса будем размещать в серверной процедуре. Он будет таким:

| СчетНаОплатуПокупателю.Контрагент КАК Контрагент,

| СчетНаОплатуПокупателю.Ссылка КАК Документ

| Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю

| СчетНаОплатуПокупателю.Дата МЕЖДУ &ДатаНач И &ДатаКон

|ИТОГИ // Чтобы получилось дерево, в запросе обязательно должны быть итоги!

Обратите внимание! Чтобы на выходе из запроса у нас получилось дерево, нужно выполнить 2 обязательных условия:

  • Использовать директиву «ИТОГИ» в тексте запроса. Именно благодаря итогам формируется иерархия дерева. В нашем случае нужны итоги по полю «Контрагент», а в качестве суммируемого поля выступает «Флаг».
  • Чтобы выгрузка из результата запроса была сформирована с обходом типа «ПоГруппировкам». В нашем случае используется конструкция:

РезультатЗапроса = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); // Выгрузка в дерево значений!

Выгружаем данные из запроса в таблицу с иерархией в виде дерева

Нам осталось вывести данные из запроса на экран пользователю. Для этого передадим в запрос выбранные даты, выполним его и осуществим выгрузку результата на форму. Код будет таким:

Читайте также:  Каким деревом растут рыжики

Если ДатаОкончания = Дата(1, 1, 1, 0, 0, 0) Тогда

ДатаОкончания = Дата(3999, 12, 31); // бесконечно большая дата

РезультатЗапроса = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); // Выгрузка в дерево значений!

// Выгрузка результата запроса в дерево

Как вы заметили, формирование дерева на форме при помощи типовой функции БСП занимает всего 3 строки кода.

В первой строке мы получаем строки дерева верхнего уровня типа «ДанныеФормыКоллекцияЭлементовДерева». Второй строкой очищаем их. А третьей – заполняем типовой процедурой, встроенной в конфигурацию.

Разбирать саму процедуру я не буду – при желании можно сделать это самостоятельно, обратившись к модулю конфигурации «ОбщегоНазначения».

Теперь пора протетсить, что получилось. Для этого сохраним обработку и откроем ее в режиме предприятия. По кнопке «Заполнить» получаем такой результат:

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

Реализуем процедуры сворачивания и разворачивания дерева

Чтобы организовать свертку-раскрытие дерева добавим в команды формы соответствующие действия и вынесем их на командную панель таблицы в виде кнопок.

Для красоты на кнопках разместим картинки из стандартной

Теперь пропишем процедуры и привяжем их к командам.

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

// где «ИмяТаблицы» — реквизит формы типа «ТаблицаФормы», хранящий значений типа «ДеревоЗначений»

Процедура СвернутьДеревоНаФорме(ТаблицаФормы)

Если ТипЗнч(ТаблицаФормы) = Тип(«ТаблицаФормы») Тогда

Для каждого СтрокаДерева Из СтрокиДерева Цикл

Если ПодчиненныеСтроки.Количество() = 0 Тогда

КонецПроцедуры

//где «ИмяТаблицы» — реквизит формы типа «ТаблицаФормы», хранящий значений типа «ДеревоЗначений»

Процедура РазвернутьДеревоНаФорме(ТаблицаФормы)

Для каждого СтрокаПервогоУровня Из ДанныеФормыДерево.ПолучитьЭлементы() Цикл

КонецПроцедуры

Процедура СвернутьДерево(Команда)

КонецПроцедуры

Процедура РазвернутьДерево(Команда)

КонецПроцедуры

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

Конфигурирование, БСП, Универсальный код, Управляемые формы, ДеревоЗначений, Полезные процедуры и функции

Источник

Выгрузить результат запроса в Дерево Значений, Дерево Значений на форме

Распечатать

Распечатать

17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 6
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 — получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯче COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=» D:ВашаБаза1с77″ ; Пользователь= Cодержимое указанного ниже веб-сайта в этом приложении блокируется. Aboutsecurity_1cv8c.exe 1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э Посмотреть все результаты поиска похожих

Читайте также:  Чем удобрить дерево счастья

Еще в этой же категории

Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL()) 52
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 25
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 23
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 22
ПОДОБНО — Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы

Источник

Оцените статью