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

как написать текст запроса

Автор Yamuna, 29 мая 2019, 08:00

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

Yamuna

Добрый день, Уважаемые коллеги! Не могу выбрать необходимые элементы.Конфигурация самописная. При проведении документа делаем запись в регистр накопления и если в иерархическом справочнике(с иерархией элементов) у родителя появляются 5 подчиненных элементов то устанавливаем признак "активирован" и если у подчиненных появляются 5 своих подчиненных то они тоже получают признак "активирован".И как теперь надо выбрать родителя у которого есть пять элементов с признаком "активирован"? и если такой появится то надо ему присвоить признак "развившийся".
Первая часть у меня выбирается получаем признак "активирован", но дальше как выбрать родителя с 5 элементами у которых есть признак "активирован" не получается ...((
Процедура ПроверитьПодчиненныеЭлементы(Рефер)
Движения.КонтрагентыОбороты.Записать();
Движения.КонтрагентыОбороты.Записывать = Истина;
   

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(КонтрагентыОбороты.Количество) КАК КоличествоПодчиненных,
| КонтрагентыОбороты.Рефер КАК Рефер
|ИЗ
| РегистрНакопления.КонтрагентыОбороты КАК КонтрагентыОбороты
|ГДЕ
| КонтрагентыОбороты.Рефер = &Рефер
|
|СГРУППИРОВАТЬ ПО
| КонтрагентыОбороты.Рефер";

Запрос.УстановитьПараметр("Рефер", Рефер);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Если ВыборкаДетальныеЗаписи.КоличествоПодчиненных = 5 Тогда
СсылкаОбъекта = Справочники.СписокНачинающихУчастников.НайтиПоНаименованию(ВыборкаДетальныеЗаписи.Рефер).ПолучитьОбъект();
СсылкаОбъекта.Активирован = Истина;
СсылкаОбъекта.Записать();

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = Строка(ВыборкаДетальныеЗаписи.Рефер)+" имеет подчиненных - "+ВыборкаДетальныеЗаписи.КоличествоПодчиненных+" человек.";
Сообщение.Сообщить();


Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = Строка(ВыборкаДетальныеЗаписи.Рефер)+" получил статус Активирован ";
Сообщение.Сообщить();


Движение = Движения.КонтрагентыОбороты.Добавить();
Движение.Период = Дата;
Движение.Рефер = Рефер;
Движение.Клиент = Клиент;
Движение.Количество = Количество;
Движение.Активирован = Истина;

КонецЕсли; 
КонецЕсли;
Движения.Записать();


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КонтрагентыОбороты.Рефер КАК Рефер,
| СУММА(КонтрагентыОбороты.Активирован) КАК КоличествоАктивирован
|ИЗ
| РегистрНакопления.КонтрагентыОбороты КАК КонтрагентыОбороты
|ГДЕ
| КонтрагентыОбороты.Рефер = &Рефер
|
|СГРУППИРОВАТЬ ПО
| КонтрагентыОбороты.Рефер";

Запрос.УстановитьПараметр("Рефер", Рефер);
//Запрос.УстановитьПараметр("Активирован", Справочники.СписокНачинающихУчастников.НайтиПоНаименованию("Активирован"));

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Если ВыборкаДетальныеЗаписи.КоличествоАктивирован = 5 Тогда
СсылкаОбъекта = Справочники.СписокНачинающихУчастников.НайтиПоНаименованию(ВыборкаДетальныеЗаписи.Рефер).ПолучитьОбъект();
СсылкаОбъекта.Развившийся = Истина;
СсылкаОбъекта.Записать();

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = Строка(ВыборкаДетальныеЗаписи.Рефер)+" получил статус Развившийся ";
Сообщение.Сообщить();
КонецЕсли; 
КонецЕсли;
КонецПроцедуры


LexaK

а почему на = 5 проверяете? а если подчиненных 6 и более? то элемент уже не Активирован?
ответ Понравился? (в смысле пригодился?)

Yamuna

Цитата: LexaK от 29 мая 2019, 09:08
а почему на = 5 проверяете? а если подчиненных 6 и более? то элемент уже не Активирован?

ну больше 5 не будет почему то так решили..

Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск