helpf.pro
Регистрация

Как выгрузить результат запроса

bless18
04.05.2010 19:29Прочитано: 24977
Здравствуйте, можно выгрузить результат запроса в список или таблицу значений?

Код 1C v 8.х
 
Процедура ПользователиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.Ссылка.Дата,
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.ДатаВыполнения
|ИЗ
| Документ.РаспределениеЗадачи.РаспределениеЗадачиСотрудникам КАК РаспределениеЗадачиРаспределениеЗадачиСотрудникам";

РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Для Каждого СтрокаРаспределениеЗадачиСотрудникам Из РезультатЗапроса Цикл
ДатаНачала = СтрокаРаспределениеЗадачиСотрудникам.Дата;
ДатаКонца = СтрокаРаспределениеЗадачиСотрудникам.ДатаВыполнения;
ДатаНачала = СтрокаРаспределениеЗадачиСотрудникам.Дата;
ДатаКонца = СтрокаРаспределениеЗадачиСотрудникам.ДатаВыполнения;

Если Год(ДатаНачала)=Год(ДатаКонца) Тогда
КоличествоДнейНаВыполнение = День(ДатаКонца)-День(ДатаНачала);
КоличествоДнейСоДняНачалаВыполнения = День(ТекущаяДата())-День(ДатаНачала);
ПроцентОставшегосяВремени=Окр(Число(КоличествоДнейСоДняНачалаВыполнения / КоличествоДнейНаВыполнение) * 100, 2);
КонецЕсли;

Если ПроцентОставшегосяВремени < 50 Тогда
ОформлениеСтроки.Ячейки.ПроцентЗавершенности.ЦветФона = Новый Цвет(155, 255, 155);
ИначеЕсли ПроцентОставшегосяВремени =50 Тогда
ОформлениеСтроки.Ячейки.ПроцентЗавершенности.ЦветФона = Новый Цвет(255, 153, 0);
ИначеЕсли ПроцентОставшегосяВремени > 50 Тогда
ОформлениеСтроки.Ячейки.ПроцентЗавершенности.ЦветФона = Новый Цвет(255, 0, 0);
КонецЕсли;

КонецЦикла;
Сообщить(ПроцентОставшегосяВремени);
Сообщить(Пользователи.Количество());

КонецПроцедуры


Нужно, чтобы каждая ячейка при разных условиях закрашивалась разными цветами, а у меня получается, что только одним все ячейки?
Может быть возможно как-то это исправить?
Yandex
Возможно, вас также заинтересует
Реклама на портале
bless18
04.05.2010 20:41Ответ № 1
А еще проблема такая, что вместо получения 3-х результатов, получаю 9, то есть цикл выполняется лишних 2 раза
E_Migachev
04.05.2010 23:48Ответ № 2
ухххх..... у тебя получилось что при выводе каждой строки выполняется запрос....

тут надо совсем по другому
1. запросом тебе нужно получить данные выгрузить их в ТЗ и потом вывести в табличное поле на форме как тут
2. потом для этого таблич поля описывай процедуру при выводе строки,что-то типа:
Код 1C v 8.х
  Процедура ПользователиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)	
ДатаНачала = ДанныеСтроки.Дата;
ДатаКонца = ДанныеСтроки.ДатаВыполнения;

Если Год(ДатаНачала)=Год(ДатаКонца) Тогда
КоличествоДнейНаВыполнение = День(ДатаКонца)-День(ДатаНачала);
КоличествоДнейСоДняНачалаВыполнения = День(ТекущаяДата())-День(ДатаНачала);
ПроцентОставшегосяВремени=Окр(Число(КоличествоДнейСоДняНачалаВыполнения / КоличествоДнейНаВыполнение) * 100, 2);
КонецЕсли;

Если ПроцентОставшегосяВремени < 50 Тогда
ОформлениеСтроки.Ячейки.ПроцентЗавершенности.ЦветФона = Новый Цвет(155, 255, 155);
ИначеЕсли ПроцентОставшегосяВремени =50 Тогда
ОформлениеСтроки.Ячейки.ПроцентЗавершенности.ЦветФона = Новый Цвет(255, 153, 0);
ИначеЕсли ПроцентОставшегосяВремени > 50 Тогда
ОформлениеСтроки.Ячейки.ПроцентЗавершенности.ЦветФона = Новый Цвет(255, 0, 0);
КонецЕсли;
КонецПроцедуры
bless18
05.05.2010 07:44Ответ № 3
Выгружать данные в табличное поле нужно отдельной процедурой или можно при выводе строки?
bless18
05.05.2010 07:55Ответ № 4
ТзВрем=ПолучитьТаблицуЧисленностейВТЗ(Организация, НачПериода,КонПериода);
Какие параметры нужно записвать?
Если запрос:
Код 1C v 8.х
 
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.Ссылка.Дата,
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.ДатаВыполнения
|ИЗ
| Документ.РаспределениеЗадачи.РаспределениеЗадачиСотрудникам КАК РаспределениеЗадачиРаспределениеЗадачиСотрудникам";
РезультатЗапроса = Запрос.Выполнить();

Пишу в параметрах
Код 1C v 8.х
 
ТЗ = ПолучитьТаблицуЧисленностейВТЗ(Дата, ДатаВыполнения);

Но поля не найдены: Дата и ДатаВыполнения
Также ошибка, что процедура "ПолучитьТаблицуЧисленностейВТЗ" не определена
bless18
05.05.2010 09:10Ответ № 5
Попробовала сделать так:
[c8]
Процедура ПользователиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.Ссылка.Дата,
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.ДатаВыполнения
|ИЗ
| Документ.РаспределениеЗадачи.РаспределениеЗадачиСотрудникам КАК РаспределениеЗадачиРаспределениеЗадачиСотрудникам";

Результат = Запрос.Выполнить();
ЭлементыФормы.Пользователи.Значение = Результат.Выгрузить();
ЭлементыФормы.Пользователи.СоздатьКолонки();
ДатаНачала = ДанныеСтроки.ДатаНачалаВыполнения;
ДатаКонца = ДанныеСтроки.ДатаВыполненияПоПлану;

Если Год(ДатаНачала)=Год(ДатаКонца) Тогда
КоличествоДнейНаВыполнение = День(ДатаКонца)-День(ДатаНачала);
КоличествоДнейСоДняНачалаВыполнения = День(ТекущаяДата())-День(ДатаНачала);
ПроцентОставшегосяВремени=Окр(Число(КоличествоДнейСоДняНачалаВыполнения / КоличествоДнейНаВыполнение)*100, 2);
КонецЕсли;

Для Каждого ТекСтрока Из ЭлементыФормы.Пользователи.Значение Цикл
Если ПроцентОставшегосяВремени < 50 Тогда
ОформлениеСтроки.Ячейки.ПроцентЗавершенности.ЦветФона = Новый Цвет(155, 255, 155);
ИначеЕсли ПроцентОставшегосяВремени =50 Тогда
ОформлениеСтроки.Ячейки.ПроцентЗавершенности.ЦветФона = Новый Цвет(255, 153, 0);
ИначеЕсли ПроцентОставшегосяВремени > 50 Тогда
ОформлениеСтроки.Ячейки.ПроцентЗавершенности.ЦветФона = Новый Цвет(255, 0, 0);
КонецЕсли;
КонецЦикла;

Сообщить(ПроцентОставшегосяВремени);
Сообщить(Пользователи.Количество());
КонецПроцедуры
/c8]
Но ни одного поля не выводится
E_Migachev
05.05.2010 09:37Ответ № 6
Смотри делаешь на форме Табличное поле и называешь его ТЗРезультата

далее делаешь кнопку и к ней процедуру ЗаполнитьТЗрузельтата, где пишешь:
Код 1C v 8.х
 Процедура ЗаполнитьТЗрузельтата()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.Ссылка.Дата,
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.ДатаВыполнения
|ИЗ
| Документ.РаспределениеЗадачи.РаспределениеЗадачиСотрудникам КАК РаспределениеЗадачиРаспределениеЗадачиСотрудникам";

Результат = Запрос.Выполнить();
ТзВрем = Результат.Выгрузить();
//Далее ее обрабатываем добавляя твой ПроцентОставшегосяВремени
ТзВрем.Колонки.Добавить("ПроцентОставшегосяВремени");
для каждого стр из ТзВрем цикл
ДатаНачала = стр .Дата;
ДатаКонца = стр .ДатаВыполнения;
Если Год(ДатаНачала)=Год(ДатаКонца) Тогда
КоличествоДнейНаВыполнение = День(ДатаКонца)-День(ДатаНачала);
КоличествоДнейСоДняНачалаВыполнения = День(ТекущаяДата())-День(ДатаНачала);
стр.ПроцентОставшегосяВремени=Окр(Число(КоличествоДнейСоДняНачалаВыполнения / КоличествоДнейНаВыполнение) * 100, 2);
КонецЕсли;
КонецЦикла;
//Выводим полученную ТЗ в Таб поле на форме
ТЗРезультат=ТзВрем; // ТЗРезультат - это Табличное Поле на Форме, присваиваем ему таблицу значений
//Создаем колонки в табличном поле, после чего видим в поле тз
ЭлементыФормы.ТЗРезультат.СоздатьКолонки();
КонецПроцедуры

После нажатия на кнопку у тебя должна зполниться ТЗ столбцами Дата и ДатаВыполнения
Потом создаешь для этой ТЗ процедуру при выводе строки вида:
Код 1C v 8.х
 Процедура ПользователиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)	
Если ДанныеСтроки.ПроцентОставшегосяВремени < 50 Тогда
ОформлениеСтроки.Ячейки.ПроцентЗавершенности.ЦветФона = Новый Цвет(155, 255, 155);
ИначеЕсли ДанныеСтроки.ПроцентОставшегосяВремени =50 Тогда
ОформлениеСтроки.Ячейки.ПроцентЗавершенности.ЦветФона = Новый Цвет(255, 153, 0);
ИначеЕсли ДанныеСтроки.ПроцентОставшегосяВремени > 50 Тогда
ОформлениеСтроки.Ячейки.ПроцентЗавершенности.ЦветФона = Новый Цвет(255, 0, 0);
КонецЕсли;
КонецПроцедуры


P.S. Мог где-то ошибиться... смотри отладчиком если что
)
bless18
05.05.2010 12:40Ответ № 7
Я сделала, но выходит ошибка
Поле объекта недоступно для записи (ТЗРезультата)
ТЗРезультата=ТзВрем;
*01
bless18
05.05.2010 14:24Ответ № 8
Ошибку исправила
Вместо
Код 1C v 8.х
 ТЗРезультата=ТзВрем   
написала
Код 1C v 8.х
 ЭлементыФормы.ТЗРезультата.Значение = ТзВрем   
, но табличное поле выводится пустым, хотя при дебаге значения в процедуре непустые
Код 1C v 8.х
 
Процедура ЗаполнитьТЗРезультатаНажатие(Элемент)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.Ссылка.Дата,
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.ДатаВыполнения
|ИЗ
| Документ.РаспределениеЗадачи.РаспределениеЗадачиСотрудникам КАК РаспределениеЗадачиРаспределениеЗадачиСотрудникам";

Результат = Запрос.Выполнить();
ТзВрем = Результат.Выгрузить();
//Далее ее обрабатываем добавляя твой ПроцентОставшегосяВремени
ТзВрем.Колонки.Добавить("ПроцентОставшегосяВремени");
для каждого стр из ТзВрем цикл
ДатаНачала = стр.Дата;
ДатаКонца = стр.ДатаВыполнения;
Если Год(ДатаНачала)=Год(ДатаКонца) Тогда
КоличествоДнейНаВыполнение = День(ДатаКонца)-День(ДатаНачала);
КоличествоДнейСоДняНачалаВыполнения = День(ТекущаяДата())-День(ДатаНачала);
стр.ПроцентОставшегосяВремени=Окр(Число(КоличествоДнейСоДняНачалаВыполнения / КоличествоДнейНаВыполнение) * 100, 2);
КонецЕсли;
КонецЦикла;
//Выводим полученную ТЗ в Таб поле на форме
ЭлементыФормы.ТЗРезультата.Значение=ТзВрем; // ТЗРезультат - это Табличное Поле на Форме, присваиваем ему таблицу значений
//Создаем колонки в табличном поле, после чего видим в поле тз
ЭлементыФормы.ТЗРезультата.СоздатьКолонки();
КонецПроцедуры

bless18
05.05.2010 15:08Ответ № 9
Спасибо за помощь
Все получилось!
E_Migachev
05.05.2010 15:14Ответ № 10
через Значение работать не будет
Когда на форме добавляешь новое таблично поле в его свойствах Имя пиши "ТЗрезультат", далее жми на зеленую галочку сверху, в поле данные тоже должно появится ТЗрезультат и код:
Код 1C v 8.х
 ТЗрезультат = ТЗврем;
ЭлементыФормы.ТЗРезультат.СоздатьКолонки();

только что проверил, так работает, в табличном поле появляется результат запроса
bless18
05.05.2010 15:29Ответ № 11
У меня говорит, что ТзРезультат не найдено
Код 1C v 8.х
 ТЗрезультат = ТЗврем;    
bless18
05.05.2010 15:30Ответ № 12
Ой, не доступно для записи *12
E_Migachev
05.05.2010 15:33Ответ № 13
так *09
1. в реквизитах формы есть ТЗрезультат?
2. В свойствах табличного поля тип значения - таблицаЗначений?
bless18
05.05.2010 19:18Ответ № 14
Да, все есть
E_Migachev
06.05.2010 10:18Ответ № 15
хм, а выложи обработку что-ли, посмотрим
bless18
06.05.2010 10:36Ответ № 16
Выкладываю:
Код 1C v 8.х
 
Процедура ПриОткрытии()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.Ссылка.Дата,
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.Ссылка.Исполнитель,
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.НаименованиеЗадачи,
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.ДатаВыполнения,
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.Приоритет,
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.Ссылка.ИмяПользователяВСистеме
|ИЗ
| Документ.РаспределениеЗадачи.РаспределениеЗадачиСотрудникам КАК РаспределениеЗадачиРаспределениеЗадачиСотрудникам
|ГДЕ
| РаспределениеЗадачиРаспределениеЗадачиСотрудникам.Ссылка.ИмяПользователяВСистеме = &ИмяПользователяВСистеме
| И РаспределениеЗадачиРаспределениеЗадачиСотрудникам.Ссылка.Дата = &ТекДата";
Запрос.УстановитьПараметр("ТекДата", ТекущаяДата());
Запрос.УстановитьПараметр("ИмяПользователяВСистеме", ПараметрыСеанса.ТекущийПользователь);

Результат = Запрос.Выполнить();
ТзВрем = Результат.Выгрузить();
ТзВрем.Колонки.Добавить("ПроцентОставшегосяВремени");

Для Каждого СтрокаРаспределениеЗадачиСотрудникам Из ТзВрем Цикл
СтрокаТабличнойЧасти = ЭтотОбъект.Пользователи.Добавить();
СтрокаТабличнойЧасти.ПользовательСистемы = СтрокаРаспределениеЗадачиСотрудникам.ИмяПользователяВСистеме;
СтрокаТабличнойЧасти.ТекущаяЗадача = СтрокаРаспределениеЗадачиСотрудникам.НаименованиеЗадачи;
СтрокаТабличнойЧасти.Приоритет = СтрокаРаспределениеЗадачиСотрудникам.Приоритет;
СтрокаТабличнойЧасти.ДатаНачалаВыполнения = СтрокаРаспределениеЗадачиСотрудникам.Дата;
СтрокаТабличнойЧасти.ДатаВыполненияПоПлану = СтрокаРаспределениеЗадачиСотрудникам.ДатаВыполнения;
СтрокаТабличнойЧасти.ИсполнительЗадачи = СтрокаРаспределениеЗадачиСотрудникам.Исполнитель;

ДатаНачала = СтрокаРаспределениеЗадачиСотрудникам.Дата;
ДатаКонца = СтрокаРаспределениеЗадачиСотрудникам.ДатаВыполнения;

Если Год(ДатаНачала)=Год(ДатаКонца) Тогда
КоличествоДнейНаВыполнение = День(ДатаКонца)-День(ДатаНачала);
КоличествоДнейСоДняНачалаВыполнения = День(ТекущаяДата())-День(ДатаНачала);
СтрокаРаспределениеЗадачиСотрудникам.ПроцентОставшегосяВремени=Окр(Число(КоличествоДнейСоДняНачалаВыполнения / КоличествоДнейНаВыполнение) * 100, 2);
КонецЕсли;
КонецЦикла;

Пользователи=ТзВрем;
ЭлементыФормы.Пользователи.СоздатьКолонки();
КонецПроцедуры


Процедура ПользователиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ДатаНачала = ДанныеСтроки.ДатаНачалаВыполнения;
ДатаКонца = ДанныеСтроки.ДатаВыполненияПоПлану;

