Установить организацию при открытии Формы Списка
Добрый день,
В системе несколько организаций. Как можно программно открыть форму с уже выбранной организацией, чтобы пользователь не указывал ее вручную (см.рисунок).
Можно ли через параметр, или через какое-то свойство или метод формы (form)?
В системе несколько организаций. Как можно программно открыть форму с уже выбранной организацией, чтобы пользователь не указывал ее вручную (см.рисунок).
&AtClient
Function CommandProcessing(ПараметрКоманды, ПараметрыВыполненияКоманды)
params = new Structure();
params.Insert();
form = OpenForm("Справочник.Договоры.ФормаСписка", params);
EndFunction
Можно ли через параметр, или через какое-то свойство или метод формы (form)?
Прикрепленные файлы:
По теме из базы знаний
- Псевдо подписка на открытие форм в типовых конфигурациях 1С.
- Отчет по конфигурации: "Справочники, документы, регистры. Подсчет количества записей и переход в форму списка объекта"
- Управляемое приложение: правильное программное открытие форм
- Номенклатура (Расширенная форма списка) и Корзина для УТ11, ERP и КА
- Отчеты с общей формой отчета. Типовые сценарии
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Указанные Вами поля это пользовательские отборы. Соответственно, Вам надо передать на форму параметр в виде организации, а потом при создании на сервере подставить пользовательский отбор (для этого, кроме всего прочего, надо знать идентификатор пользовательской настройки). Установить через параметр "отбор" при открытии желаемого результата не даст.
(5)Еще раз спасибо, но предложенный код добавляет новое поле в Форму (см. рисунок), но не использует текущее.
все бы хорошо, но нужно использовать уже существующее из коробки поле Организация,
полагаю что дело в строке ОтборВладелец.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
Как можно заменить его на имеющееся?
&AtClient
Function CommandProcessing(ПараметрКоманды, ПараметрыВыполненияКоманды)
form = ОткрытьФорму("Справочник.ДоговорыКонтрагентов.Форма.ФормаСпискаОбщая");
ПользовательскийОтбор = form.Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(form.Список.КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки); //Если вам известен идентификатор, указываете здесь. Но можно не заполнять
ПользовательскийОтбор.Элементы.Очистить();
ОтборВладелец = ПользовательскийОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборВладелец.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборВладелец.ИдентификаторПользовательскойНастройки = "Org1"; //Произвольный текст
ОтборВладелец.Использование = Истина;
ОтборВладелец.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
ОтборВладелец.ПравоеЗначение = GetObject("00-000001");
EndFunction
&AtServer
Function GetObject(param)
return Справочники.Организации.НайтиПоКоду(param);
EndFunction
Показатьвсе бы хорошо, но нужно использовать уже существующее из коробки поле Организация,
полагаю что дело в строке ОтборВладелец.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
Как можно заменить его на имеющееся?
Прикрепленные файлы:
(8) Тогда Вы есть ввести меня в заблужение.
Код должен быть примерно таким (потому как я не знаю, что прописано в форме выбора договоров):
Точно можно сказать, посмотрев на код. Но, думаю, Вы сами разберетесь
Код должен быть примерно таким (потому как я не знаю, что прописано в форме выбора договоров):
ПараметрыФормы = Новый Структура("Организация", ТребуемаяОрганизация);
ОткрытьФорму("Справочник....", ПараметрыФормы);
Далее, в форме договоров в событии приСозданииНаСервере пишем что-то вроде
Если Параметры.Свйоство("Организация") Тогда
ОтборОрганизация = Параметры.Организация;
ОтборОрганизацияИспользование = ЗначениеЗаполнено(ОтборОрганизация);
//Здесь если указан при изменении поля отборОрганизщации вызов серверного метода, вызываем его
//Если только клиентский, то при открытии проверяем, если отборорганизацияиспользование = истина, вызываем что-//то вроде ОтборОрганизацияПриИзмененнии(Неопределено)
Конецесли;
ПоказатьТочно можно сказать, посмотрев на код. Но, думаю, Вы сами разберетесь
(9)Вроде понимаю, о чем вы пишите, но данный способ требует использования всех Справочников и Доков (точнее их форм) для того чтобы везде подвязываться к событиям приСозданииНаСервере. Этих справочников будет порядка 20-30. Договоры только 1й из многих. Поэтому данный вариант довольно накладный. Я хотел просто сделать Общие команды и вызывать форму из них? Это получается невозможно?
Нельзя никак получить ОтборОрганизация, чтобы выполнить
непосредственно в общей команде?
Нельзя никак получить ОтборОрганизация, чтобы выполнить
ОтборОрганизация = "Имя организации";
непосредственно в общей команде?
(10) Поищите в БП в этих обработчиках ПриСозданииНаСервере() проброс в какой-нибудь переопределяемый модуль. Что-то типа СобытияФорм.ПриСозданииНаСервере() или МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере(). Заимствуйте этот метод в свое расширение, и там напишите свой код один раз. Там же необходимо и проверять форму по её имени (на какой форме и какой отбор надо устанавливать).
(10) Непосредственно в общей команде только через отбор. Но на форму отбор не пробросится. Попробуйте как предложил (11)
Но вообще то,
1. не зная общей картины что-то советовать сложно
2. Делать нечто универсальное для кучи справочников и документов - смотрите как отрабатывает, например, контактная информация.
Но вообще то,
1. не зная общей картины что-то советовать сложно
2. Делать нечто универсальное для кучи справочников и документов - смотрите как отрабатывает, например, контактная информация.
(9)
До сюда сделал. На собитие ПриОткрытииФормы. Галочка встала, поле Организации заполнилось, но список не отфильтровался.
Вот это я забыл?
ОтборОрганизация = Параметры.Организация;
ОтборОрганизацияИспользование = ЗначениеЗаполнено(ОтборОрганизация);
ОтборОрганизацияИспользование = ЗначениеЗаполнено(ОтборОрганизация);
До сюда сделал. На собитие ПриОткрытииФормы. Галочка встала, поле Организации заполнилось, но список не отфильтровался.
ОтборОрганизацияПриИзмененнии(Неопределено)
Вот это я забыл?
(13) Под универсальностью я имел ввиду что все в одном месте и без подтягиваний в расширения справочников и документов, да, имена реквизитов могут быть разные, но я бы просто налепил 20-30 однотипных функций и они были бы в одном месте - это по крайней мере компактно.
Поищу совет (11), но он плох тем, что функции проверки будут срабатывать, даже когда этого не нужно, т.е. вообще всегда.
Общая картина такая - делаю Несколько подсистем со справочниками основными для нескольких бухгалтеров. Каждый бухгалтер отвечает за определенную организацию. Соответственно каждая подсистема открывает справочники, с требуемой организацией, чтобы бухи не выбирали и не меняли постоянно их. Знаю, что система запоминает последнюю организацию, но это все равно в ряде случаев неудобно.
Поищу совет (11), но он плох тем, что функции проверки будут срабатывать, даже когда этого не нужно, т.е. вообще всегда.
Общая картина такая - делаю Несколько подсистем со справочниками основными для нескольких бухгалтеров. Каждый бухгалтер отвечает за определенную организацию. Соответственно каждая подсистема открывает справочники, с требуемой организацией, чтобы бухи не выбирали и не меняли постоянно их. Знаю, что система запоминает последнюю организацию, но это все равно в ряде случаев неудобно.
Делал в УПП.
В модуле формы списка:
В общем модуле КФ_Сервер:
В модуле формы списка:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КФ_Сервер.УстановитьОтборПоОрганизацииУпр(ЭтаФорма);
КонецПроцедуры
В общем модуле КФ_Сервер:
Процедура УстановитьОтборПоОрганизацииУпр(ЭтаФорма,ИмяРеквизитаСписка="Список") Экспорт
Попытка
ОсновнаяОрганизация=УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнаяОрганизация");
Если ЗначениеЗаполнено(ОсновнаяОрганизация) Тогда
Список=ЭтаФорма[ИмяРеквизитаСписка];
ЭлементыОтбора=Список.КомпоновщикНастроек.Настройки.Отбор.Элементы;
Эл=ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Эл.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("Организация");
Эл.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
Эл.ПравоеЗначение=ОсновнаяОрганизация;
Эл.Использование=Истина;
Эл.РежимОтображения=РежимОтображенияЭлементаНастройкиКомпоновки Данных.Обычный;
//Эл.ИдентификаторПользовательскойНастройки="Организация"; //В пользовательских настройках Использование сохраняется
Эл.ИдентификаторПользовательскойНастройки=Новый УникальныйИдентификатор;
КонецЕсли;
Исключение
Сообщить("Ошибка установки отбора по организации (Процедура КФ_Клиент.УстановитьОтборПоОрганизацииУпр). " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот