Добрый вечер! Только учусь, не судите строго. Есть задача : Получите скидку запросом из виртуальной таблицы "СрезПоследних" регистра сведений "Скидки"(регистр переодический по позиции регистратора, в измерении составной тип данных - СправочникСсылка.НоменклатурныеГруппы, СправочникСсылка.Номенклатура), установленную для конкретной номенклатуры. Если же нет скидки для конкретной номенклатуры, тогда получите скидку для номенклатурной группы. На скриншоте сама функция, есть ли вариант как-то оптимизировать решение, например в самом запросе или же вне него? Спасибо
Прикрепленные файлы:

По теме из базы знаний
Найденные решения
Функция СкидкаНаДату(НоменклатураИлиНоменклатурнаяГруппа, НаДату)
Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1
| СкидкиСрезПоследних.Скидка КАК Скидка
|ИЗ
| РегистрСведений.Скидки.СрезПоследних(&НаДату, НоменклатураНоменклатурнаяГруппа = &Номенклатура) КАК СкидкиСрезПоследних
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| СкидкиСрезПоследних.Скидка
|ИЗ
| РегистрСведений.Скидки.СрезПоследних(&НаДату, НоменклатураНоменклатурнаяГруппа = &НоменклатурнаяГруппа) КАК СкидкиСрезПоследних");
Запрос.УстановитьПараметр("НаДату", КонецДня(НаДату));
Запрос.УстановитьПараметр("Номенклатура", НоменклатураИлиНоменклатурнаяГруппа);
Если ТипЗнч(НоменклатураИлиНоменклатурнаяГруппа) = Тип("СправочникСсылка.Номенклатура") Тогда
Запрос.УстановитьПараметр("НоменклатурнаяГруппа", НоменклатураИлиНоменклатурнаяГруппа.НоменклатурнаяГруппа);
Иначе
Запрос.УстановитьПараметр("НоменклатурнаяГруппа", НоменклатураИлиНоменклатурнаяГруппа);
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Возврат ?(Выборка.Следующий(), Выборка.Скидка, 0);
КонецФункции
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Функция СкидкаНаДату(НоменклатураИлиНоменклатурнаяГруппа, НаДату)
Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1
| СкидкиСрезПоследних.Скидка КАК Скидка
|ИЗ
| РегистрСведений.Скидки.СрезПоследних(&НаДату, НоменклатураНоменклатурнаяГруппа = &Номенклатура) КАК СкидкиСрезПоследних
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| СкидкиСрезПоследних.Скидка
|ИЗ
| РегистрСведений.Скидки.СрезПоследних(&НаДату, НоменклатураНоменклатурнаяГруппа = &НоменклатурнаяГруппа) КАК СкидкиСрезПоследних");
Запрос.УстановитьПараметр("НаДату", КонецДня(НаДату));
Запрос.УстановитьПараметр("Номенклатура", НоменклатураИлиНоменклатурнаяГруппа);
Если ТипЗнч(НоменклатураИлиНоменклатурнаяГруппа) = Тип("СправочникСсылка.Номенклатура") Тогда
Запрос.УстановитьПараметр("НоменклатурнаяГруппа", НоменклатураИлиНоменклатурнаяГруппа.НоменклатурнаяГруппа);
Иначе
Запрос.УстановитьПараметр("НоменклатурнаяГруппа", НоменклатураИлиНоменклатурнаяГруппа);
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Возврат ?(Выборка.Следующий(), Выборка.Скидка, 0);
КонецФункции
Показать
(9) Ну для этого и ПЕРВЫЕ 1, а раз первая таблица в объединении с условием на номенклатуру, то по номенклатуре значение и вернет, я полагаю. Я не уверен, что так работает, но в моем тесте сработало именно так. Если же это совпадение, то можно добавить в обе таблицы поле "Приоритет", в первой таблице задать значение 1, а во второй 0, затем результат отсортировать по убыванию приоритета.
(13) Пол часа искали доказательство вашим словам, но ничего не нашли и решили отмахнуться?) Вы, что, не можете с уверенностью сказать, что ОБЪЕДИНИТЬ ВСЕ не сохраняет порядок в соответствии с последовательностью таблиц? Неуч... В принципе, оно и понятно, с самого начала не видите запрос с объединением и задаете вопрос о том где же скидка по номенклатурной группе... Меньше по клавишам тыкайте, семью заведите, время с ними проведите что ли... Извините, если уж на больное. Пока вас только такие же форумные псевдоинтеллектуальные дяди поддерживают плюсиками под комментариями =(
(15) Спасибо! В следующий раз, пожалуйста, подготовьтесь получше, а то грустно осознавать, что старое поколение 1С сначала пишет, а потом думает =(
И не нужно отчаиваться, я верю, вы обязательно найдете поддержку! Вероятно даже, что не только от таких же дядянек на форуме, у которых руки чешутся поблестать умом.
И не нужно отчаиваться, я верю, вы обязательно найдете поддержку! Вероятно даже, что не только от таких же дядянек на форуме, у которых руки чешутся поблестать умом.
(27) Я не обучаю, а пытаюсь помочь. Здесь я не прав в том, что ответил на вопрос "вернет ли запрос приоритетно скидку номенклатуры" - "на сколько я знаю, да". Однако в ситуации, когда вы прикопались к тому, что я не посоветовал человеку, который код не может вытащить, залезть в конструктор, я считаю, что прав. Я сам еще "вчера" студент, формулировка "Правильно поля в запросе, запрос в цикле плохо, а обращение через точку = запрос!" даже не отложится, потому что на таком этапе вся информация накладывается друг на друга. Тонкости приходят с опытом, а с самого начала никто "как надо" код не напишет. С таким успехом можно было просить его на будущее в отдельную процедуру все переносить, переменные переименовать, табуляцию настроить, комментарии написать.
И не просто так я приводил в пример SlavaKron в том комментарии, потому что здесь человек в 2 строки укладывает ответ, а не тратит свое и чужое время (и я не про себя, это мое решение отвечать на подобный срам. Я про ответы другим людям на их вопросы) на попытку доказать, что он умнее.
Мне то не тяжело признать ошибку, а вот вам (кто там еще в бан отлетел и плюсики ставит, скрипя зубами, что не может ответить), кому на каждый второй комментарий отвечают тем, что они пишут бесполезную ересь, по всей видимости, это очень тяжело дается) Ну тут, я думаю, не ваша проблема. Кому то явно родители в детстве не хотели слушать.
И не просто так я приводил в пример SlavaKron в том комментарии, потому что здесь человек в 2 строки укладывает ответ, а не тратит свое и чужое время (и я не про себя, это мое решение отвечать на подобный срам. Я про ответы другим людям на их вопросы) на попытку доказать, что он умнее.
Мне то не тяжело признать ошибку, а вот вам (кто там еще в бан отлетел и плюсики ставит, скрипя зубами, что не может ответить), кому на каждый второй комментарий отвечают тем, что они пишут бесполезную ересь, по всей видимости, это очень тяжело дается) Ну тут, я думаю, не ваша проблема. Кому то явно родители в детстве не хотели слушать.
(19) Понятно, буду знать. Про документацию обидно - я тоже не нашел, пришлось ссылаться на обсуждения на форумах, да и там мнения разнились: один пишет, что не сохраняет, а другой пишет, что конкретно при "ОБЪЕДИНИТЬ ВСЕ" сохраняется. В итоге решил узнать на практике: заполнил регистр, прогнал тестовые данные, затем поменял объединяемые таблицы местами - результат один, порядок сохранялся. Так и не получилось выяснить самостоятельно)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот