Добавление строка поиска для таблицы в справочнике "ВидыНоменклатуры"

1. Gok9 07.10.22 11:50 Сейчас в теме
Здравствуйте, в справочнике "ВидыНоменклатуры" в разделе "Видимость, контроль заполнения и уникальности" в таблице хотели бы реализовать строки поиска, в свойстве командной панели автозаполнение было отключено, включил, но появившиеся строка поиска не работает, три таблицы объединены и свернуто. добавил ещё одну таблицу со строкой поиска, чтобы проверить работоспособности, работает. Объясните, как добавит эту строку или с реквизита или со свойство объекта, как можно эту строку реализовать?
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SlavaKron 07.10.22 12:02 Сейчас в теме
(1) Попробуйте через дополнение элемента формы.
Прикрепленные файлы:
krikmarin; Gok9; +2 Ответить
3. Gok9 07.10.22 12:54 Сейчас в теме
(2) Спасибо, получилось. Теперь как этот справочник вывести в расширение одной кнопкой? Чтобы каждый объект справочника не вывести по отдельности?
4. SlavaKron 07.10.22 13:54 Сейчас в теме
(3) Затрудняюсь ответить - не совсем понимаю, что вы хотите сделать.
5. Gok9 10.10.22 11:26 Сейчас в теме
(4) Здравствуйте, справился, спасибо.
Ещё добавляю кнопку чтобы отобразить только "дополнительные (добавленные) реквизиты" и только "стандартные реквизиты" в таблице. Чтобы была возможность посмотреть только "дополнительные (добавленные) реквизиты" и только "стандартные реквизиты", дополнительные реквизиты подчеркнуты, пытаюсь реализовать эту функциональность, как можно это реализовать?
Прикрепленные файлы:
6. Gok9 10.10.22 14:09 Сейчас в теме
(2)
(4)Можно ли сортировать эту таблицу на дополнительные и стандартные реквизиты? Или это невозможно?
7. Gok9 11.10.22 09:44 Сейчас в теме
(4) Не знайте других видов отбора для этой таблицы?
8. Gok9 11.10.22 10:01 Сейчас в теме
(4) Нашёл метод найти строки, но не знаю как реализовать, можно ли его реализовать так чтобы при нажатии на кнопку отобразил только добавленные реквизиты?
ТаблицаЗначений (ValueTable)
НайтиСтроки (FindRows)
Синтаксис:
НайтиСтроки(<ПараметрыОтбора>)
Параметры:
<ПараметрыОтбора> (обязательный)
Тип: Структура.
Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры - искомое значение.
Возвращаемое значение:
Тип: Массив.
Массив строк таблицы значений, соответствующих условиям поиска.
Замечание! Массив хранит ссылки на строки таблицы значений, то есть при изменении строки в таблице, значение в массиве тоже будет измененным.
Описание:
Осуществляет поиск строк таблицы значений, отвечающих заданным условиям поиска.
Если в таблице значений добавлены индексы, подбор индекса для поиска осуществляется по точному соответствию состава колонок в индексе и в параметрах поиска, порядок следования колонок значения не имеет.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Примечание:
Метод эффективно использовать для выборки неуникальных значений.
9. SlavaKron 11.10.22 10:13 Сейчас в теме
(8) У вас таблица формы связана с таблицей значений?
10. Gok9 11.10.22 10:41 Сейчас в теме
(9)
(9)
таблица формы связана с таблицей значений?

Как это можно проверить? Тоже об этом подозревал... Жаль что в ТаблицаЗначений нет метод отбора как в Динамическом списке
Слаб в программировании...
Прикрепленные файлы:
11. SlavaKron 11.10.22 10:52 Сейчас в теме
(10) Самое простое - это сделать отбор через свойство таблицы формы ОтборСтрок. Например установить отбор:
Элементы.РеквизитыДляКонтроляНоменклатуры.ОтборСтрок = Новый ФиксированнаяСтруктура("ИмяРеквизита", ЗначениеДляОтбора);
Отключить отбор:
Элементы.РеквизитыДляКонтроляНоменклатуры.ОтборСтрок = Неопределено;
12. Gok9 11.10.22 11:08 Сейчас в теме
(11)
РеквизитыДляКонтроляНоменклатуры
В модуле формы примерно в трёх местах встречается отбор для этого реквизита

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
		
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПолитикиУчетаСерийПолитикаУчетаСерий.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПолитикиУчетаСерий.Склад");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);
	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<выберите склад>';
																|en = '<select warehouse>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	
	//
		
	УстановитьУсловноеОформлениеРеквизитыДляКонтроля(
		"РеквизитыДляКонтроляНоменклатуры",
		"ТаблицаДопРеквизитовНоменклатуры",
		"ТаблицаДопРеквизитовСерий");
	УстановитьУсловноеОформлениеРеквизитыДляКонтроля(
		"РеквизитыДляКонтроляХарактеристик",
		"ТаблицаДопРеквизитовХарактеристик",
		"ТаблицаДопРеквизитовХарактеристик");
	УстановитьУсловноеОформлениеРеквизитыДляКонтроля(
		"РеквизитыДляКонтроляСерий",
		"ТаблицаДопРеквизитовСерий",
		"ТаблицаДопРеквизитовСерий");
	
	Если ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда
		
		Элемент = УсловноеОформление.Элементы.Добавить();
		
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИспользованиеУпаковокОбщийНабор.Имя);
		
		ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ОтборЭлемента.ЛевоеЗначение = Элементы.ИспользоватьУпаковки.ТолькоПросмотр;
		ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
		ОтборЭлемента.ПравоеЗначение = Истина;
		
		Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
		
		//
		
		Элемент = УсловноеОформление.Элементы.Добавить();
		
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИспользованиеУпаковокИндивидуальныйНабор.Имя);
		
		ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ОтборЭлемента.ЛевоеЗначение = Элементы.ИспользоватьУпаковки.ТолькоПросмотр;
		ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
		ОтборЭлемента.ПравоеЗначение = Истина;
		
		Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
		
	КонецЕсли;
		
КонецПроцедуры
Показать

Какую часть кода исправить?
13. SlavaKron 11.10.22 11:26 Сейчас в теме
(12)
В модуле формы примерно в трёх местах встречается отбор для этого реквизита
Это имя я выбрал только исходя из вашего скрина. Вам виднее для какой таблицы нужен отбор. Вы спросили как сделать отбор в таблице, я ответил ровно только на этот вопрос. Погружаться в контекст типового кода у меня нет возможности.
Оставьте свое сообщение

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