Выгружаю ТабДок в эксель, ТабДок формиуется по макету, в макете стоят формулы.

Делаю на основе публикации https://infostart.ru/public/869535/

И там есть формулы вида , и с ними все хорошо, они выгружаются в эксель правильно

А есть формула вида (задаётся как параметр, зависит от количества строк), и она выгружается в эксель как-то не так, в ячейке сначала встаёт #ИМЯ?, потом, по двойному щелчку (если уже открыть эксель) формула начинает работать.

почему так?

сначала я записываю ТабДок.Записать(xls)

затем открываю книгу для обработки формул:

```1c
    Эксель = Новый COMОбъект("Excel.Application");
    Эксель.Application.DisplayAlerts = False;
    Эксель.Application.ReferenceStyle = "xlR1C1";
    Эксель.Application.ErrorCheckingOptions.InconsistentFormula = Ложь;

    //Книга = Эксель.WorkBooks.Add();

    Книга = Эксель.Workbooks.Open(ПутьКФайлу);

    Лист = Книга.WorkSheets(1);

    ВсегоКолонок = ТабДок.ШиринаТаблицы;
    ВсегоСтрок = ТабДок.ВысотаТаблицы;

    МассивКом = Лист.Range(Лист.Cells(1, 1), Лист.Cells(ВсегоСтрок, ВсегоКолонок)).FormulaR1C1;
    Для Ном = 1 По МассивКом.GetLength(0) Цикл
    Для Ном2 = 1 По МассивКом.GetLength(1) Цикл
    Значение = МассивКом.GetValue(Ном,Ном2);

    Если НЕ Найти(Значение, ") = 0 Тогда
    МассивКом.SetValue(Ном, Ном2, СтрЗаменить(Значение, ", "));
    КонецЕсли;

    Если СтрНачинаетсяС(Значение, "=") Тогда //Формулам зададим формат...
    Ячейка = Лист.Cells(Ном2,Ном);
    Ячейка.NumberFormat = "# ##0,00;-# ##0,00;""";
    КонецЕсли;

    КонецЦикла;
    КонецЦикла;
    Лист.Range(Лист.Cells(1, 1), Лист.Cells(ВсегоСтрок, ВсегоКолонок)).FormulaR1C1 = МассивКом; //Если тут ошибка, то скорее всего косяк в формуле

    Книга.SaveAs(ПутьКФайлу);

    Эксель.Quit();
    Эксель = Неопределено;
```
---
осталась проблема с одной формулой - =СУММ(R[-16]C[3]:R[-1]C[3])
Вы обратили внимание, что в статье в макете английские формулы?
Ваша формула должна быть =SUM(R[-16]C[3]:R[-1]C[3])
SUM с одной M, это не опечатка
---
зачем Эксель.Application.ReferenceStyle = "xlR1C1"; ?
---
зачем Эксель.Application.ReferenceStyle = "xlR1C1"; ? А затем, что так написано в указанной публикации.

Судя по его комментариям к ней и по его прошлой ветке, автор ждет, что кто-то угадает причину его проблемы и даст готовое решение.

А самому экспериментировать. разбираться и делать выводы - неее, это не наш метод...
---
А самому экспериментировать. разбираться и делать выводы - неее, это не наш метод... Если есть стартмани и нет времени - то все логично )
Для знающих причина проблемы очевидна.
---
А затем, что так написано в указанной публикации.
Главное затем, что так может быть удобнее. Если использовать Application.ReferenceStyle=xlA1 - то может случиться, что в макете придется прописывать столбец разных формул, исходя из экселовских. В примере ниже во всем столбце "С" складываются значения двух соседних слева ячеек из текущей строки. Тогда в макете в суммирующем столбце нужно прописывать разные формулы:
=A1+B1
=A2+B2
=A3+B3
...
А если сделать как в статье Application.ReferenceStyle=xlR1C1 - то в таком случае в макете можно весь столбец копипастить одной формулой:
=RC[-2]+RC[-1]
=RC[-2]+RC[-1]
=RC[-2]+RC[-1]
---
Интересно, это зачем?

```1c
    Если НЕ Найти(Значение, ") = 0 Тогда
    МассивКом.SetValue(Ном, Ном2, СтрЗаменить(Значение, ", "));
    КонецЕсли;
```

Почему не записать проще, вместо "Если Не НеНайдено" написать "Если Найдено" ?

```1c
    Если Найти(Значение, ") Тогда
    МассивКом.SetValue(Ном, Ном2, СтрЗаменить(Значение, ", "));
    КонецЕсли;
```

И вообще зачем искать, можно вообще в одну строку безо всяких Если, оно само либо найдет либо не найдет

```1c
    МассивКом.SetValue(Ном, Ном2, СтрЗаменить(Значение, ", "));
```

И какой смысл в замене пустой подстроки на пустую подстроку?
---
И какой смысл в замене пустой подстроки на пустую подстроку?
А, понял. Тут на самом деле должна быть обратная замена запятой на точку с запятой.

```1c
    СтрЗаменить(Значение, ",", ";")
```

В эсовском шаблоне автор https://infostart.ru/public/869535/ сначала менял экселовскую точку-с-запятой на 1-эсовскую запятую, и требуется обратная операция. Видимо, при копи-пасте как-то символы пропали.
---
осталась проблема с одной формулой - =СУММ(R[-16]C[3]:R[-1]C[3])
Вы обратили внимание, что в статье в макете английские формулы?
Ваша формула должна быть =SUM(R[-16]C[3]:R[-1]C[3])
SUM с одной M, это не опечатка
---
дааа, теперь обратил) спасибо!
---
в продолжение темы..

всё работает хорошо, когда печатная форма открывается через файл->открыть. эксель сохраняется, формулы встают.

при подключении её в базу (erp) работать перестаёт (скрин).
видимо, это связано с тем, что запускается теперь на сервере
но
 весь код записи эксель и обработки по формулам специально переносился на клиента (на сервере не работал, были проблемы с записью файла)
---
Похоже, Вы неправильно написали экспортную процедуру Печать(...) в форме обработки. К этой процедуре обращается БСП (подсистема "Дополнительные отчеты и обработки") и эта процедура должна быть написана согласно документации. Либо читать доки, например https://its.1c.ru/db/bsp314doc#content:4:1:issogl4_вариант_запуска_вызов_клиентского_метода. Либо скачать конфигурацию БСП - там в демо-базе есть примеры Дополнительных, но не помню, с клиентским ли методом. Либо на Инфостарте пошерудить.

```1c
    &НаКлиенте
    Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив)

    // Реализация логики команды печати
    // ...

    КонецПроцедуры
```
---
Кстати, косяк в документации https://its.1c.ru/db/bsp314doc#content:4:1:issogl4_вариант_запуска_вызов_клиентского_метода
Сначала пишут в тексте "реализовать экспортную процедуру"

Для назначаемых обработок типа ПечатнаяФорма реализовать экспортную процедуру Печать с двумя параметрами: ИдентификаторКоманды и ОбъектыНазначенияМассив, где ИдентификаторКоманды – строка, идентификатор команды; ОбъектыНазначенияМассив – массив ссылок на объекты информационной базы, для которых выполняется дополнительная обработка:

а потом в примере кода забывают слово Экспорт указать.

```1c
    &НаКлиенте
    Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив)

    // Реализация логики команды печати
    // ...

    КонецПроцедуры
```