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