Коллеги, приветствую.
Как всегда на ровном месте возник вопрос:
 есть фай созданный в Excel, который предполагается использовать в качестве шаблона. Там всего одна строка в которой указаны поля, которые надо изъять из базы 1С и формулы , по которым надо с этими полями чего-то сделать.
Формируется другой Excel-файл, где все строки сгенерированы по образу этой строки.
Шаблон читается нормально, но при генерации строк возникает проблема.
Подробно: ячейка R1C2 или B1 имеет текстовый формат и содержит строку представляющую из себя число такого формата 0000123.
Ячейка D1 содержит формулу =--RC[-2], которая преобразует строку в число.
 Ехсел.Cells(1,4).FormulaLocal = м[1]; м[1] --- это элемент массива содержащий считанную из шаблона формулу(строка).
При генерации первой строки все хорошо: в ячейке R1C4 ( D1) формула =--RC[-2].
А вот во второй строке в ячейке R2C4 ( D2) формула =--R[-1]C[-2], т.е. ссылка на все туже ячейку B1, а надо уже на B2.
Если руками копирую формулу из 1-й строки во вторую, то все работает, но смысл-то не в этом....
Ячейку второй строки формирует команда Ехсел.Cells(2,4).FormulaLocal = м[1];
Коллеги, подскажите где туплю.
Спасибо.
---
Вопрос был в том, как вы читаете данные из Excel. Когда вы читаете м.Добавить(Excel.Cells(1,4).FormulaLocal), то из формулы "=RC[-2]" вы получаете формулу "=B1", которая и записывается в ячейку. Соответственно на второй строке "=B1" будет выглядеть как "=R[-1]C[-2]".
Чтобы читать относительные ссылки, нужно их читать м.Добавить(Excel.Cells(1,4).FormulaR1C1Local)

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

Т.е. вместо

```1c
    Ехсел.Cells(1,4).FormulaLocal = -RC[-2];
```

используйте

```1c
    Ехсел.Cells(1,4).FormulaLocal = R1C2;
```
---
Добрый день.
К сожалению формулу я не сам пишу, она приходит из шаблона Excel, и там она работает.
Но попробую изменить шаблон.
Спасибо.
---
По относительной ссылке на ячейку вычисляете ее абсолютные координаты.
---
Это 1С-ка делает? А нельзя ли ей как-нибудь посоветовать понимать все буквально?
---
Нет, это делает эксель. В его настройках задается формат записи ссылок на ячейки. Как он при этом будет относится к другому формату, я не проверял.
---
А почему тогда при копировании руками в самом Excel все сростается?
---
Потому что в этом случае Эксель понимает, что ячейка с формулой применяется к следующей строке и сам меняет относительный адрес.
---
кстати да, как поменять настройки в екселе до открытия файла по ком соединению...
---
Поищите информацию в справке по VBA Excel-я.
---
А вот во второй строке в ячейке R2C4 ( D2) формула =--R[-1]C[-2], т.е. ссылка на все туже ячейку B1, а надо уже на B2.
Если руками копирую формулу из 1-й строки во вторую, то все работает, но смысл-то не в этом....
Ячейку второй строки формирует команда Ехсел.Cells(2,4).FormulaLocal = м[1];
Если формула хранится в одном и том же элементе массива, то как может быть так, что в первой строке из m[1] копируется формула: =--RC[-2]?
Значит между чтением первой строки и чтением второй элемент массива изменяется. Ищите, где это происходит и исправляйте.
---
Блин, вообще что-либо перестал понимать: из шаблона вместо =--RC[-2] читает =--B1.
Ну ладно, в принципе относительная адресация только в другом формате.
При трансляции ее в выходной файл в первой строке получается как как я хочу :=--RC[-2]. А вот в дальше описанная выше непотребщина.

shablon1 это шаблон, а form это выходной файл.
В шаблоне значение имеет только первая строка, в форм-е первые 2.
---
=C2*D2

во второй строке формула

