Имя: Пароль:
1C
1С v8
Открытие формы выбора с отбором.
0 lirt82
 
11.08.26
14:45
Всем привет, есть документ у него таб часть Товары, есть команда заполнения таб части Товары, при выборе команды заполнения таб части Товары, открывается доп. окно с выбором счета из плана счетов. Как зашить отбор когда пользователь проваливается в реквизит а у него уже фильтр настроен чтобы он что попало не выбирал? Код не отрабатывает

&НаКлиенте
Процедура Счет7XНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    СписокСчетов7Х = Новый СписокЗначений;
    ПараметрыВыбора = Новый Структура("Отбор", СписокСчетов7Х());    
    
    ОткрытьФорму("ПланСчетов.Хозрасчетный.ФормаВыбора", ПараметрыВыбора);
    
КонецПроцедуры

&НаСервере
Функция СписокСчетов7Х()
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Хозрасчетный.Ссылка КАК Счет
    |ИЗ
    |    ПланСчетов.Хозрасчетный КАК Хозрасчетный
    |ГДЕ
    |    Хозрасчетный.Код ПОДОБНО ""7%""";
    
    ТЗ = Запрос.Выполнить().Выгрузить();
    
    МассивЗначений = ТЗ.ВыгрузитьКолонку("Счет");
    Список7Х = Новый СписокЗначений;
    Список7Х.ЗагрузитьЗначения(МассивЗначений);
    
    Возврат Список7Х;
    
КонецФункции
1 Fragster
 
гуру
11.08.26
14:54
а через параметры выбора мышью накликать не получается?
2 Tatitutu
 
11.08.26
15:05
(0)
это лишняя строка
СписокСчетов7Х = Новый СписокЗначений;

а зачет ты форму открываешь
ОткрытьФорму("ПланСчетов.Хозрасчетный.ФормаВыбора", ПараметрыВыбора);

ДанныеВыбора = ВыбратьИЗСписка(
или
ДанныеВыбора = ВыбратьИзМеню(
3 Fedor-1971
 
11.08.26
15:31
(0) Отбор работает только на равенство, вот так попробуй:
масСчетов = СписокСчетов7Х();
		
НовыйМассивПараметров = Новый Массив;
НовыйМассивПараметров.Добавить(Новый ПараметрВыбора("Отбор.Ссылка",   Новый ФиксированныйМассив(масСчетов)));
НовыйМассивПараметров.Добавить(Новый ПараметрВыбора("Отбор.Валютный", Ложь));    	
НовыйМассивПараметров.Добавить(Новый ПараметрВыбора("Отбор.ЗапретитьИспользоватьВПроводках", Ложь));

Форма.Элементы.СчетУчетаРасчетовПоАвансам.ПараметрыВыбора = Новый ФиксированныйМассив(НовыйМассивПараметров);

Т.е. сначала выставляешь отборы, потом просто открываешь форму выбора - фильтры выставит сам система
4 PLUT
 
гуру
11.08.26
15:18
(0) как вариант, при вызове формы выбора добавить в параметры свойство "жоскийотбор" со списком нужных счетов

а в форме выбора в процедуре ПриСозданииНаСервере()

добавить костылики свои:

проверку на свойство "жоскийотбор" в параметрах

и добавить магию

ТекущиеНастройки     = Список.КомпоновщикНастроек.Настройки;
        КомпоновщикОтбора     = ТекущиеНастройки.Отбор;

//тут какая-то магия по программному удалению ненужных отборов и добавлению нужных (т.к. пользователь может нах.евертить своих отборов)

//Загружаем  настройки обратно в список
Список.КомпоновщикНастроек.ЗагрузитьНастройки(ТекущиеНастройки);
5 Fedor-1971
 
11.08.26
15:19
(4) Слишком вопросно поддерживать, главное не забыть что и для чего отбирали
6 PLUT
 
гуру
11.08.26
15:23
(5) вообще не сложно, можно в расширение запихнуть костыли, ну и трехстороннее автообновление не сломается, если с "замочка" сняли форму выбора
7 Fedor-1971
 
11.08.26
15:29
(6) Через год вспомнишь что за отбор "жоскийотбор" (даже в осмысленном названии)?
Кроме того, есть вероятность, что этот отбор модифицируют и он перестанет соответствовать названию - получим проблемы на ровном месте.

В (3) всё красиво - одна точка, прямо по месту требования, если что-то захотят добавить, то исправляют тут же и не парятся за влияние на другие документы. И без дополнительного кода в других формах
8 PLUT
 
гуру
11.08.26
15:29
(7) комментарии потомкам можно оставить, если на буквах не экономить

у меня обычно номер тикета (из сервисдеска) и дата. я на буквах экономлю
9 PLUT
 
гуру
11.08.26
15:32
(7)

в (3) не будет работать, т.к. пользовательские настройки формы (если они есть) наложатся на твой отбор и получится "болт" - пустая форма выбора в лучшем случае
10 Fedor-1971
 
11.08.26
15:34
(8) Это как удобнее. Главное не потерять / почистить БД с тикетами, будет совсем непонятно зачем такое делали
11 PLUT
 
гуру
11.08.26
15:35
(10) все ходы записаны. в сервисдеск откуда попадают хотелки?

правильно - из почты на ящик службы технического сочувствия. главное еще и ящик не протерять в случае протери БД с тикетами
12 Fedor-1971
 
11.08.26
15:38
(9) Нет, это как раз штатный отбор нескольких значений
Если есть пользовательский отбор - он налаживается на список после штатного и пустая форма будет только при отсутствии в штатном данных для отбора пользователя

Если совсем красиво делать, то настройки отбора для элемента формы надо делать, например, ПриНачалеРедактированияСтроки
13 PLUT
 
гуру
11.08.26
15:43
(12) откуда такая уверенность?

вот, например, грабля в посте с номером 0

Как отключить пользовательский отбор на форме выбора
14 Fedor-1971
 
11.08.26
15:51
(13) Если я правильно понял, то налаживается пользовательский отбор, который конфликтует с существующим.

В (3), опять же, чисто моё мнение - это наложенные условия на уровне запроса выборки данных (системная работа 1С), после него отрабатывают отборы пользователя в настройках ДС как предложено в (4)
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.