При организации интернет-продаж часто возникает задача реализации виртуальных (электронных) подарочных сертификатов. В стандартной схеме сайт генерирует уникальный код или номер сертификата в момент покупки, передает его покупателю и отправляет данные о продаже в учетную систему. Однако при попытке провести документ реализации в «1С:Управление нашей фирмой» (УНФ) система выдает ошибку о нехватке остатков по указанной серии или номенклатуре. Выясним, почему это происходит и как настроить работу с электронными сертификатами без сбоев.
Проанализируем типовой механизм конфигурации, чтобы понять логику системы:
Подарочный сертификат жестко относится к подсистеме складского учета запасов. Программа рассматривает карту сертификата как материальную ценность (бланк, пластик), хранящуюся на конкретном складе компании.Чек ККМ, Отчет о розничных продажах, Расходная накладная или Заказ-наряд конфигурация списывает сертификат со склада, формируя движения по регистру накопления Запасы и затраты. Если физический или виртуальный остаток отсутствует, контроль остатков блокирует проведение.Серии номенклатуры. Чтобы списать конкретную серию, она должна числиться в остатках именно на том складе, с которого оформляется продажа.Таким образом, штатный функционал не разделяет сертификаты на физические пластиковые карты и чисто виртуальные цифровые коды. Рассмотрим доступные способы обойти или адаптировать эту логику под требования онлайн-продаж.
Это наиболее популярный и надежный способ интеграции с сайтом без глубокого вмешательства в логику проведения документов. Когда сайт присылает информацию о факте покупки нового сертификата с сгенерированным кодом, обработчик интеграции выполняет последовательность действий:
Серии номенклатуры для позиции подарочного сертификата. Если серии с переданным номером нет, создает и записывает новый элемент.Оприходование запасов или Приходная накладная на специальный виртуальный склад (например, «Склад электронных сертификатов») с нулевой себестоимостью.Чек ККМ или Расходная накладная), который списывает только что оприходованную серию.Посмотрим на пример программного создания оприходования серийной номенклатуры:
// Создание или поиск серии
НоваяСерия = Справочники.СерииНоменклатуры.СоздатьЭлемент();
НоваяСерия.Владелец = НоменклатураСертификат;
НоваяСерия.Наименование = НомерСертификатаС Сайта;
НоваяСерия.Записать();
// Создание документа оприходования
ДокОприходование = Документы.ОприходованиеЗапасов.СоздатьДокумент();
ДокОприходование.Дата = ТекущаяДатаСеанса();
ДокОприходование.СтруктурнаяЕдиница = СкладЭлектронныхСертификатов;
СтрокаЗапасов = ДокОприходование.Запасы.Добавить();
СтрокаЗапасов.Номенклатура = НоменклатураСертификат;
СтрокаЗапасов.Количество = 1;
СтрокаЗапасов.Серия = НоваяСерия.Ссылка;
СтрокаЗапасов.Цена = 0;
СтрокаЗапасов.Сумма = 0;
ДокОприходование.Записать(РежимЗаписиДокумента.Проведение);
Преимущества: Полная совместимость со стандартными отчетами и механизмами гашения карт, отсутствие модификации типовых процедур проведения документов.
Вместо того чтобы сайт генерировал номер произвольно, поменяем направление инициации номеров. Разберем шаги этой схемы:
Оприходование запасов или Ввод начальных остатков этот пул ставится на учет на виртуальный склад.HTTP-сервисы или OData) запрашивает у 1С свободный серийный номер в момент оформления корзины.Этот подход исключает неожиданные ошибки в транзакциях при одновременной покупке и защищает систему от появления дублей серийных номеров.
Если для компании не критично использование штатного отчета по подарочным сертификатам, операцию можно отразить по финансовой модели:
Поступление на счет или Поступление в кассу).Если требуется полностью исключить создание складских документов оприходования, но сохранить штатную аналитику сертификатов, задачу решают с помощью расширения:
ЧекККМ).Подарочный сертификат, программно отключают движения по регистру Запасы и затраты, предотвращая проверку остатка запаса.Выбор варианта зависит от масштаба проекта. Для быстрой реализации без доработки типового кода оптимальным является вариант автоматического создания оприходования «на лету» либо предварительная генерация пула свободных серий в базе 1С.