Всем привет! Помогите новичку составить запрос. В регистр сведений пишутся измерение Наименование и Ресурс Цена с типами строка и число соответственно. Из внешнего источника данных приходит таблица значений с теми же колонками Наименование и Цена. Нужно из регистра получить наименования у которых цена отличается от цены в ТЗ то есть нужно понять для каких элементов в ТЗ цена изменилась и ее надо обновлять в регистре. Извините, если не корректно составлен вопрос, я могу уточнить если надо.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Ну так.
На сколько понимаю Наименование = Номенклатура.Наименование.
Если это так, просто вытягивайте Номенклатура наименование из ТЗ, прикручивайте левым соедиенением к Регистру, получите список, отбирайте только строки с различиями, выгружайте в ТЗ, и в цикле перезаписывайте РС нужной информацией...
Ну так.
На сколько понимаю Наименование = Номенклатура.Наименование.
Если это так, просто вытягивайте Номенклатура наименование из ТЗ, прикручивайте левым соедиенением к Регистру, получите список, отбирайте только строки с различиями, выгружайте в ТЗ, и в цикле перезаписывайте РС нужной информацией...
(8)
Хм... может я заблуждаюсь, но)))
Если к ТЗ ЛЕВЫМ соединением прикручивать регистр, и в регистре будет NULL по этому наименованию(нет записи), то, на сколько я знаю, мы получим запись типа:
Наименование | Цена | NULL
а в этом случае мы видим разницу, и можем сделать запись в регистре, разве нет?
Проблема будет только в том случае, если в ТЗ записи нет, а в регистре есть, тогда, если нужно обнулить цены, то левое соединение не подходит.
Тут скорее вопрос только в том, куда и что прикрутит ТС)))
Хм... может я заблуждаюсь, но)))
Если к ТЗ ЛЕВЫМ соединением прикручивать регистр, и в регистре будет NULL по этому наименованию(нет записи), то, на сколько я знаю, мы получим запись типа:
Наименование | Цена | NULL
а в этом случае мы видим разницу, и можем сделать запись в регистре, разве нет?
Проблема будет только в том случае, если в ТЗ записи нет, а в регистре есть, тогда, если нужно обнулить цены, то левое соединение не подходит.
Тут скорее вопрос только в том, куда и что прикрутит ТС)))
Сделайте как-то так:
ВЫБРАТЬ
ВнешняяТаблица.Наименование КАК Наименование,
ВнешняяТаблица.Цена
ПОМЕСТИТЬ ВнешняяТаблица
ИЗ
&ВнешняяТаблица КАК ВнешняяТаблица
ИНДЕКСИРОВАТЬ ПО
Наименование
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
РегистрЦен.Наименование,
РегистрЦен.Цена
ПОМЕСТИТЬ РегистрСЦенами
ИЗ
РегистрСведений.РегистрЦен КАК РегистрЦен
ГДЕ
РегистрЦен.Наименование В
(ВЫБРАТЬ
ВнешняяТаблица.Наименование
ИЗ
ВнешняяТаблица)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВнешняяТаблица.Наименование КАК Наименование
ПОМЕСТИТЬ ОдинаковыеЦены
ИЗ
ВнешняяТаблица КАК ВнешняяТаблица
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСЦенами КАК РегистрСЦенами
ПО ВнешняяТаблица.Наименование = РегистрСЦенами.Наименование
И ВнешняяТаблица.Цена = РегистрСЦенами.Цена
ИНДЕКСИРОВАТЬ ПО
Наименование
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
РегистрСЦенами.Наименование
ИЗ
РегистрСЦенами КАК РегистрСЦенами
ГДЕ
НЕ РегистрСЦенами.Наименование В
(ВЫБРАТЬ
ОдинаковыеЦены.Наименование
ИЗ
ОдинаковыеЦены)
Показать
(9) Спасибо большое, это прям то что нужно! Немного подправил под свои задачи, получилось
При первой загрузке всё работает. Все данные записываются в регистр. Далее начинаю тестировать: изменяю во внешней таблице цену одного элемента на рубль и запускаю обновление цен, по логике у нас результатом запроса должна быть одна строка т.е. при выгрузке получаться ТЗ из одной строки с этой самой измененной ценой. Но запрос пустой, строк 0. Не подскажите в чем может быть дело?
p/s по условию если новая цена ниже то она считается прежней и не должна изменятся. Цену меняю разумеется в большую сторону.
Запрос.Текст = "ВЫБРАТЬ
| ВнешняяТаблица.Наименование КАК Наименование,
| ВнешняяТаблица.Цена КАК Цена,
| ВнешняяТаблица.ТипЦены КАК ТипЦены
|ПОМЕСТИТЬ ВнешняяТаблица
|ИЗ
| &ВнешняяТаблица КАК ВнешняяТаблица
|
|ИНДЕКСИРОВАТЬ ПО
| Наименование
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ЦеныНоменклатуры.Наименование КАК Наименование,
| ЦеныНоменклатуры.Цена КАК Цена,
| ЦеныНоменклатуры.ТипЦены КАК ТипЦены
|ПОМЕСТИТЬ ЦеныНоменклатуры
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
|ГДЕ
| ЦеныНоменклатуры.Наименование В
| (ВЫБРАТЬ
| ВнешняяТаблица.Наименование
| ИЗ
| ВнешняяТаблица)
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ВнешняяТаблица.Наименование КАК Наименование
|ПОМЕСТИТЬ ОдинаковыеЦены
|ИЗ
| ВнешняяТаблица КАК ВнешняяТаблица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЦеныНоменклатуры КАК ЦеныНоменклатуры
| ПО ВнешняяТаблица.Наименование = ЦеныНоменклатуры.Наименование
| И ВнешняяТаблица.Цена <= ЦеныНоменклатуры.Цена
| И ВнешняяТаблица.ТипЦены = ЦеныНоменклатуры.ТипЦены
|
|ИНДЕКСИРОВАТЬ ПО
| Наименование
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ВнешняяТаблица.Наименование КАК Наименование,
| ВнешняяТаблица.Цена КАК Цена,
| ВнешняяТаблица.ТипЦены КАК ТипЦены
|ИЗ
| ВнешняяТаблица КАК ВнешняяТаблица
|ГДЕ
| НЕ ВнешняяТаблица.Наименование В
| (ВЫБРАТЬ
| ОдинаковыеЦены.Наименование
| ИЗ
| ОдинаковыеЦены)";
ПоказатьПри первой загрузке всё работает. Все данные записываются в регистр. Далее начинаю тестировать: изменяю во внешней таблице цену одного элемента на рубль и запускаю обновление цен, по логике у нас результатом запроса должна быть одна строка т.е. при выгрузке получаться ТЗ из одной строки с этой самой измененной ценой. Но запрос пустой, строк 0. Не подскажите в чем может быть дело?
p/s по условию если новая цена ниже то она считается прежней и не должна изменятся. Цену меняю разумеется в большую сторону.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот