Можно ли вытащить из списка согласований только одного?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)
Грубить необязательно.
(3) Не, не вариант. Потому что в листе согласования ВСЕ согласующие и он распечатывается в том виде, в котором есть, а в автозаполняемом шаблоне нужна только половина согласующих. В этом и загвоздка.
Сейчас визы выводятся с помощью нижеприведенного кода.
Но это никого не устраивает, т.к. список ВСЕХ согласующих выводится списком. Нужно, чтобы в таблице (пример прикрепляю) надпись "согласовано" ставилась напротив каждого. Соответственно, надо проверить, что если роль "главный по тарелочкам", то вывести только его результат согласования.
Если очень грубо, то что-то типа этого нужно:
Как это сделать грамотно?
может вам надо втащить?
Грубить необязательно.
(3) Не, не вариант. Потому что в листе согласования ВСЕ согласующие и он распечатывается в том виде, в котором есть, а в автозаполняемом шаблоне нужна только половина согласующих. В этом и загвоздка.
Сейчас визы выводятся с помощью нижеприведенного кода.
РезультатОбработки = "";
РезультатСогласования = "";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВизыСогласования.Исполнитель,
| ВизыСогласования.ДатаИсполнения,
| ВизыСогласования.РезультатСогласования
|ИЗ
| Справочник.ВизыСогласования КАК ВизыСогласования
|ГДЕ
| ВизыСогласования.Документ = &Документ";
Запрос.УстановитьПараметр("Документ", Файл.ВладелецФайла.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
РезультатСогласования = РезультатСогласования + Выборка.Исполнитель + " (" + Формат(Выборка.ДатаИсполнения, "ДФ=dd.MM.yyyy") + ") " + Выборка.РезультатСогласования + Символы.ПС;
КонецЦикла;
РезультатОбработки = РезультатСогласования;
ПоказатьРезультатСогласования = "";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВизыСогласования.Исполнитель,
| ВизыСогласования.ДатаИсполнения,
| ВизыСогласования.РезультатСогласования
|ИЗ
| Справочник.ВизыСогласования КАК ВизыСогласования
|ГДЕ
| ВизыСогласования.Документ = &Документ";
Запрос.УстановитьПараметр("Документ", Файл.ВладелецФайла.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
РезультатСогласования = РезультатСогласования + Выборка.Исполнитель + " (" + Формат(Выборка.ДатаИсполнения, "ДФ=dd.MM.yyyy") + ") " + Выборка.РезультатСогласования + Символы.ПС;
КонецЦикла;
РезультатОбработки = РезультатСогласования;
Но это никого не устраивает, т.к. список ВСЕХ согласующих выводится списком. Нужно, чтобы в таблице (пример прикрепляю) надпись "согласовано" ставилась напротив каждого. Соответственно, надо проверить, что если роль "главный по тарелочкам", то вывести только его результат согласования.
Если очень грубо, то что-то типа этого нужно:
Если ВизыСогласования.Исполнитель = Справочник.Роли.НайтиПоНаименованию ("ГлавныйПоТарелочкам") Тогда ...
Как это сделать грамотно?
Прикрепленные файлы:
(4)
Ну так и вставляйте то что нужно:
Если очень грубо, то что-то типа этого нужно:
Ну так и вставляйте то что нужно:
РезультатОбработки = "";
РезультатСогласования = "";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВизыСогласования.Исполнитель,
| ВизыСогласования.ДатаИсполнения,
| ВизыСогласования.РезультатСогласования
|ИЗ
| Справочник.ВизыСогласования КАК ВизыСогласования
|ГДЕ
| ВизыСогласования.Документ = &Документ";
Запрос.УстановитьПараметр("Документ", Файл.ВладелецФайла.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Если ВизыСогласования.Исполнитель = Справочник.Роли.НайтиПоНаименованию ("ГлавныйПоТарелочкам") Тогда
РезультатСогласования = РезультатСогласования + Выборка.Исполнитель + " (" + Формат(Выборка.ДатаИсполнения, "ДФ=dd.MM.yyyy") + ") " + Выборка.РезультатСогласования + Символы.ПС;
КонецЕсли;
КонецЦикла;
РезультатОбработки = РезультатСогласования;;
Показать
(6)
Пардонте, поторопился и ошибся:
Я так пробовала, там ошибка получается: Переменная не определена (ВизыСогласования)
Пардонте, поторопился и ошибся:
РезультатОбработки = "";
РезультатСогласования = "";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВизыСогласования.Исполнитель,
| ВизыСогласования.ДатаИсполнения,
| ВизыСогласования.РезультатСогласования
|ИЗ
| Справочник.ВизыСогласования КАК ВизыСогласования
|ГДЕ
| ВизыСогласования.Документ = &Документ";
Запрос.УстановитьПараметр("Документ", Файл.ВладелецФайла.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Исполнитель = Справочник.Роли.НайтиПоНаименованию ("ГлавныйПоТарелочкам") Тогда
РезультатСогласования = РезультатСогласования + Выборка.Исполнитель + " (" + Формат(Выборка.ДатаИсполнения, "ДФ=dd.MM.yyyy") + ") " + Выборка.РезультатСогласования + Символы.ПС;
КонецЕсли;
КонецЦикла;
РезультатОбработки = РезультатСогласования;;
Показать
(10) я, наверное, снова какую-нибудь фигню делаю, но скрипт не отрабатывает :( Ошибок нет, но и результат пустой.
Заменила РолиИсполнителей на Пользователи - всё работает. Это, конечно, наводит на некоторые неудобства, если сотрудник уволен, но, как вариант - вполне подходит.
Заменила РолиИсполнителей на Пользователи - всё работает. Это, конечно, наводит на некоторые неудобства, если сотрудник уволен, но, как вариант - вполне подходит.
(12)В справочнике Визы согласования есть реквизит РольИсполнителя. Попробуйте его добавить в запрос.
РезультатОбработки = "";
РезультатСогласования = "";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВизыСогласования.РольИсполнителя,
| ВизыСогласования.ДатаИсполнения,
| ВизыСогласования.РезультатСогласования
|ИЗ
| Справочник.ВизыСогласования КАК ВизыСогласования
|ГДЕ
| ВизыСогласования.Документ = &Документ";
Запрос.УстановитьПараметр("Документ", Файл.ВладелецФайла.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.РольИсполнителя = Справочники.РолиИсполнителей.НайтиПоНаименованию ("ГлавныйПоТарелочкам") Тогда
РезультатСогласования = РезультатСогласования + Выборка.Исполнитель + " (" + Формат(Выборка.ДатаИсполнения, "ДФ=dd.MM.yyyy") + ") " + Выборка.РезультатСогласования + Символы.ПС;
КонецЕсли;
КонецЦикла;
РезультатОбработки = РезультатСогласования;
Показать Если ВизыСогласования.Исполнитель = Справочник.Роли.НайтиПоНаименованию ("ГлавныйПоТарелочкам") Тогда
РезультатСогласования = РезультатСогласования + Выборка.Исполнитель + " (" + Формат(Выборка.ДатаИсполнения, "ДФ=dd.MM.yyyy") + ") " + Выборка.РезультатСогласования + Символы.ПС;
КонецЕсли;
Если Выборка.Исполнитель = Справочник.Роли.НайтиПоНаименованию ("ГлавныйПоТарелочкам") Тогда
РезультатСогласования = РезультатСогласования + Выборка.Исполнитель + " (" + Формат(Выборка.ДатаИсполнения, "ДФ=dd.MM.yyyy") + ") " + Выборка.РезультатСогласования + Символы.ПС;
КонецЕсли;
Я бы чуть по-другому сделал: не стал бы к роли исполнителя привязываться, а завел бы например рабочую группу типа "ПодписантыДока1" и проверял на принадлежность сотра к ней. нужно выводить - включили в группу, не нужно - исключили. Для разных доков разные группы например. Мне кажется это более логичным с точки зрения администрирования пользователей.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот