Имя: Пароль:
1C
1С v8
Автозаполнение поля по остаткам регистра
,
0 СэдКС
 
25.02.14
14:56
Здравствуйте! На форме имеется поле (остаток топлива), которое заполняется по остаткам регистра (запрос). Поле заполняется в зависимости от двух полей (транспорт и марка топлива), которые обязательны для заполнения.

Когда первоначально заполняю поля транспорт и марка топлива, то остаток топлива вычисляется верно, но когда меняю значения этих двух полей, то "пересчет" запроса не идет, хотя ПриИзменении двух полей идет ссылка на запрос, в котором считается остаток. Какой есть метод, который очищает данные перед запросом?
1 FIXXXL
 
25.02.14
14:57
код кажи
2 СэдКС
 
25.02.14
15:00
Процедура ТранспортПриИзменении(Элемент)
    
    ЗаполнитьПоказания();

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


Функция ЗаполнитьПоказания() Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПутевойЛистОстатки.Транспорт,
        |    ПутевойЛистОстатки.КонПоказанияОстаток,
        |    ПутевойЛистОстатки.ОстатокНаКонецОстаток,
        |    ПутевойЛистОстатки.МаркаТоплива
        |ИЗ
        |    РегистрНакопления.ПутевойЛист.Остатки(, ) КАК ПутевойЛистОстатки
        |ГДЕ
        |    ПутевойЛистОстатки.Транспорт = &Транспорт
        |    И ПутевойЛистОстатки.МаркаТоплива = &МаркаТоплива";

    Запрос.УстановитьПараметр("Транспорт", Транспорт);
    Запрос.УстановитьПараметр("МаркаТоплива", МаркаТоплива);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл
        НачПоказания = Выборка.КонПоказанияОстаток;
        ОстатокНаНачало = Выборка.ОстатокНаКонецОстаток;
    КонецЦикла;

КонецФункции
3 FIXXXL
 
25.02.14
15:05
запрос возвращает нужные данные?
4 СэдКС
 
25.02.14
15:08
да, но только при первом выборе.
5 salvator
 
25.02.14
15:10
(4) А по параметрам которые потом ставишь есть данные вообще?
6 Maxus43
 
25.02.14
15:12
смотри отладчиком Парметры запроса...
7 FIXXXL
 
25.02.14
15:14
и эта, Функция должна возвращать что-либо по-хорошему
у тебя ЗаполнитьПоказания() - это процедура :)
8 СэдКС
 
25.02.14
15:18
ок. сделаем процедуру.
9 salvator
 
25.02.14
15:19
(8) Имхо, проблема при получении данных из запроса. Проверь, пустой результат запроса или нет.
10 СэдКС
 
25.02.14
15:35
Добавила условие, что если заполнено только поле транспорт, то запросом вытаскивать только остаток топлива. Теперь значения возвращаются правильные, единственное, если в регистре нет данных, то 0 в поле не становится, хотя указала ЕСТЬNULL(ПутевойЛистОстатки.ОстатокНаКонецОстаток, 0)
11 FIXXXL
 
25.02.14
15:37
(10) ну очисти поля перед заполнением
12 СэдКС
 
25.02.14
15:39
(10) неправильно. надо попробовать указать, что если транспорт неопределено, то остаток 0
(11) не помогает
13 Maxus43
 
25.02.14
15:44
>>единственное, если в регистре нет данных, то 0 в поле не становится
тут NULL не поможет, если нет остатка - то и результат Пустой...
    Если Выборка.Следующий() Тогда
        НачПоказания = Выборка.КонПоказанияОстаток;
        ОстатокНаНачало = Выборка.ОстатокНаКонецОстаток;
Иначе
        НачПоказания = 0;
        ОстатокНаНачало = 0;
КонецЕсли;
14 СэдКС
 
25.02.14
15:49
Maxus43, спасибо, вы правы!
FIXXXL, salvator, спасибо за помощь
15 Ненавижу 1С
 
гуру
25.02.14
15:53
фото где?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан