автоматическая категоризация документа

1. Ranel 10.03.21 14:43 Сейчас в теме
Добрый день, подскажите пожалуйста как настроить автоматическую категоризацию документа, по группе доступа контрагента.
Для внутренних и в входящих документов, нашел решение:

Результат = Строка(Источник.Контрагент.ГруппаДоступа) = "ВИП";

//для внутренних документов

Результат = Строка(Источник.Отправитель.ГруппаДоступа) = "ВИП";

//для входящих документов


А для исходящих не знаю как написать, потому что то там табличная часть участвует
Примерный код накидал, но не отрабатывает должным образом.
Может сможет кто либо найти ошибку или предложить выход проще
ЕстьВИП = Ложь;

Для Каждого СтрокаТЧ ИЗ Источник.Получатели Цикл
Корреспондент = СтрокаТЧ.Получатель;
Если ЗначениеЗаполнено(Корреспондент) Тогда

	Запрос = Новый Запрос;
	Запрос.Текст = "
	|ВЫБРАТЬ
	|	Т.Значение КАК СтатусВИП
	|ИЗ
	|	Справочник.Контрагенты.ГруппаДоступа КАК Т
	|ГДЕ
	|	Т.Свойство = &ГруппаДоступа";

	Запрос.УстановитьПараметр("ГруппаДоступа", Справочники.ГруппыДоступаКонтрагентов.НайтиПоНаименованию("ВИП"));


	ЭтоВИП = Ложь;
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		ЭтоВИП = Выборка.ВИП;
	КонецЕсли;
	Если ЭтоВИП Тогда
		ЕстьВИП = Истина;
		Прервать;
	КонецЕсли;

КонецЕсли;
КонецЦикла;

Результат = ЕстьВИП;
Показать
+
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
21. Ranel 07.03.23 21:43 Сейчас в теме +1 $m
Давно решил, в место ВИП_5f6e350a596147099411ded4745f67f4 - вставляем данные своего реквизита и получаем необходимый результат

Результат = ложь;
СтатусВип = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ВИП_5f6e350a596147099411ded4745f67f4");
//Сообщить(СтатусВип);                
Если ЗначениеЗаполнено(СтатусВип) тогда
СтрокаСОСвойством = Источник.Отправитель.ДополнительныеРеквизиты.Найти(СтатусВип,"Свойство");
Если Не СтрокаСОСвойством = Неопределено тогда
//Сообщить(СтрокаСОСвойством);
Результат = СтрокаСОСвойством.Значение;
Иначе 
Результат = ложь;
КонецЕсли;
КонецЕсли;
Показать
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. SmokEzor 12.03.21 16:17 Сейчас в теме
(1)Очень похоже на задачу из сборника для подготовки к спец. -консультанту по 1С:ДО это она ?
+
9. SmokEzor 12.03.21 16:28 Сейчас в теме
(8)Попробуйте так. Должно работать. Делаете доп реквизит. Статус_VIP. Не забудьте дать Имя для разработчика.
Для исходящих пишите такой код правила категоризации.
Для внутренних и входящих почти аналогично можно сделать.

Результат = Ложь;
СвойствоВИП = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Статус_VIP");
Если ЗначениеЗаполнено(СвойствоВИП) Тогда
Для каждого СтрокаПолучателя Из Источник.Получатели Цикл
СтрокаСвойства = СтрокаПолучателя.Получатель.ДополнительныеРеквизиты.Найти(СвойствоВИП, "Свойство");
Если СтрокаСвойства <> Неопределено Тогда
Результат = Результат Или СтрокаСвойства.Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Показать
+
10. SmokEzor 15.03.21 14:46 Сейчас в теме
(1)Получилось как я писал в 9 сообщении ?
+
11. Ranel 15.03.21 17:10 Сейчас в теме
(10) Ваши сообщения, только сейчас увидел.
Не знаю, по поводу задачи, она или нет, на работе поставили такую задачу
чуть позже проверю, отпишусь.
Спасибо что написали
+
12. Ranel 15.03.21 17:39 Сейчас в теме
(10) нет, не получилось - это через костыли, нужно без доп.реквизита, потому что признак, ВИП уже существует в группах доступа, дублирующая информация это не есть гуд

попробую сейчас, Ваш код допилить - если с доп.реквизитом работате, должен и с основным работать, отпишусь по результатам
+
13. SmokEzor 15.03.21 17:49 Сейчас в теме
(12)
рующая информация это не есть гуд

Конечно должно и с обычным реквизитом работать. Вообще как раз таки изначально лучше бы делать доп ревизит, чем добавлять его в конфу, но тут смотря какие у вас для него были задачи до этой.
А этот код должен вернуть Истину если хотя бы один из получателей с признаком "ВИП".
+
14. Ranel 15.03.21 18:22 Сейчас в теме
(13)не получается, не хватает профессионализма
Результат = Ложь;
СвойствоВИП = Справочники.ГруппыДоступаКонтрагентов.НайтиПоНаименованию("имя", "ВИП");
Если ЗначениеЗаполнено(СвойствоВИП) Тогда
Для каждого СтрокаПолучателя Из Источник.Получатели Цикл
СтрокаСвойства = СтрокаПолучателя.Получатель.ГруппыДоступаКонтрагентов.Найти(СвойствоВИП, «ВИП»);
Если СтрокаСвойства <> Неопределено Тогда
Результат = Результат Или СтрокаСвойства.Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Показать


у меня сомнение в строке
СтрокаСвойства = СтрокаПолучателя.Получатель.ГруппыДоступаКонтрагентов.Найти(СвойствоВИП, «ВИП»);

если она правильно заполнена, тогда не рабочий код, остальное вроде все сделал.

а с доп.реквизитом делать не буду, потому что у нас один, через него хотел сделать, ему сразу сказил, что это не правильно
+
15. SmokEzor 15.03.21 20:55 Сейчас в теме
(14)
я.Получатель.Гр

Странное отношение к доп. реквизитам. Их делают, что бы не снимать объекты конфы с поддержки и не было проблем с обновлением.
Какой тип данных у вашего реквизита в конфигураторе? Где вы добавили свой реквизит, в справочник Контрагенты?
+
16. Ranel 16.03.21 18:25 Сейчас в теме
(15) к дополнительным реквизитам, отношусь очень замечательно, но когда есть возможность сделать без них, надо делать без них.

Нужно, что бы программист грамотный запрос сделал.

Использую группу доступа контрагентов, включил в настройках прав доступа, разрез по контрагентам, создал требуемую группу.
Нужно, что бы при создание исходящего документа, в случае выбора контрагента (с группой доступа "ВИП"), в последующем этому документу присвоилась автоматически соответствующая категория.
Прикрепленные файлы:
+
20. SmokEzor 17.03.21 14:29 Сейчас в теме
(16) Немного подправил ваш код

Результат = Ложь;
СвойствоВИП = Справочники.ГруппыДоступаКонтрагентов.НайтиПоНаименованию("ВИП");
Если ЗначениеЗаполнено(СвойствоВИП) Тогда
	Для каждого СтрокаПолучателя Из Источник.Получатели Цикл
		СтрокаСвойства = СтрокаПолучателя.Получатель.ГруппыДоступаКонтрагентов.Найти(СвойствоВИП, "ВИП");
		Если СтрокаСвойства <> Неопределено Тогда
			Результат = Результат Или СтрокаСвойства.Значение;
		КонецЕсли;
	КонецЦикла;
КонецЕсли;
Показать
+
2. burgomister 59 10.03.21 18:43 Сейчас в теме
Ошибка в запросе есть, поправил. Но вообще запрос в цикле - это неправильно. Надо делать сразу запрос к табличной части.
Для Каждого СтрокаТЧ ИЗ Источник.Получатели Цикл
Корреспондент = СтрокаТЧ.Получатель;
Если ЗначениеЗаполнено(Корреспондент) Тогда

    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    Т.ГруппаДоступа КАК СтатусВИП
    |ИЗ
    |    Справочник.Контрагенты КАК Т
    |ГДЕ
    |    Т.ГруппаДоступа = &ГруппаДоступа";

    Запрос.УстановитьПараметр("ГруппаДоступа", Справочники.ГруппыДоступаКонтрагентов.НайтиПоНаименованию("ВИП"));


    ЭтоВИП = Ложь;
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        ЭтоВИП = Выборка.СтатусВИП;
    КонецЕсли;
    Если ЭтоВИП Тогда
        ЕстьВИП = Истина;
        Прервать;
    КонецЕсли;

КонецЕсли;
КонецЦикла;

Результат = ЕстьВИП;
Показать
Ranel; +1
4. Ranel 10.03.21 22:20 Сейчас в теме
вот какую ошибку выдает
Прикрепленные файлы:
+
3. burgomister 59 10.03.21 19:03 Сейчас в теме
А вообще не совсем понятен отбор по свойству. Может быть так:

ТаблЗнач = Источник.Получатели.Выгрузить();

    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    ТЗ.Получатель КАК Получатель
    |ПОМЕСТИТЬ Получатели
    |ИЗ
    |    &ТаблЗнач КАК ТЗ
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    |    Получатели.ГруппаДоступа КАК ВИП
    |ИЗ
    |    Получатели КАК Получатели
    |ГДЕ
    |    Получатели.ГруппаДоступа = &ГруппаДоступа
    |";

    Запрос.УстановитьПараметр("ГруппаДоступа", Справочники.ГруппыДоступаКонтрагентов.НайтиПоНаименованию("ВИП"));
    Запрос.УстановитьПараметр("ТаблЗнач", ТаблЗнач);

    ЭтоВИП = Ложь;
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        ЭтоВИП = Выборка.ВИП;
    КонецЕсли;

Результат = ЭтоВИП;
Показать
Ranel; +1
5. Ranel 10.03.21 22:21 Сейчас в теме
(3) здесь следующую
Прикрепленные файлы:
+
6. sai_NT 11.03.21 00:42 Сейчас в теме
(5) на вскидку вот запрос, который должен отработать
Запрос.Текст = "
    |ВЫБРАТЬ
    |    ТЗ.Получатель КАК Получатель
    |ПОМЕСТИТЬ Получатели
    |ИЗ
    |    &ТаблЗнач КАК ТЗ
    |;
    |
    |////////////////////////////////////////////////////////////­­////////////////////
    |ВЫБРАТЬ
    |    Получатели.Получатель.ГруппаДоступа КАК ВИП
    |ИЗ
    |    Получатели КАК Получатели
    |ГДЕ
    |    Получатели.Получатель.ГруппаДоступа = &ГруппаДоступа
    |";
Показать
+
7. burgomister 59 11.03.21 04:19 Сейчас в теме
(5) Вы не написали - как называется табличная часть документа, поэтому запрос писал наугад. Если вы хотите полностью рабочий запрос получить, тогда дайте больше информации. Эта ошибка - поменяйте "Получатели" на наименование табличной части документа. И подразумевается что документ один. Если вам надо из многих документов - та и пишите. Читать мысли я ещё не научился.
А преобразование к Булеву - потому что мне неизвестен тип полей. Дайте больше информации или сами меняйте под ваши типы код.
+
18. Ranel 16.03.21 18:39 Сейчас в теме
(7)
Прикрепленные файлы:
+
17. Ranel 16.03.21 18:35 Сейчас в теме
(3) Ваш переделал, логически, но он не отрабатывает, скажите какие данные предоставить, всё укажу,
ТаблЗнач = Источник.Получатели.Выгрузить();

    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    ТЗ.Получатель КАК Получатель
    |ПОМЕСТИТЬ Получатели
    |ИЗ
    |    &ТаблЗнач КАК ТЗ
    |;
    |
    |////////////////////////////////////////////////////////////­­////////////////////
    |ВЫБРАТЬ
    |    Получатели.ГруппаДоступа КАК ВИП
    |ИЗ
    |    Получатели КАК Получатели
    |ГДЕ
    |    Получатели.ГруппаДоступа = &ГруппаДоступа
    |";

    Запрос.УстановитьПараметр("ГруппаДоступа", Справочники.ГруппыДоступаКонтрагентов.НайтиПоНаименованию("ВИП"));
    Запрос.УстановитьПараметр("ТаблЗнач", ТаблЗнач);

    ЭтоВИП = Ложь;
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        ЭтоВИП = Выборка.ВИП;
    КонецЕсли;

Результат = ЭтоВИП;
Показать
Прикрепленные файлы:
+
19. burgomister 59 17.03.21 04:35 Сейчас в теме
(17) Выборка.ВИП - это элемент справочника. Если вы ходите получить в ЭтоВип значение "Истина" или "Ложь", тогда надо надо просто присвоить это значение.

ЭтоВип = Истина;


И ещё: результат запроса - это выборка всех строк ТаблицыЗначений. Вы сделали сейчас та, что если есть хотя бы одна строка с группой доступа ВИП, результат будет Истина.
То есть я не знаю - сколько записей в таблице значений у вас.
+
21. Ranel 07.03.23 21:43 Сейчас в теме +1 $m
Давно решил, в место ВИП_5f6e350a596147099411ded4745f67f4 - вставляем данные своего реквизита и получаем необходимый результат

Результат = ложь;
СтатусВип = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ВИП_5f6e350a596147099411ded4745f67f4");
//Сообщить(СтатусВип);                
Если ЗначениеЗаполнено(СтатусВип) тогда
СтрокаСОСвойством = Источник.Отправитель.ДополнительныеРеквизиты.Найти(СтатусВип,"Свойство");
Если Не СтрокаСОСвойством = Неопределено тогда
//Сообщить(СтрокаСОСвойством);
Результат = СтрокаСОСвойством.Значение;
Иначе 
Результат = ложь;
КонецЕсли;
КонецЕсли;
Показать
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот