Установить организацию при открытии Формы Списка

1. kmish 08.01.22 10:03 Сейчас в теме
Добрый день,
В системе несколько организаций. Как можно программно открыть форму с уже выбранной организацией, чтобы пользователь не указывал ее вручную (см.рисунок).
&AtClient
Function CommandProcessing(ПараметрКоманды, ПараметрыВыполненияКоманды)
	params = new Structure();
	params.Insert();
 	form = OpenForm("Справочник.Договоры.ФормаСписка", params);
EndFunction

Можно ли через параметр, или через какое-то свойство или метод формы (form)?
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. glek 120 08.01.22 10:21 Сейчас в теме
(1) Указанные Вами поля это пользовательские отборы. Соответственно, Вам надо передать на форму параметр в виде организации, а потом при создании на сервере подставить пользовательский отбор (для этого, кроме всего прочего, надо знать идентификатор пользовательской настройки). Установить через параметр "отбор" при открытии желаемого результата не даст.
4. kmish 08.01.22 10:25 Сейчас в теме
(3) Спасибо. Но понятного тут мало. Есть ли какой-то развернутый пример подобного рода, или хотя бы корректая формулировка для поиска. Задача, по идее, незаурядная.
5. glek 120 08.01.22 10:28 Сейчас в теме
(4) На самом деле задача несложная. Вот для примера.
https://sergeyka.ru/otkrytie-spiska-s-otborom/
6. kmish 09.01.22 08:59 Сейчас в теме
(5)Еще раз спасибо, но предложенный код добавляет новое поле в Форму (см. рисунок), но не использует текущее.
&AtClient
Function CommandProcessing(ПараметрКоманды, ПараметрыВыполненияКоманды)
 	form = ОткрытьФорму("Справочник.ДоговорыКонтрагентов.Форма.ФормаСпискаОбщая");
	ПользовательскийОтбор = form.Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(form.Список.КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки); //Если вам известен идентификатор, указываете здесь. Но можно не заполнять
	ПользовательскийОтбор.Элементы.Очистить();
    
    ОтборВладелец = ПользовательскийОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборВладелец.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ОтборВладелец.ИдентификаторПользовательскойНастройки = "Org1";  //Произвольный текст
    ОтборВладелец.Использование = Истина;
    ОтборВладелец.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
    ОтборВладелец.ПравоеЗначение = GetObject("00-000001");
EndFunction

&AtServer
Function GetObject(param)
	return Справочники.Организации.НайтиПоКоду(param);
EndFunction
Показать

все бы хорошо, но нужно использовать уже существующее из коробки поле Организация,
полагаю что дело в строке ОтборВладелец.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
Как можно заменить его на имеющееся?
Прикрепленные файлы:
7. glek 120 09.01.22 09:20 Сейчас в теме
(6) А поле Организация существующее или добавленное настройкой списка? Оно существует в конфигураторе на форме списка?
8. kmish 09.01.22 09:26 Сейчас в теме
(7)
Оно существует в конфигураторе на форме

Если вы про первое поле что из коробки - оно существующее. Я хочу к нему привязаться.
Это из БП3. См.скрин.
Прикрепленные файлы:
9. glek 120 09.01.22 09:52 Сейчас в теме
(8) Тогда Вы есть ввести меня в заблужение.
Код должен быть примерно таким (потому как я не знаю, что прописано в форме выбора договоров):
ПараметрыФормы = Новый Структура("Организация", ТребуемаяОрганизация);
ОткрытьФорму("Справочник....", ПараметрыФормы);
Далее, в форме договоров в событии приСозданииНаСервере пишем что-то вроде
Если Параметры.Свйоство("Организация") Тогда
ОтборОрганизация = Параметры.Организация;
ОтборОрганизацияИспользование = ЗначениеЗаполнено(ОтборОрганизация);

//Здесь если указан при изменении поля отборОрганизщации вызов серверного метода, вызываем его
//Если только клиентский, то при открытии проверяем, если отборорганизацияиспользование = истина, вызываем что-//то вроде ОтборОрганизацияПриИзмененнии(Неопределено)
Конецесли;
Показать


Точно можно сказать, посмотрев на код. Но, думаю, Вы сами разберетесь
10. kmish 09.01.22 10:00 Сейчас в теме
(9)Вроде понимаю, о чем вы пишите, но данный способ требует использования всех Справочников и Доков (точнее их форм) для того чтобы везде подвязываться к событиям приСозданииНаСервере. Этих справочников будет порядка 20-30. Договоры только 1й из многих. Поэтому данный вариант довольно накладный. Я хотел просто сделать Общие команды и вызывать форму из них? Это получается невозможно?
Нельзя никак получить ОтборОрганизация, чтобы выполнить
ОтборОрганизация = "Имя организации";

непосредственно в общей команде?
11. FatPanzer 09.01.22 10:07 Сейчас в теме
(10) Поищите в БП в этих обработчиках ПриСозданииНаСервере() проброс в какой-нибудь переопределяемый модуль. Что-то типа СобытияФорм.ПриСозданииНаСервере() или МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере(). Заимствуйте этот метод в свое расширение, и там напишите свой код один раз. Там же необходимо и проверять форму по её имени (на какой форме и какой отбор надо устанавливать).
12. glek 120 09.01.22 10:19 Сейчас в теме
(10) Непосредственно в общей команде только через отбор. Но на форму отбор не пробросится. Попробуйте как предложил (11)
Но вообще то,
1. не зная общей картины что-то советовать сложно
2. Делать нечто универсальное для кучи справочников и документов - смотрите как отрабатывает, например, контактная информация.
13. glek 120 09.01.22 10:20 Сейчас в теме
(10) У Вас на одной форме, например по организации, может быть реквизит ОтборОрганизация, на другой реквизита не будет. Универсально - никак.
17. kmish 09.01.22 14:18 Сейчас в теме
(9)
ОтборОрганизация = Параметры.Организация;
ОтборОрганизацияИспользование = ЗначениеЗаполнено(ОтборОрганизация);

До сюда сделал. На собитие ПриОткрытииФормы. Галочка встала, поле Организации заполнилось, но список не отфильтровался.
ОтборОрганизацияПриИзмененнии(Неопределено)

Вот это я забыл?
18. kmish 10.01.22 10:33 Сейчас в теме
(17)
ОтборыСписковКлиентСервер.УстановитьБыстрыйОтбор(ЭтотОбъект, "Организация");

норм, обновляет
2. пользователь 08.01.22 10:16
Сообщение было скрыто модератором.
...
14. kmish 09.01.22 10:28 Сейчас в теме
(13) Под универсальностью я имел ввиду что все в одном месте и без подтягиваний в расширения справочников и документов, да, имена реквизитов могут быть разные, но я бы просто налепил 20-30 однотипных функций и они были бы в одном месте - это по крайней мере компактно.
Поищу совет (11), но он плох тем, что функции проверки будут срабатывать, даже когда этого не нужно, т.е. вообще всегда.
Общая картина такая - делаю Несколько подсистем со справочниками основными для нескольких бухгалтеров. Каждый бухгалтер отвечает за определенную организацию. Соответственно каждая подсистема открывает справочники, с требуемой организацией, чтобы бухи не выбирали и не меняли постоянно их. Знаю, что система запоминает последнюю организацию, но это все равно в ряде случаев неудобно.
15. glek 120 09.01.22 10:36 Сейчас в теме
(14) Под таким соусом ващем то рулит РЛС. И не надо никаких интерфейсных заморочек.
16. kmish 09.01.22 12:19 Сейчас в теме
(15) РЛС, насколько я успел ознакомиться, полностью отрезает доступ к организации, а он должен сохраняться.
19. VZyryanov 10.01.22 11:12 Сейчас в теме
Делал в УПП.
В модуле формы списка:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)	
	КФ_Сервер.УстановитьОтборПоОрганизацииУпр(ЭтаФорма);
КонецПроцедуры


В общем модуле КФ_Сервер:
Процедура УстановитьОтборПоОрганизацииУпр(ЭтаФорма,ИмяРеквизитаСписка="Список") Экспорт
	Попытка
		ОсновнаяОрганизация=УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнаяОрганизация");
		Если ЗначениеЗаполнено(ОсновнаяОрганизация) Тогда
			Список=ЭтаФорма[ИмяРеквизитаСписка];
			ЭлементыОтбора=Список.КомпоновщикНастроек.Настройки.Отбор.Элементы;
			Эл=ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
			Эл.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("Организация");
			Эл.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
			Эл.ПравоеЗначение=ОсновнаяОрганизация;
			Эл.Использование=Истина;
			Эл.РежимОтображения=РежимОтображенияЭлементаНастройкиКомпоновки­Данных.Обычный;
			//Эл.ИдентификаторПользовательскойНастройки="Организация"; //В пользовательских настройках Использование сохраняется
			Эл.ИдентификаторПользовательскойНастройки=Новый УникальныйИдентификатор;
		КонецЕсли;
	Исключение
		Сообщить("Ошибка установки отбора по организации (Процедура КФ_Клиент.УстановитьОтборПоОрганизацииУпр). " + ОписаниеОшибки());
	КонецПопытки;
КонецПроцедуры
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот