|
Выбор в запросе 1С (Бухгалтерия 3.0) цен из предпоследнего документа Поступление | ☑ | ||
---|---|---|---|---|
0
mistergluck
18.08.16
✎
11:51
|
Добрый день., помогите решить задачу: необходимо запросом получить цены списка номенклатуры из предпоследнего документа поступления товаров и услуг, в котором эта номенклатура встречается. Конфигурация Бухгалтерия предприятия 3.0,(хотя это не так важно). Собственно для последнего документа:
ВЫБРАТЬ ПослуплениеТоваровУслугТовары.Номенклатура, ПослуплениеТоваровУслугТовары.Цена ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК ПослуплениеТоваровУслугТовары ГДЕ ПослуплениеТоваровУслугТовары.Ссылка В (ВЫБРАТЬ ПЕРВЫЕ 1 РегПериод.Ссылка ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК РегПериод ГДЕ РегПериод.Номенклатура = ПослуплениеТоваровУслугТовары.Номенклатура И РегПериод.Ссылка.Проведен = ИСТИНА УПОРЯДОЧИТЬ ПО РегПериод.Ссылка.Дата УБЫВ) И ПослуплениеТоваровУслугТовары.Номенклатура В(&Номенклатура) И ПослуплениеТоваровУслугТовары.Ссылка.Проведен = ИСТИНА Для Двух последних начал вот с чего: ВЫБРАТЬ ПослуплениеТоваровУслугТовары.Номенклатура КАК Номенклатура, ПослуплениеТоваровУслугТовары.Цена, ПослуплениеТоваровУслугТовары.Ссылка.Дата КАК Дата ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК ПослуплениеТоваровУслугТовары ГДЕ ПослуплениеТоваровУслугТовары.Ссылка В (ВЫБРАТЬ ПЕРВЫЕ 2 РегПериод.Ссылка ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК РегПериод ГДЕ РегПериод.Номенклатура = ПослуплениеТоваровУслугТовары.Номенклатура И РегПериод.Ссылка.Проведен = ИСТИНА УПОРЯДОЧИТЬ ПО РегПериод.Ссылка.Дата УБЫВ) И ПослуплениеТоваровУслугТовары.Номенклатура В(&Номенклатура) И ПослуплениеТоваровУслугТовары.Ссылка.Проведен = ИСТИНА УПОРЯДОЧИТЬ ПО Номенклатура, Дата Сейчас при выводе в отчете в цикле выбираю только первую цену, вторую игнорирую, но хотелось бы сделать все в запросе. |
|||
1
lodger
18.08.16
✎
12:33
|
прикольно.
а сделай через вложенные запросы. например так: ВЫБРАТЬ ВложенныйЗапрос.Цена КАК Цена, ВложенныйЗапрос.Дата КАК Дата, ВложенныйЗапрос.Номенклатура КАК Номенклатура ИЗ (ВЫБРАТЬ ПЕРВЫЕ 1 ВложенныйЗапрос1.Цена КАК Цена, ВложенныйЗапрос1.Дата КАК Дата, ВложенныйЗапрос1.Номенклатура КАК Номенклатура ИЗ (ВЫБРАТЬ ПЕРВЫЕ 2 ПоступлениеТоваровУслугТовары.Цена КАК Цена, ПоступлениеТоваровУслугТовары.Ссылка.Дата КАК Дата, ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары ГДЕ ПоступлениеТоваровУслугТовары.Ссылка.Проведен И ПоступлениеТоваровУслугТовары.Номенклатура В(&Номенклатура) УПОРЯДОЧИТЬ ПО Дата УБЫВ) КАК ВложенныйЗапрос1 УПОРЯДОЧИТЬ ПО Дата) КАК ВложенныйЗапрос кто предложит еще более извращенный вариант? |
|||
2
gero
18.08.16
✎
12:42
|
(0)
Документов вида Поступления с одинаковыми датами в инф. базе не встречается? |
|||
3
mistergluck
18.08.16
✎
12:54
|
(1) не работает, выводит цену только одной номенклатуры
(2) документы поступления могут быть одной даты, но разного времени |
|||
4
Новиков
18.08.16
✎
14:33
|
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура ПОМЕСТИТЬ ТаблицаНоменклатуры ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В(&СписокНоменклатуры) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТЧТовары.Номенклатура, ТЧТовары.Цена, ТЧТовары.Ссылка.Дата КАК ДатаДок ПОМЕСТИТЬ ВТСрезПоследних ИЗ (ВЫБРАТЬ ТЧТовары.Номенклатура КАК Номенклатура, МАКСИМУМ(ТЧТовары.Ссылка.Дата) КАК ДатаДок ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК ТЧТовары ГДЕ ТЧТовары.Номенклатура В (ВЫБРАТЬ ТаблицаНоменклатуры.Номенклатура ИЗ ТаблицаНоменклатуры) СГРУППИРОВАТЬ ПО ТЧТовары.Номенклатура) КАК ВложенныйЗапрос ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ТЧТовары ПО ВложенныйЗапрос.Номенклатура = ТЧТовары.Номенклатура И ВложенныйЗапрос.ДатаДок = ТЧТовары.Ссылка.Дата ИНДЕКСИРОВАТЬ ПО ТЧТовары.Номенклатура, ДатаДок ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТСрезПоследних.Номенклатура КАК Номенклатура, МАКСИМУМ(ТЧ.Ссылка.Дата) КАК ДатаДок ПОМЕСТИТЬ ВТСрезПредпоследних ИЗ ВТСрезПоследних КАК ВТСрезПоследних ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ТЧ ПО ВТСрезПоследних.Номенклатура = ТЧ.Номенклатура И ВТСрезПоследних.ДатаДок > ТЧ.Ссылка.Дата СГРУППИРОВАТЬ ПО ВТСрезПоследних.Номенклатура ИНДЕКСИРОВАТЬ ПО Номенклатура, ДатаДок ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТСрезПредпоследних.Номенклатура, ТЧ.Цена, ТЧ.Ссылка.Дата КАК ДатаДок Поместить ВТНоменклатураСЦенами ИЗ ВТСрезПредпоследних КАК ВТСрезПредпоследних ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ТЧ ПО ВТСрезПредпоследних.Номенклатура = ТЧ.Номенклатура И ВТСрезПредпоследних.ДатаДок = ТЧ.Ссылка.Дата ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаНоменклатуры.Номенклатура КАК Номенклатура, ISNULL(ВТНоменклатураСЦенами.ДатаДок, ДАТАВРЕМЯ(0001, 1, 1, 0, 0, 0)) КАК ДатаДок, ISNULL(ВТНоменклатураСЦенами.Цена,0) КАК Цена ИЗ ТаблицаНоменклатуры КАК ТаблицаНоменклатуры ЛЕВОЕ СОЕДИНЕНИЕ ВТНоменклатураСЦенами КАК ВТНоменклатураСЦенами ПО ТаблицаНоменклатуры.Номенклатура = ВТНоменклатураСЦенами.Номенклатура |
|||
5
Новиков
18.08.16
✎
14:40
|
Пояснения
1. Если предпоследней цены нет, а есть последняя - считаю что ее цена = 0. Если хотите, чтобы цена выводилась последняя, предлагаю самостоятельно приклеить последнюю цену. Это совершенно не сложно. 2. Если цены вообще нет - считаю, что ее цена = 0. Если это не устраивает, то просто уберите крайнюю выборку, и сделайте оную из ВТНоменклатураСЦенами. 3. В моем решение есть место для вашего таланта по оптимизации запроса. Я такой цели не преследовал. А задание интересное. Вполне можно давать на собеседовании, чтоб понять - работал ли человек с запросами или нет. |
|||
6
mistergluck
19.08.16
✎
04:09
|
Спасибо за верное решение, оно мне навеяло вариант с выбрать первые 1 и 2: Вот тоже рабочий вариант:
[code] ВЫБРАТЬ ПослуплениеТоваровУслугТовары.Ссылка.Дата КАК Дата, ПослуплениеТоваровУслугТовары.Номенклатура КАК Номенклатура ПОМЕСТИТЬ СрезПоследних ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК ПослуплениеТоваровУслугТовары ГДЕ ПослуплениеТоваровУслугТовары.Ссылка В (ВЫБРАТЬ ПЕРВЫЕ 1 РегПериод.Ссылка ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК РегПериод ГДЕ РегПериод.Номенклатура = ПослуплениеТоваровУслугТовары.Номенклатура И РегПериод.Ссылка.Проведен = ИСТИНА УПОРЯДОЧИТЬ ПО РегПериод.Ссылка.Дата УБЫВ) И ПослуплениеТоваровУслугТовары.Номенклатура В(&Номенклатура) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПослуплениеТоваровУслугТовары.Номенклатура КАК Номенклатура, ПослуплениеТоваровУслугТовары.Цена, ПослуплениеТоваровУслугТовары.Ссылка.Дата КАК Дата ПОМЕСТИТЬ СрезДвухПоследних ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК ПослуплениеТоваровУслугТовары ГДЕ ПослуплениеТоваровУслугТовары.Ссылка В (ВЫБРАТЬ ПЕРВЫЕ 2 РегПериод.Ссылка ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК РегПериод ГДЕ РегПериод.Номенклатура = ПослуплениеТоваровУслугТовары.Номенклатура И РегПериод.Ссылка.Проведен = ИСТИНА УПОРЯДОЧИТЬ ПО РегПериод.Ссылка.Дата УБЫВ) И ПослуплениеТоваровУслугТовары.Номенклатура В(&Номенклатура) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СрезДвухПоследних.Номенклатура, СрезДвухПоследних.Цена ИЗ СрезДвухПоследних КАК СрезДвухПоследних ВНУТРЕННЕЕ СОЕДИНЕНИЕ СрезПоследних КАК СрезПоследних ПО СрезДвухПоследних.Номенклатура = СрезПоследних.Номенклатура И СрезДвухПоследних.Дата <> СрезПоследних.Дата [/code] |
|||
7
mistergluck
25.08.16
✎
12:49
|
+code
ВЫБРАТЬ ПослуплениеТоваровУслугТовары.Ссылка КАК Ссылка, ПослуплениеТоваровУслугТовары.Номенклатура КАК Номенклатура ПОМЕСТИТЬ СрезПоследних ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК ПослуплениеТоваровУслугТовары ГДЕ ПослуплениеТоваровУслугТовары.Ссылка В (ВЫБРАТЬ ПЕРВЫЕ 1 РегПериод.Ссылка ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК РегПериод ГДЕ РегПериод.Номенклатура = ПослуплениеТоваровУслугТовары.Номенклатура И РегПериод.Ссылка.Проведен = ИСТИНА УПОРЯДОЧИТЬ ПО РегПериод.Ссылка.Дата УБЫВ) И ПослуплениеТоваровУслугТовары.Номенклатура В(&Номенклатура) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПослуплениеТоваровУслугТовары.Номенклатура КАК Номенклатура, ПослуплениеТоваровУслугТовары.Цена, ПослуплениеТоваровУслугТовары.Ссылка КАК Ссылка ПОМЕСТИТЬ СрезДвухПоследних ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК ПослуплениеТоваровУслугТовары ГДЕ ПослуплениеТоваровУслугТовары.Ссылка В (ВЫБРАТЬ ПЕРВЫЕ 2 РегПериод.Ссылка ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК РегПериод ГДЕ РегПериод.Номенклатура = ПослуплениеТоваровУслугТовары.Номенклатура И РегПериод.Ссылка.Проведен = ИСТИНА УПОРЯДОЧИТЬ ПО РегПериод.Ссылка.Дата УБЫВ) И ПослуплениеТоваровУслугТовары.Номенклатура В(&Номенклатура) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СрезДвухПоследних.Номенклатура, СрезДвухПоследних.Цена ИЗ СрезДвухПоследних КАК СрезДвухПоследних ВНУТРЕННЕЕ СОЕДИНЕНИЕ СрезПоследних КАК СрезПоследних ПО СрезДвухПоследних.Номенклатура = СрезПоследних.Номенклатура И СрезДвухПоследних.Ссылка <> СрезПоследних.Ссылка |
|||
8
ovrfox
09.09.16
✎
13:30
|
Да зачем так сложно, если выборка первых двух уже есть
ВЫБРАТЬ ПослуплениеТоваровУслугТовары.Номенклатура КАК Номенклатура, ПослуплениеТоваровУслугТовары.Цена, ПослуплениеТоваровУслугТовары.Ссылка.Дата КАК Дата Поместить ПервыеДва ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК ПослуплениеТоваровУслугТовары ГДЕ ПослуплениеТоваровУслугТовары.Ссылка В (ВЫБРАТЬ ПЕРВЫЕ 2 РегПериод.Ссылка ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК РегПериод ГДЕ РегПериод.Номенклатура = ПослуплениеТоваровУслугТовары.Номенклатура И РегПериод.Ссылка.Проведен = ИСТИНА УПОРЯДОЧИТЬ ПО РегПериод.Ссылка.Дата УБЫВ) И ПослуплениеТоваровУслугТовары.Номенклатура В(&Номенклатура) И ПослуплениеТоваровУслугТовары.Ссылка.Проведен = ИСТИНА Индексировать ПО Номенклатура, Дата ; Выбрать ПервыеДва.Номенклатура, ПервыеДва.Дата, ПервыеДва.Цена Из ПервыеДва как ПервыеДва Где ПервыеДва.Дата в (Выбрать Первые 1 ПР.Дата из ПервыеДва Как ПР где ПР.Номенклатура = ПервыеДва.Номенклатура Упорядочить по ПР.Дата) |
|||
9
ovrfox
09.09.16
✎
13:33
|
Т.к. даты могут совпасть, то более правильный вариант будет
Выбрать ПервыеДва.Номенклатура, ПервыеДва.Дата, ПервыеДва.Цена Из ПервыеДва как ПервыеДва Где (ПервыеДва.Дата , ПервыеДва.Номенклатура )в (Выбрать Первые 1 ПР.Дата, ПР.Номенклатура из ПервыеДва Как ПР где ПР.Номенклатура = ПервыеДва.Номенклатура Упорядочить по ПР.Дата) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |