Как программно установить отбор в открываемой форме(При открытии)? Для установки отбора используется свойство "Отбор" у менеджеров списков объектов, например, для открытия списка договоров определенного контрагента можно написать следующий код:
Код 1C v 8.х ФормаВыбора = Справочники. ДоговорыКонтрагентов. ПолучитьФормуВыбора( "ФормаВыбора" , ЭтаФорма, "ФормаВыбораДоговора" ) ;
ФормаВыбора. Отбор. Владелец. Значение = КонтрагентСсылка;
ФормаВыбора. Отбор. Владелец. Использование = ИСТИНА ;
ФормаВыбора. ОткрытьМодально( ) ;
В данном случае мы применили вид сравнения "Равно", но не указывали его т.к. оно стоит по умолчанию. Используя разные значения вида сравнения мы значительно расширяем возможности.
Например, у нас в базе контрагент является и продавцом и покупателем, при этом договоры находятся в соответствующей группе внутри справочника. Поэтому мы сделаем отбор не только на самого контрагента, но и на группу "Группа Покупатели" в которой находится договор:
Код 1C v 8.х ФормаВыбора = Справочники. ДоговорыКонтрагентов. ПолучитьФормуВыбора( "ФормаВыбора" , ЭтаФорма, "ФормаВыбораДоговора" ) ;
ФормаВыбора. Отбор. Владелец. Значение = КонтрагентСсылка;
ФормаВыбора. Отбор. Владелец. Использование = ИСТИНА ;
ГруппаПокупатели = Справочники. ДоговорыКонтрагентов. НайтиПоНаименованию( "Группа Покупатели" ) ;
ФормаВыбора. Отбор. Родитель. ВидСравнения = ВидСравнения. ВИерархии;
ФормаВыбора. Отбор. Родитель. Значение = ГруппаПокупатели;
ФормаВыбора. Отбор. Родитель. Использование = ИСТИНА ;
ФормаВыбора. ОткрытьМодально( ) ;
Категория:
Работа с Формой (Диалог) и её элементами Как пользователям запретить удаление условия отбора в форме списка? Код 1C v 8.2 УП ЭлементОтбора. РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных. Недоступный;
Полный код:
Код 1C v 8.2 УП ЭлементОтбора = Список. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "Организация" ) ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. ВСписке;
ЭлементОтбора. ПравоеЗначение = ОтборОрганизация;
ЭлементОтбора. Использование = Истина ;
ЭлементОтбора. РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных. Недоступный;
Элементы. Список. Обновить( ) ;
Код 1C v 8.х ФормаВыбора. ЭлементыФормы. СправочникСписок. НастройкаОтбора. Организация. Доступность = Ложь ;
Категория:
Список Справочника, Документов, Регистров Как открыть форму? Код 1C v 8.2 УП стрПараметры = Новый Структура( "Ключ" , СсылкаНаКонтрагента) ;
ФормаОснования = ПолучитьФорму( "Справочник.Контрагенты.ФормаОбъекта" , стрПараметры) ;
ФормаОснования. Открыть( ) ;
Код 1C v 8.2 УП
&НаКлиенте
Процедура ИспользуемыеКалендариВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Календарь = Элементы. ИспользуемыеКалендари. ТекущиеДанные. Календарь;
Если Календарь < > ОсновнойКалендарьПредприятия Тогда
ПараметрыФормы = Новый Структура( "Ключ" , Календарь) ;
Форма = ПолучитьФорму( "Справочник.Календари.ФормаОбъекта" , ПараметрыФормы) ;
Форма. РежимОткрытияОкна = РежимОткрытияОкнаФормы. БлокироватьОкноВладельца;
Форма. Открыть( ) ;
КонецЕсли ;
КонецПроцедуры
Код 1C v 8.2 УП
Функция ВыбратьРабочееМесто(ОткрыватьФормуВыбораПриПервомОбращении = Ложь, ИдентификаторКлиента = "" ) Экспорт
Результат = Ложь ;
РабочееМесто = "" ;
ПараметрыФормы = Новый Структура( ) ;
ПараметрыФормы. Вставить( "ОткрыватьПриПервомОбращении" , ОткрыватьФормуВыбораПриПервомОбращении) ;
ПараметрыФормы. Вставить( "ИдентификаторКлиента" , ИдентификаторКлиента) ;
ФормаВыбораРМ = ПолучитьФорму( "Справочник.ПодключаемоеОборудование.Форма.ФормаВыбораРабочегоМеста" , ПараметрыФормы) ;
Ответ = ФормаВыбораРМ. ОткрытьМодально( ) ;
Если Ответ = КодВозвратаДиалога. ОК Тогда
РМ = ФормаВыбораРМ. Параметры. РабочееМесто;
МенеджерОборудованияСервер. УстановитьРабочееМестоКлиента( РМ) ;
Оповестить( "ИзмененоРабочееМестоТекущегоСеанса" , РабочееМесто) ;
Результат = Истина ;
КонецЕсли ;
Возврат Результат;
КонецФункции
Категория:
Управляемое приложение, Тонкий клиент Оптимизация работы в списке "ПриПолученииДанных" Очень часта бухгалтера, хотят чтобы формы списка были раскрашены во все цвета радуги в зависимости от значений реквизитов документа. Пример: Если товар не получен то в форме списка строка документа должна быть красная, если товар ... т.д., и так еще много много хотелок. Есть конечно отчеты, но не всегда выход. Приступим, получаем код типа:
Код 1C v 8.х Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)
ЦветКрасный = Новый Цвет( 255 , 130 , 124 ) ;
Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
Данныестроки = ОформлениеСтроки. Данныестроки;
Если ДанныеСтроки. Ссылка. НеПолученТовар Тогда
ОформлениеСтроки. ЦветФона = ЦветКрасный;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры
Вроде все красиво. Разукрашиваем в "ПриПолученииДанных", а не в "ПриВыводеСтроки", Цвет вынесен из цикла.
Проходим отладчик и видим, узкое место
Код 1C v 8.х ДанныеСтроки. Ссылка. НеПолученТовар
т.е 1С-ка каждый раз запросом получает значение реквизита. Можно конечно добавить этот реквизит в форму списка и скрыть, но условие и может быть сложным. Попробуем это ускорить. Получаем массив ссылок:
Код 1C v 8.х Функция ПолучитьМассивСсылокОформленияСтрок(ОформленияСтрок)
Массив = Новый Массив;
Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
Массив. Добавить( ОформлениеСтроки. Данныестроки. Ссылка) ;
КонецЦикла ;
Возврат Массив;
КонецФункции
Получаем одним запросом необходимые нам данные. Пример:
Код 1C v 8.х Функция ПолучитьТаблицаОформленияСтрок(МассивСсылокОформления)
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| ПриходнаяНакладнаяБезнал.Ссылка,
| ПриходнаяНакладнаяБезнал.НеПолученТовар
|ИЗ
| Документ.ПриходнаяНакладнаяБезнал КАК ПриходнаяНакладнаяБезнал
|ГДЕ
| ПриходнаяНакладнаяБезнал.Ссылка В(&МассивСсылокОформления)" ;
Запрос. УстановитьПараметр( "МассивСсылокОформления" , МассивСсылокОформления) ;
Возврат Запрос. Выполнить( ) . Выгрузить( ) ;
КонецФункции
В результате получаем код процедуры ДокументСписокПриПолученииДанных
Код 1C v 8.х Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)
ЦветКрасный = Новый Цвет( 255 , 130 , 124 ) ;
МассивСсылокОформления = ПолучитьМассивСсылокОформленияСтрок( ОформленияСтрок) ;
ТаблицаДанныхОформленияСтрок = ПолучитьТаблицаОформленияСтрок( МассивСсылокОформления) ;
Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
Данныестроки = ОформлениеСтроки. Данныестроки;
СтрокаОформленияСтрок = ТаблицаДанныхОформленияСтрок. Найти( ОформлениеСтроки. Данныестроки. Ссылка, "Ссылка" ) ;
Если СтрокаОформленияСтрок. НеПолученТовар Тогда
ОформлениеСтроки. ЦветФона = ЦветКрасный;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры
Ну а теперь тесты, как же без них.
Первый вариант:
Документ.ПриходнаяНакладнаяБезнал.Форма.ФормаВыбора.Форма 36 ДокументСписокПриПолученииДанных1(Элемент, ОформленияСтрок); 81 12,558905 96,65
Второй вариант после оптимизации
Документ.ПриходнаяНакладнаяБезнал.Форма.ФормаВыбора.Форма 37 ДокументСписокПриПолученииДанных2(Элемент, ОформленияСтрок); 81 0,426953 3,29 "
Результат-
ускорение в 36 раз .
Вывод: З
апрос для получения данных должен быть один .
Спасибо за внимание.
Автор:
Андрей (boggonzikov) Категория:
Полезные, Универсальные Функции Фильтрация иерархического справочника по какому-либо условию в форме списка Есть ли в 8.х аналог ИспользоватьСписокЭлементов?
В динамических списках документов, справочников и т.д. может быть программно установлен отбор по полю Ссылка с указанием в качестве вида сравнения вхождения в список значений. Это позволяет отображать в списке только определенные объекты.
Однако эта возможность может иметь только ограниченное применение, так как динамический список имеет достаточно большое количество универсальных возможностей (установка отбора пользователем, переходы по уровням в иерархических списках и т.д.) и совмещение в прикладных решениях этих механизмов с отбором по конкретным значениям ссылок достаточно сложно реализуется.
В большинстве случаев, если необходимо обеспечить отображение в списке специально отобранного перечня объектов, можно рекомендовать использовать другие возможности (например, выборку данных запросом и отображение в форме с помощью таблицы значений или табличного документа). При этом система обеспечивает возможность полноценного взаимодействия с такими формами других системных механизмов.
Код 1C v 8.х Запрос = Новый Запрос( ) ;
Запрос. Текст = " ВЫБРАТЬ
| СпецификацииНоменклатуры.Ссылка
|ИЗ
| Справочник.СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
|ГДЕ
| СпецификацииНоменклатуры.Владелец.Ссылка = &НоменклатураСсылка
| И СпецификацииНоменклатуры.Организация В ИЕРАРХИИ (&Организация)" ;
Запрос. УстановитьПараметр( "НоменклатураСсылка" , ГотоваяПродукция) ;
Запрос. УстановитьПараметр( "Организация" , Организация) ;
СписокСпецификаций = Запрос. Выполнить( ) . Выгрузить( ) . ВыгрузитьКолонку( "Ссылка" ) ;
ФормаВыбора = Справочники. СпецификацииНоменклатуры. ПолучитьФормуВыбора( , Элемент, Элемент) ;
ЭлементОтбора = ФормаВыбора. СправочникСписок. Отбор. Ссылка;
ЭлементОтбора. ВидСравнения = ВидСравнения. ВСписке;
ЭлементОтбора. Значение = СписокСпецификаций;
ЭлементОтбора. Использование = Истина ;
ФормаВыбора. ЭлементыФормы. СправочникСписок. НастройкаОтбора. Ссылка. Доступность = Ложь ;
ФормаВыбора. Открыть( ) ;
Код 1C v 8.2 УП &НаКлиенте
Процедура ПоУмолчаниюОпцияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
ФормаВыбора = ПолучитьФорму( "Справочник.ОпцииАвтомобилей.Форма.ФормаВыбора" ) ;
ФормаВыбора. Открыть( ) ;
ЭлементОтбора = ФормаВыбора. Список. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "Ссылка" ) ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. ВСписке;
ЭлементОтбора. ПравоеЗначение = СписокОпций;
ЭлементОтбора. Использование = Истина ;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СписокОпций. ЗагрузитьЗначения( Объект. Владелец. ОпцииМодели. Выгрузить( ) . ВыгрузитьКолонку( "Опция" ) ) ;
КонецПроцедуры
Для 7.7 используем метод ИспользоватьСписокЭлементов
Автор:
Antoska
Для решения данной задачи я решил воспользоваться методом формы списка "ИспользоватьСписокЭлементов(<СписокЗначений>)", так как использование процедуры "ОбработкаПодбора()" требует наличия реквизита справочника для отбора, а это мне не очень подходит. Вот как я реализовал этот алгоритм (код из модуля формы списка справочника):
Код 1C v 7.x Функция СоответствуетУсловиямФильтра(ЭлементСправочника)
Если ПустоеЗначение( ЭлементСправочника) = 0 Тогда
Если Регистр. ПартииТоваров. СводныйОстаток( "" , ЭлементСправочника. ТекущийЭлемент( ) , , , , , "ОстатокТовара" ) < > 0 Тогда
Возврат 1 ;
КонецЕсли ;
КонецЕсли ;
Возврат 0 ;
КонецФункции
Процедура УстановитьФильтр(Знач Группа="" , Знач Иерархия="" )
Если Фильтр = 1 Тогда
Группа = ? ( Группа= "" , ТекущийЭлемент( ) . Родитель, Группа) ;
Иерархия = ? ( Иерархия= "" , ИерархическийСписок( ) , Иерархия) ;
СписокФильтра = СоздатьОбъект( "СписокЗначений" ) ;
Спр = СоздатьОбъект( "Справочник.Номенклатура" ) ;
Если ПустоеЗначение( Группа) = 0 Тогда
Спр. ИспользоватьРодителя( Группа) ;
КонецЕсли ;
Спр. ВключатьПодчиненные( 0 ) ;
Спр. ВыбратьЭлементы( Иерархия) ;
Пока Спр. ПолучитьЭлемент( ) = 1 Цикл
Если Спр. ЭтоГруппа( ) = 1 Тогда
СписокФильтра. ДобавитьЗначение( Спр. ТекущийЭлемент( ) ) ;
Продолжить;
КонецЕсли ;
Если СоответствуетУсловиямФильтра( Спр. ТекущийЭлемент( ) ) = 1 Тогда
СписокФильтра. ДобавитьЗначение( Спр. ТекущийЭлемент( ) ) ;
КонецЕсли ;
КонецЦикла ;
ИспользоватьСписокЭлементов( СписокФильтра) ;
Иначе
ИспользоватьСписокЭлементов( ) ;
КонецЕсли ;
КонецПроцедуры
Процедура ПриВыбореРодителя(Элемент)
УстановитьФильтр( Элемент)
КонецПроцедуры
Процедура ПриСменеИерархии(Способ)
УстановитьФильтр( , Способ)
КонецПроцедуры
Функцией "СоответствуетУсловиямФильтра(ЭлементСправочника)" можно задавать любые условия фильтрации списка опираясь на передаваемый ей элемент справочника.
Скорость работы приемлема, но можно попробовать реализовать и через запрос...
Категория:
Справочники Поле выбора ~ Как ограничить список выбора? Ограничим список элементов, установив отбор в открываемой форме
Код 1C v 8.х
Процедура СтатьяПДРНачалоВыбора(Элемент, СтандартнаяОбработка)
ФормаВыбора = Справочники. ПрочиеДоходыИРасходы. ПолучитьФормуВыбора( , Элемент) ;
ЭлементОтбораВидПДР = ФормаВыбора. Отбор. ВидПрочихДоходовИРасходов;
Если ЭлементОтбораВидПДР < > Неопределено Тогда
ЭлементОтбораВидПДР. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбораВидПДР. Значение = Перечисления. ВидыПрочихДоходовИРасходов. ПрочиеВнереализационныеДоходыРасходы;
ЭлементОтбораВидПДР. Использование = Истина ;
КонецЕсли ;
ФормаВыбора. ЭлементыФормы. СправочникСписок. НастройкаОтбора. ВидПрочихДоходовИРасходов. Доступность = Ложь ;
ФормаВыбора. Открыть( ) ;
СтандартнаяОбработка = Ложь ;
КонецПроцедуры
Процедура СчетДтНачалоВыбора(Элемент, СтандартнаяОбработка)
Запрос = Новый Запрос;
Запрос. Текст = "ВЫБРАТЬ
| Хозрасчетный.Ссылка
|ИЗ
| ПланСчетов.Хозрасчетный КАК Хозрасчетный
|ГДЕ
| Хозрасчетный.Родитель В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Материалы))
| И Хозрасчетный.ЗапретитьИспользоватьВПроводках = ЛОЖЬ" ;
СписокСчетов = Новый СписокЗначений;
СписокСчетов. ЗагрузитьЗначения( Запрос. Выполнить( ) . Выгрузить( ) . ВыгрузитьКолонку( "Ссылка" ) ) ;
ФормаВыбора = ПланыСчетов. Хозрасчетный. ПолучитьФормуВыбора( , Элемент) ;
ЭлементОтбораСсылка = ФормаВыбора. Отбор. Ссылка;
Если ЭлементОтбораСсылка < > Неопределено Тогда
ЭлементОтбораСсылка. ВидСравнения = ВидСравнения. ВСписке;
ЭлементОтбораСсылка. Значение = СписокСчетов;
ЭлементОтбораСсылка. Использование = Истина ;
КонецЕсли ;
ФормаВыбора. ЭлементыФормы. Список. НастройкаОтбора. Ссылка. Доступность = Ложь ;
ФормаВыбора. Открыть( ) ;
СтандартнаяОбработка = Ложь ;
КонецПроцедуры
Использование выбора из списка
Код 1C v 8.х
Процедура ВидПДРНачалоВыбора(Элемент, СтандартнаяОбработка)
ВидыПДР = Новый СписокЗначений;
ВидыПДР. Добавить( Перечисления. ВидыПрочихДоходовИРасходов. ПрочиеВнереализационныеДоходыРасходы) ;
ВидыПДР. Добавить( Перечисления. ВидыПрочихДоходовИРасходов. ПрочиеОперационныеДоходыРасходы) ;
ВыбранныйЭлемент = ВыбратьИзСписка( ВидыПДР, Элемент, ВидыПДР. НайтиПоЗначению( Элемент. Значение) ) ;
Если ВыбранныйЭлемент < > Неопределено Тогда
Элемент. Значение = ВыбранныйЭлемент. Значение;
КонецЕсли ;
СтандартнаяОбработка = Ложь ;
КонецПроцедуры
Процедура СчетКтНачалоВыбора(Элемент, СтандартнаяОбработка)
СчетаКт = Новый СписокЗначений;
СчетаКт. Добавить( ПланыСчетов. Хозрасчетный. РасчетыСПоставщиками) ;
СчетаКт. Добавить( ПланыСчетов. Хозрасчетный. РасчетыСПодотчетнымиЛицами) ;
СчетаКт. Добавить( ПланыСчетов. Хозрасчетный. РасчетыСПрочимиПоставщикамиИПодрядчиками) ;
СчетаКт. Добавить( ПланыСчетов. Хозрасчетный. РасчетыПоТекущимОперациям) ;
СчетаКт. Добавить( ПланыСчетов. Хозрасчетный. ПрочиеДоходы) ;
ВыбранныйЭлемент = ВыбратьИзСписка( СчетаКт, Элемент, СчетаКт. НайтиПоЗначению( Элемент. Значение) ) ;
Если ВыбранныйЭлемент < > Неопределено Тогда
Элемент. Значение = ВыбранныйЭлемент. Значение;
КонецЕсли ;
СтандартнаяОбработка = Ложь ;
КонецПроцедуры
Категория:
Работа с Формой (Диалог) и её элементами Как для Выбора Элемента Справочника Открыть Форму Выбора с нужной Открытой Группой? Порядок действий такой:
1. В поле ввода "Номенклатура" добавь событие ПриНачалеВыбора.
2. Установи в них СтандартнаяОбработка = Ложь;
3. Получи форму выбора нужного справочника
4. Установи отбор по родителю
5. Открой форму для выбора
Теперь подробнее:
Заходим в Свойства реквизита - для которогу нужно настроить выбор из группы, это может быть реквизит табличной части или просто реквизит на форме, и Задаем
Событие - Начало Выбора
Далее пишем ее код:
Код 1C v 8.х Процедура ТЧНоменклатураНачалоВыбора(Элемент, СтандартнаяОбработка)
//Отключим стандартный выбор, так как делаем свой
СтандартнаяОбработка = Ложь;
//НУЖНО чтобы при открытии Выбора номенклатуры Открывалась номенклатура из Групы Оргтехника (код 00000013608)
//Получаем форму и привязываем ее к Владельцу - Элемент
ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора(, Элемент);
//Установим отбор по Родителю справочника
//ЕСЛИ НА ФОРМЕ ВЫБОРА СЛЕВА ЕСТЬ ДЕРЕВО ГРУПП, то нужно установить значение родителя в нем:
ФормаВыбора.ЭлементыФормы.СправочникДерево.ТекущаяСтрока = Справочники.Номенклатура.НайтиПоКоду("00000013608");
//ЕСЛИ НА ФОРМЕ ТОЛЬКО СПИСОК НОМЕНКЛАТУРЫ, то устанавливаем так:
ФормаВыбора.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина;
ФормаВыбора.ЭлементыФормы.СправочникСписок.ТекущийРодитель = Справочники.Номенклатура.НайтиПоКоду("00000013608");
//Откроем выбор
ФормаВыбора.ОткрытьМодально();
КонецПроцедуры
Запускаем, пробуем, радуемся
P.S. Написано как ответ на вопрос
Позиционирование сразу в папке номенклатуры 8.1 Категория:
Справочники Как для Выбора Покупателя Открыть Справочник контрагенты с открытой группой "Покупатели"? Код 1C v 8.х
Процедура КонтрагентНачалоВыбора(Элемент, СтандартнаяОбработка)
Если Элемент. Значение. Пустая( ) Тогда
СтандартнаяОбработка = Ложь ;
ФормаВыбора = Справочники. Контрагенты. ПолучитьФормуВыбора( , Элемент) ;
ФормаВыбора. ВыборПокупателя = Истина ;
ФормаВыбора. Открыть( ) ;
КонецЕсли ;
КонецПроцедуры
Если ВыборПокупателя Тогда
ЭлементыФормы. СправочникСписок. ИерархическийПросмотр = Истина ;
ЭлементыФормы. СправочникСписок. ТекущийРодитель = Константы. ГруппаПокупатели. Получить( ) ;
КонецЕсли ;
Если ВыборПокупателя Тогда
ЭлементыФормы. СправочникСписок. ИерархическийПросмотр = Истина ;
ЭлементыФормы. СправочникСписок. ТекущийРодитель = Справочники. Контрагенты. Покупатели;
КонецЕсли ;
Категория:
Справочники Поле выбора ~ Как отобрать значения выводящиеся в список выбора у элемента формы поле выбора? Использование отбора:
Функционал, который используется для интерактивного отбора в списках, можно использовать и для отбора программным способом.
Для этого нужно для
события НачалоВыбора соответствующего поля ввода определить процедуру обработки и внутри процедуры программно устанавить отбор для списка.
Далее следует пример процедуры обработки
события НачалоВыбора для поля ввода
СтатьяПДР . Реквизит (и поле ввода, соответственно)
СтатьяПДР имеет тип
СправочникСсылка.ПрочиеДоходыИРасходы . Для списка справочника «Прочие доходы и расходы» устанавливается отбор по реквизиту «Вид прочих доходов и расходов» со значением «Прочие внереализационные доходы (расходы)».
Код 1C v 8.х Процедура СтатьяПДРНачалоВыбора(Элемент, СтандартнаяОбработка)
ФормаВыбора = Справочники. ПрочиеДоходыИРасходы. ПолучитьФормуВыбора( , Элемент) ;
ЭлементОтбораВидПДР = ФормаВыбора. Отбор. ВидПрочихДоходовИРасходов;
Если ЭлементОтбораВидПДР < > Неопределено Тогда
ЭлементОтбораВидПДР. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбораВидПДР. Значение = Перечисления. ВидыПрочихДоходовИРасходов. ПрочиеВнереализационныеДоходыРасходы;
ЭлементОтбораВидПДР. Использование = Истина ;
КонецЕсли ;
ФормаВыбора. ЭлементыФормы. СправочникСписок. НастройкаОтбора. ВидПрочихДоходовИРасходов. Доступность = Ложь ;
ФормаВыбора. Открыть( ) ;
СтандартнаяОбработка = Ложь ;
КонецПроцедуры
Обратите внимание на строку кода:
Код 1C v 8.х ФормаВыбора. ЭлементыФормы. СправочникСписок. НастройкаОтбора. ВидПрочихДоходовИРасходов. Доступность = Ложь ;
Она закрывает доступ к настройке отбора «Вид прочих доходов и расходов». Таким образом, пользователь не может отключить заданный программно отбор и имеет возможность сделать выбор значения только из ограниченного списка.
Внутри процедуры обработки события НачалоВыбора параметру СтандартнаяОбработка нужно обязательно присвоить значение Ложь. В противном случае будет открыт и ограниченный список, и стандартный список, а это, конечно, не входит в наши планы.
В следующем примере для поля ввода СчетДт типа ПланСчетовСсылка.Хозрасчетный
устанавливается отбор в виде списка счетов . Список счетов предварительно формируется с помощью запроса.
Код 1C v 8.х Процедура СчетДтНачалоВыбора(Элемент, СтандартнаяОбработка)
Запрос = Новый Запрос;
Запрос. Текст = "ВЫБРАТЬ
| Хозрасчетный.Ссылка
|ИЗ
| ПланСчетов.Хозрасчетный КАК Хозрасчетный
|ГДЕ
| Хозрасчетный.Родитель В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Материалы))
| И Хозрасчетный.ЗапретитьИспользоватьВПроводках = ЛОЖЬ" ;
СписокСчетов = Новый СписокЗначений;
СписокСчетов. ЗагрузитьЗначения( Запрос. Выполнить( ) . Выгрузить( ) . ВыгрузитьКолонку( "Ссылка" ) ) ;
ФормаВыбора = ПланыСчетов. Хозрасчетный. ПолучитьФормуВыбора( , Элемент) ;
ЭлементОтбораСсылка = ФормаВыбора. Отбор. Ссылка;
Если ЭлементОтбораСсылка < > Неопределено Тогда
ЭлементОтбораСсылка. ВидСравнения = ВидСравнения. ВСписке;
ЭлементОтбораСсылка. Значение = СписокСчетов;
ЭлементОтбораСсылка. Использование = Истина ;
КонецЕсли ;
ФормаВыбора. ЭлементыФормы. Список. НастройкаОтбора. Ссылка. Доступность = Ложь ;
ФормаВыбора. Открыть( ) ;
СтандартнаяОбработка = Ложь ;
КонецПроцедуры
Использование выбора из списка:
Выбор значения
Перечисления обычно осуществляется из маленького списка. Но даже если включить выбор из формы (это делается с помощью свойства «Быстрый выбор» поля ввода), функционал отбора для перечислений все равно неприменим.
В таком случае подходящий способ ограничения списка выбора - использование метода формы ВыбратьИзСписка. Аналогично первому способу, необходимо определить процедуру обработки события НачалоВыбора для поля ввода значения. В следующем примере для поля ввода ВидПДР типа ПеречислениеСсылка.ВидыПрочихДоходовИРасходов программно устанавливается ограниченный список выбора.
Код 1C v 8.х Процедура ВидПДРНачалоВыбора(Элемент, СтандартнаяОбработка)
ВидыПДР = Новый СписокЗначений;
ВидыПДР. Добавить( Перечисления. ВидыПрочихДоходовИРасходов. ПрочиеВнереализационныеДоходыРасходы) ;
ВидыПДР. Добавить( Перечисления. ВидыПрочихДоходовИРасходов. ПрочиеОперационныеДоходыРасходы) ;
ВыбранныйЭлемент = ВыбратьИзСписка( ВидыПДР, Элемент, ВидыПДР. НайтиПоЗначению( Элемент. Значение) ) ;
Если ВыбранныйЭлемент < > Неопределено Тогда
Элемент. Значение = ВыбранныйЭлемент. Значение;
КонецЕсли ;
СтандартнаяОбработка = Ложь ;
КонецПроцедуры
Результат работы процедуры показан на рисунке. Метод ВыбратьИзСписка открывает маленький список с набором значений, переданных в процедуру в первом параметре (в примере - список значений ВидыПДР).
Пример ограничения списка выбора для перечисления в 1С 8
Пример для других агрегатных типов:
Код 1C v 8.х Процедура СчетКтНачалоВыбора(Элемент, СтандартнаяОбработка)
СчетаКт = Новый СписокЗначений;
СчетаКт. Добавить( ПланыСчетов. Хозрасчетный. РасчетыСПоставщиками) ;
СчетаКт. Добавить( ПланыСчетов. Хозрасчетный. РасчетыСПодотчетнымиЛицами) ;
СчетаКт. Добавить( ПланыСчетов. Хозрасчетный. РасчетыСПрочимиПоставщикамиИПодрядчиками) ;
СчетаКт. Добавить( ПланыСчетов. Хозрасчетный. РасчетыПоТекущимОперациям) ;
СчетаКт. Добавить( ПланыСчетов. Хозрасчетный. ПрочиеДоходы) ;
ВыбранныйЭлемент = ВыбратьИзСписка( СчетаКт, Элемент, СчетаКт. НайтиПоЗначению( Элемент. Значение) ) ;
Если ВыбранныйЭлемент < > Неопределено Тогда
Элемент. Значение = ВыбранныйЭлемент. Значение;
КонецЕсли ;
СтандартнаяОбработка = Ложь ;
КонецПроцедуры
Категория:
Работа с Формой (Диалог) и её элементами Как программно открыть и выбрать документ, выбор документа из списка? Открыть список документов для выбора документа:
Код 1C v 8.х ФормаСписка = Документы. НачислениеЗарплатыРаботникамОрганизаций. ПолучитьФормуСписка( ) ;
ФормаСписка. Открыть( ) ;
Открыть список документов для выбора документа и установить отбор:
Код 1C v 8.х ФормаВыбора = Документы. НачислениеЗарплатыРаботникамОрганизаций. ПолучитьФормуВыбора( ) ;
ФормаВыбора. ДокументСписок. Отбор. Дата. ВидСравнения= ВидСравнения. ИнтервалВключаяОкончание;
ФормаВыбора. ДокументСписок. Отбор. Дата. ЗначениеС = НачалоМесяца( Дата) ;
ФормаВыбора. ДокументСписок. Отбор. Дата. ЗначениеПо = КонецМесяца( Дата) ;
ФормаВыбора. ДокументСписок. Отбор. Дата. установить( ) ;
ФормаВыбора. Заголовок = "Выберите документ" ;
ВыбДокНачисл = ФормаВыбора. ОткрытьМодально( ) ;
Категория:
Документы Как программно открыть и выбрать элемент справочника, выбор элемента справочника? Просто открыть:
Код 1C v 8.х
ФормаСписка = Справочники. Номенклатура. ПолучитьФормуСписка( , ЭтаФорма) ;
ФормаСписка. Открыть( ) ;
Открыть для выбора элемента:
Код 1C v 8.х ФормаВыбора = Справочники. Номенклатура. ПолучитьФормуВыбора( , ЭтаФорма) ;
ФормаВыбора. Заголовок = "Выберите товар!" ;
Выбрано = ФормаВыбора. ОткрытьМодально( ) ;
Открыть справочник для выбора элемента и установить отбор:
Код 1C v 8.х
Если Отобрать Тогда
ФормаВыбора = Справочники. ГруппыПользователей. ПолучитьФормуВыбора( ) ;
ФормаВыбора. Отбор. Ссылка. Установить( Справочники. ГруппыПользователей. ВсеПользователи) ;
ФормаВыбора. Отбор. Ссылка. ВидСравнения = ВидСравнения. НеРавно;
Иначе
ФормаВыбора = Справочники. Пользователи. ПолучитьФормуВыбора( ) ;
КонецЕсли ;
ФормаВыбора. ПараметрВыборГруппИЭлементов = ИспользованиеГруппИЭлементов. Элементы;
ВыбранноеЗначение = ФормаВыбора. ОткрытьМодально( ) ;
Примеры использования событий(Вывели на форму поле елемента справочника, в его свойствах есть события)
Код 1C v 8.х Процедура ПолеВводаНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
ФормаВыбора = Справочники. Номенклатура. ПолучитьФормуВыбора( , Элемент) ;
ФормаВыбора. Открыть( ) ;
КонецПроцедуры
Процедура ПолеВводаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
ПолученноеЗначение = ВыбранноеЗначение;
КонецПроцедуры
Категория:
Справочники Функция проверяет орфографию переданного текста с помощью средств MS Word Код 1C v 8.х
Функция ПроверитьОрфографию(Текст, ДеревоЗначений = Null) Экспорт
Попытка
Ворд = Новый COMОбъект( "Word.Application" ) ;
Исключение
Предупреждение( "Microsoft Word не установлен!" , , "Ошибка!" ) ;
Возврат Ложь ;
КонецПопытки ;
ТекстБезОшибок = Ворд. CheckSpelling( Текст) ;
Если ТекстБезОшибок Тогда
Возврат Истина ;
Иначе
Если ДеревоЗначений < > Null Тогда
Ворд_Активен = Ворд. Visible;
ВремДок = Ворд. Documents. Add( ) ;
МояОбласть = ВремДок. Range( 0 , 0 ) ;
МояОбласть. I_nsertBefore( Текст) ;
ЧислоСлов = МояОбласть. Words. Count;
ДеревоЗначений = Новый ДеревоЗначений;
МассивТипов = Новый Массив;
МассивТипов. Добавить( Тип( "Строка" ) ) ;
ОписаниеТипов = Новый ОписаниеТипов( МассивТипов) ;
ДеревоЗначений. Колонки. Добавить( "Слово" , ОписаниеТипов, "Слово/Замена" , ) ;
wdSpellword= 0 ;
wdDoNotSaveChanges= 0 ;
Для НомерСлова = 1 По ЧислоСлов Цикл
ОбработкаПрерыванияПользователя( ) ;
ПровОбласть = МояОбласть. Words( НомерСлова) ;
ПровСлово = СокрЛП( ПровОбласть. Text) ;
СловоБезОшибок = Ворд. CheckSpelling( ПровСлово) ;
Если НЕ СловоБезОшибок Тогда
Если ДеревоЗначений. Строки. Найти( ПровСлово, "Слово" ) = Неопределено Тогда
НоваяСтрока = ДеревоЗначений. Строки. Добавить( ) ;
НоваяСтрока. Слово = ПровСлово;
Замены = ПровОбласть. GetSpellingSuggestions( , 1 , , wdSpellword) ;
ЧислоЗамен = Замены. Count;
Если ЧислоЗамен > 0 Тогда
Для НомерЗамены = 1 По ЧислоЗамен Цикл
СловоЗамены = СокрЛП( Замены. Item( НомерЗамены) . Name) ;
НоваяПодСтрока = НоваяСтрока. Строки. Добавить( ) ;
НоваяПодСтрока. Слово = СловоЗамены;
КонецЦикла ;
КонецЕсли ;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
ВремДок. Close( wdDoNotSaveChanges, , ) ;
Если Не Ворд_Активен Тогда
Ворд. Quit( ) ;
КонецЕсли ;
КонецЕсли ;
Возврат Ложь ;
КонецЕсли ;
КонецФункции
Пример использования:
Код 1C v 8.х
Перем ДеревоЗначений;
Состояние( "Идет проверка орфографии. Пожалуйста ждите..." ) ;
Текст = ЭлементыФормы. ПолеТекстовогоДокумента. ПолучитьТекст( ) ;
Если ПроверитьОрфографию( Текст, ДеревоЗначений) Тогда
Предупреждение( "Текст ошибок не содержит!!!" , 5 , "OK" ) ;
Иначе
Если ДеревоЗначений. Строки. Количество( ) > 0 Тогда
ФормаВыбора = ЭтотОбъект. ПолучитьФорму( "ФормаВыбора" ) ;
Для каждого СтрокаДЗ Из ДеревоЗначений. Строки Цикл
Строка = ФормаВыбора. ДеревоЗначений. Строки. Добавить( ) ;
Строка. Слово = СтрокаДЗ. Слово;
Для каждого ПодСтрокаДЗ Из СтрокаДЗ. Строки Цикл
ПодСтрока = Строка. Строки. Добавить( ) ;
ПодСтрока. Слово = ПодСтрокаДЗ. Слово;
КонецЦикла ;
КонецЦикла ;
Если ФормаВыбора. ОткрытьМодально( ) = "OK" Тогда
Для каждого СтрокаДЗ Из ФормаВыбора. ДеревоЗначений. Строки Цикл
Для каждого ПодСтрокаДЗ Из СтрокаДЗ. Строки Цикл
Если ПодСтрокаДЗ. Пометка Тогда
Текст = СтрЗаменить( Текст, ПодСтрокаДЗ. Родитель. Слово, ПодСтрокаДЗ. Слово) ;
КонецЕсли ;
КонецЦикла ;
КонецЦикла ;
ЭлементыФормы. ПолеТекстовогоДокумента. УстановитьТекст( Текст) ;
КонецЕсли ;
Иначе
Предупреждение( "В тексте найдены ошибки, но вариантов автозамены не нашлось!!!" , 5 , "Ошибка" ) ;
КонецЕсли ;
КонецЕсли ;
Категория:
Работа с Microsoft Office и OpenOffice Форма ~ Как установить отбор в открываемой форме? Код 1C v 8.х ФормаВыбораВидаРасчета = ПланыВидовРасчета. УдержанияОрганизаций. ПолучитьФормуВыбора( "ФормаВыбора" , ЭлементыФормы. Удержания, "дляДокументаРегистрацияРазовыхУдержаний" ) ;
ФормаВыбораВидаРасчета. Отбор. Ссылка. ВидСравнения = ВидСравнения. НеВСписке;
ФормаВыбораВидаРасчета. Отбор. Ссылка. Значение = СпВидовРасчета;
ФормаВыбораВидаРасчета. Отбор. Ссылка. Использование = ИСТИНА ;
ФормаВыбораВидаРасчета. Открыть( ) ;
Категория:
Работа с Формой (Диалог) и её элементами Открыть форму выбора и выбрать документ Код 1C v 8.х
Форма = Документы. НачислениеЗарплатыРаботникамОрганизаций. ПолучитьФормуВыбора( ) ;
ВыбранныйДокумент = Форма. ОткрытьМодально( ) ;
Если ВыбранныйДокумент = Неопределено Тогда
Возврат ;
КонецЕсли ;
ФормаВыбора = Документы. НачислениеЗарплатыРаботникамОрганизаций. ПолучитьФормуВыбора( ) ;
ФормаВыбора. ДокументСписок. Отбор. Дата. ВидСравнения = ВидСравнения. ИнтервалВключаяОкончание;
ФормаВыбора. ДокументСписок. Отбор. Дата. ЗначениеС= НачалоМесяца( Дата) ;
ФормаВыбора. ДокументСписок. Отбор. Дата. ЗначениеПо = КонецМесяца( Дата) ;
ФормаВыбора. ДокументСписок. Отбор. Дата. Установить( ) ;
ФормаВыбора. Заголовок = "Выберите документ" ;
ВыбранныйДокумент = ФормаВыбора. ОткрытьМодально( ) ;
Категория:
Документы