8.х Помогите с запросом.

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

  1. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Здравствуйте.
    Есть документ спецификация, там номенклатура, цены и прочее. Надо добавить колонку себестоимость по цене последнего поступления.
    У меня такой сейчас запрос.
    Код:
    "ВЫБРАТЬ
                     | ТЧ.Номенклатура,
                     | ТЧ.НомерСтроки
                     |ПОМЕСТИТЬ ТЧДокумента
                     |ИЗ
                     | &ТЧ КАК ТЧ
                     |;
                     |
                     |////////////////////////////////////////////////////////////////////////////////
                     |ВЫБРАТЬ
                     | ПоступлениеТоваровУслугТовары.Ссылка.Дата КАК Дата,
                     | ПоступлениеТоваровУслугТовары.Цена,
                     | ТЧДокумента.Номенклатура КАК Номенклатура,
                     | ТЧДокумента.НомерСтроки
                     |ИЗ
                     | Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары,
                     | ТЧДокумента КАК ТЧДокумента
                     |ГДЕ
                     | ПоступлениеТоваровУслугТовары.Номенклатура В (&ВыбНоменклатура)
                     | И ПоступлениеТоваровУслугТовары.Ссылка.Дата < &ДатаДок
                     | И ПоступлениеТоваровУслугТовары.Ссылка.Проведен
                     | И ПоступлениеТоваровУслугТовары.Склад.Регион = &ВыбРегион
                     |
                     |УПОРЯДОЧИТЬ ПО
                     | ТЧДокумента.НомерСтроки
                     |;
                     |
                     |////////////////////////////////////////////////////////////////////////////////
                     |УНИЧТОЖИТЬ ТЧДокумента";
    Запрос.УстановитьПараметр("ТЧ"    ,ТЧ.Выгрузить());
    Запрос.УстановитьПараметр("ВыбНоменклатура" ,ТЧ.ВыгрузитьКолонку("Номенклатура"));
    Запрос.УстановитьПараметр("ВыбРегион"  ,Справочники.Регион.НайтиПоНаименованию("Москва").Ссылка);
    Запрос.УстановитьПараметр("ДатаДок"   ,ТекущаяДата());
    У меня проблема в том, чтобы выбрать последнее поступление..
    Сейчас получается, что выводит все цены поступлений. которые были до.
  2. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    что сразу бросилось в глаза - вы загрузили ТЧ как временную таблицу в запрос, ну так и используйте ее, зачем же еще отдельно передавать ВыбНоменклатура, которая как я поняла - это колонка этой ТЧ. Таблицы между собой во втором пакете связите по номенклатуре.
  3. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Да дело то не в номенклатуре. Сейчас надо получать последние данные из поступлений. Оптимизаций займусь после.
  4. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    поверьте лучшу сразу... в данном случае, вам тогда непочто заморачиваться временной таблицей
  5. KrivosheevEV
    Offline

    KrivosheevEV Новичок в 1С

    Регистрация:
    3 мар 2014
    Сообщения:
    35
    Симпатии:
    2
    Баллы:
    4
    Какой ужас! Что тут происходит?!
    Шерстить документы, чтобы выгруженную (два раза!) табличную часть передать в запрос и при помощи нелепых отборов получить значение цены. ...ох, моё больное сердце... Допускаю такую ситуацию, но явно не в этом случае.
    Не знаю текущую конфигурацию, но в любом случае для этого существуют регистры! Документы существуют только для ввода данных пользователем.
    Всё стереть.
    Один простой запрос к регистру, на входе - ссылка на документ (или срез последних), на выходе - цена.
  6. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Да, согласна. Запрос получился говно. Но мне сказали из последнего поступления, а к как по другому я не знаю. Конфа - переписанная УПП.
  7. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну так последнее то поступление вы знаете, вот по ссылке и дергайте
  8. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    В этой спецификации много строк с номенклатурой, они все могут быть по разным поступлениям. Потом еще надо курс на эти даты вычислять и цену в валюте отображать.
  9. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Аленка, давайте попорядку все изложите - чего то я уже запуталась откуда и куда чего надо добавить
  10. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Ситуация такая, есть документ, там ТЧ. В эту ТЧ сотрудник как то грузит номенклатуру, я не помню точно как, из эксель наверное. Там есть кнопка - заполнить себестоимость. И вот, при нажатии на эту кнопку, из базы должна подставляться цена из последнего поступления деленная на курс этого поступления. У нас нет такого, что все пришло 1 днем. Там все разные даты у поступлений. Ну и курс соответственно тоже.
  11. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Вам среднюю себестоимость в валюте нужно выводить?
    Если вы сделаете:

    Код:
    Выбрать Макс(Период) КАК Период, Номенклатура Из РегистрНакопления.ПартияТоваровНаСкладах.Обороты(, &ДатаСреза, Регистратор, Организация = &Организация) ГДЕ НЕ Регистратор Документ.ПеремещениеТоваров СГРУППИРОВАТЬ ПО Номенклатура
    То с высокой долей вероятности вы получите дату последнего поступления

    Пока остается загадкой для чего нужен курс на дату поступления?
  12. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Нет, не среднюю. И даже наверное не себестоимость, это они так называют. Нужна цена последнего поступления. Ну как зачем курс на дату поступления, ведь курс меняется...
  13. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Перед записью данных в регистр происходит автоматический пересчет из валюты документа в валюту учета.
    Цена последнего поступления - частный случай себестоимости :)
  14. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Себестоимость или нет, не суть. У нас все в рублях, в документе курс не записывается. У меня получился такой запрос. Он работает, но он ужасен.
    Код:
    "ВЫБРАТЬ
                              |    ТЧ.Номенклатура,
                              |    ТЧ.НомерСтроки
                              |ПОМЕСТИТЬ ТЧДокумента
                              |ИЗ
                              |    &ТЧ КАК ТЧ
                              |;
                              |
                              |////////////////////////////////////////////////////////////////////////////////
                              |ВЫБРАТЬ
                              |    ПоступлениеТоваровУслугТовары.Ссылка.Дата КАК Дата,
                              |    ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
                              |    ПоступлениеТоваровУслугТовары.Ссылка,
                              |    ПоступлениеТоваровУслугТовары.Цена / КурсыВалют.Курс КАК Цена
                              |ПОМЕСТИТЬ НоменклатураВся
                              |ИЗ
                              |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
                              |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
                              |        ПО (КурсыВалют.Период В
                              |                (ВЫБРАТЬ ПЕРВЫЕ 1
                              |                    МАКСИМУМ(Т.Период)
                              |                ИЗ
                              |                    РегистрСведений.КурсыВалют КАК Т
                              |                ГДЕ
                              |                    Т.Валюта.Код = ""978""
                              |                    И Т.Период <= ПоступлениеТоваровУслугТовары.Ссылка.Дата))
                              |            И (КурсыВалют.Валюта.Код = ""978"")
                              |ГДЕ
                              |    ПоступлениеТоваровУслугТовары.Ссылка.Проведен
                              |
                              |ИНДЕКСИРОВАТЬ ПО
                              |    Дата,
                              |    Номенклатура
                              |;
                              |
                              |////////////////////////////////////////////////////////////////////////////////
                              |ВЫБРАТЬ
                              |    НоменклатураВся.Номенклатура,
                              |    МАКСИМУМ(НоменклатураВся.Дата) КАК Дата
                              |ПОМЕСТИТЬ НоменклатураМаксДата
                              |ИЗ
                              |    НоменклатураВся КАК НоменклатураВся
                              |
                              |СГРУППИРОВАТЬ ПО
                              |    НоменклатураВся.Номенклатура
                              |;
                              |
                              |////////////////////////////////////////////////////////////////////////////////
                              |ВЫБРАТЬ
                              |    НоменклатураВся.Номенклатура,
                              |    НоменклатураВся.Ссылка,
                              |    НоменклатураВся.Цена
                              |ПОМЕСТИТЬ Итог
                              |ИЗ
                              |    НоменклатураВся КАК НоменклатураВся
                              |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ НоменклатураМаксДата КАК НоменклатураМаксДата
                              |        ПО НоменклатураВся.Номенклатура = НоменклатураМаксДата.Номенклатура
                              |            И НоменклатураВся.Дата = НоменклатураМаксДата.Дата
                              |;
                              |
                              |////////////////////////////////////////////////////////////////////////////////
                              |ВЫБРАТЬ
                              |    ТЧДокумента.Номенклатура,
                              |    ТЧДокумента.НомерСтроки КАК НомерСтроки,
                              |    Итог.Цена,
                              |    Итог.Ссылка.Дата КАК Дата
                              |ИЗ
                              |    ТЧДокумента КАК ТЧДокумента
                              |        ЛЕВОЕ СОЕДИНЕНИЕ Итог КАК Итог
                              |        ПО ТЧДокумента.Номенклатура = Итог.Номенклатура
                              |ГДЕ
                              |    Итог.Номенклатура В(&ВыбНоменклатура)
                              |
                              |УПОРЯДОЧИТЬ ПО
                              |    НомерСтроки
                              |;
                              |
                              |////////////////////////////////////////////////////////////////////////////////
                              |УНИЧТОЖИТЬ ТЧДокумента";
    
  15. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Вы вообще читаете, что вам советуют делать? Из Владивостока в Японию тоже можно через Москву полететь, а можно на пароме.
  16. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Конечно читаю. Но советы были по не оптимальному использованию ТЧ и ВыбТаб, по использованию регистра. И ваш совет с высокой долей вероятности :) Так или иначе запрос работает, выбирает данные. Регистр не вариант уже спрашивала начальника. Когда я пробую исключить одну из таблиц вообще не получается. А ваш код вроде как у меня есть. Ну вариант кода.
  17. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    По какой причине регистр - не вариант?
  18. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Не знаю. А какой можно использовать?
  19. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Например тот, что упомянут в посте #11
  20. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    У вас параметр ДатаСреза. Если у номенклатурных позиций дата разная поступлений это будет работать?

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