8.х Помогите разобраться с запросом!

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем PumbaNirvana, 25 авг 2009.

  1. TopicStarter Overlay
    PumbaNirvana
    Offline

    PumbaNirvana

    Регистрация:
    25 авг 2009
    Сообщения:
    37
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте! Я только начал работать с 1С 8. Накидал элементарный запрос, все вроде бы работает, но когда добовляю дополнительное условие выбора - "Продажи.ДоговорКонтрагента = &ДоговорКонтр", запрос формирует одни НОЛИ. Как только убираю условие - "Продажи.ДоговорКонтрагента = &ДоговорКонтр", все нормально работает. ДоговорКонтр-это поле ввода.
    Есть подозрени, что связанно с преобразованием типов, но пробовал все варианты преобразования, не получилось.


    Код:
    Запрос = Новый Запрос;
    
    Запрос.УстановитьПараметр("ДатаС", НачалоДня(ДатаС));
    Запрос.УстановитьПараметр("ДатаПо", КонецДня(ДатаПо));	
    Запрос.УстановитьПараметр("ДоговорКонтр", ДоговорКонтр);	
    
    Запрос.Текст = "ВЫБРАТЬ
    |Продажи.Период, 
    |Продажи.Стоимость,
    |Продажи.ДоговорКонтрагента
    |ИЗ
    |РегистрНакопления.Продажи КАК Продажи
    |ГДЕ 
    |Продажи.ДоговорКонтрагента = &ДоговорКонтр И
    |Продажи.Период МЕЖДУ &ДатаС И &ДатаПо
    |";
    
  2. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!

    Запрос как запрос, у меня данный запрос возвращает корректные данные, и с условием, и без. Если подобное у Вас получается не со всеми договорами, а лишь с некоторыми, проверьте регистр накопления Продажи.

    Не совсем понял данное сообщение, преобразование каких типов, если бы в запрос попал тип с ненадлежащим типом 1С сразу бы выкинула ошибку о несоответствии типов.

    Итого: Рекомендую проверить регистр накопления Продажи, если не поможет, тогда попробуйте определить четко даты, и договор контрагента.
  3. TopicStarter Overlay
    PumbaNirvana
    Offline

    PumbaNirvana

    Регистрация:
    25 авг 2009
    Сообщения:
    37
    Симпатии:
    0
    Баллы:
    1
    Спасибо за рекомендации. Проверю.
  4. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Скорее по данному догоору нет продаж.. либо ты просто в конецДня передаешь не 235959 а 00000 т.е. начало дня
  5. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    ДоговорКонтр - тип параметра какой???
  6. TopicStarter Overlay
    PumbaNirvana
    Offline

    PumbaNirvana

    Регистрация:
    25 авг 2009
    Сообщения:
    37
    Симпатии:
    0
    Баллы:
    1
    Все перепробовал, нифига. Для проверки, вместо Договра выбрал Номенклатуру, по ней формирует нормально. Для проверки сделал такую же обработку, только через ТаблицуЗначений, тупым перебором задал условия для ДоговорКонтр, нормально работает, выбирает так как нуно, а именно через SQL запросы, нихотит. Понимаю, что запрос очень простой, но не могу найти причину.
  7. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Учитывая простоту запроса попробуй заново его взять и написать. Текст который ты привел работает. Как вариант: или неправильный тип параметра, или где-то символ допустим на английском.
    Во вложении настройка консоли отчетов. Я пробовал на демо УТ. Попробуй ее.

    Вложения:

  8. TopicStarter Overlay
    PumbaNirvana
    Offline

    PumbaNirvana

    Регистрация:
    25 авг 2009
    Сообщения:
    37
    Симпатии:
    0
    Баллы:
    1
    В том то и дело, что мне не через консоль нуно. Если бы через консоль, давно накидал, с консолью вроде бы сдружился. Мне нужно через обработку :unsure:
  9. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Ты попробуй этот отчет в консоли. Он работает или нет. А потом если все работает перенесешь текст в обработку. И проверь тип параметра ДоговорКонтр. Какое значение ты туда передаешь?
  10. TopicStarter Overlay
    PumbaNirvana
    Offline

    PumbaNirvana

    Регистрация:
    25 авг 2009
    Сообщения:
    37
    Симпатии:
    0
    Баллы:
    1

    Спасибо за помощь x_under. Выкладываю скорректированный запрос. Думаю для таких новичков , как я , поможет. :unsure:

    Запрос = Новый Запрос;

    Запрос.УстановитьПараметр("ДатаС", НачалоДня(ДатаС));
    Запрос.УстановитьПараметр("ДатаПо", КонецДня(ДатаПо));
    Запрос.УстановитьПараметр("ДоговорКонтр", СокрЛП(Строка(ДоговорКонтр)));

    Запрос.Текст = "ВЫБРАТЬ
    |Продажи.Период,
    |Продажи.Стоимость,
    |Продажи.ДоговорКонтрагента.Наименование,
    |Продажи.Номенклатура
    |ИЗ
    |РегистрНакопления.Продажи КАК Продажи
    |ГДЕ
    //|Продажи.ДоговорКонтрагента = &ДоговорКонтр И
    |Продажи.Период МЕЖДУ &ДатаС И &ДатаПо И
    |Продажи.ДоговорКонтрагента.Наименование = &ДоговорКонтр";

    Результат = Запрос.Выполнить().Выбрать();
  11. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Не зачет тебе. Для типовых конфигураций система автоматически создает договоры с наименованием "Основной договор" => это условие даст тебе 1 договор из возможных сотен =)
    Передавать в параметр надо ссылку на объект!
  12. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Абсолютно согласен!!!
    Надо передатль в параметр ссылку... а если тебе надо несколько значений то передай в параметр

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

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    И в продолжение... В большинстве типовых конфигураций справочник договоры контрагентов является иерархическим. Соответственно кроме конструкции "В" можно использовать конструкцию "В ИЕРАРХИИ", что позволит как указывать список параметров, так и не задавать их вообще. А с конструкцией "В" указание параметров для получения данных обязательно

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