Если Год(ДатаНачала)=Год(ДатаКонца) Тогда
КоличествоДнейНаВыполнение = День(ДатаКонца)-День(ДатаНачала);
КоличествоДнейСоДняНачалаВыполнения = День(ТекущаяДата())-День(ДатаНачала);
ПроцентОставшегосяВремени=Окр(Число(КоличествоДнейСоДняНачалаВыполнения / КоличествоДнейНаВыполнение)*100, 2);
КонецЕсли;

Для Каждого ТекСтрока Из ЭлементыФормы.Пользователи.Значение Цикл
Если ПроцентОставшегосяВремени < 50 Тогда
ОформлениеСтроки.Ячейки.ПроцентЗавершенности.ЦветФона = Новый Цвет(155, 255, 155);
ИначеЕсли ПроцентОставшегосяВремени =50 Тогда
ОформлениеСтроки.Ячейки.ПроцентЗавершенности.ЦветФона = Новый Цвет(255, 153, 0);
ИначеЕсли ПроцентОставшегосяВремени > 50 Тогда
ОформлениеСтроки.Ячейки.ПроцентЗавершенности.ЦветФона = Новый Цвет(255, 0, 0);
КонецЕсли;
КонецЦикла;

//Сообщить(ПроцентОставшегосяВремени);
// Сообщить(Пользователи.Количество());
КонецПроцедуры

E_Migachev
06.05.2010 14:35Ответ № 17
и на что в этом коде ругается?
bless18
06.05.2010 18:11Ответ № 18
На Пользователи=ТзВрем; Поле объекта не доступно для записи
E_Migachev
06.05.2010 20:28Ответ № 19
выложи обработку, как файл
bless18
06.05.2010 20:56Ответ № 20
Выкладываю обработку
bless18
06.05.2010 20:57Ответ № 21
Скачивать файлы может только зарегистрированный пользователь!
E_Migachev
06.05.2010 21:17Ответ № 22
Ошибка в том что Пользователи - это табличная часть и так туда данные не загрузить
тут нужно по другому:
вместо
Код 1C v 8.х
 Пользователи=ТзВрем;
ЭлементыФормы.Пользователи.СоздатьКолонки();


пиши:
Код 1C v 8.х
 для каждого стр из Тзврем цикл
НовСтр=Пользователи.добавить()
//тут попробуй так
ЗаполнитьЗначенияСвойств(новстр, стр);

//если выдаст ошибку, то обычным способом
НовСтр.ДатаНачалаВыполнения = стр.ДатаНачалаВыполнения;
и так далее все реквизиты
конеццикла
E_Migachev
06.05.2010 21:18Ответ № 23
ЗаполнитьЗначенияСвойств( - работает когда имена колонок совпадают!
bless18
07.05.2010 21:01Ответ № 24
Сделала обычным способом, имена колонок у меня разные, спасибо за помощь! )
E_Migachev
07.05.2010 21:38Ответ № 25
Пожалуйста *06, если все то закрывай тему )
bless18
08.05.2010 09:37Ответ № 26
Я в другой обработке попробовала заполнить табличное поле способом, который вы посоветовали:
Код 1C v 8.х
 Процедура КнопкаВыполнитьНажатие(Кнопка)
Запрос = новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ТекущиеЗадачиСрезПоследних.Регистратор.Дата,
| ТекущиеЗадачиСрезПоследних.Регистратор.Задача,
| ТекущиеЗадачиСрезПоследних.Регистратор.ОписаниеЗадачи,
| ТекущиеЗадачиСрезПоследних.Регистратор.Отдел.Наименование
|ИЗ
| РегистрСведений.ТекущиеЗадачи.СрезПоследних КАК ТекущиеЗадачиСрезПоследних";
Результат = Запрос.Выполнить();
ТзВрем = Результат.Выгрузить();

Для Каждого стр Из Тзврем Цикл
НовСтр=РаспределениеЗадачиСотрудникам.Добавить();
ЗаполнитьЗначенияСвойств(новстр, стр);
КонецЦикла;

КонецПроцедуры

В ТЧ выводятся строки, но они пустые, правда при дебаге заполняются, но не выводятся
На всякий случай высылаю эту обработку
Скачивать файлы может только зарегистрированный пользователь!
bless18
08.05.2010 09:42Ответ № 27
Упс, оказывается не заполняется ничего
bless18
08.05.2010 16:51Ответ № 28
Вопрос закрыт!
Подсказка: Вы можете приложить к ответу файл или изображение щелкнув по значку или в редакторе.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.