автоматическая категоризация документа
Добрый день, подскажите пожалуйста как настроить автоматическую категоризацию документа, по группе доступа контрагента.
Для внутренних и в входящих документов, нашел решение:
//для внутренних документов
//для входящих документов
А для исходящих не знаю как написать, потому что то там табличная часть участвует
Примерный код накидал, но не отрабатывает должным образом.
Может сможет кто либо найти ошибку или предложить выход проще
Для внутренних и в входящих документов, нашел решение:
Результат = Строка(Источник.Контрагент.ГруппаДоступа) = "ВИП";
//для внутренних документов
Результат = Строка(Источник.Отправитель.ГруппаДоступа) = "ВИП";
//для входящих документов
А для исходящих не знаю как написать, потому что то там табличная часть участвует
Примерный код накидал, но не отрабатывает должным образом.
Может сможет кто либо найти ошибку или предложить выход проще
ЕстьВИП = Ложь;
Для Каждого СтрокаТЧ ИЗ Источник.Получатели Цикл
Корреспондент = СтрокаТЧ.Получатель;
Если ЗначениеЗаполнено(Корреспондент) Тогда
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Т.Значение КАК СтатусВИП
|ИЗ
| Справочник.Контрагенты.ГруппаДоступа КАК Т
|ГДЕ
| Т.Свойство = &ГруппаДоступа";
Запрос.УстановитьПараметр("ГруппаДоступа", Справочники.ГруппыДоступаКонтрагентов.НайтиПоНаименованию("ВИП"));
ЭтоВИП = Ложь;
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ЭтоВИП = Выборка.ВИП;
КонецЕсли;
Если ЭтоВИП Тогда
ЕстьВИП = Истина;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Результат = ЕстьВИП;
ПоказатьПо теме из базы знаний
- Как создать бронебойную систему кибербезопасности на базе 1С
- «ПРОФЕССИОНАЛЬНАЯ РАБОТА В ПРОГРАММЕ "1С:ДОКУМЕНТООБОРОТ 8"» (в формате видеокурса или онлайн-курса).
- Видеокурс-самоучитель "1С:Документооборот 2.1 и 3.0" для самостоятельного внедрения
- Service desk in ITIL 4: что изменилось?
- Группировка проблем в Sentry
Найденные решения
Давно решил, в место ВИП_5f6e350a596147099411ded4745f67f4 - вставляем данные своего реквизита и получаем необходимый результат
Результат = ложь;
СтатусВип = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ВИП_5f6e350a596147099411ded4745f67f4");
//Сообщить(СтатусВип);
Если ЗначениеЗаполнено(СтатусВип) тогда
СтрокаСОСвойством = Источник.Отправитель.ДополнительныеРеквизиты.Найти(СтатусВип,"Свойство");
Если Не СтрокаСОСвойством = Неопределено тогда
//Сообщить(СтрокаСОСвойством);
Результат = СтрокаСОСвойством.Значение;
Иначе
Результат = ложь;
КонецЕсли;
КонецЕсли;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(8)Попробуйте так. Должно работать. Делаете доп реквизит. Статус_VIP. Не забудьте дать Имя для разработчика.
Для исходящих пишите такой код правила категоризации.
Для внутренних и входящих почти аналогично можно сделать.
Для исходящих пишите такой код правила категоризации.
Для внутренних и входящих почти аналогично можно сделать.
Результат = Ложь;
СвойствоВИП = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Статус_VIP");
Если ЗначениеЗаполнено(СвойствоВИП) Тогда
Для каждого СтрокаПолучателя Из Источник.Получатели Цикл
СтрокаСвойства = СтрокаПолучателя.Получатель.ДополнительныеРеквизиты.Найти(СвойствоВИП, "Свойство");
Если СтрокаСвойства <> Неопределено Тогда
Результат = Результат Или СтрокаСвойства.Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Показать
(10) нет, не получилось - это через костыли, нужно без доп.реквизита, потому что признак, ВИП уже существует в группах доступа, дублирующая информация это не есть гуд
попробую сейчас, Ваш код допилить - если с доп.реквизитом работате, должен и с основным работать, отпишусь по результатам
попробую сейчас, Ваш код допилить - если с доп.реквизитом работате, должен и с основным работать, отпишусь по результатам
(12)
Конечно должно и с обычным реквизитом работать. Вообще как раз таки изначально лучше бы делать доп ревизит, чем добавлять его в конфу, но тут смотря какие у вас для него были задачи до этой.
А этот код должен вернуть Истину если хотя бы один из получателей с признаком "ВИП".
рующая информация это не есть гуд
Конечно должно и с обычным реквизитом работать. Вообще как раз таки изначально лучше бы делать доп ревизит, чем добавлять его в конфу, но тут смотря какие у вас для него были задачи до этой.
А этот код должен вернуть Истину если хотя бы один из получателей с признаком "ВИП".
(13)не получается, не хватает профессионализма
у меня сомнение в строке
если она правильно заполнена, тогда не рабочий код, остальное вроде все сделал.
а с доп.реквизитом делать не буду, потому что у нас один, через него хотел сделать, ему сразу сказил, что это не правильно
Результат = Ложь;
СвойствоВИП = Справочники.ГруппыДоступаКонтрагентов.НайтиПоНаименованию("имя", "ВИП");
Если ЗначениеЗаполнено(СвойствоВИП) Тогда
Для каждого СтрокаПолучателя Из Источник.Получатели Цикл
СтрокаСвойства = СтрокаПолучателя.Получатель.ГруппыДоступаКонтрагентов.Найти(СвойствоВИП, «ВИП»);
Если СтрокаСвойства <> Неопределено Тогда
Результат = Результат Или СтрокаСвойства.Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Показатьу меня сомнение в строке
СтрокаСвойства = СтрокаПолучателя.Получатель.ГруппыДоступаКонтрагентов.Найти(СвойствоВИП, «ВИП»);
если она правильно заполнена, тогда не рабочий код, остальное вроде все сделал.
а с доп.реквизитом делать не буду, потому что у нас один, через него хотел сделать, ему сразу сказил, что это не правильно
(15) к дополнительным реквизитам, отношусь очень замечательно, но когда есть возможность сделать без них, надо делать без них.
Нужно, что бы программист грамотный запрос сделал.
Использую группу доступа контрагентов, включил в настройках прав доступа, разрез по контрагентам, создал требуемую группу.
Нужно, что бы при создание исходящего документа, в случае выбора контрагента (с группой доступа "ВИП"), в последующем этому документу присвоилась автоматически соответствующая категория.
Нужно, что бы программист грамотный запрос сделал.
Использую группу доступа контрагентов, включил в настройках прав доступа, разрез по контрагентам, создал требуемую группу.
Нужно, что бы при создание исходящего документа, в случае выбора контрагента (с группой доступа "ВИП"), в последующем этому документу присвоилась автоматически соответствующая категория.
Прикрепленные файлы:
(16) Немного подправил ваш код
Результат = Ложь;
СвойствоВИП = Справочники.ГруппыДоступаКонтрагентов.НайтиПоНаименованию("ВИП");
Если ЗначениеЗаполнено(СвойствоВИП) Тогда
Для каждого СтрокаПолучателя Из Источник.Получатели Цикл
СтрокаСвойства = СтрокаПолучателя.Получатель.ГруппыДоступаКонтрагентов.Найти(СвойствоВИП, "ВИП");
Если СтрокаСвойства <> Неопределено Тогда
Результат = Результат Или СтрокаСвойства.Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Показать
Ошибка в запросе есть, поправил. Но вообще запрос в цикле - это неправильно. Надо делать сразу запрос к табличной части.
Для Каждого СтрокаТЧ ИЗ Источник.Получатели Цикл
Корреспондент = СтрокаТЧ.Получатель;
Если ЗначениеЗаполнено(Корреспондент) Тогда
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Т.ГруппаДоступа КАК СтатусВИП
|ИЗ
| Справочник.Контрагенты КАК Т
|ГДЕ
| Т.ГруппаДоступа = &ГруппаДоступа";
Запрос.УстановитьПараметр("ГруппаДоступа", Справочники.ГруппыДоступаКонтрагентов.НайтиПоНаименованию("ВИП"));
ЭтоВИП = Ложь;
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ЭтоВИП = Выборка.СтатусВИП;
КонецЕсли;
Если ЭтоВИП Тогда
ЕстьВИП = Истина;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Результат = ЕстьВИП;
Показать
А вообще не совсем понятен отбор по свойству. Может быть так:
ТаблЗнач = Источник.Получатели.Выгрузить();
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| ТЗ.Получатель КАК Получатель
|ПОМЕСТИТЬ Получатели
|ИЗ
| &ТаблЗнач КАК ТЗ
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Получатели.ГруппаДоступа КАК ВИП
|ИЗ
| Получатели КАК Получатели
|ГДЕ
| Получатели.ГруппаДоступа = &ГруппаДоступа
|";
Запрос.УстановитьПараметр("ГруппаДоступа", Справочники.ГруппыДоступаКонтрагентов.НайтиПоНаименованию("ВИП"));
Запрос.УстановитьПараметр("ТаблЗнач", ТаблЗнач);
ЭтоВИП = Ложь;
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ЭтоВИП = Выборка.ВИП;
КонецЕсли;
Результат = ЭтоВИП;
Показать
(5) на вскидку вот запрос, который должен отработать
Запрос.Текст = "
|ВЫБРАТЬ
| ТЗ.Получатель КАК Получатель
|ПОМЕСТИТЬ Получатели
|ИЗ
| &ТаблЗнач КАК ТЗ
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Получатели.Получатель.ГруппаДоступа КАК ВИП
|ИЗ
| Получатели КАК Получатели
|ГДЕ
| Получатели.Получатель.ГруппаДоступа = &ГруппаДоступа
|";
Показать
(5) Вы не написали - как называется табличная часть документа, поэтому запрос писал наугад. Если вы хотите полностью рабочий запрос получить, тогда дайте больше информации. Эта ошибка - поменяйте "Получатели" на наименование табличной части документа. И подразумевается что документ один. Если вам надо из многих документов - та и пишите. Читать мысли я ещё не научился.
А преобразование к Булеву - потому что мне неизвестен тип полей. Дайте больше информации или сами меняйте под ваши типы код.
А преобразование к Булеву - потому что мне неизвестен тип полей. Дайте больше информации или сами меняйте под ваши типы код.
(3) Ваш переделал, логически, но он не отрабатывает, скажите какие данные предоставить, всё укажу,
ТаблЗнач = Источник.Получатели.Выгрузить();
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| ТЗ.Получатель КАК Получатель
|ПОМЕСТИТЬ Получатели
|ИЗ
| &ТаблЗнач КАК ТЗ
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Получатели.ГруппаДоступа КАК ВИП
|ИЗ
| Получатели КАК Получатели
|ГДЕ
| Получатели.ГруппаДоступа = &ГруппаДоступа
|";
Запрос.УстановитьПараметр("ГруппаДоступа", Справочники.ГруппыДоступаКонтрагентов.НайтиПоНаименованию("ВИП"));
Запрос.УстановитьПараметр("ТаблЗнач", ТаблЗнач);
ЭтоВИП = Ложь;
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ЭтоВИП = Выборка.ВИП;
КонецЕсли;
Результат = ЭтоВИП;
ПоказатьПрикрепленные файлы:
(17) Выборка.ВИП - это элемент справочника. Если вы ходите получить в ЭтоВип значение "Истина" или "Ложь", тогда надо надо просто присвоить это значение.
И ещё: результат запроса - это выборка всех строк ТаблицыЗначений. Вы сделали сейчас та, что если есть хотя бы одна строка с группой доступа ВИП, результат будет Истина.
То есть я не знаю - сколько записей в таблице значений у вас.
ЭтоВип = Истина;
И ещё: результат запроса - это выборка всех строк ТаблицыЗначений. Вы сделали сейчас та, что если есть хотя бы одна строка с группой доступа ВИП, результат будет Истина.
То есть я не знаю - сколько записей в таблице значений у вас.
Давно решил, в место ВИП_5f6e350a596147099411ded4745f67f4 - вставляем данные своего реквизита и получаем необходимый результат
Результат = ложь;
СтатусВип = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ВИП_5f6e350a596147099411ded4745f67f4");
//Сообщить(СтатусВип);
Если ЗначениеЗаполнено(СтатусВип) тогда
СтрокаСОСвойством = Источник.Отправитель.ДополнительныеРеквизиты.Найти(СтатусВип,"Свойство");
Если Не СтрокаСОСвойством = Неопределено тогда
//Сообщить(СтрокаСОСвойством);
Результат = СтрокаСОСвойством.Значение;
Иначе
Результат = ложь;
КонецЕсли;
КонецЕсли;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот