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