Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 01:46

Обработка "СогласованиеЗаявок"

Автор Денис Андрушко, 22 сен 2016, 19:48

0 Пользователей и 1 гость просматривают эту тему.

Денис Андрушко

В обработке "СогласованиеЗаявок" кто угодно из пользователей который входят в маршрут согласования может зайти и подтвердить заявку(Если несколько уровней, кто угодно с разных уровней).
ПРОШУ, помогите дописать так чтоб: пока все пользователи из 1Уровня не подтвердили, пользователи из 2Уровня не имели возможность согласовать заявку.
Уровни задаю в Справочник.МаршрутыСогласованияЗаявок Где Пользователи 1Уровня в корне 2уровня.

Пробовал дописать новую функцию В которой запросом, отборами и условиями пробовал под каждый уровень перебрать подходящих пользователей но текст вышел большим и не работоспособным.

Уверен что есть куда проще вариант решения данной задачи, который предполагает написание всего пары строчок кода.

Уважаемые форумчане, Помогите решить поставленную задачу.




alex0402

Нужен запрос, который вернет минимальный уровень не согласовавших.
если запрос пустой - согласовали все.
если не пустой, то разрешено только этому уровню.
все.
Спасибо за Сказать спасибо

Денис Андрушко

   Заявка = Документы.ЗаявкаНаРасходованиеСредств.ПустаяСсылка();
   отбор = новый Структура;
   отбор.Вставить("Подразделение", Заявка.Подразделение);
   ВыборкаНастройки = РегистрыСведений.НастройкиНачалаМаршрутовСогласования.Выбрать(ОТбор);
   Пока ВыборкаНастройки.Следующий Цикл
      ПервыйМаршрут = ВыборкаНастройки.МаршрутСогласования;
   КонецЦикла;   
   //подписанты
   //рег состояние заявок
   всесоглосавали1 = Истина;
   ЭтотСогласующий1 = Ложь;
   ДЛя Каждого Стр Из ПервыйМаршрут.СогласующиеЛица Цикл
      Запроспроверки = новый Запрос;
      Запроспроверки.Текст =
      "ВЫБРАТЬ
      |   СостоянияСогласованияЗаявок.Пользователь,
      |   СостоянияСогласованияЗаявок.Заявка,
      |   СостоянияСогласованияЗаявок.Состояние
      |ИЗ
      |   РегистрСведений.СостоянияСогласованияЗаявок КАК СостоянияСогласованияЗаявок
      |ГДЕ
      |   СостоянияСогласованияЗаявок.Заявка = &Заявка
      |   И СостоянияСогласованияЗаявок.Пользователь = &Пользователь
      |   И СостоянияСогласованияЗаявок.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОбъектов.Согласован)";
      Запроспроверки.УстановитьПараметр("заявка", Заявка);
      Запроспроверки.УстановитьПараметр("Пользователь", Стр.Пользователь);
      Рез = Запроспроверки.Выполнить().Выгрузить();
      Если Рез = 0 Тогда
          всесоглосавали1 = Ложь;
      КонецЕсли;   
      Если Стр.Пользователь = ПараметрыСеанса.ТекущийПользователь Тогда
         ЭтотСогласующий1 = Истина;
      КонецЕсли;   
   КонецЦикла;   
   
   Если Не всесоглосавали1 Тогда
      
      Если ЭтотСогласующий1 Тогда
         Возврат;
      Иначе
         Предупреждение("Не завершен первый этап соглосования!");
      КонецЕсли;
      
   Иначе
      Если ЗначениеЗаполнено(ПервыйМаршрут.Родитель) Тогда
         //проверяем второй этап по анологии с первым
         всесоглосавали2 = Истина;
         ЭтотСогласующий2 = Ложь;
         ДЛя Каждого Стр2 Из ПервыйМаршрут.Родитель.СогласующиеЛица Цикл
            Запроспроверки2 = новый Запрос;
            Запроспроверки2.Текст =
            "ВЫБРАТЬ
            |   СостоянияСогласованияЗаявок.Пользователь,
            |   СостоянияСогласованияЗаявок.Заявка,
            |   СостоянияСогласованияЗаявок.Состояние
            |ИЗ
            |   РегистрСведений.СостоянияСогласованияЗаявок КАК СостоянияСогласованияЗаявок
            |ГДЕ
            |   СостоянияСогласованияЗаявок.Заявка = &Заявка
            |   И СостоянияСогласованияЗаявок.Пользователь = &Пользователь
            |   И СостоянияСогласованияЗаявок.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОбъектов.Согласован)";
            Запроспроверки2.УстановитьПараметр("заявка", Заявка);
            Запроспроверки2.УстановитьПараметр("Пользователь", Стр2.Пользователь);
            Рез2 = Запроспроверки2.Выполнить().Выгрузить();
            Если Рез2 = 0 Тогда
               всесоглосавали2 = Ложь;
            КонецЕсли;   
            Если Стр2.Пользователь = ПараметрыСеанса.ТекущийПользователь Тогда
               ЭтотСогласующий2 = Истина;
            КонецЕсли;   
         КонецЦикла;   
         
         Если Не всесоглосавали2 Тогда
            
            Если ЭтотСогласующий2 Тогда
               Возврат;
            Иначе
               Предупреждение("Не завершен второй этап соглосования!");
            КонецЕсли;
         ИНаче
            Если ЗначениеЗаполнено(ПервыйМаршрут.Родитель.Родитель) Тогда
                //////////**************//////////////////
                КонецЕсли;
         КонецЕсли;
         
      КонецЕсли;   
   КонецЕсли;   
//Для каждого уровня устроил проверку. Прописал всё вручную для каждого уровня.
Ход моих мыслей в правильном направлении или подскажите как  правильнее?
Добавлено: 24 сен 2016, 00:42


Заявка = Документы.ЗаявкаНаРасходованиеСредств.ПустаяСсылка();
Передаю не пустую ссылку. ПустаяСсылка() только для тестирования(исправил)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск