Добавление строка поиска для таблицы в справочнике "ВидыНоменклатуры"
Здравствуйте, в справочнике "ВидыНоменклатуры" в разделе "Видимость, контроль заполнения и уникальности" в таблице хотели бы реализовать строки поиска, в свойстве командной панели автозаполнение было отключено, включил, но появившиеся строка поиска не работает, три таблицы объединены и свернуто. добавил ещё одну таблицу со строкой поиска, чтобы проверить работоспособности, работает. Объясните, как добавит эту строку или с реквизита или со свойство объекта, как можно эту строку реализовать?
Прикрепленные файлы:


По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(4) Здравствуйте, справился, спасибо.
Ещё добавляю кнопку чтобы отобразить только "дополнительные (добавленные) реквизиты" и только "стандартные реквизиты" в таблице. Чтобы была возможность посмотреть только "дополнительные (добавленные) реквизиты" и только "стандартные реквизиты", дополнительные реквизиты подчеркнуты, пытаюсь реализовать эту функциональность, как можно это реализовать?
Ещё добавляю кнопку чтобы отобразить только "дополнительные (добавленные) реквизиты" и только "стандартные реквизиты" в таблице. Чтобы была возможность посмотреть только "дополнительные (добавленные) реквизиты" и только "стандартные реквизиты", дополнительные реквизиты подчеркнуты, пытаюсь реализовать эту функциональность, как можно это реализовать?
Прикрепленные файлы:





