Всем привет.
Дана таблица (настроек... для выгрузки прайса на сайт) с полями:
номенклатура (а точнее группа!), тип цен, подразделение.
Эти три измерения нужны для получения цен.
ВЫБРАТЬ
Цены.Номенклатура,
Цены.Цена
Из
РегистрСведений.Цены.СрезПоследних(,
(Номенклатура, ТипЦен, Подразделение) В
(ВЫБРАТЬ
...
ИЗ
ТаблицаНастроек
)
) КАК Цены
Показать
Но как мне дополнить таблицу номенклатурой, чтобы получить элементы групп?
Перечитал статьи Ильдаровича, но так и не сообразил как применить сие к данной задаче:)
ЗЫ: Хотел соединить таблицу настроек с таблицей номенклатуры "по иерархии", но получившийся коррелирующий подзапрос не проходит синтаксис из-за оператора В ИЕРАРХИИ.
Нид хелп!
Если не получится красиво-элегантно, то буду динамически запрос формировать в цикле по строке настроек, но может кто подскажет как сделать все по-феншую.
Выбрать
СпрНоменклатура.Ссылка КАК Номенклатура,
Настройки.ТипЦен,
Настройки.Подразделение
ПОМЕСТИТЬ ВТ_НоменклатураНастройки
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаНастроек КАК Настройки
ПО Истина
ГДЕ
СпрНоменклатура.Ссылка В ИЕРАРХИИ(Выбрать Т.Номенклатура ИЗ ТаблицаНастроек КАК Т)
И НЕ СпрНоменклатура.ЭтоГруппа
;
Выбрать
Цены.Номенклатура,
Цены.Цена
ИЗ
РегистрСведений.Цены.СрезПоследних(, (Номенклатура, ТипЦен, Подразделение) В (Выбрать Т.Номенклатура. Т.ТипЦен, Т.Подразделение ИЗ ВТ_НоменклатураНастройки КАК Т)) КАК Цены
Показать
Заявление на перечисление мне на карточку 50% процентов своей ЗП отнесешь в бухгалтерию.
(27)Что на скриншоте не так? Элементы группы вместо самой группы есть? Вид цены есть? Подразделение есть? Что еще нужно?
Перестань говорить загадками. Какое полное? Какое внешнее? Ты о чем вообще?
(30) А вот не фиг использовать группу иерархического справочника для настроек.
Если нужны группы номенклатуры, то делают отдельную сущность.
Если сами цены установлены по типам цен, указанным в настройках, а по другим типам цен не установлены, то мой вариант отработает корректно. Отсечение произойдет в запросе к РегиструСведений.Цены.СрезПоследних.
(31) Ах там еще и иерархия!!! Ну тогда придется еще один промежуточный подзапрос для получения всех нижестоящих группы из номенклатурной иерархии... А потом уже накладывать отбор по этим номенклатурным родителям на регистр цен.
(35) Не важно, важно то, что нужно правильно дополнить таблицу настроек с набором полей "ГруппаНоменклатуры, ТипЦенДляЭтойГруппы, ПодразделениеДляЭтойГруппы", чтобы получить "ГруппаНоменклатуры, НоменклатураЭтойГруппы, ТипЦенДляЭтойГруппы, ПодразделениеДляЭтойГруппы".
(37) Это невозможно сделать, т.к. в таблице настроек для ГруппаНоменклатуры1 может быть ТипЦены1 и Подразделение1, для ГруппаНоменклатуры2 может быть ТипЦены2 и Подразделение2, а НоменклатураГруппы будет в итоге принадлежать и ГруппаНоменклатуры1 и ГруппаНоменклатуры2.
(34) В том что у одной номенклатуры может быть неограниченное количество иерархических родителей. И по каждой из них может быть установлена цена. Соответственно, все они будут удовлетворять условиям запроса (в иерархии)... Для того, чтобы система поняла, цену для какого из иерархического родителей брать - ей необходима шкала приоритетов (уровень иерархии хотя бы). Без этого задача невыполнима.
(7) на пальцах: выбрать
Группа из настройки
Поместить в настройкивт;
Выбрать товар из товары где товар в иерархии(выбрать настройки.настройка из настройкивт как настройка)
Тут или я не понимаю всей сложности, или Вы простоты)
Постановка задачи слегка сумбурная.
В лоб сразу задача естественно не решается. Нужно или пакетами, или вложенными запросами в 2-3 шага решить
Выбрать товар из товары где товар в иерархии(выбрать настройки.настройка из настройкивт как настройка)
Ты получишь товары, а как ты цены будешь искать? цены уникальны в разрезе номенклатуры, типа цен и подразделения
Одной таблицы товаров недостаточно.
Сложность как раз в том, чтобы найти элементы номенклатуры для каждой строки таблицы настроек, чтобы в результате получить
Номенклатура | ТипЦен | Подразделение
=======
Дано:
Масла | Цена продажи | Магазин1
Нужно получить:
Лукойл | Цена продажи | Магазин1
Тебойл | Цена продажи | Магазин1
Роснефть | Цена продажи | Магазин1
Имеется таблица настроек:
ГруппаНоменклатуры | ТипЦен | Подразделение
Изначально я хотел:
1. Получить таблицу элементов номенклатуры:
Номенклатура | ТипЦен | Подразделение
2. Получить цены (отбором сразу по этим трем измерениям)
ВЫБРАТЬ
Номенклатура.Ссылка,
1 КАК Связь
ПОМЕСТИТЬ ТоварНастрВТ
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Код = "00000000403"
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТипыЦенНоменклатуры.Ссылка,
1 КАК Связь
ПОМЕСТИТЬ ТипыЦенНастрВТ
ИЗ
Справочник.ТипыЦенНоменклатуры КАК ТипыЦенНоменклатуры
ГДЕ
ТипыЦенНоменклатуры.Ссылка = &Утвержденная
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТоварНастрВТ.Ссылка КАК Товар,
ТипыЦенНастрВТ.Ссылка КАК ТипЦены
ПОМЕСТИТЬ НастройкиВТ
ИЗ
ТоварНастрВТ КАК ТоварНастрВТ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТипыЦенНастрВТ КАК ТипыЦенНастрВТ
ПО ТоварНастрВТ.Связь = ТипыЦенНастрВТ.Связь
;
//До этого момента - анагол твоих "настроек"
//Далее получаем цены и что там еще нужно
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура,
ЦеныНоменклатурыСрезПоследних.Цена,
ЦеныНоменклатурыСрезПоследних.ТипЦен
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
ГДЕ
ЦеныНоменклатурыСрезПоследних.Номенклатура В ИЕРАРХИИ
(ВЫБРАТЬ
НастройкиВТ.Товар
ИЗ
НастройкиВТ КАК НастройкиВТ)
И ЦеныНоменклатурыСрезПоследних.ТипЦен В ИЕРАРХИИ
(ВЫБРАТЬ
НастройкиВТ.ТипЦены
ИЗ
НастройкиВТ КАК НастройкиВТ)
Дернул меня нечистый зайти в эту ветку, теперь не спи, думай)) Вынужден признать, что был неправ. Как варик собрать текст запроса в цикле для каждой строки настроек.
Запрос = Новый Запрос("
"ВЫБРАТЬ
| Т.Номенклатура КАК Номенклатура,
| Т.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК Т";
Запрос.УстановитьПараметр("Номенклатура", ТаблицаНастроек.ВыгрузитьКолонку("Номенклатура"));
ВЫБРАТЬ
С.Ссылка КАК Номенклатура,
Т.Цена КАК Цена
ИЗ
Справочник.Номенклатура КАК С
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК Т
ПО (Т.Номенклатура = С.Ссылка)
И (Т.ТипЦен В
(ВЫБРАТЬ
Т.ТипЦен
ИЗ
ТаблицаНастроек КАК Т))
ГДЕ
С.Ссылка В ИЕРАРХИИ(&Номенклатура)