Счет 10.10 строительные материалы на 1 августа. Объекты поступили на склад, но в документах не указаны цены

Учимся программировать

Как открыть форму списка с некоторым отбором?

Есть несколько способов для того, чтобы открыть форму списка с некоторым, заранее установленным отбором. Рассмотрим их по-порядку:

Первый способ

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

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

Например, в следующем примере открывается список приходных накладных с отбором по полю Номер , равному 333.

ЗначениеОтбора = Новый Структура("Номер", "333"); ПараметрыВыбора = Новый Структура("Отбор", ЗначениеОтбора); ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаСписка", ПараметрыВыбора);

Второй способ

Можно открыть форму списка без параметров:

ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаСписка");

И затем, в обработчике события формы списка приходных накладных ПриСозданииНаСервере написать код, который создает отбор в динамическом списке, являющемся основным реквизитом формы:

&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номер"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; ЭлементОтбора.Использование = Истина; ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; ЭлементОтбора.ПравоеЗначение = "000000001"; КонецПроцедуры

Преимущества данного метода в том, что ВидСравнения у отбора можно задавать не только Равно , как в первом случае, а и Больше , Меньше и т.п.

Но у такого способа есть и очень существенный недостаток: с этим отбором форма будет открываться всегда. Откуда бы ее ни вызвали. Поэтому такую форму не следует назначать основной. А если все же она основная - то перед установкой отбора необходимо предусмотреть какой-то анализ того, откуда открывается эта форма. Например, анализируя параметры формы.

Третий способ

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

Например, нам нужно открыть список приходных накладных, в которых присутствует номенклатура, выделенная в списке номенклатуры.

Для этого в форме списка номенклатуры создадим команду и соответствующую ей кнопку Приходные накладные .

Обработчик выполнения этой команды заполним следующим образом:

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

В этом обработчике мы открываем форму списка приходных накладных, передавая в параметр формы ФильтрПоТовару ссылку на текущий элемент в списке номенклатуры.

Затем создадим форму списка документов ПриходнаяНакладная и создадим параметр формы ФильтрПоТовару , который мы будем использовать для открытия формы с нужным отбором.

Теперь откроем палитру свойств основного реквизита формы Список . Установим флаг ПроизвольныйЗапрос и в строке Настройка списка нажмём Открыть .

В поле Запрос введём следующий текст запроса:

ВЫБРАТЬ ДокументПриходнаяНакладная.Номер, ДокументПриходнаяНакладная.Дата ИЗ Документ.ПриходнаяНакладная КАК ДокументПриходнаяНакладная ГДЕ ДокументПриходнаяНакладная.Товары.Товар = &Товар

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

Для этого в обработчике события формы списка ПриСозданииНаСервере напишем код для установки значения параметра запроса Товар :

&НаКлиенте Процедура ПриОткрытии(Отказ) Список.Параметры.УстановитьЗначениеПараметра("Товар", Параметры.ФильтрПоТовару); КонецПроцедуры

Здесь Список.Параметры - это список параметров запроса динамического списка для реквизита Список . Значение параметра Товар устанавливается равным значению параметра формы ФильтрПоТовару .

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

Настройки отбора и управление формой списка в 1С 8.х

В восьмой версии 1С появились более «стройные» возможности работы с динамическими списками, нежели в версии 7.7.

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

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

И для более младших версий 8.х:

Открывая любую стандартную панель управления формой списка, мы можем найти на панели стандартные кнопки управления отбором. Для 8.1 и 8.2 они немного отличаются внешне, но они похожи на «воронки»-фильтры.

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

Итак, что же такое отбор и зачем он?

Представьте себе классическую таблицу:

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

Часто возникает необходимость выбрать из общей кучи и отобразить несколько строк с нужным значением колонок:

  • Все товары с первыми символами в артикуле = 100
  • Все документы от нужного контрагента и прочее.

Или наоборот, выкинуть из списка «мешающие» элементы:

  • Все товары иностранные товары
  • Все товары с пустой ставкой НДС.

Вот тут то и приходят на помощь инструменты отбора. В 1С вы можете столкнуться с отбором во множестве разных вариаций. Но принцип будет везде одинаков: отобрать строки с нужными значениями в одном или нескольких столбцах. Или убрать строки с ненужными значениями в колонках.

Основная кнопка управления отбором - первая слева

Она открывает основную форму отбора для выбранной формы списка

Пример формы отбора справочника основных средств

Каждая строка этой формы соответствует колонке табличной формы списка (На этой форме могут быть отражены не все колонки. Некоторые колонки использовать в отборе невозможно) . Отбор может быть как по одной так и по нескольким колонкам одновременно.

Строка содержит название колонки с отметкой, вид сравнения и значение для отбора.

Значения для сравнения могут быть различных типов. Если колонка простого типа (число, строка, дата) , то вы просто вписываете значение для сравнения в поле (Код =1000, Наименование = деталь). Если колонка сложного типа (ссылка на элемент справочника, документ, перечисление), то в поле значения отбора нужно выбрать элемент этого типа.