(4) Нашёл метод найти строки, но не знаю как реализовать, можно ли его реализовать так чтобы при нажатии на кнопку отобразил только добавленные реквизиты?
ТаблицаЗначений (ValueTable)
НайтиСтроки (FindRows)
Синтаксис:
НайтиСтроки(<ПараметрыОтбора>)
Параметры:
<ПараметрыОтбора> (обязательный)
Тип: Структура.
Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры - искомое значение.
Возвращаемое значение:
Тип: Массив.
Массив строк таблицы значений, соответствующих условиям поиска.
Замечание! Массив хранит ссылки на строки таблицы значений, то есть при изменении строки в таблице, значение в массиве тоже будет измененным.
Описание:
Осуществляет поиск строк таблицы значений, отвечающих заданным условиям поиска.
Если в таблице значений добавлены индексы, подбор индекса для поиска осуществляется по точному соответствию состава колонок в индексе и в параметрах поиска, порядок следования колонок значения не имеет.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Примечание:
Метод эффективно использовать для выборки неуникальных значений.
ТаблицаЗначений (ValueTable)
НайтиСтроки (FindRows)
Синтаксис:
НайтиСтроки(<ПараметрыОтбора>)
Параметры:
<ПараметрыОтбора> (обязательный)
Тип: Структура.
Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры - искомое значение.
Возвращаемое значение:
Тип: Массив.
Массив строк таблицы значений, соответствующих условиям поиска.
Замечание! Массив хранит ссылки на строки таблицы значений, то есть при изменении строки в таблице, значение в массиве тоже будет измененным.
Описание:
Осуществляет поиск строк таблицы значений, отвечающих заданным условиям поиска.
Если в таблице значений добавлены индексы, подбор индекса для поиска осуществляется по точному соответствию состава колонок в индексе и в параметрах поиска, порядок следования колонок значения не имеет.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Примечание:
Метод эффективно использовать для выборки неуникальных значений.
(10) Самое простое - это сделать отбор через свойство таблицы формы ОтборСтрок. Например установить отбор: Отключить отбор:
Элементы.РеквизитыДляКонтроляНоменклатуры.ОтборСтрок = Новый ФиксированнаяСтруктура("ИмяРеквизита", ЗначениеДляОтбора);
Элементы.РеквизитыДляКонтроляНоменклатуры.ОтборСтрок = Неопределено;
(11)
Какую часть кода исправить?
РеквизитыДляКонтроляНоменклатуры
В модуле формы примерно в трёх местах встречается отбор для этого реквизита
&НаСервере
Процедура ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаНоменклатурыНаСервере(ШаблонНаименования)
Если Не ЗначениеЗаполнено(ШаблонНаименования) Тогда
Возврат;
КонецЕсли;
ДополнительныеРеквизиты = Справочники.Номенклатура.ВсеДополнительныеРеквизиты(Объект.Ссылка, "Номенклатура");
ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
Отбор = Новый Структура("ИмяРеквизита, Свойство, ЭтоДопРеквизит");
ОперандыТекстовойФормулы = РаботаСФормуламиКлиентСервер.ОперандыТекстовойФормулы(ШаблонНаименования);
Для каждого СтрокаТЧ Из Объект.РеквизитыДляКонтроляНоменклатуры Цикл
ИмяРеквизита = СтрокаТЧ.ИмяРеквизита;
РеквизитИспользуетсяВФормуле = (ОперандыТекстовойФормулы.Найти(ИмяРеквизита) <> Неопределено);
Если Не РеквизитИспользуетсяВФормуле Тогда
Продолжить;
КонецЕсли;
// Если тип реквизита - Булево, то не включать для него контроль заполнения.
Если СтрокаТЧ.ЭтоДопРеквизит Тогда
ЗаполнитьЗначенияСвойств(Отбор, СтрокаТЧ);
НайденныеСтроки = ДополнительныеРеквизиты.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
СтрокаДопРеквизитовСведений = НайденныеСтроки[0];
ТипЗначенияРеквизита = СтрокаДопРеквизитовСведений.Тип;
Иначе
Реквизит = Метаданные.Справочники.Номенклатура.Реквизиты.Найти(ИмяРеквизита);
Если Реквизит = Неопределено Тогда
Продолжить;
КонецЕсли;
ТипЗначенияРеквизита = Реквизит.Тип;
КонецЕсли;
Если ТипЗначенияРеквизита = ОписаниеТиповБулево Тогда
Продолжить;
КонецЕсли;
СтрокаТЧ.ЗаполнятьОбязательно = Истина;
СтрокаТЧ.ОтображатьПриСоздании = Истина;
СтрокаТЧ.ДоступностьОтображатьПриСоздании = Ложь;
Модифицированность = Истина;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ВключитьПроверкуЗаполненияДляРеквизитовБыстрогоОтбораНоменклатурыНаСервере()
Отбор = Новый Структура("ИмяРеквизита");
Для каждого СтрокаТЧ Из Объект.РеквизитыДляКонтроляНоменклатуры Цикл
Отбор.ИмяРеквизита = СтрокаТЧ.ИмяРеквизита;
РеквизитИспользуетсяДляОтбора = (Объект.РеквизитыБыстрогоОтбораНоменклатуры.НайтиСтроки(Отбор).Количество() <> 0);
Если РеквизитИспользуетсяДляОтбора Тогда
СтрокаТЧ.ЗаполнятьОбязательно = Истина;
СтрокаТЧ.ОтображатьПриСоздании = Истина;
СтрокаТЧ.ДоступностьОтображатьПриСоздании = Ложь;
Модифицированность = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПолитикиУчетаСерийПолитикаУчетаСерий.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПолитикиУчетаСерий.Склад");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<выберите склад>';
|en = '<select warehouse>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
//
УстановитьУсловноеОформлениеРеквизитыДляКонтроля(
"РеквизитыДляКонтроляНоменклатуры",
"ТаблицаДопРеквизитовНоменклатуры",
"ТаблицаДопРеквизитовСерий");
УстановитьУсловноеОформлениеРеквизитыДляКонтроля(
"РеквизитыДляКонтроляХарактеристик",
"ТаблицаДопРеквизитовХарактеристик",
"ТаблицаДопРеквизитовХарактеристик");
УстановитьУсловноеОформлениеРеквизитыДляКонтроля(
"РеквизитыДляКонтроляСерий",
"ТаблицаДопРеквизитовСерий",
"ТаблицаДопРеквизитовСерий");
Если ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИспользованиеУпаковокОбщийНабор.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Элементы.ИспользоватьУпаковки.ТолькоПросмотр;
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
//
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИспользованиеУпаковокИндивидуальныйНабор.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Элементы.ИспользоватьУпаковки.ТолькоПросмотр;
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
КонецЕсли;
КонецПроцедуры
ПоказатьКакую часть кода исправить?
(12)
В модуле формы примерно в трёх местах встречается отбор для этого реквизита
Это имя я выбрал только исходя из вашего скрина. Вам виднее для какой таблицы нужен отбор. Вы спросили как сделать отбор в таблице, я ответил ровно только на этот вопрос. Погружаться в контекст типового кода у меня нет возможности.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот