8.х Помогите с запросом пожалуйста

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

  1. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    Всем привет.

    1с 8.2, Бухгалтерия для Казахстана 2.0

    Не получается решить примитивную задачу - получить остатки (на текущий момент) с розничной ценой.
    Что делал: конечно смотрел как сделан подбор в конфигурации, но это слабо приминимо, поскольку там все слишком запутано и тянет с собой тучу параметров, плюс, признаюсь, не совсем мне ясно. Слишком уж по модулям размазано.

    Видя это я, естественно, нацарапал свой...
    Код:
    ВЫБРАТЬ РАЗЛИЧНЫЕ
    ТиповойОстатки.Счет.Код КАК КодСчета,
    ТиповойОстатки.Субконто1.Ссылка КАК НоменклатураСсылка,
    ЦеныНоменклатурыСрезПоследних.Цена КАК типаЦена,
    ТиповойОстатки.КоличествоОстаток КАК Остаток
    ИЗ
    РегистрБухгалтерии.Типовой.Остатки КАК ТиповойОстатки
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
    ПО ТиповойОстатки.Субконто1.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка
    ГДЕ
    ТиповойОстатки.Счет.Код = &код
    И ЦеныНоменклатурыСрезПоследних.ТипЦен.Наименование = &розничная
    УПОРЯДОЧИТЬ ПО
    НоменклатураСсылка
    Собственно он работает и выводит остатки с ценой. Проблема в том, что их как-то совсем мало. То есть если делать подбор номенклатувы в перемещении ТМЗ (он выводит просто остатки без цены), то там позиций 60-70 на вскидку. По моему запросу выходит где-то 10.

    Пробовал добовлять свою номенклатуру, проводить через поступление ТМЗ и услуг, и добавлять розничную цену - в мой запрос попадает на ура. Где остальные остатки я хз.

    В общем помогите кто может.
    Я понимаю, что я чего-то не понимаю, но чего я не понимаю я не понимаю :)

    зы
    Параметры зпроса это естественно 1330 и розничная цена.
  2. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    Так, проблема походу не в запросе а в базе. Просто не на всю номенклатуру есть розничная в базе, потому и выбирается мало совсем...
  3. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    Кстати такой еще вопрос: навскидку никто не скажет почему этот запрос долго выполняется?

    На достаточно маленькой базе секунды 2 думает, страшно подумать что будет на большой...
  4. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Условия необходимо указывать в регистре.
    И не стоит в параметры пихать строковые представления.
    Хотите выбрать по розничной цене? Подставьте ссылку в параметр.

    Код:
    ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |ТиповойОстатки.Счет.Код КАК КодСчета,
    |ТиповойОстатки.Субконто1.Ссылка КАК НоменклатураСсылка,
    |ЦеныНоменклатурыСрезПоследних.Цена КАК типаЦена,
    |ТиповойОстатки.КоличествоОстаток КАК Остаток
    |ИЗ
    |РегистрБухгалтерии.Типовой.Остатки(, Счет = &Счет, , ) КАК ТиповойОстатки
    |  ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
    |  ПО ТиповойОстатки.Субконто1 = ЦеныНоменклатурыСрезПоследних.Номенклатура
    |УПОРЯДОЧИТЬ ПО
    |НоменклатураСсылка
  5. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    условие на счет нужно поставить в параметры виртуальной таблицы остатков, а условие на тип цен, соответственно, в параметры виртуальной таблицы среза последних.

    заодно избавитесь от косяков, которые может породить такой способ отбора
  6. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    Извините, занят был, не ответил сразу.

    А вот что это за условия в виртуальных таблицах, в смысле где о них узнать поподробнее? И почему в данном случае нельзя просто обойтись стандартным условием где?

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


    Что касается строковых представлений в параметрах, опять неясно. Специально проверил через ссылки:

    Код:
    query.SetParameter( "Розничная", Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию( "Розничная" ) );
    query.SetParameter( "код",   ПланыСчетов.Типовой.НайтиПоКоду( "1330" ) );
    Время выполнения запроса на глаз никак не меняется. То есть любопытно по каким еще причинам первоначальный подход был неверен.

    зы
    Я читал небольшую книжку по SQL (не 1с, а в целом), и вроде так поимел общее представление что куда, хоть и без интимных подробностей. Поэтому буду рад если кто даст развернутый ответ или укажет конкретное место где об этом подробно написано.
  7. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    И да, через параметры вируальных таблиц работает очень быстро!

    Потихоньку гуглю....

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