При активной работе с отчетами в платформе 1С:Предприятие 7.7 пользователи часто сталкиваются с проблемой: сохраненные в формате Excel числовые колонки содержат символы-разделители групп разрядов (апострофы, пробелы или неразрывные пробелы). В результате табличный процессор Excel распознает такие значения как обычный текст, из-за чего стандартные формулы суммирования и вычислений перестают работать.
Попытка отключить разделитель через меню Сервис — Параметры на закладке Общие не дает нужного результата в печатных формах. Выясним причину такого поведения и подробно разберем все способы решения этой задачи.
Проанализируем работу платформы 1С 7.7. Флаг разделителя триад в меню «Параметры» отвечает исключительно за визуальное отображение чисел в интерактивных элементах управления — в формах документов, справочниках и журналах. При формировании табличных документов (отчетов и печатных форм) платформа использует либо формат конкретной ячейки макета, либо программное форматирование чисел в коде модулей.
При штатном сохранении отчета в формат XLS строковые значения с разделителями переносятся как текст. Чтобы исправить ситуацию, рассмотрим варианты решения как на уровне конфигурации, так и на стороне Excel.
В типовой конфигурации «1С:Бухгалтерия 7.7» формат вывода чисел в большинстве стандартных отчетов задается централизованно через специальную функцию ФорматС(), параметры которой инициализируются в глобальном модуле при запуске программы.
Разберем по шагам, как отключить разделитель триад для всей базы сразу:
УстановитьФорматСумм.
Процедура УстановитьФорматСумм()
сФорматС = "Ч0" + (Метаданные.ДлинаСуммыПроводки + 3) + "." + Метаданные.ТочностьСуммыПроводки;
Если Метаданные.РазделятьТриадыСуммыПроводки = 1 Тогда
сФорматС = сФорматС + ".,";
КонецЕсли;
КонецПроцедуры
Для полного отключения разделителя триад закомментируем блок условия, проверяющий признак разделения триад:
Процедура УстановитьФорматСумм()
сФорматС = "Ч0" + (Метаданные.ДлинаСуммыПроводки + 3) + "." + Метаданные.ТочностьСуммыПроводки;
// Если Метаданные.РазделятьТриадыСуммыПроводки = 1 Тогда
// сФорматС = сФорматС + ".,";
// КонецЕсли;
КонецПроцедуры
Если требуется заменить стандартный разделитель на другой символ (например, на пробел), изменим вторую часть строки формата:
сФорматС = сФорматС + ". "; // Разделителем целой и дробной части будет точка, а триад — пробел
После сохранения изменений все типовые отчеты начнут формироваться без лишних служебных символов.
Если отчет является внешним или доработанным и не использует функцию ФорматС(), формат настраивается непосредственно в свойствах ячеек таблицы.
Выполним следующие действия:
Ч15.2 или Ч015.2.Посмотрим на пример, когда в алгоритме выгрузки или формирования строки используется встроенная функция Формат(). Для исключения апострофа или неразрывного пробела необходимо скорректировать управляющую строку:
// Исходная строка с разделителем:
// РезСтрока = СокрЛ(Формат(ЧислЗнач, "Ч" + ВыводНулевого + "15.2." + РаздТриад));
// Исправленный вариант без разделителя триад:
РезСтрока = СокрЛ(Формат(ЧислЗнач, "Ч" + ВыводНулевого + "15.2."));
При явной выгрузке через COM-объект Excel.Application строкового преобразования лучше избегать, передавая значение с явным приведением типа Число():
Лист.Cells(НомерСтроки, НомерКолонки).Value = Число(Выборка.Сумма);
Если вносить изменения в конфигурацию нельзя, а отчет уже выгружен, преобразуем текстовые ячейки в числа непосредственно в таблице Excel:
0160. Поле «Заменить на» оставляем пустым и нажимаем Заменить все.1, копируем ее (Ctrl+C), выделяем диапазон с суммами, нажимаем правую кнопку мыши, выбираем Специальная вставка — Умножить и нажимаем ОК.