Есть макет с различными областями которые выводятся по определенным условиям. Необходимо пронумеровать их по мере вывода. Подскажите пожалуйста как это можно сделать?

Например заменой символов в макете

```1c
    Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
    Пока Ячейка <> Неопределено Цикл
    Сообщить("Ячейка 12345 нашлась");
    КонецЦикла;
```

Можно ли так, как-нибудь))) Так не получается зацикливается
---
Если всё еще зацикливается то у вас два варианта

1. Сразу как нашли заменять в найденой ячейке текст на нужный вам номер чтобы эта ячейка больше не находилась

Что-то вроде

```1c
    Номер=0;
    Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
    Пока Ячейка <> Неопределено Цикл
    Номер=Номер+1;
    Ячейка.Текст=СтрЗаменить(Ячейка.Текст, "12345", Строка(Номер));
    Сообщить("Ячейка 12345 номер "+Строка(Номер)+" нашлась");
    Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
    КонецЦикла;
```

2. Попробовать при переборе штатный механизм позволяющий продолжать поиск со следующей строки после той которая нашлась:

```1c
    Номер=0;
    Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
    Пока Ячейка <> Неопределено Цикл
    Номер=Номер+1;
    Сообщить("Ячейка 12345 номер "+Строка(Номер)+" нашлась");
    Ячейка = ТабДокумент.НайтиТекст("12345",Ячейка,,,,ИСТИНА,);
    КонецЦикла;
```
---
Так вы хотите нумеровать по мере вывода или уже потом после вывода искать поля в готовом документе и делать подстановку?

Если по мере вывода то сначала задаете
Номер = 0;

А потом при каждом выводе следующий код
Номер=Номер+1;
ОбластьСтроки.Параметры.НашКрасивыйНомерСтроки = Номер;
ТабДокумент.Вывести(ОбластьСтроки);

Для того чтобы программа знала где на макете этот номер располагать есть два способа:

1. Необходимо правой кнопкой щелкнуть по ячейке макета где будет номер, в появившемся меню выбрать пункт "Свойства", на появившейся панели свойств установить значение свойства "Заполнение" как "Параметр"
Потом в этой ячейке вбиваете содержимое НашКрасивыйНомерСтроки и программа сама его начнет отображать в треугольных скобках <НашКрасивыйНомерСтроки> это будет означать что вы можете использовать в программе для данной области такое имя параметра и код который мы описали выше будет работать.

2. Необходимо правой кнопкой щелкнуть по ячейке макета где будет номер, в появившемся меню выбрать пункт "Свойства", на появившейся панели свойств установить значение свойства "Заполнение" как "Шаблон"
Потом в этой ячейке вбиваете содержимое например такое
---[НашКрасивыйНомерСтроки].---
и программа сама его начнет отображать в треугольных скобках <---[НашКрасивыйНомерСтроки].---> это будет означать что вы можете использовать в программе для данной области такое имя параметра, код который мы описали выше будет работать и программа оставит все содержание строки но втиснет туда номер например
---1.---
---2.---
---3.---
---
Нумерация уже после того как макет сформирован

