База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как получить остаток бонусных баллов из регистра в 1С:УТ 11.5?
- В этой теме 1 ответ, 2 участника, последнее обновление 1 час, 25 минут назад сделано
Odin — Одинэсник.
-
АвторЗаписи
-
-
28 сентября 2026 в 0:16 #38736
Как программно получить остатки бонусных баллов по клиенту из регистра накопления БонусныеБаллы в 1с управление торговлей 11.5
-
28 сентября 2026 в 0:16 #38737
В УТ 11.5 остаток бонусов обычно получают из виртуальной таблицы регистра накопления:
РегистрНакопления.БонусныеБаллы.ОстаткиОсновные аналитики, как правило:
—
Партнер
—БонуснаяПрограммаЛояльностиРесурс регистра обычно называется
Сумма.## Получение остатка по партнеру и бонусной программе
1С (Код)1234567891011121314151617181920212223242526272829303132Функция ПолучитьОстатокБонусныхБаллов(Партнер, БонуснаяПрограммаЛояльности, ДатаОстатков = Неопределено) ЭкспортЕсли Не ЗначениеЗаполнено(ДатаОстатков) ТогдаДатаОстатков = ТекущаяДатаСеанса();КонецЕсли;Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Остатки.БонуснаяПрограммаЛояльности КАК БонуснаяПрограммаЛояльности,| Остатки.Партнер КАК Партнер,| Остатки.СуммаОстаток КАК ОстатокБонусныхБаллов|ИЗ| РегистрНакопления.БонусныеБаллы.Остатки(| &ДатаОстатков,| Партнер = &Партнер| И БонуснаяПрограммаЛояльности = &БонуснаяПрограммаЛояльности| ) КАК Остатки";Запрос.УстановитьПараметр("ДатаОстатков", ДатаОстатков);Запрос.УстановитьПараметр("Партнер", Партнер);Запрос.УстановитьПараметр("БонуснаяПрограммаЛояльности", БонуснаяПрограммаЛояльности);Выборка = Запрос.Выполнить().Выбрать();Если Выборка.Следующий() ТогдаВозврат Выборка.ОстатокБонусныхБаллов;КонецЕсли;Возврат 0;КонецФункцииПример вызова:
1С (Код)123456ОстатокБонусов = ПолучитьОстатокБонусныхБаллов(Партнер,БонуснаяПрограммаЛояльности);Сообщить("Остаток бонусов: " + ОстатокБонусов);## Получение остатков по всем бонусным программам клиента
Если нужно получить остатки партнера сразу в разрезе всех бонусных программ:
1С (Код)12345678910111213141516171819202122232425Функция ПолучитьОстаткиБонусныхБалловПоПартнеру(Партнер, ДатаОстатков = Неопределено) ЭкспортЕсли Не ЗначениеЗаполнено(ДатаОстатков) ТогдаДатаОстатков = ТекущаяДатаСеанса();КонецЕсли;Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Остатки.БонуснаяПрограммаЛояльности КАК БонуснаяПрограммаЛояльности,| Остатки.СуммаОстаток КАК ОстатокБонусныхБаллов|ИЗ| РегистрНакопления.БонусныеБаллы.Остатки(| &ДатаОстатков,| Партнер = &Партнер| ) КАК Остатки|ГДЕ| Остатки.СуммаОстаток > 0";Запрос.УстановитьПараметр("ДатаОстатков", ДатаОстатков);Запрос.УстановитьПараметр("Партнер", Партнер);Возврат Запрос.Выполнить().Выгрузить();КонецФункцииИспользование:
1С (Код)1234567891011ТаблицаОстатков = ПолучитьОстаткиБонусныхБалловПоПартнеру(Партнер);Для каждого СтрокаОстатка Из ТаблицаОстатков ЦиклСообщить(СтрокаОстатка.БонуснаяПрограммаЛояльности+ ": "+ СтрокаОстатка.ОстатокБонусныхБаллов);КонецЦикла;## Вариант без запроса, через типовой серверный метод
В УТ 11.5 для работы с бонусами используется общий модуль
БонусныеБаллыСервер. В типовом коде встречается вызов:1С (Код)1234ОстаткиБонусныхБаллов = БонусныеБаллыСервер.ОстаткиИДвиженияБонусныхБаллов(БонуснаяПрограммаЛояльности,Партнер);Далее из результата можно получить начальный остаток:
1С (Код)12345678910111213ОстаткиБонусныхБаллов = БонусныеБаллыСервер.ОстаткиИДвиженияБонусныхБаллов(БонуснаяПрограммаЛояльности,Партнер);ОстатокБонусов = 0;Если ОстаткиБонусныхБаллов <> НеопределеноИ ОстаткиБонусныхБаллов.Количество() > 0 ТогдаОстатокБонусов = ОстаткиБонусныхБаллов[0].Сумма;КонецЕсли;Этот вариант предпочтительнее, если необходимо повторить типовую логику УТ, поскольку типовой метод может учитывать не только простой остаток регистра, но и движения, особенности списания и расчет доступного остатка.
## Важный момент по структуре регистра
В разных релизах УТ 11.5 состав измерений и точные имена ресурсов могут немного отличаться. Перед использованием запроса проверьте структуру регистра в конфигураторе:
Конфигурация → Регистры накопления → БонусныеБаллыПроверьте:
— измерение клиента может называться
Партнер;
— измерение программы может называтьсяБонуснаяПрограммаЛояльности;
— ресурс может называтьсяСумма;
— в виртуальной таблице остатка ресурс будет доступен какСуммаОстаток.Если в вашей базе клиент хранится не в измерении
Партнер, а, например, через карту лояльности, сначала нужно получить партнера, связанного с картой:1С (Код)1Партнер = ДанныеКартыЛояльности.Партнер;Получать остаток только по партнеру без указания бонусной программы нежелательно, если у клиента может быть несколько программ. В этом случае остатки по разным программам нужно либо выводить отдельными строками, либо явно суммировать их.
-
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.