Доброго дня, коллеги.

Нужен совет, как правильней обрабатывать такие ситуации.
Есть заказ покупателя, по нему пробили чек из РМК, но часть суммы оплатили бонусами.
Но в данных по заказу то нет бонусов!

В 3й колонке отображаются данные состояний - это отдельный регистр.
Так вот заказчик хочет, чтобы я при пробитии чека сделал доработку - лезть в заказ и корректировать сумму бонусов, сумму позиций, и соответственно и сумму документа.
Как вы считаете, а правильно ли это?

Сам сначала хотел при закрытии смены брать все чеки текущей смены по заказам и корректировать, дабы и того операцию пробития чека не нагружать, там итак все сложно (и чек 2 раза записывается, второй раз с проведением).

Но теперь думаю, может вообще корректировкой состояния заказа ограничиться...

ЗЫ: Всех с пятницей!
---
Решил все-таки при закрытии смены это делать:
Запрос:

```1c
    ЗапросКорректировкаБонусовЗаказовПокупателей = Новый Запрос;
    ЗапросКорректировкаБонусовЗаказовПокупателей.Текст = "
    |ВЫБРАТЬ
    | ЧекККМТовары.ЗаказПокупателя КАК ЗаказПокупателя,
    | ЧекККМТовары.КодСтроки КАК КодСтроки,
    | ЧекККМТовары.Сумма КАК Сумма,
    | ЧекККМТовары.СуммаНДС КАК СуммаНДС,
    | ЧекККМТовары.СуммаСкидкиОплатыБонусом КАК СуммаСкидкиОплатыБонусом
    |ИЗ
    | Документ.ЧекККМ.Товары КАК ЧекККМТовары
    |ГДЕ
    | ЧекККМТовары.Ссылка.КассаККМ = &КассаККМ
    | И ЧекККМТовары.Ссылка.Проведен
    | И ЧекККМТовары.Ссылка.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Продажа)
    | И НЕ ЧекККМТовары.Ссылка.СтатусЧекаККМ = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Архивный)
    | И НЕ ЧекККМТовары.Ссылка.СтатусЧекаККМ = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Аннулированный)
    | И НЕ ЧекККМТовары.Ссылка.СтатусЧекаККМ = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Отложенный)
    | И НЕ ЧекККМТовары.ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
    | И НЕ ЧекККМТовары.Ссылка.ОперацияСДенежнымиСредствами
    | И ЧекККМТовары.СуммаСкидкиОплатыБонусом <> 0
    |ИТОГИ ПО
    | ЗаказПокупателя
    |";
    ЗапросКорректировкаБонусовЗаказовПокупателей.УстановитьПараметр("КассаККМ", Объект.КассаККМ);
```

И обход результата (после записи отчета о розничной продаже):

```1c
    Если Не ОтменитьТранзакцию Тогда
    Попытка
    ВыборкаЗаказовПокупателей = РезультатЗапросаКорректировкаБонусов.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаЗаказовПокупателей.Следующий() Цикл
    ЗаказПокупателяОбъект = ВыборкаЗаказовПокупателей.ЗаказПокупателя.ПолучитьОбъект();
    ВыборкаСтрокЧека = ВыборкаЗаказовПокупателей.Выбрать();
    ЕстьИзменения = Ложь;
    Пока ВыборкаСтрокЧека.Следующий() Цикл
    НайденнаяСтрока = ЗаказПокупателяОбъект.Товары.Найти(ВыборкаСтрокЧека.КодСтроки, "КодСтроки");
    Если НайденнаяСтрока <> Неопределено Тогда
    НайденнаяСтрока.ор_СуммаСкидкиОплатыБонусомНаСайте = ВыборкаСтрокЧека.СуммаСкидкиОплатыБонусом;
    НайденнаяСтрока.Сумма = НайденнаяСтрока.Сумма - НайденнаяСтрока.ор_СуммаСкидкиОплатыБонусомНаСайте;
    НайденнаяСтрока.СуммаНДС = ОбработкаТабличнойЧастиТоварыСервер.РассчитатьСуммуНДС(НайденнаяСтрока.Сумма, НайденнаяСтрока.СтавкаНДС, ЗаказПокупателяОбъект.ЦенаВключаетНДС);
    ЕстьИзменения = Истина;
    КонецЕсли;
    КонецЦикла;
    Если ЕстьИзменения Тогда
    ЗаказПокупателяОбъект.Записать(РежимЗаписиДокумента.Запись);
    МассивДокументовКПроведению.Добавить(ЗаказПокупателяОбъект);
    КонецЕсли;
    КонецЦикла;
    Исключение
    ЗаписьЖурналаРегистрации("Обновление бонусных баллов в заказах покупателя при закрытии смены", УровеньЖурналаРегистрации.Ошибка, Метаданные.Документы.ЗаказПокупателя, ВыборкаЗаказовПокупателей.ЗаказПокупателя, "Не удалось обновить данные по бонусам");
    КонецПопытки;
    КонецЕсли;
```
---
Отдельный регистр - состояние заказа
---
Он итак имеется, видимо оптимизация для отображения в динамических списках, чтобы ничего не вычислять.
Боюсь, что заказчик упрётся, т.к. есть какие-то отчеты, что ему нужны, да и хочет, чтобы данные были одинаковы и там и там.
---
Решил все-таки при закрытии смены это делать:
Запрос:

```1c
    ЗапросКорректировкаБонусовЗаказовПокупателей = Новый Запрос;
    ЗапросКорректировкаБонусовЗаказовПокупателей.Текст = "
    |ВЫБРАТЬ
    | ЧекККМТовары.ЗаказПокупателя КАК ЗаказПокупателя,
    | ЧекККМТовары.КодСтроки КАК КодСтроки,
    | ЧекККМТовары.Сумма КАК Сумма,
    | ЧекККМТовары.СуммаНДС КАК СуммаНДС,
    | ЧекККМТовары.СуммаСкидкиОплатыБонусом КАК СуммаСкидкиОплатыБонусом
    |ИЗ
    | Документ.ЧекККМ.Товары КАК ЧекККМТовары
    |ГДЕ
    | ЧекККМТовары.Ссылка.КассаККМ = &КассаККМ
    | И ЧекККМТовары.Ссылка.Проведен
    | И ЧекККМТовары.Ссылка.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Продажа)
    | И НЕ ЧекККМТовары.Ссылка.СтатусЧекаККМ = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Архивный)
    | И НЕ ЧекККМТовары.Ссылка.СтатусЧекаККМ = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Аннулированный)
    | И НЕ ЧекККМТовары.Ссылка.СтатусЧекаККМ = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Отложенный)
    | И НЕ ЧекККМТовары.ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
    | И НЕ ЧекККМТовары.Ссылка.ОперацияСДенежнымиСредствами
    | И ЧекККМТовары.СуммаСкидкиОплатыБонусом <> 0
    |ИТОГИ ПО
    | ЗаказПокупателя
    |";
    ЗапросКорректировкаБонусовЗаказовПокупателей.УстановитьПараметр("КассаККМ", Объект.КассаККМ);
```

И обход результата (после записи отчета о розничной продаже):

```1c
    Если Не ОтменитьТранзакцию Тогда
    Попытка
    ВыборкаЗаказовПокупателей = РезультатЗапросаКорректировкаБонусов.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаЗаказовПокупателей.Следующий() Цикл
    ЗаказПокупателяОбъект = ВыборкаЗаказовПокупателей.ЗаказПокупателя.ПолучитьОбъект();
    ВыборкаСтрокЧека = ВыборкаЗаказовПокупателей.Выбрать();
    ЕстьИзменения = Ложь;
    Пока ВыборкаСтрокЧека.Следующий() Цикл
    НайденнаяСтрока = ЗаказПокупателяОбъект.Товары.Найти(ВыборкаСтрокЧека.КодСтроки, "КодСтроки");
    Если НайденнаяСтрока <> Неопределено Тогда
    НайденнаяСтрока.ор_СуммаСкидкиОплатыБонусомНаСайте = ВыборкаСтрокЧека.СуммаСкидкиОплатыБонусом;
    НайденнаяСтрока.Сумма = НайденнаяСтрока.Сумма - НайденнаяСтрока.ор_СуммаСкидкиОплатыБонусомНаСайте;
    НайденнаяСтрока.СуммаНДС = ОбработкаТабличнойЧастиТоварыСервер.РассчитатьСуммуНДС(НайденнаяСтрока.Сумма, НайденнаяСтрока.СтавкаНДС, ЗаказПокупателяОбъект.ЦенаВключаетНДС);
    ЕстьИзменения = Истина;
    КонецЕсли;
    КонецЦикла;
    Если ЕстьИзменения Тогда
    ЗаказПокупателяОбъект.Записать(РежимЗаписиДокумента.Запись);
    МассивДокументовКПроведению.Добавить(ЗаказПокупателяОбъект);
    КонецЕсли;
    КонецЦикла;
    Исключение
    ЗаписьЖурналаРегистрации("Обновление бонусных баллов в заказах покупателя при закрытии смены", УровеньЖурналаРегистрации.Ошибка, Метаданные.Документы.ЗаказПокупателя, ВыборкаЗаказовПокупателей.ЗаказПокупателя, "Не удалось обновить данные по бонусам");
    КонецПопытки;
    КонецЕсли;
```