Реализация процесса гашения подарочных сертификатов непосредственно в Заказе клиента — это нетривиальная задача для разработчика, так как типовая конфигурация 1С:Управление торговлей 11 жестко связывает работу с сертификатами с документами Чек ККМ. Если вам требуется автоматизировать этот процесс в заказе, необходимо выполнить комплексную доработку, затрагивающую не только остатки сертификатов, но и механизмы взаиморасчетов.
Прежде всего, разберем, какие регистры отвечают за корректное списание номинала сертификата. В типовой системе за это отвечают следующие объекты:
ИсторияПодарочныхСертификатов — фиксирует факт использования и движения сертификата.ПодарочныеСертификаты — хранит актуальные остатки номиналов.БонусныеБаллы — в ряде случаев может использоваться для учета систем лояльности, интегрированных с сертификатами.При создании собственного документа гашения вам необходимо обеспечить запись движений в эти регистры аналогично тому, как это делает типовой механизм Чек ККМ. Убедитесь, что при проведении документа данные регистры корректно фиксируют приход и расход суммы сертификата.
Основная сложность, с которой сталкиваются разработчики, — это отображение документа в блоке взаиморасчетов. Чтобы Заказ клиента «видел» оплату и не помечал документ как «серый» или неоплаченный, необходимо соблюсти строгую аналитическую чистоту движений.
Рассмотрим по шагам, как обеспечить корректную привязку:
Организация, Партнер, Контрагент и Договор, которые уже установлены в Заказе клиента. Рекомендуем выбирать эти данные прямым запросом к Заказу клиента по ссылке на объект.ЗаказКлиента) правильно заполнен. Это необходимо для того, чтобы механизм Зачета оплаты корректно подтягивал ваш документ в интерфейс заказа.Даже если регистры накопления заполнены верно, интерфейс заказа может продолжать показывать, что заказ не оплачен. Это связано с тем, что форма Заказа клиента опирается на регистр сведений Состояния заказов клиентов.
Для решения этой проблемы необходимо программно скорректировать запись в регистре Состояния заказов клиентов. При проведении вашего документа добавьте логику изменения суммы оплаты в этом регистре. Именно этот шаг является решающим: без обновления данного регистра заказ «не понимает», что сумма сертификата должна быть вычтена из общей суммы долга.
Примерная логика доработки (псевдокод):
// Получаем аналитику из Заказа
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Партнер, Контрагент, Договор, Организация ИЗ Документ.ЗаказКлиента ГДЕ Ссылка = &Заказ";
Запрос.УстановитьПараметр("Заказ", СсылкаНаЗаказ);
Результат = Запрос.Выполнить().Выбрать();
// После выполнения движений по регистрам накопления
// ОБЯЗАТЕЛЬНО обновляем регистр сведений
НаборЗаписей = РегистрыСведений.СостоянияЗаказовКлиентов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Заказ.Установить(СсылкаНаЗаказ);
НаборЗаписей.Прочитать();
// Корректируем сумму оплаты в наборе и записываем
НаборЗаписей.Записать();
Если после всех манипуляций документ в списке «Зачета оплат» по-прежнему выглядит как неактивный (серый), проверьте следующие моменты:
Управлении торговлей существуют специфические механизмы для эквайринга. Если вы используете сертификаты, которые проходят по учету как безналичные платежи, убедитесь, что ваш документ не конфликтует с регистрами эквайринга.Подводя итог, можно сказать, что ключ к успеху — это комплексное воздействие на три уровня системы: регистры остатков (для списания сертификата), регистры накопления взаиморасчетов (для закрытия долга) и регистр сведений состояний (для отображения в интерфейсе). Соблюдение этих трех точек позволит вам создать стабильное и корректно работающее решение.