powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Работа с Деревом Значений
5 сообщений из 5, страница 1 из 1
Работа с Деревом Значений
    #38484872
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня.
если тема кому то покажется сильно избитой и очень простой прошу сильно не пиннать.
есть следующая процедура:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
Процедура ПоказанияАбонента(Абонент,СтрокаДЗ)
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВводПоказанийСчетчиков.Ссылка,
		|	Протокол.ВремяЗаписи,
		|	Протокол.Записал
		|ИЗ
		|	Документ.ВводПоказанийСчетчиков КАК ВводПоказанийСчетчиков
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДатыЗапретаРедактирования КАК ДатыЗапретаРедактирования
		|		ПО ВводПоказанийСчетчиков.Подразделение = ДатыЗапретаРедактирования.Подразделение
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Протокол КАК Протокол
		|		ПО ВводПоказанийСчетчиков.Ссылка = Протокол.Объект
		|ГДЕ
		|	НЕ ВводПоказанийСчетчиков.ПометкаУдаления
		|	И ВводПоказанийСчетчиков.УчетныйМесяц = ДатыЗапретаРедактирования.РасчетныйПериод
		|	И ВводПоказанийСчетчиков.Абонент = &Абонент";
	Запрос.УстановитьПараметр("Абонент", Абонент);
	Результат = Запрос.Выполнить();
	Если Не Результат.Пустой() Тогда
		Выборка = Результат.Выбрать();
		НоваяГруппа=СтрокаДЗ.Строки.Добавить();
		НоваяГруппа.ВидДокумента="Показания";
		Пока Выборка.Следующий() Цикл
			Если Объект.Администратор Тогда
				НоваяСтрока = НоваяГруппа.Строки.Добавить();
				НоваяСтрока.Документ = Выборка.Ссылка;
				НоваяСтрока.ДатаДокумента = Выборка.ВремяЗаписи;
				НоваяСтрока.Автор = Выборка.Записал;
			Иначе
				Если СокрЛП(Выборка.Записал)=СокрЛП(ПолучитьТекущегоПользователя()) Тогда
					НоваяСтрока = НоваяГруппа.Строки.Добавить();
					НоваяСтрока.Документ = Выборка.Ссылка;
					НоваяСтрока.ДатаДокумента = Выборка.ВремяЗаписи;
					НоваяСтрока.Автор = Выборка.Записал;				
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
		Если НоваяГруппа.Строки.Количество()= 0 Тогда // вот здесь проверяю на наличие вложенных строк
                        //код удаления данной строки я так понимаю должен быть здесь но вот как это сделать я так и не понял
		КонецЕсли; 
	КонецЕсли;	
КонецПроцедуры


её смысл в следующем получить документ по автору либо если признак администратор = истина получить все документы.и вывести результат в дерево значений в виде иерархического списка.структура следующая: Клиент -> ВидИзменений -> Документ. а собственно вопрос вот в чем.как мне удалить строку "ВидДокументов" если в нее нет вложенных строк?
P.S. справку читал понимаю что надо сделать как то типа НоваяГруппа.Строки.Удалить(а вот что писать здесь не понимаю)
...
Рейтинг: 0 / 0
Работа с Деревом Значений
    #38484878
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каша полная.

СтрокаДЗ.Удалить(НоваяГруппа);


А на самом деле Ваши условия надо в запрос добавить

....
где Протокол.Записал=&Пользователь или &Администратор


Запрос.УстановитьПараметр("Пользователь", Пользователь);
Запрос.УстановитьПараметр("Объект.Администратор ", Администратор );


А САМОЕ правильное решение будет... судя по вашей функции Вы вызываете запрос в цикле по всем абонентам... на экзамене по 1с - стразу минус 3 бала... Переписать запрос так чтобы в нем рассчитывалось по всем абонентам и само выгружалось в дерево значений.
...
Рейтинг: 0 / 0
Работа с Деревом Значений
    #38484890
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист 1с, огромное спасибо
Код: sql
1.
СтрокаДЗ.Строки.Удалить(НоваяГруппа);

работает.
по поводу всего остального: Признак Администратор всего лишь формальность которая подразумевает что человек может видеть документы и работать с ними напрямую(отменить проведение/изменить).данным признаком я отсеиваю выводимые документы в дерево.Данный признак находится на форме и просто так его включить не получится(есть небольшая защита).т.е. запросом я получаю все документы а потом уже происходит анализ того что показывать пользователю(только свои документы или все).
т.е. предложенное Вами условие:"где Протокол.Записал=&Пользователь или &Администратор" не пойдет так как Администратор это множество пользователей(все возможные если быть более точным)
по поводу переписать запрос что бы он сам выводил в нужном формате в дерево было бы конечно интересно но с 1с и языком запросов SQL знаком поверхностно и моих знаний недостаточно для решения предложенным Вами способом.
P.S.: еще раз большое спасибо
...
Рейтинг: 0 / 0
Работа с Деревом Значений
    #38485102
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Вас устраивает производительность - то все нормально. А если абонентов за 10т... вот тогда у Вас будут проблемы.
...
Рейтинг: 0 / 0
Работа с Деревом Значений
    #38485840
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист 1с, ну по поводу производительности ничего вразумительного сказать не смогу.работаю только так и как будет лучше не знаю:) моим методом получаю интересующую меня информацию по 48к абонентов приблизительно за час.еще раз спасибо
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Работа с Деревом Значений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]