Параметры выбора счета по организации в банковских документах. УНФ 1.6

В УНФ довольно таки интересная настройка отбора в списках, в том числе и в списке банковских документов:

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

Приходится доработать расширением модуль РаботаСОтборами:


&После("УстановитьОтборСписка")
Процедура дор_УстановитьОтборСписка(Форма, СписокОтбора, ИмяПоляОтбора, ИмяСписка, ИспользованиеОтбора, ИмяТЧДанныеМеток, ИмяОтбора, ИмяТЧДанныеОтборов)
	//Настраиваем параметры отбора
	
	Если Форма.ИмяФормы = "Обработка.БанкИКасса.Форма.ФормаСписка" Тогда
		//Если Форма.Элементы.Найти("ОтборСчетИКасса") <> Неопределено Тогда
		СписокОрганизаций = Новый СписокЗначений();
		Для Каждого ЭлементОтбора ИЗ СписокОтбора.Отбор.Элементы Цикл
			Если 
				ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") И 
				ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОрганизацияДляОтбора") Тогда
				СписокОрганизацийОтбора = ЭлементОтбора.ПравоеЗначение;
				Если ТипЗнч(СписокОрганизацийОтбора) = Тип("СписокЗначений") Тогда
					Для Каждого Эл ИЗ СписокОрганизацийОтбора Цикл
						СписокОрганизаций.Добавить(Эл.Значение);	
					КонецЦикла;
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;                                                       
		
		
		
		
		//Заполняем заново списки отбора
		ПрочитатьРасчетныеСчетаИКассы(Форма, СписокОрганизаций);
		
		//Через параметры выбора не работает - там список выбора организаций нужен
		//ПараметрыВыбораМ = Новый Массив();
		//Если СписокОрганизаций.Количество() > 0 Тогда
		//	ЗначенияОтбораМ =  СписокОрганизаций.ВыгрузитьЗначения(); //Все отобранные организации
		//	ЗначенияОтбораФМ = Новый ФиксированныйМассив(ЗначенияОтбораМ);
		//	ПараметрОтбора = Новый ПараметрВыбора("Отбор.Владелец", ЗначенияОтбораФМ);
		//	ПараметрыВыбораМ.Добавить(ПараметрОтбора);
		//КонецЕсли;
		//ПараметрыВыбораФМ = Новый ФиксированныйМассив(ПараметрыВыбораМ);
		//Форма.Элементы.ОтборСчетИКасса.ПараметрыВыбора = ПараметрыВыбораФМ;
		
	КонецЕсли;
КонецПроцедуры       

&НаСервере
Процедура ПрочитатьРасчетныеСчетаИКассы(Форма, СписокОрганизаций)
	//Скопировано из обработки БанкИКасса
	Перем Элементы; Элементы = Форма.Элементы; //ДОбавлено
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	Кассы.Ссылка,
		|	ПРЕДСТАВЛЕНИЕ(Кассы.Ссылка) КАК Представление
		|ИЗ
		|	Справочник.Кассы КАК Кассы
		|
		|УПОРЯДОЧИТЬ ПО
		|	Кассы.Наименование
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	БанковскиеСчета.Ссылка,
		|	ПРЕДСТАВЛЕНИЕ(БанковскиеСчета.Ссылка) КАК Представление
		|ИЗ
		|	Справочник.БанковскиеСчета КАК БанковскиеСчета
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Организации КАК Организации
		|		ПО БанковскиеСчета.Владелец = Организации.Ссылка";
	
	//Осипов - добавил отбор
	Если СписокОрганизаций.Количество() > 0 Тогда
		Запрос.Текст = Запрос.Текст + " ГДЕ  БанковскиеСчета.Владелец В (&СписокОрганизаций) ";
		Запрос.УстановитьПараметр("СписокОрганизаций", СписокОрганизаций);
	КонецЕсли;
	
	МассивРезультатов = Запрос.ВыполнитьПакет();
	
	ВыборкаКасс = МассивРезультатов[0].Выбрать();
	ВыборкаСчетов = МассивРезультатов[1].Выбрать();
	
	Элементы.ОтборСчетИКасса.СписокВыбора.Очистить();
	Элементы.ОтборСчетПП.СписокВыбора.Очистить();
	
	Пока ВыборкаСчетов.Следующий() Цикл
		Элементы.ОтборСчетИКасса.СписокВыбора.Добавить(ВыборкаСчетов.Ссылка, ВыборкаСчетов.Представление,, БиблиотекаКартинок.Банк);
	КонецЦикла;
	ВыборкаСчетов.Сбросить();
	Пока ВыборкаСчетов.Следующий() Цикл
		Элементы.ОтборСчетПП.СписокВыбора.Добавить(ВыборкаСчетов.Ссылка,,, БиблиотекаКартинок.Банк);
	КонецЦикла;
	Пока ВыборкаКасс.Следующий() Цикл
		Элементы.ОтборСчетИКасса.СписокВыбора.Добавить(ВыборкаКасс.Ссылка, ВыборкаКасс.Представление,, БиблиотекаКартинок.Касса);
	КонецЦикла;
	
КонецПроцедуры

Первоначально я думал сделать через параметры выбора, но не работало. Начал разбираться почему — понял, что используется список выбора. Пришлось копировать типовую процедуру заполнения списка выбора счетов и касс.

Среда: УНФ 1.6.27.167. Объем: 1 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

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