Имя: Пароль:
1C
 
Присваивание переменной значения до условия
0 myr4ik07
 
23.10.14
12:30
Вчера уже обьяснил по поводу параметров в запросе но увы, очень тяжело мне это понять, есть код:

&НаСервере
Функция ПроверитьСтатус(Номер)
    
    Запрос = Новый Запрос;
    Запрос.Текст =  
    "ВЫБРАТЬ
    |    Статус.Отремонтировано КАК СтатусЗаявки,
    |    Статус.НомерЗ
    |ИЗ
    |    РегистрСведений.Статус КАК Статус
    |ГДЕ
    |    Статус.НомерЗ = &НомерЗ";
    Запрос.УстановитьПараметр("НомерЗ", Объект.Заявка);
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаЗапроса = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаЗапроса.Следующий() Цикл
        Результат = ВыборкаЗапроса.СтатусЗаявки;
        Прервать;
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции

&НаКлиенте
Процедура Проверить(Команда)
        
    Если ПроверитьСтатус(Объект.Заявка) = Неопределено Тогда
        Сообщить("Номер неверный или не существует");
    ИначеЕсли ПроверитьСтатус(Объект.Заявка) Тогда
        Сообщить("Отремонтировано");    
    Иначе     
        Сообщить("Не отремонтировано");    
    КонецЕсли;
    
КонецПроцедуры

проверяет статус ремонта по условиям. Не могу понять, вот в цикле
Результат = ВыборкаЗапроса.СтатусЗаявки;
уже переменная Результат получает статус, а как почему уже есть резуьтат (истина или ложь) в переменной коль еще условие НаКлиенте не выполнялось?!
1 Maxus43
 
23.10.14
12:32
Так правильней:
&НаКлиенте
Процедура Проверить(Команда)
    Статус = ПроверитьСтатус(Объект.Заявка);    
    Если  Статус = Неопределено Тогда
2 Cube
 
23.10.14
12:32
(0) "а как почему уже есть резуьтат (истина или ложь) в переменной коль еще условие НаКлиенте не выполнялось?!"
Русская языка меня покинуть...
3 Maxus43
 
23.10.14
12:33
по вопросу - у тебя может реквизит формы есть такой или ещё что
4 Maxus43
 
23.10.14
12:34
а так конечно непонятно нифига, что когда где получается
5 myr4ik07
 
23.10.14
12:34
И  Запрос.УстановитьПараметр("НомерЗ", Объект.Заявка); вот здесь смысл кода в том, что в параметре НомерЗ нужно выбрать все, что находиться в РС.Статус.НомерЗ по тому, что будет введено в Обьект.Заявка?
6 myr4ik07
 
23.10.14
12:35
(2) к сожалению не очень владею русским, как уже есть
7 Maxus43
 
23.10.14
12:40
(5) ты спрашиваешь или утверждаешь?
https://pp.vk.me/c613520/v613520813/1bd28/JUHgzVX8YDU.jpg
8 myr4ik07
 
23.10.14
12:43
(1) а почему правильней так как вы написали?
9 Maxus43
 
23.10.14
12:43
(8) чтоб 2 раза запрос не ваыполнять один и тот же
10 myr4ik07
 
23.10.14
12:44
(9) а, ок, переписал
11 myr4ik07
 
23.10.14
12:49
Вверху код был как пример.
а вот тз, глядите, мне нужно выполнить проверку есть ли некий товар в той партии, которую я укажу и если нет не списывать товар и выдать уведомление о недостаче.
Имею
Процедура ОбработкаПроведения(Отказ, Режим)
    Движения.ОстаткиМатериалов.Записывать = Истина;
    Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
        Движение = Движения.ОстаткиМатериалов.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Материал = ТекСтрокаМатериалы.Номенклатура;
        Движение.Количество = ТекСтрокаМатериалы.Количество;
        Движение.Партии = Ссылка;
    КонецЦикла;
    Движения.Записать();
    Если Режим = РежимПроведенияДокумента.Оперативный Или Режим = РежимПроведенияДокумента.Неоперативный Тогда
        
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ОстаткиМатериаловОстатки.Материал,
        |    ОстаткиМатериаловОстатки.КоличествоОстаток КАК Количество
        |ИЗ
        |    РегистрНакопления.ОстаткиМатериалов.Остатки КАК ОстаткиМатериаловОстатки
        |ГДЕ
        |    ОстаткиМатериаловОстатки.КоличествоОстаток < 0
        |    И ОстаткиМатериаловОстатки.Партии = &Партии";
        
        Запрос.УстановитьПараметр("Партии", Ссылка.Материалы);
        РезультатЗапроса = Запрос.Выполнить();
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            Сообщить("Не хватает " + ВыборкаДетальныеЗаписи.Материал + " в количестве " + ВыборкаДетальныеЗаписи.Количество);
            Отказ = Истина;
        КонецЦикла;
        
    КонецЕсли;
    
КонецПроцедуры
12 myr4ik07
 
23.10.14
12:49
меня вот здесь интересует
|    И ОстаткиМатериаловОстатки.Партии = &Партии";
        
        Запрос.УстановитьПараметр("Партии", Ссылка.Материалы);
правильно ли заданы параметры?
13 myr4ik07
 
23.10.14
12:52
партия в моем случаи это Ссылка.Приход.Накл. на документ.
В Док. Реал.Товаров будет реквизит с типом Ссылка.Приход.Накл. и вот при реал. выбираю док. и должна быть проверка по партиям
14 palpetrovich
 
23.10.14
13:01
(12) в каком смысле интересует? типы совпадают?
ОстаткиМатериаловОстатки.Партии
и
Ссылка.Материалы
15 myr4ik07
 
23.10.14
13:41
(14) я не знаю правильно ли я написал условие, нет типы не совпадают
ОстаткиМатериаловОстатки.Партии тип ДокументСсылкаПрих.Наклад., а Ссылка.Материалы это ТЧ документа
16 myr4ik07
 
23.10.14
13:44
(14) а типы должны совпадать? Так, а если
|    И ОстаткиМатериаловОстатки.Партии = &Партии";
        
        Запрос.УстановитьПараметр("Партии", Ссылка);
так Ссылка это же будет ссылка на этот документ, а тип ОстаткиМатериаловОстатки.Партии это ДокументСсылка.Прих.Наклад. или так будет правильно?