8.х SQL

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Узурпатор, 27 июл 2007.

  1. TopicStarter Overlay
    Узурпатор
    Offline

    Узурпатор

    Регистрация:
    23 июл 2007
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    1
    Нужно вывести остаток товара зная СериюНоменклатуры и Номенклатуру
    Пишу:

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

    запрос2 = новый запрос;
    Запрос2.Текст =( "ВЫБРАТЬ
    | ТоварыНаСкладахОстатки.КоличествоОстаток,
    | ТоварыНаСкладахОстатки.Номенклатура
    |ИЗ
    | РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
    |ГДЕ
    | ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура
    | И ТоварыНаСкладахОстатки.СерияНоменклатуры = &СерияНоменклатуры");
    ПолеВвода1=Номенклат;

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

    Процедура СправочникСписокПриАктивизацииСтроки(Элемент)

    стр = ЭлементыФормы.СправочникСписок.ТекущаяСтрока;
    ГТД = стр["Наименование"];
    Запрос2.УстановитьПараметр("СерияНоменклатуры" ,стр["Наименование"]);
    Запрос2.Установитьпараметр("Номенклатура", Номенклат);
    Результат = Запрос2.Выполнить();
    Выборка = результат.Выбрать();

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

    //сообщить("выбрали строку");
    табличка = ЭлементыФормы.Найти("ТабличноеПоле1");
    табличка.значение.очистить();


    //остаток
    новстр = табличка.значение.добавить();
    новстр["текст"] = "Остаток" ;
    выборка.следующий();
    новстр["значение"] = выборка.количествоОстаток;

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

    Выдаёт: Значение не является Значением объектного типа (Установить параметр)

    Жму подробно а там:

    Обнаружены ошибки:
    {Справочник.СерииНоменклатуры.Форма.ФормаВыбора(80)}: Значение не является значением объектного типа (УстановитьПараметр)
    Запрос2.УстановитьПараметр("СерияНоменклатуры" ,стр["Наименование"]);



    Где ошибка то????
  2. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    1. Вам стоит поработать над стилем программирования и названиями переменных.
    2. Серия номенклатуры - это ЭЛЕМЕНТ СПРАВОЧНИКА "СЕРИИ НОМЕНКЛАТУРЫ", вы передаете в параметр, в котором должна быть ссылка на справочник СТРОКУ!!! Тогда нужно делать другое сравнение.

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

    Ну и мало понятно для чего вы делаете Выбрать результат первого запроса - вы ведь ничего и никуда не подставляете.
  3. TopicStarter Overlay
    Узурпатор
    Offline

    Узурпатор

    Регистрация:
    23 июл 2007
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    1
    Спасибо, попробую!
    А первый запрос работает и его значения предоставляются в подходящем виде.
    А про Серии номенклатуры, я в этом справочнике и нахожусь.
  4. TopicStarter Overlay
    Узурпатор
    Offline

    Узурпатор

    Регистрация:
    23 июл 2007
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    1
    Код:
        ГТД =  ЭлементыФормы.СправочникСписок.ТекущаяСтрока["НомерГТД"];
    ПолеВвода1 = ГТД;    
    Запрос2.УстановитьПараметр("Номенклатура", Справочники.Номенклатура.НайтиПоНаименованию(Номенклат));
    Запрос2.УстановитьПараметр("СерияНоменклатуры", Справочники.СерииНоменклатуры.НайтиПоНаименованию(ГТД));
    Результат = Запрос2.Выполнить();
    Выборка = результат.Выбрать();
    
    //сообщить("выбрали строку");     
    табличка = ЭлементыФормы.Найти("ТабличноеПоле1");
    табличка.значение.очистить();
    
    //остаток
    новстр = табличка.значение.добавить();
    новстр["текст"] = "Остаток";
    Выборка.следующий();
    новстр["значение"] = Выборка.количествоОстаток;
    
    
    Где-то тут ошибка, вернее ругается именно на это:
    Код:
    Запрос2.УстановитьПараметр("Номенклатура", Справочники.Номенклатура.НайтиПоНаименованию(Номенклат));
    Запрос2.УстановитьПараметр("СерияНоменклатуры", Справочники.СерииНоменклатуры.НайтиПоНаименованию(ГТД));
    
    Подскажите, как исправить?
  5. TopicStarter Overlay
    Узурпатор
    Offline

    Узурпатор

    Регистрация:
    23 июл 2007
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    1
    Исправил, работает.

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