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

03.10.12

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Выгрузка итоговой ИБ
.dt 147,64Kb
45
45
1 SM
Скачать Купить за 1 850 руб.

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

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

УправляемаяФорма (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 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    18154    25    6    

39

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

20.08.2024    11853    mrXoxot    43    

111

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

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

27.05.2024    6048    smielka    37    

97

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

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

27.12.2023    13406    809    elcoan    47    

114

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

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

2 стартмани

10.04.2023    11149    160    acces969    31    

121

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

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

1 стартмани

05.07.2022    5002    kalyaka    6    

33

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

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

6000 руб.

18.01.2022    9700    1    2    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bulpi 216 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 1871 30.12.19 14:33 Сейчас в теме
(0) Было бы здорово, если публикация была бы оформлена :-)
Оставьте свое сообщение