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