Вид сравнения

Кроме простого «колонка равно значение» зачастую требуются более гибкие виды сравнения.

Причем виды этих сравнений зависят от типа значения отбора. Дату можно проверять не только на равно, но и на соответствие диапазону (дата от начала месяца до конца месяца), число - на принадлежность к интервалу (сумма от 1000 до 1500). Строку можно проверять на вхождение (комментарий содержит «под отчет»). Кроме того, элементы справочников можно проверять на вхождения в группу, но нельзя на больше/меньше. Можно также использовать отбор по множественным значениям - например нам нужны строки содержащие колонки с несколькими значениями.

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

  • Равно (все типы данных)
  • Больше (даты, числа, строки)
  • Больше или равно (даты, числа, строки)
  • Меньше (даты, числа, строки)
  • Меньше или равно (даты, числа, строки)
  • Интервал (4 типа с разным типом вхождения граничных значений) (даты, числа, строки)
  • Содержит (строки)
  • В списке (все типы)
  • В группе (ссылочные типы)
  • В группе из списка (ссылочные типы)

Ряду вышеперечисленных видов соответствуют противоположные по смыслу:

  • Не равно
  • Не содержит
  • Не в списке
  • Не в группе
  • Не в группе из списка

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

Как мы помним, на командной панели кроме «главной воронки» содержатся и другие кнопки управления отбором. Вторая кнопка в этом списке - отбор по текущему значению. Эта очень удобная для практического использования кнопка, о чем мы расскажем далее. Ее действие заключается в следующем: установить отбор по значению в текущей колонке. Это экономит некоторое время и позволяет ускорить многие действия. Третья кнопка - история отборов. При ее нажатии вы видите все отборы, которые вы накладывали на текущий список ранее. Список хранится и после окончания работы с программой. Но только если вы завершили сеанс работы корректно, а не через перезагрузку или выключение питания компьютера. И наконец последняя кнопка - отключает все установленные отборы.

Настройка внешнего вида списков, их сохранение и вывод на печать.

У всех стандартных форм списков есть кнопки управления колонками и печатью. Настройка колонок вызывается из меню «действия», по щелчку правой кнопкой на форме списка. Иногда эта кнопка вынесена на командную панель.

По ее нажатии открывается форма настройки:

Видимые колонки отмечены галками. Можно отключить лишние и включить невидимые колонки. В правой части для текущей колонки указано положение и управление размером. Ширину всех колонок обычно можно менять, установив курсор в шапке таблицы на границе колонок (при курсор принимает вид ). Если он не меняет вид, изменение размера отключено в настройках колонки. Включить изменение размера можно в вышеуказанной форме настройки (выбрать колонку - Изменение размера: Изменять).

Когда вы получили нужный вид списка, вы можете распечатать его или сохранить на диске.

Ищем рядом с кнопкой настройки списка кнопку «вывести список». Нажимаем - открывается диалог:

Здесь также галками отмечены видимые колонки, которые будут выведены в печатную форму. Убираем ненужные, включаем нужные и нажимаем ОК. По умолчанию список выведен в табличный документ и этот табличный документ будет тут же отображен на экране. (хотя гурманы могут вывести в текстовый документ, в нем колонки разделены табуляциями). При этом внимание - будьте осторожны с динамическими списками (это те, которые показываются экранными порциями и количество их элементов заранее не известно). Если ваш справочник номенклатуры состоит из 100 тысяч позиций то вы просто не дождетесь построения печатной формы, либо вашему компьютеру не хватит памяти. Надо либо знать примерное количество элементов, которые отражает ваш список, либо грамотно установить отбор. Чтобы список можно было просмотреть глазами с начала и до конца. В общем случае не стоит выводить на печать список из более чем 10000 позиций.

Итак, список у вас на экране - теперь вы можете его распечатать. Его можно также сохранить на диск для передачи или последующего использования. По умолчанию он сохраняется во внутреннем формате 1С в файле с расширением *.mxl . Для этого вы, в правом верхнем углу выбираете пункт меню «Файл», далее «Сохранить». Вызывается стандартный диалог сохранения файлов. Открыть такой файл вы сможете только в среде 1С. Причем этой же версии платформы. («Файл» - Открыть - выбираете свой сохраненный ранее файл).

Практические примеры:

1. Напечатаем список расходных накладных, созданных пользователем Иванова

Если мы видим в списке документ, созданный Ивановой, просто становимся на ячейке, содержащей «Иванова» и нажимаем отбор по текущей ячейке. Ждем некоторое время и видим список документов, созданных Ивановой. При этом нам нужны не все документы, а только по двум организациям (например ИЧП "Предприниматель"и Торговый дом "Комплексный" из демо-базы). Нажимаем первую основную кнопку отбора, в диалоге находим строку «организация», выбираем вид сравнения «В списке» (нам ведь нужны две организации) , в поле значения нажимаем кнопку выбора и подбираем в список 2 нужных организации. Нажимаем ОК, и видим в списке то, что хотели увидеть. Нажимаем вывести список. Оставляем только колонки Номер, Дата, Сумма, Организация, контрагент и нажимаем вывести. Список готов. Если мы хотим поменять местами колонки («Сумма» сделать последней) , открываем форму настройки списка и «двигаем» нужную колонку вниз или вверх с помощью стрелок сортировки.

