8.х Проблема с запросом у новичка.(версия 1С (1С:Предприятие 8.1 (8.1.8.76)))

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Цукерман, 29 май 2010.

  1. TopicStarter Overlay
    Цукерман
    Offline

    Цукерман

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

    ошибка:
    Ошибка при выполнении обработчика - '{Документ.Реализация(55)}: Ошибка при вызове метода контекста (Выполнить): {(9, 98)}: Не задано значение параметра "СписокНоменклатурыДокумента"
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатура.Остатки(&МоментВремени, Номенклатура В (<<?>>&СписокНоменклатурыДокумента)) КАК ОстаткиНоменклатураОстатки'
    по причине:
    {Документ.Реализация(55)}: Ошибка при вызове метода контекста (Выполнить): {(9, 98)}: Не задано значение параметра "СписокНоменклатурыДокумента"
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатура.Остатки(&МоментВремени, Номенклатура В (<<?>>&СписокНоменклатурыДокумента)) КАК ОстаткиНоменклатураОстатки

    по причине:
    {(9, 98)}: Не задано значение параметра "СписокНоменклатурыДокумента"
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатура.Остатки(&МоментВремени, Номенклатура В (<<?>>&СписокНоменклатурыДокумента)) КАК ОстаткиНоменклатураОстатки




    З.Ы.: замучались искать в чем причина, выкладываю на всякий случай базу
    ОЧЕНЬ ПРОСИМ) ПЖАЛУЙСТА!

    Вложения:

  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Лень самим проверить?
    Код:
    Запрос.УстановитьПараметр("[b]СпислкНоменклатурыДокумента[/b]",ПереченьНоменклатуры.ВыгрузитьКолонку("Номенклатура"));
    
  3. TopicStarter Overlay
    Цукерман
    Offline

    Цукерман

    Регистрация:
    15 апр 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Спасиб, замучались проверять, ет уже не по глазам было, но возникла другая проблема:

    Ошибка при выполнении обработчика - '{Документ.Реализация(70)}: Поле объекта не обнаружено (Номенклатура)'
    по причине:
    {Документ.Реализация(70)}: Поле объекта не обнаружено (Номенклатура)
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Количество ошибок в коде просто огромное.
    1.
    Код:
      Если ВыборкаРезультатаЗапроса.Номенклатура=Перечисления.Номенклатура Тогда
    
    Это вообще как синтаксис контроль прошло?
    2. Есть такая строка:
    Код:
    Движение.Номенклатура=ВыборкаРезультатаЗапроса.Номенклатура;
    
    А есть такая:
    Код:
    Движение.Номенклатуры = ВыборкаРезультатаЗапроса.Номенклатуры;
    
    Вы банально код проверьте - кто же так пишет?
  5. TopicStarter Overlay
    Цукерман
    Offline

    Цукерман

    Регистрация:
    15 апр 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    ну прошло, а кто так пишет? так самоучки, никто не объяснял, так по поводу последней проблемы в этом дело? то что подобные строки с "=" напортачили?
  6. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Да, действительно пройдет :)
    Так а что там должно быть? Какой тип может быть в Номенклатуре?
    Код вообще странный какой-то...

    Если тип там один - то условие вообще не нужно, если тип Справочник, то тогда уж надо писать так:
    Код:
     Если ТипЗнч(ВыборкаРезультатаЗапроса.Номенклатура) = Тип("СправочникСсылка.Номенклатура") Тогда
    

Поделиться этой страницей