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