почему тогда вы говорите, что в шаблоне значение имеет только первая строка,
---
Потому что только она анализируется. Это не боевой шаблон, чисто для эксперимента.
---
В файле всё нормально. В массиве что-то изменяется после записи строки.
---
К сожалению нет. После сохранения файла и закрытия приложения массив формул не меняется.
---
Так не может быть, что из одного и того же элемента массива считываются разные данные. Покажите код обработки.
---
Сам думаю также, и вместе с тем....
Вот процедура записи выходного файла.
Не судите строго, это чистый эксперимент.

```1c
    &НаСервере
    Процедура ЗаписатьЭкселНаСервере(м)
    Ехсел=Новый COMObject("Excel.Application");
    Книга=Ехсел.Workbooks.Add();
    Ехсел.Cells(1,1).NumberFormat = "*"; Ехсел.Cells(1,1).Value = "000033";
    Ехсел.Cells(1,2).NumberFormat = "*"; Ехсел.Cells(1,2).Value = "0000123";
    Ехсел.Cells(1,3).FormulaLocal = м[0]; Ехсел.Cells(1,4).FormulaLocal = м[1]; Ехсел.Cells(1,5).FormulaLocal = м[2]; Ехсел.Cells(1,6).FormulaLocal = м[3];

    Ехсел.Cells(2,1).NumberFormat = "*"; Ехсел.Cells(2,1).Value = "000021";
    Ехсел.Cells(2,2).NumberFormat = "*"; Ехсел.Cells(2,2).Value = "000022";
    Ехсел.Cells(2,3).FormulaLocal = м[0]; Ехсел.Cells(2,4).FormulaLocal = м[1]; Ехсел.Cells(2,5).FormulaLocal = м[2]; Ехсел.Cells(2,6).FormulaLocal = м[3];

    //Ехсел.Cells(3,1).NumberFormat = "*"; Ехсел.Cells(3,1).Value = "000031";
    //Ехсел.Cells(3,2).NumberFormat = "*"; Ехсел.Cells(3,2).Value = "000032";
    Для ж = 1 По 6 Цикл
    Ехсел.Cells(3,ж).NumberFormat = "*";
    КонецЦикла;
    Ехсел.Cells(3,1).Value = "000031";
    Ехсел.Cells(3,2).Value = "000032";

    // Ехсел.Cells(3,3).FormulaLocal = м[0]; Ехсел.Cells(3,4).FormulaLocal = м[1]; Ехсел.Cells(3,5).FormulaLocal = м[2]; Ехсел.Cells(3,6).FormulaLocal = м[3];
    Ехсел.Cells(3,3).Value = м[0]; Ехсел.Cells(3,4).Value = м[1]; Ехсел.Cells(3,5).Value = м[2]; Ехсел.Cells(3,6).Value = м[3];

    Книга.SaveAs("c:\Новая папка\form.xlsx");
    Ехсел.Application.Quit();
    КонецПроцедуры
```
---
Почему-то мой ответ не проявляется!!!
---
Попробую через файл. Это чистый эксперимент, практической ценности не имеет.
---
Во, проявился.
---
а вы шаблон не можете приложить к вопросу ?
---
как говорил один умный человек : телепаты - налетай...

Там всего одна строка в которой указаны поля.....
одной строкой люди базу убивают :)
---
Простите, разбирался.
---
Коллеги, в моем случае формулы читаются в стиле A1.
Кто знает, как в 1С прочитать или преобразовать формулу в формат R1C1?
---
Вопрос был в том, как вы читаете данные из Excel. Когда вы читаете м.Добавить(Excel.Cells(1,4).FormulaLocal), то из формулы "=RC[-2]" вы получаете формулу "=B1", которая и записывается в ячейку. Соответственно на второй строке "=B1" будет выглядеть как "=R[-1]C[-2]".
Чтобы читать относительные ссылки, нужно их читать м.Добавить(Excel.Cells(1,4).FormulaR1C1Local)

Прикрепил обработку, которая правильно заполняет.
---
Благодарствуйте, попробую. Тока уже завтра.
Спасибо.
---
Коллега, Вы мастер.
Если я правильно понял, все эти конструкции к 1С имеют косвенное отношение и взяты из Excel?
Где подробно про это можно прочитать?
Спасибо.
---
В интернете поищите. Я в отладчике смотрел.