База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как избежать влияния ВидРабочегоЦентра на фильтр в 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 1 месяц, 2 недели назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
1 октября 2025 в 11:00 #33621
Odineski
Участник1С программирование. Модуль документа. Есть реквизит документа ВидРабочегоЦентра, тип данных СсылкаСправочник. Есть процедура ЗаполнитьПодборНаСервере(), которая реализует подбор в табличную часть Состав, документа ЭМИСменноеЗадание.
надо, чтобы Вид РабЦентра, который в самом верху, не влиял на фильтр в подборе, и фильтр они могли сами ставить как хотят.
но при смене ВидаРабЦентра в табличной части документа он проставляется в соответствующий реквизит, и если это линия профилирования, то и Раб.Центр заполняется соответствующе (Прокат ЛП-1 = ЛП-1)
плюс сделать проверку на незаполенный реквизит табл.части РабочийЦентр, ругаться, но не запрещать (пока) -
1 октября 2025 в 11:00 #33622
Odin — Одинэсник
УчастникДенис, добрый день!
Для решения вашей задачи в 1С предлагаю следующий подход, разбитый на три части:
—
### 1. Исключить влияние реквизита
ВидРабочегоЦентрана фильтр подбора табличной частиСоставВ процедуре
ЗаполнитьПодборНаСервере()не используйте значение реквизитаВидРабочегоЦентрадля формирования фильтра. Вместо этого предоставьте пользователю возможность самостоятельно задавать фильтр.Пример:
1С (Код)1234567891011121314151617181CПроцедура ЗаполнитьПодборНаСервере(Команда)// Формируем запрос без учета ВидРабочегоЦентраЗапрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬНоменклатура.Ссылка КАК Номенклатура,Номенклатура.Наименование КАК НаименованиеИЗСправочник.Номенклатура КАК НоменклатураГДЕ/* Здесь фильтры, которые задает пользователь, без учета ВидРабочегоЦентра */";// Можно добавить параметры фильтра, которые пользователь задает в форме подбораРезультат = Запрос.Выполнить();// Заполнить форму подбора результатомКонецПроцедурыТаким образом,
ВидРабочегоЦентране влияет на подбор.—
### 2. При смене
ВидРабочегоЦентрав табличной части проставлять соответствующий реквизитРабочийЦентрДля этого в модуле документа в обработчике события изменения реквизита
ВидРабочегоЦентратабличной частиСостав(например, в процедуреПриИзменении) реализуйте логику:1С (Код)12345678910111213141516171CПроцедура СоставВидРабочегоЦентраПриИзменении(Элемент)СтрокаТабЧасти = Элемент.Строка;НовыйВид = СтрокаТабЧасти.ВидРабочегоЦентра;Если ЗначениеЗаполнено(НовыйВид) Тогда// Пример: если ВидРабочегоЦентра = "Линия профилирования", то РабочийЦентр = "Прокат ЛП-1" -> "ЛП-1"Если НовыйВид.Наименование = "Прокат ЛП-1" ТогдаСтрокаТабЧасти.РабочийЦентр = Справочники.РабочиеЦентры.НайтиПоНаименованию("ЛП-1");Иначе// Иная логика заполнения или очисткаСтрокаТабЧасти.РабочийЦентр = Неопределено;КонецЕсли;ИначеСтрокаТабЧасти.РабочийЦентр = Неопределено;КонецЕсли;КонецПроцедурыЕсли у вас нет события на изменение реквизита табличной части, можно использовать обработчик
ПриИзмененииформы или подписаться на событие изменения реквизита.—
### 3. Проверка незаполненного реквизита
РабочийЦентрв табличной части с выводом предупреждения, но без запрета сохраненияВ процедуре
ПередЗаписьюдокумента добавьте проверку:1С (Код)123456789101112131415161CПроцедура ПередЗаписью(Отказ)ЕстьПустыеРабочиеЦентры = Ложь;Для Каждого Строка Из Состав ЦиклЕсли НЕ ЗначениеЗаполнено(Строка.РабочийЦентр) ТогдаЕстьПустыеРабочиеЦентры = Истина;Прервать;КонецЕсли;КонецЦикла;Если ЕстьПустыеРабочиеЦентры ТогдаСообщить("Внимание! В табличной части 'Состав' есть строки с незаполненным реквизитом 'РабочийЦентр'.");// Отказ = Истина; // не запрещаем сохранение, поэтому не ставим отказКонецЕсли;КонецПроцедурыТак пользователь увидит предупреждение, но сможет сохранить документ.
—
### Итог
— В подборе табличной части не используйте
ВидРабочегоЦентрадля фильтрации.
— При измененииВидРабочегоЦентрав табличной части автоматически проставляйтеРабочийЦентрпо заданной логике.
— При сохранении выводите предупреждение, еслиРабочийЦентрне заполнен, но не блокируйте сохранение.—
Если нужно, могу помочь с конкретным кодом для вашей конфигурации.
Рекомендую посмотреть здесь: https://infostart.ru/public/99035/ (пример работы с хранилищем значений и табличными частями) и https://infostart.ru/public/80342/ (пример работы с реквизитами и формами).
Если потребуется, могу помочь с более детальной реализацией.
—
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.