```1c
    Функция Печать() Экспорт

    ТабДокумент = Новый ТабличныйДокумент;

    ВыборкаРаботники = СформироватьЗапросДляПечати("ПоТабличнойЧастиДокумента").Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    // запоминаем области макета
    Макет = ПолучитьМакет("Макет");
    ОбластьМакетаЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьМакетаНовоеПодразделение = Макет.ПолучитьОбласть("ПереводВНовоеПодразделение");
    ОбластьМакетаНовыйКлассУсловийТруда = Макет.ПолучитьОбласть("НовыйКлассУсловийТруда");
    ОбластьМакетаПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьДополнительныйОтпуск = Макет.ПолучитьОбласть("ДополнительныйОтпуск");
    ОбластьРежимРабочегоВремениИВремениОтдыхаОтпуск = Макет.ПолучитьОбласть("РежимРабочегоВремениИВремениОтдыхаОтпуск");
    ОбластьМакетаНовыйГрафик = Макет.ПолучитьОбласть("НовыйГрафик");
    ОбластьМакетаНовыйГрафикСуммированныйУчет = Макет.ПолучитьОбласть("НовыйГрафикСуммированныйУчет");
    ОбластьДобавлениеДополнительныхНадбавок = Макет.ПолучитьОбласть("ДобавлениеДополнительныхНадбавок");
    ОбластьСтрокаДополнительныхНадбавок = Макет.ПолучитьОбласть("СтрокаДополнительныхНадбавок");
    ОбластьИзменениеОплатыТруда = Макет.ПолучитьОбласть("ИзменениеОплатыТруда");
    ОбластьУдалениеНадбавокПункт4 = Макет.ПолучитьОбласть("УдалениеНадбавокПункт4");
    ОбластьДобавлениеНадбавокПункт4 = Макет.ПолучитьОбласть("ДобавлениеНадбавокПункт4");

    // Начинаем формировать выходной документ
    Пока ВыборкаРаботники.Следующий() Цикл

    ВложеннаяВыборка = ВыборкаРаботники.Выбрать();
    ВложеннаяВыборка.Следующий();

    // Каждый приказ на отдельной странице.
    Если ТабДокумент.ВысотаТаблицы > 0 Тогда
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;

    ОбластьМакетаПодвал.Параметры.Заполнить(ВложеннаяВыборка);
    ОбластьМакетаЗаголовок.Параметры.ДатаНачалаРабот = Формат (ВложеннаяВыборка.ДатаНачала,"ДЛФ=DD");
    ТабДокумент.Вывести(ОбластьМакетаЗаголовок);

    //ИЗМЕНЕНИЕ ДОЛЖНОСТИ ИЛИ ПОДРАЗДЕЛЕНИЯ
    Если ЗначениеЗаполнено(ВложеннаяВыборка.РПодразделения) Тогда
    ОбластьМакетаНовоеПодразделение.Параметры.РПодразделения = ВложеннаяВыборка.НовоеПодразделение;
    КонецЕсли;

    ОбластьМакетаНовоеПодразделение.Параметры.НоваяДолжность = СокрП(ПадежП(ВложеннаяВыборка.НоваяДолжность,2));
    ОбластьМакетаНовоеПодразделение.Параметры.ПериодВременногоПеревода = " с " + Строка(Формат(ВложеннаяВыборка.ДатаНачала,"ДЛФ=DD")) + " до " + ?(ЗначениеЗаполнено(ВложеннаяВыборка.ДатаОкончания), Строка(Формат(ВложеннаяВыборка.ДатаОкончания,"ДЛФ=DD") + "), УсловияПриемаНаРаботу + ".");

    ОбластьМакетаНовоеПодразделение.Параметры.УсловияПриемаНаРаботу = " " + Строка(УсловияПриемаНаРаботу);

    Если ЗначениеЗаполнено(ВложеннаяВыборка.ДатаОкончания) Тогда
    ОбластьМакетаНовоеПодразделение.Параметры.ПериодРаботы = " с " + Строка(Формат(ВложеннаяВыборка.ДатаНачала, "ДЛФ=DD")) + " по " + Строка(Формат(ВложеннаяВыборка.ДатаОкончания, "ДЛФ=DD"));
    Иначе
    ОбластьМакетаНовоеПодразделение.Параметры.ПериодРаботы = ".";
    КонецЕсли;
    ТабДокумент.Вывести(ОбластьМакетаНовоеПодразделение);
    ////////////////////////////////////////////////////

    //ИЗМЕНЕНИЕ ОКЛАДА (ТАРИФНОЙ СТАВКИ)
    ТаблицаОкладаТарифнойСтавки = ИзменениеОкладаТарифнойСтавки(ВложеннаяВыборка.Сотрудник);
    Если ЗначениеЗаполнено(ТаблицаОкладаТарифнойСтавки) Тогда
    Для каждого СтрокиТаблица из ТаблицаОкладаТарифнойСтавки Цикл
    ОбластьИзменениеОплатыТруда.Параметры.ТипОплатыТруда = СтрокиТаблица.ТипОплатыТруда;
    Если СтрокиТаблица.ТипОплатыТруда = "оклад" Тогда
    ОбластьИзменениеОплатыТруда.Параметры.ПоказательОплатыТруда = СтрокиТаблица.Ставка;
    Иначе
    ОбластьИзменениеОплатыТруда.Параметры.ПоказательОплатыТруда = Формат(СтрокиТаблица.Ставка,"ЧДЦ=2");
    КонецЕсли;
    ОбластьИзменениеОплатыТруда.Параметры.ПоказательОплатыТрудаСуммой = ЧислоПрописью(СтрокиТаблица.Ставка,, "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
    ОбластьИзменениеОплатыТруда.Параметры.МесяцЧас = СтрокиТаблица.МесяцЧас;
    КонецЦикла;
    ТабДокумент.Вывести(ОбластьИзменениеОплатыТруда);
    КонецЕсли;
    ////////////////////////////////////////////////////

    //ДОБАВЛЕНИЕ УДАЛЕНИЕ НАДБАВОК ПУНКТ 4
    ТаблицаПрекращениеНадбавок = ПрекращениеДополнительныеНадбавкиПункт4(ВложеннаяВыборка.Сотрудник);
    Если ЗначениеЗаполнено(ТаблицаПрекращениеНадбавок) Тогда
    ТабДокумент.Вывести(ОбластьУдалениеНадбавокПункт4);
    КонецЕсли;

    ТаблицаДополнительныхНадбавокПункт4 = ДополнительныеНадбавкиПункт4(ВложеннаяВыборка.Сотрудник);
    Если ЗначениеЗаполнено(ТаблицаДополнительныхНадбавокПункт4) Тогда
    Для каждого СтрокиТаблицы из ТаблицаДополнительныхНадбавокПункт4 Цикл
    ОбластьДобавлениеНадбавокПункт4.Параметры.ПоказательНадбавки = Строка(СтрокиТаблицы.РазмерНадбавки) + ?(СтрокиТаблицы.СпособРасчета = "Процент", "% к тарифной ставке.", " руб.");
    ТабДокумент.Вывести(ОбластьДобавлениеНадбавокПункт4);
    КонецЦикла
    КонецЕсли;
    ////////////////////////////////////////////////////

    Если ВложеннаяВыборка.НоваяДолжность <> ВложеннаяВыборка.ПрежняяДолжность Тогда

    //ДОПОЛНИТЕЛЬНЫЕ ДНИ ОТПУСКА
    //Определим будит или был у сотрудника ненормированный рабочий день
    ТаблицаНоваяОтпуска = ДополнительныеНенормированныйОтпуска(ВложеннаяВыборка.НоваяДолжностьСсылка, ВложеннаяВыборка.Работник);
    ТаблицаПрежняяОтпуска = ДополнительныеНенормированныйОтпуска(ВложеннаяВыборка.ПрежняяДолжностьСсылка, ВложеннаяВыборка.Работник);

    НенормированныйРабочийДень = Ложь;
    Для каждого СтрокаОтпуска из ТаблицаНоваяОтпуска Цикл
    Если СтрокаОтпуска.КодОтпуска = "000000003" Тогда
    НенормированныйРабочийДень = Истина;
    Продолжить;
    КонецЕсли;
    КонецЦикла;

    Для каждого СтрокаОтпуска из ТаблицаПрежняяОтпуска Цикл
    Если СтрокаОтпуска.КодОтпуска = "000000003" Тогда
    НенормированныйРабочийДень = Истина;
    Продолжить;
    КонецЕсли;
    КонецЦикла;
    ////////////////////////////////////////////////////////////­///////

    НовыйТаблицаДополнительныхДнейОтпуска = ДополнительныеОтпуска(ВложеннаяВыборка.НоваяДолжностьСсылка);
    ПрежняяТаблицаДополнительныхДнейОтпускаСтарая = ДополнительныеОтпуска(ВложеннаяВыборка.ПрежняяДолжностьСсылка);

    Если ЗначениеВСтрокуВнутр(НовыйТаблицаДополнительныхДнейОтпуска) <> ЗначениеВСтрокуВнутр(ПрежняяТаблицаДополнительныхДнейОтпускаСтарая) Тогда

    .............

    КонецЕсли;
    ///////////////////////////////////////////

    КонецЕсли;
    КонецЕсли;
    //////////////////////////////////////////////////

    //ДОБАВЛЕНИЕ НАДБАВОК ПУНКТ 7
    ТаблицаДополнительныхНадбавок = ДополнительныеНадбавкиПункт7(ВложеннаяВыборка.Сотрудник);
    Если ЗначениеЗаполнено(ТаблицаДополнительныхНадбавок) Тогда
    ТабДокумент.Вывести(ОбластьДобавлениеДополнительныхНадбавок);
    НомерСтроки = 0;
    Для каждого СтрокиТаблицы из ТаблицаДополнительныхНадбавок Цикл
    НомерСтроки = НомерСтроки + 1;
    ОбластьСтрокаДополнительныхНадбавок.Параметры.СтрокаДополнительныеНадбавки = Строка(Нрег(СтрокиТаблицы.ВидРасчета)) + " в размере " + Строка(СтрокиТаблицы.РазмерНадбавки) +
    ?(СтрокиТаблицы.СпособРасчета = "Процент", "%", " руб.") + ?(НомерСтроки = ТаблицаДополнительныхНадбавок.Количество(), ".", ";");;
    ТабДокумент.Вывести(ОбластьСтрокаДополнительныхНадбавок);
    КонецЦикла
    КонецЕсли;
    /////////////////////////////////////////////////

    //ИЗМЕНЕНИЕ ГРАФИКА РАБОТЫ
    ПрошлыйГрафикРаботы = ПрошлыйГрафикРаботы(ВложеннаяВыборка.Работник,НачалоДня(ВложеннаяВыборка.ДатаНачала));
    Для Каждого СтрокиТаблицы из ПрошлыйГрафикРаботы Цикл
    Если СтрокиТаблицы.ПрошлыйГрафик <> ВложеннаяВыборка.ГрафикРаботыСсылка Тогда
    ОбластьМакетаНовыйГрафик.Параметры.НовыйГрафикРаботы = ВложеннаяВыборка.ГрафикРаботыСсылка;
    ТабДокумент.Вывести(ОбластьМакетаНовыйГрафик);
    Если ВложеннаяВыборка.ПризнакСуммированногоУчета = "1" Тогда
    ТабДокумент.Вывести(ОбластьМакетаНовыйГрафикСуммированныйУчет);
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    /////////////////////////////////////////////////

    ОбластьМакетаПодвал.Параметры.ДатаНачалаРабот = Формат (ВложеннаяВыборка.ДатаНачала,"ДЛФ=DD");
    ТабДокумент.Вывести(ОбластьМакетаПодвал);
    КонецЦикла;

    СформироватьНумерацию(ТабДокумент);

    Возврат ТабДокумент;

    КонецФункции // Печать()

    Процедура СформироватьНумерацию(ТабДокумент)

    Ячейка = ТабДокумент.НайтиТекст("88");
    Пока Ячейка <> Неопределено Цикл
    Сообщить("Ячейка 12345 нашлась");
    Ячейка = ТабДокумент.НайтиТекст("88");
    КонецЦикла;

    КонецПроцедуры
```
---
Можете привести пример того кода который у вас выводит области?
---
Если всё еще зацикливается то у вас два варианта

1. Сразу как нашли заменять в найденой ячейке текст на нужный вам номер чтобы эта ячейка больше не находилась

Что-то вроде

```1c
    Номер=0;
    Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
    Пока Ячейка <> Неопределено Цикл
    Номер=Номер+1;
    Ячейка.Текст=СтрЗаменить(Ячейка.Текст, "12345", Строка(Номер));
    Сообщить("Ячейка 12345 номер "+Строка(Номер)+" нашлась");
    Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
    КонецЦикла;
```

2. Попробовать при переборе штатный механизм позволяющий продолжать поиск со следующей строки после той которая нашлась:

```1c
    Номер=0;
    Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
    Пока Ячейка <> Неопределено Цикл
    Номер=Номер+1;
    Сообщить("Ячейка 12345 номер "+Строка(Номер)+" нашлась");
    Ячейка = ТабДокумент.НайтиТекст("12345",Ячейка,,,,ИСТИНА,);
    КонецЦикла;
```
---
Почему-то зацикливается такой вариант

```1c
    Процедура СформироватьНумерацию(ТабДокумент)

    Номер=0;
    Ячейка = ТабДокумент.НайтиТекст("88",,,,,ИСТИНА,);
    Пока Ячейка <> Неопределено Цикл
    Номер=Номер+1;
    Ячейка.Текст=СтрЗаменить(Ячейка.Текст, "88", Строка(Номер));
    Сообщить("Ячейка 88 номер "+Строка(Номер)+" нашлась");
    КонецЦикла;

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

Ставлю Если заменяет только первый пункт
---
Получилось!!!! Спасибо большое!!!

```1c
    Процедура СформироватьНумерацию(ТабДокумент)

    Номер = 0;
    Ячейка = ТабДокумент.НайтиТекст("88",,,,,ИСТИНА,);
    Пока Ячейка <> Неопределено Цикл
    Номер = Номер + 1;
    Ячейка.Текст = СтрЗаменить(Ячейка.Текст, "88", Строка(Номер));
    Сообщить("Ячейка 88 номер " + Строка(Номер) + " нашлась");
    Ячейка = ТабДокумент.НайтиТекст("88",,,,,ИСТИНА,);
    КонецЦикла;

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