Стоит задача: создать регистр, в который при проведении документа записывать минимальное, среднее и максимальное значение температуры за день, а также количество осадков.
я создал регистр. написал запрос. он почему-то выполняет движение, а запрос нет. Помогите!
Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|СУММА(КоличествоОсадков) КАК Осадки,
|МИНИМУМ(Температура) КАК МинТемпература,
|МАКСИМУМ(Температура) КАК МаксТемпература,
|СРЕДНЕЕ(Температура) КАК СреднееЧисло
|ИЗ
|Документ.РезультатНаблюдений.Наблюдение
|СГРУППИРОВАТЬ ПО
|Ссылка.Дата";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
КонецЕсли;
// регистр Регистр
Для Каждого ТекСтрокаНаблюдение Из Наблюдение Цикл
Движение = Движения.Регистр.Добавить();
Движение.Период = Дата;
Движение.Температура = ТекСтрокаНаблюдение.Температура;
Движение.Осадки = ТекСтрокаНаблюдение.КоличествоОсадков;
КонецЦикла;
КонецПроцедуры
! | http://pro1c.org.ua/index.php?act=announce&id=2: 9 |
Для начала просто почитайте теорию. Гугль в этом поможет.
Для того, чтобы кто-то что-то помог - сначала надо правильно поставить вопрос.
Noviscok @ Сегодня, 9:25
,
Запрос никаких "движений" и не должен делать, он данные выбирает.
Во-вторых, у вас в запросе нет условия по ссылке на документ, у вас данные будут тянуться со всех документов. Нужно добавить отбор по текущему документу:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|СУММА(КоличествоОсадков) КАК Осадки,
|МИНИМУМ(Температура) КАК МинТемпература,
|МАКСИМУМ(Температура) КАК МаксТемпература,
|СРЕДНЕЕ(Температура) КАК СреднееЧисло
|ИЗ
|Документ.РезультатНаблюдений.Наблюдение
|ГДЕ
| ссылка = &ТекущийДокумент
|СГРУППИРОВАТЬ ПО
|Ссылка.Дата";
// и перед выполнением установить параметр
Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка);
// а потом обходить результат запроса:
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Движение = Движения.Регистр.Добавить();
Движение.Период = Дата;
Движение.Осадки = Выборка.Осадки;
// и т.д.
КонецЦикла;
Соглашусь вопрос корректен. Что нужно написать в движении чтоб регистр записывал макс, мин и сред? Надо создать временную таблицу?
Noviscok @ Сегодня, 10:22
,
Давайте по шагам:
1) Все необходимые для этого действия пишем в модуле объекта документа в процедуре "Обработка проведения"
2) Для того чтобы что-то записать в регистр, нужно выбрать необходимые данные, для этого вам и нужен Запрос. Можно делать это так как делали вы в первом посте - напрямую читать данные из табличной части и писать их в регистр, но это считается неоптимальным, т.к. при каждом обращении к реквизитам таб. части идет обращение к базе, по сути это лишняя нагрузка. Поэтому лучше делать через запрос. Для этого нужно в запросе выбрать поля, которые вас интересуют, указать источник данных - это ваша таблица документа, и указать что мы берем конкретный текущий документ - то условие про которое я писал постом выше (конструкция "ГДЕ").
3) После того как запрос есть, нам необходимо передать все параметры в запрос, это то что идет со значком "&"
4) После этого запрос готов к выполнению, выполняем его и получаем выборку нужных нам данных. За это отвечают строки
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
КонецЦикла;
Движение = Движения.Регистр.Добавить();
Движение.Период = Дата;
Движение.Осадки = Выборка.Осадки;
Движение.МинТемпература = Выборка.МинТемпература;
Движение.МаксТемпература = Выборка.МаксТемпература;
// и т.д. все поля которые нужно записать в регистр.
// P.S. естественно для записи в регистр у вас там должны быть соотвествующие поля "Осадки ", "МинТемпература", "МаксТемпература "
Bernet @ Сегодня, 14:32
,
У меня не было полей макс и мин. После Вашего ответа я создал эти поля. Все получилось. Просто у меня уже каша в голове. Спасибо Вам огромное, все понял.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua