Расширение управляемой формы для отчета. Несколько действий с параметром "Отбор".

03.10.12

Разработка - Работа с интерфейсом

Статья о том как открывать формы отчетов с параметром "Отбор" (платформа, на которой проводилось тестирование- 8.2.16).

Скачать файлы

Наименование Файл Версия Размер
Выгрузка итоговой ИБ
.dt 147,64Kb
45
.dt 147,64Kb 45 Скачать

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

Если мы откроем синтакс-помощник и введём на закладке "Индекс" слово "УправляемаяФорма", то увидим в разделе её свойств свойство "Параметры". Если перейти по гиперссылке к описанию свойства получим следующий текст:

УправляемаяФорма (ManagedForm)
Параметры (Parameters)

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

Только чтение.

Описание:

Тип: ДанныеФормыСтруктура.
Содержит коллекцию параметров формы.

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

Тонкий клиент, веб-клиент, сервер, толстый клиент.

Таким образом у всех управляемых форм есть параметры. Но мы рассмотрим наиболее частое их применение (с моей точки зрения) - это открытие отчетов. Для тестирования была взята каркасная конфигурация для подготовки к экзамену "Специалист" по платформе(оф. сайт 1с: http://www.1c.ru/rus/partners/training/questions.htm).

Конструктором движений сформируем движения по регистру "ОстаткиНоменклатуры" для документа "ПриходнаяНакладная", создадим обычный отчет с использованием данного регистра накопления, назовём его "ОстаткиНоменклатуры". В пользовательском режиме отчеты по умолчанию помещаются в панель "Сервис", поэтому от регистра накопления мы его отличим всегда. В конструкторе запроса будем использовать виртуальную таблицу "ОстаткиНоменклатуры.Остатки" и выберем все 2 поля данного регистра: //infostart.ru/upload/iblock/9f8/2.JPG. На закладке условия наложем фильтр по ссылке на текущий документ.

Не забудем в командном интерфейсе рабочего стола конфигурации указать видимость для регистра "Остатки номенклатуры".

В пользовательском режиме из номенклатуры мы будем использовать "Холодильники", введём 2 документа "приходная накладная"//infostart.ru/upload/iblock/c63/3.JPG

Теперь создаём форму для документа "приходная накладная" и в контейнеры "Командный интерфес" в разделе "Перейти" укажем  галочку "видимость" у регистра "остатки номенклатуры".

Далее создадим команду и назовём её "ОткрытьОтчет" //infostart.ru/upload/iblock/5d9/1.JPG и установим действие для данной команды.

После этого сгенерируем событие "УстановитьДействие" команды и получим в модуле формы процедуру:

&НаКлиенте
Процедура ОткрытьОтчет(Команда)

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

Нам нужно обратиться к процедуре, которая открывает форму отчета. Ищем по индексу в синтакс-помощнике данную процедуру (на самом деле это функция) и находим следующее //infostart.ru/upload/iblock/855/4.JPG. Про первый параметр - понятно, мы обращаемся к имени формы -обязательный параметр, а вот нас интересует параметр №2 "Параметры".

В клиентской процедуре мы попробуем открыть данный отчет без параметра №2:

&НаКлиенте
Процедура ОткрытьОтчет(Команда)
    ОткрытьФорму("Отчет.ОстаткиНоменклатуры.Форма");  
КонецПроцедуры

Теперь давайте поработаем с параметром "Параметры".

Найдём в синтакс помощнике на закладке "Содержание" раздел "Интерфейс(управляемый)" - "управляемаяФорма" - "РасширениеОтчета" и если мы раскроем данную веточку, то как раз и увидим наши "Параметры" //infostart.ru/upload/iblock/1f9/5.JPG.

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

 &НаКлиенте
Процедура ОткрытьОтчет(Команда)
 ПараметрыФормы = Новый Структура();
 ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
 ОткрытьФорму("Отчет.ОстаткиНоменклатуры.Форма", ПараметрыФормы);  
КонецПроцедуры

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

Ну давайте попробуем сформировать отчет по активному товару. Код процедуры примет вид:

&НаКлиенте
Процедура ОткрытьОтчет(Команда)
 ТекДанные= Элементы.СписокНоменклатуры.ТекущиеДанные; //Получаем текущую позицию
 Отбор = Новый Структура();                                                        //Создаём отбор
 Отбор.Вставить("Номенклатура", ТекДанные.Номенклатура);  //По полю "Номенклатура" в отчете, а в значение отбора передаём текущую номенклатуру
 ПараметрыФормы = Новый Структура();
 ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
 ПараметрыФормы.Вставить("Отбор", Отбор);                            //Вставляем наш параметр
 ОткрытьФорму("Отчет.ОстаткиНоменклатуры.Форма", ПараметрыФормы);  
КонецПроцедуры 

 //infostart.ru/upload/iblock/17a/6.JPG

 И если мы попробуем изменить вариант в  пользовательском режиме, то на закладке "Отбор" - не будет отбора по номенклатуре. Теперь давайте поработаем с периодом. Как известно, период - это параметр данных отчета, согласно синтакс-помощника " Отбор используется для установки отбора и параметров данных в форме отчета". То есть попробуем сформировать отчет с анализом остатков номенклатуры на дату документа. Добавим в отбор наш период:

&НаКлиенте
Процедура ОткрытьОтчет(Команда)
 ТекДанные= Элементы.СписокНоменклатуры.ТекущиеДанные;
 Отбор = Новый Структура();
 Отбор.Вставить("Номенклатура", ТекДанные.Номенклатура);
 Отбор.Вставить("Период", Объект.Дата);
 
 ПараметрыФормы = Новый Структура();
 ПараметрыФормы.Вставить("Отбор", Отбор);
 ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
 ОткрытьФорму("Отчет.ОстаткиНоменклатуры.Форма", ПараметрыФормы);  
 
КонецПроцедуры

Отчет также формируется и остаток проверяется на момент не включая время записи нашего документа - будем считать это то, что нам нужно.

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

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

В итоге получился код:

&НаКлиенте
Процедура ОткрытьОтчет(Команда)
 СписокНоменклатуры = СформироватьОтборПоТоварам(Объект.Ссылка);
 
 //ТекДанные= Элементы.СписокНоменклатуры.ТекущиеДанные;
  
 
 Отбор = Новый Структура();
 Отбор.Вставить("Номенклатура", СписокНоменклатуры);
 Отбор.Вставить("Период", Объект.Дата);
 
 ПараметрыФормы = Новый Структура();
 ПараметрыФормы.Вставить("Отбор", Отбор);
 ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
 ОткрытьФорму("Отчет.ОстаткиНоменклатуры.Форма", ПараметрыФормы);  
 
КонецПроцедуры

&НаСервереБезКонтекста
Функция СформироватьОтборПоТоварам(Ссылка)
 
 Запрос = Новый Запрос;
 Запрос.Текст =
  "ВЫБРАТЬ
  | ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура
  |ИЗ
  | Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
  |ГДЕ
  | ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка";

 Запрос.УстановитьПараметр("Ссылка", Ссылка);

 Результат = Запрос.Выполнить();

 Таблица = результат.Выгрузить();
 
    Массив = Таблица.ВыгрузитьКолонку("Номенклатура");
 
 Возврат Массив;  
 
КонецФункции

Передадим полученный список в структуру "ПараметрыФормы". И если мы обратимся к синтакс-помощнику (расширение отчета), то увидим Параметр Формы  "Отбор" фразу внизу: "..Если значение является массивом или списком значений с не одним элементом, то отбор будет применяться с видом сравнения ВСписке".

То есть нам больше ничего делать не надо! Таким образом у нас формируется отчет по всем товарам в документе за период документа , а если таковых не будет, то они не отображаются //infostart.ru/upload/iblock/3fd/7.JPG.

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

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61805    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54409    16    21    

42

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

2400 руб.

29.06.2020    16701    21    4    

35

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    10744    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    9626    151    acces969    31    

118

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3670    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12085    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. bulpi 215 03.10.12 12:36 Сейчас в теме
Небольшое замечание (из вредности) :
Если функция СформироватьОтборПоТоварам возвращает Массив, то и переменную нужно назвать не СписокНоменклатуры, а МассивНоменклатуры. Иначе ты вводишь в заблуждение следующих читателей программного текста.
ediks; olches; +2 Ответить
2. olches 92 03.10.12 13:03 Сейчас в теме
Спасибо, учту, но условие наложения фильтра на вхождение номенклатуры всё равно применяется "ВСписке" а не "ВМассиве" =).
3. alexware 03.10.12 18:48 Сейчас в теме
Ну не знаю... Это есть во всех книгах, которые начинающие обязаны изучить.
4. Saipl 7 05.10.12 07:14 Сейчас в теме
Задача 5.8. подготовки на спеца по платформе !
5. Масянька 05.10.12 14:21 Сейчас в теме
Да ладно, человек старался писал....я из вредности поставлю "+", труд должен быть вознагражден!!!
6. olches 92 05.10.12 15:37 Сейчас в теме
Данная статья как-раз таки и освещает то, как решать подобные задачи с использованием параметров формы, я даже и каркасную конфигурацию взял для подготовки к аттестации на 1с-специалист!Saipl, верно подметил!Что касается спора массив-список, то необходимо не по наименованию работать с переменной, а по её типу данных-это основное понятие в конфигурировании 1С. И разработчик, который начинает знакомится с платформой, в первую очередь должен уяснить, что такое тип данных и как с ним работать, то есть первоначально хотя бы научиться работать с отладчиком (здесь же функция возвращает массив, а как начинающий поймёт, что это не СписокЗначений?). В типовых и не так назовут массив =)
7. klel 11.10.12 20:39 Сейчас в теме
Интересная статья для изучения =)
8. ziminavava 12.10.12 11:13 Сейчас в теме
Фраза "то на закладке "Отбор" - не будет отбора по номенклатуре" не точна.Задать отбор при изменении варианта настроек возможно, но при исполнении будет выдана ошибка.
Рамзес; +1 Ответить
9. olches 92 12.10.12 13:46 Сейчас в теме
(8) ziminavava, это и имелось ввиду, согласен!
10. andogskiy 29.04.14 08:29 Сейчас в теме
Написано красиво, но у меня почему-то отбор совсем не работает...
11. echo77 1868 30.12.19 14:33 Сейчас в теме
(0) Было бы здорово, если публикация была бы оформлена :-)
Оставьте свое сообщение