Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 12:42

Создание запроса

Автор avgurello, 07 ноя 2012, 09:09

0 Пользователей и 1 гость просматривают эту тему.

avgurello

Начинающий...
Изучаю основы 1С.v8.1
Пишу запрос в модуле Объекта  «ОтпускМатериалаМастеру»
Цель: При проведении документа, должен проверяться остаток материалов по ЦентрамОтветственности и если материала недостаточно в каком- то центре, то программа должна выдать сообщении об отсутствии затребованного количества материала и предложить недостающий материал списать с другого центра, имеющего его в наличии.
Ans_1.JPG Ans_1_1.JPG

Написал Запрос:
Процедура ОбработкаПроведения(Отказ, Режим)
                Запрос=Новый Запрос;
                Если Режим=РежимПроведенияДокумента.Оперативный Тогда
                               Запрос.Текст=
"ВЫБРАТЬ
|             ОстаткиМатериаловОстатки.Номенклатура,
|             ОстаткиМатериаловОстатки.Номенклатура КАК ВидМатериала,
|             ОстаткиМатериаловОстатки.КоличествоОстаток,
|             ОстаткиМатериаловОстатки.СуммаОстаток,
|             ОтпускМатериаловМастеру.Материалы.(
|                             Номенклатура,
|                             Количество,
|                             Сумма
|             ),
|             ОстаткиМатериаловОстаткиПоЦентрамОтветственности.КоличествоОстаток КАК КоличествоПоМол
|ИЗ
|             Документ.ОтпускМатериаловМастеру КАК ОтпускМатериаловМастеру
|                             ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(&МоментВремени, Номенклатура В (&МатериалыДокумента)) КАК ОстаткиМатериаловОстатки
|                             ПО ОтпускМатериаловМастеру.Материалы.Номенклатура = ОстаткиМатериаловОстатки.КоличествоОстаток
|                             ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
|                                                            &МоментВремени,
|                                                            Номенклатура В (&МатериалыДокумента)
|                                                                            И ЦентрОтветственности = &ЦентрОтветственностиВДокументе) КАК ОстаткиМатериаловОстаткиПоЦентрамОтветственности
|                             ПО ОтпускМатериаловМастеру.Материалы.Номенклатура = ОстаткиМатериаловОстаткиПоЦентрамОтветственности.КоличествоОстаток
|ГДЕ
|             ОтпускМатериаловМастеру.Материалы.Номенклатура = &Номенклатура
|ДЛЯ ИЗМЕНЕНИЯ
|             РегистрНакопления.ОстаткиМатериалов.Остатки";
Иначе
Запрос.Текст=
    "ВЫБРАТЬ
|            ОтпускМатериаловМастеру.Материалы.(
|                            Количество,
|                            Сумма,
|                            Номенклатура,
|                            ),
|                            ОстаткиМатериаловОстаткиПоЦентрамОтветственности.КоличествоОстаток КАК КоличествоПоМол
|ИЗ
|            Документ.ОтпускМатериаловМастеру КАК ОтпускМатериаловМастеру
|                            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(&МоментВремени, Номенклатура В (&МатериалыДокумента)) КАК ОстаткиМатериаловОстатки
|                            ПО ОтпускМатериаловМастеру.Материалы.Номенклатура = ОстаткиМатериаловОстатки.КоличествоОстаток                                       
|                            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(&МоментВремени, Номенклатура В (&МатериалыДокумента)) КАК ОстаткиМатериаловОстаткиПоЦентрамОтветственности
|                            ПО ОтпускМатериаловМастеру.Материалы.Номенклатура = ОстаткиМатериаловОстаткиПоЦентрамОтветственности.КоличествоОстаток
|ГДЕ
|            ОтпускМатериаловМастеру.Материалы.Номенклатура = &МатериалыДокумента
|ДЛЯ ИЗМЕНЕНИЯ
|            РегистрНакопления.ОстаткиМатериалов.Остатки";
  КонецЕсли;
Запрос.УстановитьПараметр("ОтветственныйСотрудникВДокументе",ОтветственныйСотрудник);
Запрос.УстановитьПараметр("МоментВремени",МоментВремени());
Запрос.УстановитьПараметр("МатериалыДокумента",Материалы.ВыгрузитьКолонку("Номенклатура"));
Запрос.УстановитьПараметр("Ссылка",Ссылка);
ВыборкаРезультатаЗапроса=Запрос.Выполнить().Выбрать();
Пока ВыборкаРезультатаЗапроса.Следующий()Цикл
                // Проверяем остаток при оперативном проведении
                Если Режим=РежимПроведенияДокумента.Оперативный Тогда
                               Если ВыборкаРезультатаЗапроса.Материалы.Номенклатура=КоличествоПоМол Тогда
                                               Остаток=?(ВыборкаРезультатаЗапроса.КоличествоПоМол=Null,
                                               0,ВыборкаРезультатаЗапроса.КоличествоПоМол);
                                               Если Остаток<ВыборкаРезультатаЗапроса.КоличествоПоМол Тогда
Сообщить("Материала"+СокрЛП(ВыборкаРезультатаЗапроса.КоличествоПоМол)+"имеется только"+Остаток);
                Отказ=Истина;
                Возврат;
                   КонецЕсли;
                               КонецЕсли;
                                  КонецЕсли;
                                    КонецЦикла;             
                КонецПроцедуры
При попытке отладки пишет не определена переменная КоличествоПоМол
Что я делаю не правильно???

mixqn

Цитата: avgurello от 07 ноя 2012, 09:09При попытке отладки пишет не определена переменная КоличествоПоМол
А она у вас определена, переменная то?
Есть у вас такая строка
Если ВыборкаРезультатаЗапроса.Материалы.Номенклатура=КоличествоПоМол Тогда
до момента ее вызова не вижу определения переменной КоличествоПоМол

Public_enemy

Ваша ошибка в этом выражении:
Если ВыборкаРезультатаЗапроса.Материалы.Номенклатура=КоличествоПоМол Тогда
Переменная КоличествоПоМол ранее нигде неопределенна. Если вы хотите сравнить с остатками из результата запроса, тогда
должно быть так:
Если ВыборкаРезультатаЗапроса.Материалы.Номенклатура = ВыборкаРезультатаЗапроса.КоличествоПоМол Тогда
и непонятно зачем вы сравниваете номенклатуру с количеством
Наверно выражение должно иметь такой вид:
Если ВыборкаРезультатаЗапроса.Материалы.Количество = ВыборкаРезультатаЗапроса.КоличествоПоМол Тогда

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск