8.х Запрос

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

  1. TopicStarter Overlay
    TODD22
    Offline

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

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Здравствуйте.

    Есть ТЗ с ценами в ней 1700 строк. Есть регистр сведений Цены.

    Передаю ТЗ в запрос и дальше надо как то через соединение наверное сделать.

    Мне в результате запроса нужны только различающиеся цены.

    Код:
    "ВЫБРАТЬ
        |    ТЗЦены.Номенклатура КАК Номенклатура,
        |    ТЗЦены.Цена,
        |    ТЗЦены.Скидка,
        |    &ДатаСреза КАК Период,
        |    &Магазин
        |ПОМЕСТИТЬ ЦеныНоменклатуры
        |ИЗ
        |    &ТЗЦены КАК ТЗЦены
        |
        |ИНДЕКСИРОВАТЬ ПО
        |    Номенклатура
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ЦеныНоменклатуры.Номенклатура КАК Товар,
        |    ЦеныНоменклатуры.Цена,
        |    ЦеныНоменклатуры.Скидка,
        |    ЦеныНоменклатуры.Период,
        |    ЦеныНоменклатуры.Магазин
        |ИЗ
        |    ЦеныНоменклатуры КАК ЦеныНоменклатуры
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&ДатаСреза, Магазин = &Магазин) КАК ЦеныСрезПоследних
        |        ПО ЦеныНоменклатуры.Номенклатура = ЦеныСрезПоследних.Товар
        |            И ЦеныНоменклатуры.Цена <> ЦеныСрезПоследних.Цена
    
  2. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    Выбрать РАЗЛИЧНЫЕ ? Только это походу нужно брать всего два поля - Номенклатуру и Цену
  3. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Точно - нет :)
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Соединение с применением "<>" не есть гуд.
    Я бы сделал через объединение отдельных таблиц с условиями > 0 и < 0, но не факт, что будет быстрее.
  5. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    немного уточнить можно. Различающиеся цены где в ТЗ или в Регистре то же
    Просто допустим в ТЗ такой номенклдатыры нет а в регистре есть - ее надо выводить или только ту номенклатуру что в в ТЗ
  6. TopicStarter Overlay
    TODD22
    Offline

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

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Есть файл csv с ценами. По всем позициям 1700 штук. Есть регистр сведений Цены.

    Мне нужно запросом получить все позиции из файла csv которые отличаются от позиций в регистре цен.
    Хочу записывать только изменённые строки.
    У меня может изменится 100 строк из 1700. Вот хочу эти 100 строк дописывать.
  7. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Код:
    "ВЫБРАТЬ
        |    ТЗЦены.Номенклатура КАК Номенклатура,
        |    ТЗЦены.Цена,
        |    ТЗЦены.Скидка,
        |    &ДатаСреза КАК Период,
        |    &Магазин
        |ПОМЕСТИТЬ ЦеныНоменклатуры
        |ИЗ
        |    &ТЗЦены КАК ТЗЦены
        |
        |ИНДЕКСИРОВАТЬ ПО
        |    Номенклатура
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ЦеныНоменклатуры.Номенклатура КАК Товар,
        |    ЦеныНоменклатуры.Цена,
        |    ЦеныНоменклатуры.Скидка,
        |    ЦеныНоменклатуры.Период,
        |    ЦеныНоменклатуры.Магазин
        |ИЗ
        |    ЦеныНоменклатуры КАК ЦеныНоменклатуры
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&ДатаСреза, Магазин = &Магазин) КАК ЦеныСрезПоследних
        |        ПО ЦеныНоменклатуры.Номенклатура = ЦеныСрезПоследних.Товар
        | ГДЕ         ЦеныНоменклатуры.Цена <> ЦеныСрезПоследних.Цена
    
    ?
    TODD22 нравится это.
  8. TopicStarter Overlay
    TODD22
    Offline

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

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Я загрузил csv в ТЗ. И ТЗ закидываю в запрос. Не догоняю как их соеденить так что бы остались только различающиеся позиции.

    Сделал через внутренее соединение. У меня в результате только те записи которые присутствуют в регистре и в ТЗ. Если в регистре цена по номенклатуре не устанавливалась то в результат такая номенклатура не попадает.

    Если делаю левое соединение то у меня в результате вся номенклатура. Я вот уже думаю может проще весь регистр перезатирать. Но тогда вопрос по обменам.
  9. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Говорю же: сделай объединение, цены из ТЗ - с "+", цены из регистра - с "-", сгруппируй результат и выбери те, у которых цена > 0 и < 0
  10. TopicStarter Overlay
    TODD22
    Offline

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

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Да так вроде работает. Теперь вопрос в том как бы ускорить запись в РС.
    --- Объединение сообщений, 5 фев 2016 ---
    Вадим запрос вроде нормально отрабатывает по скорости. По крайней мере 99% времени идёт запись в регистр.
    Запись в регистр 1700 цен проходит за 15 секунд.
  11. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    именно запись - транзакциями обектов по 100-300, должно чутка быстрее быть
  12. TopicStarter Overlay
    TODD22
    Offline

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

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    У меня в регистре уже есть цены на все позиции. Получается я должен их в отбор прочитать. Потом к отбору добавить изменённые и перезаписать набор?
  13. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    пиши по каждой номенклатуре, но в транзакции

    Набор - это если через регистратор, ибо независимый регистр через набор изменять - намного больше строк можно в итоге "задеть"
  14. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    можешь перед записью еще и РЛС отключить
  15. TopicStarter Overlay
    TODD22
    Offline

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

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    То есть через менджер записи что ли? Я попробую но он вроде как сильно медленный.
    а мне нужно 150 магазинов прогружать. И изменится может 10 позиций, а может и 1000 позиций.
    --- Объединение сообщений, 5 фев 2016 ---
    У меня нет РЛС. Рукоблудная конфа.
  16. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    именно через менеджер записи.
    Набор - это ты должен установить отборы по комбинации всех измерений, чтобы ничего не потерять, прочитать набор, изменить знначения ресурсов в нем и записать обратно весь набор

    даже если у тебя цены устанавливаются в разрезах магазинов, то каждый набор будет содержать всю номенклатуру по магазину
  17. TopicStarter Overlay
    TODD22
    Offline

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

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Ну да. В наборе у меня 1700 позиций.
    Попробую через менеджер записи.... Но уже видимо в понедельник.

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