8.х Запрос остатков: простой, по складу и мн фильтр по каталогам

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

  1. TopicStarter Overlay
    progersan
    Offline

    progersan

    Регистрация:
    26 апр 2010
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Добрый!

    :D После перехода с 7.7 еще не могу привыкнуть к 8.1 ;)
    Помогите начинающему переходнику с таким простым запросом?

    8.1 УТ
    нужно получить остатки товаров на выбранном складе (выбирается он на форме) и желательно с мн. фильтром по разделам каталога номенклатуры , которые юзер натыкивает в какую нить , скажем Список значений.. ну или таблицу значений...

    :angry: Буду признателен за пример самого простейшего запроса + методику подстановки переменных формы/модуля в качестве фильтров в запрос и т.п. ..

    p.s. буду признателен администраторам если перенесут в ветку Конфигурирование... промахнулся
  2. PavelBaryshev
    Offline

    PavelBaryshev Опытный в 1С

    Регистрация:
    9 сен 2008
    Сообщения:
    316
    Симпатии:
    0
    Баллы:
    26
    выборка по складу и группе товара?

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

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

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    А чем вас типовой отчет не устроил? Там все это реализовано.
  4. TopicStarter Overlay
    progersan
    Offline

    progersan

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


    Код:
    Запрос.УстановитьПараметр("Группа", ГруппаНоменклатуры);
    Запрос.УстановитьПараметр("Склад", Склад);
    
    Какие значения могут принимать эти параметры: единичные (ссылка на элемент) или прокатит СписокЗначений ? Или же нужно просто несколько раз "УстановитьПараметр" ?

    2x_under
    пока вкуришь все новые прелести 8й версии.... хочется сначала разобраться в КОДЕ....
  5. x_under
    Offline

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

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Ну на самом деле проще раобраться с типовыми, чем писать свои.
    Чтобы передать список параметров в него надо засунуть список значений или массив, но добавить в тексте запроса условия вида не "=", а "В". Пример:
    Код:
    //...
    "|ГДЕ Номенклатура В (&СписокНомеклатуры)"
    //
    СписокНоменклатуры = Новый Массив;
    СписокНоменклатуры.Добавить(<Ваш элемент>);
    СписокНоменклатуры.Добавить(<Ваш элемент>);
    СписокНоменклатуры.Добавить(<Ваш элемент>);
    СписокНоменклатуры.Добавить(<Ваш элемент>);
    
    Запрос.УстановитьПараметр("СписокНоменклатуры",СписокНоменклатуры)
    
  6. TopicStarter Overlay
    progersan
    Offline

    progersan

    Регистрация:
    26 апр 2010
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Народ, продолжение банкета..

    Посогите решить проблему:
    добавляю в запрос строку
    Код:
    ГДЕ    ТоварыОрганизацийОстатки.Номенклатура.Родитель В (&СписокНоменклатуры) 
    
    Где &СписокНоменклатуры у меня имеет СписокЗначений на форме с группами Номенклатуры. Так вот если указать группу 1го уровня, то она и правда включается в запрос и все норм.
    Но подгруппы не учавствуют, т.к. видимо у них .Родитель - другой.
    Как это решить?

    Вопрос№2
    Как сделать фильтр по определенному типу цены?

    p.s. все делаю с запросом товарища Adminzavt выше.
  7. x_under
    Offline

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

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    1. Заменить конструкцию "В" на "В ИЕРАРХИИ".
    2. В параметры виртуальной таблицы добавить условие на тип цен.
  8. TopicStarter Overlay
    progersan
    Offline

    progersan

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

    логика у меня у самого блестящая , а вот синтаксис в 8й версии еще ооочень хромает, как и терминология:
    Параметры я вроде освоил...
    а вот... что есть "..виртуальной таблицы"..

    :angry:
  9. TopicStarter Overlay
    progersan
    Offline

    progersan

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

    Логически вижу что нужно сделать что то похожее на вставочку строки
    Код:
    РегистрСведений.ЦеныНоменклатуры.ТипЦен = Справочник.ТипыЦен.ТекущийЭлемент();
    
    ?
  10. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Код:
    "|РегистрНакопления.ТоварыОрганизаций.Остатки(
    |			&Дата,
    |			Номенклатура.Родитель = &Группа
    |				И Склад = &Склад) КАК ТоварыОрганизацийОстатки"
    
    "Номенклатура.Родитель = &Группа" и "Склад = &Склад" - это параметры виртуальной таблицы (отбор в данном случае).
    По аналогии добавьте также отбор по типу цен для "РегистрСведений.ЦеныНоменклатуры.СрезПоследних".
  11. TopicStarter Overlay
    progersan
    Offline

    progersan

    Регистрация:
    26 апр 2010
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    поправьте если не прав, говорю ж в синтаксисе новичек ;)
    Код:
    ...
    "|РегистрНакопления.ТоварыОрганизаций.Остатки(
    |			&Дата,
    |			Номенклатура.Родитель = &Группа
    |				И Склад = &Склад
    |				И ТипЦен = &МойТипЦен) КАК ТоварыОрганизацийОстатки"
    ....
    Запрос.УстановитьПараметр("МойТипЦен", ВыбранныйТипЦен);
    
    
    Сейчас нет под руками Метаданных 1С8, поэтому могу написать ерунду... НО помню что ТипЦен видел в другом регистре.. Сведений... а тут где его искать, или нужно присоединять каким то образом?
  12. PavelBaryshev
    Offline

    PavelBaryshev Опытный в 1С

    Регистрация:
    9 сен 2008
    Сообщения:
    316
    Симпатии:
    0
    Баллы:
    26
    Код:
    ...
    "|РегистрНакопления.ТоварыОрганизацийОстатки(
    |            &Дата,
    |            Номенклатура.Родитель = &Группа
    |                И Склад = &Склад
    |                И ТипЦен = &МойТипЦен) КАК ТоварыОрганизацийОстатки"
    ....
    Запрос.УстановитьПараметр("МойТипЦен", ВыбранныйТипЦен);
    
    
    
  13. x_under
    Offline

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

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    И дабы не путать человека условие
    Код:
    "ТипЦен = &МойТипЦен"
    
    надо вставить сюда
    Код:
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(ТипЦен = &МойТипЦен)
    
    а не в регистр остатков.
  14. TopicStarter Overlay
    progersan
    Offline

    progersan

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

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Небольшая поправка:
    Код:
    "РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &МойТипЦен)"
    
    
  16. TopicStarter Overlay
    progersan
    Offline

    progersan

    Регистрация:
    26 апр 2010
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    да, благодарю, НО додумался сам методом научного тыка..
    кстати, что за первый параметр? :) Поставил туда дату по примеру ".Остатки()" ... ошибки нет, видимо угадал?

    еще
    Вопрос нацать1
    Мне нужно видеть "Группы" (группы номенклатуры), а в запрос попадают только Элементы её?
    А то мне выгружать на сайт... а там Папочек может новых и не быть ;) Да и синхронизировать по ID нужно...

    Вопрос нацать2
    как добавить в выходную таблицу результата запроса Валюту Цены?... Цена цены то есть , нехочется получать её отдельной функцией...


    З.Ы. делаю выгрузку в VirtueMart :) Полезный для всех продукт... пока делаю для своего магазина.
    осталось только наладить запрос
  17. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ну блин я уж не знаю улыбнутся такой постановке вопроса или как. Да, там дата может быть. Но ведь надо не угадывать, а понимать, иначе как же вы потом это отлаживать будете если не знаете что у вас какая строчка кода делает?


    Читаем и думаем вот над этой темой: http://www.1c-pro.ru/index.php?showtopic=26049&hl=


    Взять ее из того же регистра, откуда и сами цены.
  18. TopicStarter Overlay
    progersan
    Offline

    progersan

    Регистрация:
    26 апр 2010
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    огромное спасибо за "потыкивание носом" :) Очень помогло в понимании процесса ЗаНово...

    След. вопрос родился:
    В таком запросе (как выше) при выборках из Регистра ТоварыОрганизаций
    можно ли получить ВСЕ позиции номенклатуры, а не только те которые присутствуют?
    т.е.
    А колво 0 цена 1000р.
    Б колво 1 цена 900р.
    В колво 0 цена 1000р.
    Г колво 10 цена ХХХХр.
    ....

    Сейчас я вижу только
    Б колво 1 цена 900р.
    Г колво 10 цена ХХХХр.

    Заранее спасибо..

    Просто помню что в 7.7 в запросе было что-то типа ключевого слова "ВСЕ"
  19. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Вы про тот запрос, который в теме по ссылке? Можно, замените в условии "> 0" на ">= 0".
  20. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Что тут за демогогию развели? 1 вопрос - 1 ответ.
    Страдает не синтаксис, а уровень Ваших знаний, наличие логики не даёт опыта работы с программой, и прочитайте хоть одну книгу по составлению запросов, т.к. это отдельный язык не связанный со встроенным языком.

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