В практической работе бухгалтера часто возникает ситуация, когда типовых аналитик в 1С недостаточно для детального учета. Например, в конфигурации 1С:Бухгалтерия 3.0 на счете 57.03 ("Продажи по платежным картам") стандартно используются только два субконто: Контрагенты и Договоры. Однако для розничных сетей с множеством торговых точек (магазинов) критически важно видеть движение денежных средств в разрезе конкретных складов или подразделений непосредственно на счетах учета денежных средств в пути.
Если вы самостоятельно добавили третье субконто Склады на счет 57.03, вы столкнетесь с проблемой: при загрузке банковской выписки это поле остается пустым, и бухгалтеру приходится вручную корректировать сотни операций. В этой статье мы разберем, как автоматизировать этот процесс, проанализируем причины поведения программы и предложим несколько вариантов решения — от внешней обработки до расширения конфигурации.
Разберем ситуацию с технической точки зрения. Банковский файл обмена (обычно это kl_1c.txt) содержит информацию о транзакциях: дату, сумму, контрагента и назначение платежа. В самом формате обмена данными между банком и 1С поля "Склад" не существует. Программа 1С при создании документа Поступление на расчетный счет с видом операции "Поступление по платежным картам" опирается на типовые алгоритмы заполнения.
Поскольку в типовом решении на счете 57.03 нет субконто Склады, программный код заполнения проводок просто "не знает" о необходимости искать и подставлять это значение. Даже если вы добавили субконто в План счетов, механизмы загрузки из клиент-банка игнорируют его, так как оно не является частью стандартной модели учета денежных средств.
Проанализируем самый простой и безопасный для целостности конфигурации способ. В тексте назначения платежа, который приходит из банка, почти всегда содержится уникальный идентификатор терминала — Merchant ID (или № мерчанта). Мы можем использовать эту информацию как ключ для определения склада.
Рассмотрим алгоритм создания обработки, которая будет заполнять пропущенную аналитику:
Склады.Поступление на расчетный счет за выбранный период.Пример фрагмента кода для реализации такой логики:
Для Каждого СтрокаВыписки Из ВыбранныеДокументы Цикл
ТекстКомментария = СтрокаВыписки.НазначениеПлатежа;
// Поиск номера мерчанта в строке
Если Найти(ТекстКомментария, "Merchant 12345") > 0 Тогда
НужныйСклад = Справочники.Склады.НайтиПоНаименованию("Магазин №1");
ИначеЕсли Найти(ТекстКомментария, "Merchant 67890") > 0 Тогда
НужныйСклад = Справочники.Склады.НайтиПоНаименованию("Магазин №2");
КонецЕсли;
// Заполнение движений документа
НаборДвижений = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборДвижений.Отбор.Регистратор.Установить(СтрокаВыписки.Ссылка);
НаборДвижений.Прочитать();
Для Каждого Запись Из НаборДвижений Цикл
Если Запись.СчетДт = ПланыСчетов.Хозрасчетный.ПродажиПоПлатежнымКартам Тогда
Запись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады] = НужныйСклад;
КонецЕсли;
КонецЦикла;
НаборДвижений.Записать();
КонецЦикла;
Важно: При использовании этого метода помните, что при обычном перепроведении документа типовыми средствами 1С ваши ручные правки в движениях могут очиститься, если не установлена блокировка корректировки движений (флаг РучнаяКорректировка).
Если мы хотим, чтобы склад заполнялся автоматически непосредственно в момент загрузки или проведения документа, нам потребуется расширение. Это современный механизм, который позволяет изменять логику программы, не снимая основную конфигурацию с поддержки.
В расширении мы можем перехватить процедуру ОбработкаПроведения или дополнить модуль менеджера документа Поступление на расчетный счет. Рассмотрим шаги реализации:
Поступление на расчетный счет и план счетов Хозрасчетный.СоответствиеТерминаловИСкладов), где будем хранить связку "ID терминала — Склад".&После для процедуры, отвечающей за формирование проводок по эквайрингу.Выясним причину, по которой это решение эффективнее: программа будет обращаться к регистру сведений при каждом проведении документа и, основываясь на тексте назначения платежа, автоматически подставлять склад в третье субконто счета 57.03. Это избавит бухгалтера от необходимости запускать какие-либо обработки вручную.
Рассмотрим ситуацию с позиции стандартной методологии 1С. Часто попытка добавить "Склады" на денежный счет является избыточной. В системе для разделения выручки по точкам продаж предусмотрено субконто Подразделения.
Посмотрим, как настроить учет корректно:
Подразделение.Эквайринговые терминалы для каждого терминала укажите соответствующее подразделение.При загрузке выписки 1С умеет сопоставлять транзакции с терминалами. Если терминал привязан к подразделению (магазину), аналитика заполнится автоматически без доработок кода. Бухгалтер сможет сформировать Оборотно-сальдовую ведомость по счету 57.03 в разрезе подразделений и получить те же данные, что и по складам, но в рамках типовой логики программы.
Если автоматизация сопоставления работает плохо, рекомендуем изучить внутреннюю структуру файла обмена, который выгружается из вашего клиент-банка. Откройте его любым текстовым редактором и найдите секции РасчСчет и НазначениеПлатежа. Вы увидите, какие именно данные передает банк. Иногда идентификатор торговой точки передается в скрытых тегах или специфических кодировках. Понимание структуры этого файла поможет вам или вашему программисту более точно настроить регулярные выражения для поиска Merchant ID в коде обработки или расширения.
Подводя итог, можно сказать: если бухгалтеру принципиально видеть именно субконто Склады, используйте вариант с расширением и регистром соответствий. Если же цель — разделить выручку по точкам продаж, лучше перейти на использование штатного механизма подразделений и настройки справочника терминалов.