При переносе данных из внешних источников, таких как Microsoft Excel, в табличный документ 1С программисты часто сталкиваются с проблемой: вместо пустых ячеек или аккуратных целых чисел отображаются значения вида 0,0. Стандартное свойство ПредставлениеНуля при этом может не срабатывать. Разберем детально, почему это происходит и какими способами можно добиться правильного отображения данных.
Первым делом проанализируем ситуацию. Свойство ячейки ПредставлениеНуля работает только в том случае, если в ячейке находится именно числовое значение. Когда данные копируются или загружаются из Excel, они часто попадают в 1С в виде текстовой строки. Для системы 1С строка "0,0" — это не число ноль, а последовательность символов. Следовательно, настройки форматирования чисел к такому содержимому просто не применяются.
Для решения задачи нам необходимо либо изменить тип данных в ячейках, либо правильно настроить свойства объекта ОбластьЯчеекТабличногоДокумента. Рассмотрим основные способы решения этой проблемы.
Если мы хотим, чтобы 1С понимала, что в ячейке находится число, недостаточно просто записать его туда. Нужно явно указать системе способ обработки данных. Посмотрим, как это сделать программно или в режиме конфигуратора/предприятия:
СодержитЗначение). Это переключает ячейку из режима простого отображения текста в режим хранения типизированного значения.Число.ПредставлениеНуля (пустая строка) начнет действовать, так как 1С увидит число 0 и заменит его согласно настройке.Пример программной настройки ячейки:
Область = ТабДок.Область(1, 1);
Область.СодержитЗначение = Истина;
Область.ТипЗначения = Новый ОписаниеТипов("Число");
Область.Значение = Число(СтрЗаменить(ЗначениеИзExcel, ",", "."));
Область.ПредставлениеНуля = "";
Проанализируем работу с параметром Формат. Это один из самых мощных инструментов в 1С для отображения данных. Для того чтобы скрыть нулевые значения, используется параметр ЧН=. Если после знака равенства ничего не указано, 1С не будет выводить никакой текст, если значение равно нулю.
Важно помнить: форматная строка также требует, чтобы в ячейке было именно Число, а не Строка. Рассмотрим пример:
Область = ТабДок.Область("R5C2");
Область.Формат = "ЧН="; // Указываем, что при нуле будет пусто
// Обязательно конвертируем текст в число
Попытка
Область.Значение = Число(Область.Текст);
Область.СодержитЗначение = Истина;
Исключение
// Если в ячейке не число, формат не применится
КонецПопытки;
Иногда данных настолько много, что перебор каждой ячейки в цикле существенно замедляет работу системы. Если мы уже получили заполненный табличный документ, где нули представлены как строки "0,0", мы можем воспользоваться методами поиска. Рассмотрим более быстрый вариант, чем полный обход документа.
Метод НайтиТекст позволяет быстро перемещаться к нужным ячейкам:
НайденнаяОбласть = ТабДок.НайтиТекст("0,0", , , Истина, Истина);
Пока НайденнаяОбласть <> Неопределено Цикл
НайденнаяОбласть.Текст = ""; // Очищаем текст
// Ищем следующее вхождение, начиная с текущей позиции
НайденнаяОбласть = ТабДок.НайтиТекст("0,0", НайденнаяОбласть, , Истина, Истина);
КонецЦикла;
Часто проблема кроется в том, что Excel добавляет в ячейки невидимые символы, например, неразрывный пробел (код 160). В этом случае обычная функция Число() выдаст ошибку, а поиск текста "0,0" не сработает, так как фактически в ячейке находится " 0,0".
Выясним, как эффективно очистить такие данные. Нам потребуется заменить символ неразрывного пробела на пустую строку перед конвертацией:
ЧистаяСтрока = СтрЗаменить(ЗначениеИзExcel, Символы.НПП, "");
ЧистаяСтрока = СтрЗаменить(ЧистаяСтрока, ",", "."); // Заменяем запятую на точку для надежности
Если СокрЛП(ЧистаяСтрока) = "0" Или СокрЛП(ЧистаяСтрока) = "0.0" Тогда
Ячейка.Текст = "";
Иначе
Ячейка.Значение = Число(ЧистаяСтрока);
КонецЕсли;
Если в вашем отчете или документе вообще не предполагается вывод нулей (в любых колонках и строках), можно воспользоваться глобальной настройкой самого табличного документа. Посмотрим на свойство ОтображатьНули. Если установить его в значение Ложь, то во всем документе числовые нули станут невидимыми.
Важное ограничение: это свойство игнорируется для ячеек, тип данных в которых — «Строка». Поэтому предварительное преобразование типов, описанное в первом способе, все равно остается актуальным.
Чтобы избежать проблем на этапе формирования документа, мы рекомендуем обрабатывать данные непосредственно в момент чтения из файла. Разберем правильный алгоритм:
Попытка...Исключение для безопасного приведения к числу.ПредставлениеНуля.Такой подход позволит вам создать чистый и профессионально выглядящий отчет, в котором не будет лишних знаков после запятой или строковых артефактов 0,0, мешающих восприятию информации.