2. Удалим из списка товаров в документе поступления все товары, кроме трех нужных.

Допустим, мы скопировали какой-либо документ. И нам надо оставить из всего списка только несколько позиций. Практически в каждой табличной части есть отбор, вызываемый по правой кнопке мыши.

Открываем диалог, выбираем «номенклатура» НЕ в списке и далее подбираем в список товары, которые нужно оставить. Нажимаем ОК и видим список, который состоит из полностью ненужных нам товаром. Нажимаем и удерживаем кнопку «DEL», до тех пор пока список полностью не очистится. Потом правой кнопкой мыши по списку - отключить обор. В списке видим только нужные товары.

Для того чтобы открыть форму выбора с отбором в 1с 8.2 (обычные формы), нам нужно выполнить некоторые действия. Сначала мы ее получим. После этого выставим отбор и программно откроем, вот пример кода:

Отбор на форме в поле ввода 1С 8.2 с несколькими значениями

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

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

Установка отбора в поле ввода на форме в 1С 8.3, событие НачалоВыбора

Теперь рассмотрим отбор в поле ввода на управляемой форме в 1С 8.3 . Найдем на форме интересующий нас элемент, в котором мы будем устанавливать отбор, в нашем случае это поле «Организация». Находим событие «НачалоВыбора», щелкаем на лупу и оказываемся в процедуре. Мы видим параметр ДанныеВыбора, этот параметр имеет тип СписокЗначений. Для того чтобы ограничить выбор необходимыми элементами, нам необходимо заполнить СписокЗначений. Элементы выбрать можем только на сервере, поэтому создаем процедуру с директивой компиляции &НаСервере. В данной процедуре заполняем ДанныеВыбора.

Как открыть форму списка с некоторым отбором?

Есть несколько способов для того, чтобы открыть форму списка с некоторым, заранее установленным отбором. Рассмотрим их по-порядку:

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

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

ЗначениеОтбора = Новый Структура("Номер", "333");

ПараметрыВыбора = Новый Структура("Отбор", ЗначениеОтбора);

ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаСписка",ПараметрыВыбора);

2. Можно открыть форму списка без параметров:

ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаСписка");

И затем, в обработчике события формы списка приходных накладных ПриСозданииНаСервере написать код, который создает отбор в динамическом списке, являющемся основным реквизитом формы:

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номер");

ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;

ЭлементОтбора.Использование = Истина;

ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;

ЭлементОтбора.ПравоеЗначение = "000000001";

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

Преимущества данного метода в том, что ВидСравнения у отбора можно задавать не только Равно , как в первом случае, а и Больше , Меньше и т.п.

Но у такого способа есть и очень существенный недостаток: с этим отбором форма будет открываться всегда. Откуда бы ее ни вызвали. Поэтому такую форму не следует назначать основной. А если все же она основная - то перед установкой отбора, необходимо предусмотреть какой-то анализ того, откуда открывается эта форма. Например, анализируя параметры формы.

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

Для этого в форме списка номенклатуры создадим команду и соответствующую ей кнопку Приходные накладные .

Обработчик выполнения этой команды заполним следующим образом:

&НаКлиенте

Процедура ПриходныеНакладные(Команда)

ФормаСписка = ПолучитьФорму("Документ.ПриходнаяНакладная.ФормаСписка");

ФормаСписка.ФильтрПоТовару = Элементы.Список.ТекущаяСтрока;

ФормаСписка.Открыть();

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

В этом обработчике мы получаем форму списка приходных накладных и передаем в параметр формы ФильтрПоТовару ссылку на текущий элемент в списке номенклатуры и открываем форму с этим параметром.

Затем создадим форму списка документов ПриходнаяНакладная и создадим реквизит формы ФильтрПоТовару , который мы будем использовать в качестве параметра формы при ее открытии. Теперь откроем палитру свойств основного реквизита формы Список . Установим флаг ПроизвольныйЗапрос и в строке Настройка списка нажмем Открыть .

В поле Запрос введем следующий текст запроса:

ВЫБРАТЬ

ДокументПриходнаяНакладная.Номер,

ДокументПриходнаяНакладная.Дата

ИЗ

Документ.ПриходнаяНакладная КАК ДокументПриходнаяНакладная

ГДЕ

ДокументПриходнаяНакладная.Товары.Товар = &Товар

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

&НаКлиенте

Процедура ПриОткрытии(Отказ)

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

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

Здесь Список.Параметры - это список параметров запроса динамического списка для реквизита Список . Значение параметра Товар устанавливается равным значению параметра формы ФильтрПоТовару .

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

Демонстрационный пример для 3-го варианта находится в каталоге 1CITS/EXE/FAQ/ОткрытьФормуСОтбором.dt. Пример выполнен на версии платформы 8.2.9.356.



Похожие статьи