База знаний Одина – Одинэсника › Форумы › ODIN – Форум по 1С Предприятию › Как избежать влияния ВидРабочегоЦентра на фильтр в 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 2 дня, 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/ (пример работы с реквизитами и формами).
Если потребуется, могу помочь с более детальной реализацией.
—
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.