Нумерация пунктов в макете по условию

1. NatalkaBal 28 21.09.17 12:54 Сейчас в теме
Есть макет с различными областями которые выводятся по определенным условиям. Необходимо пронумеровать их по мере вывода. Подскажите пожалуйста как это можно сделать?

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



Можно ли так, как-нибудь))) Так не получается зацикливается
По теме из базы знаний
Найденные решения
5. YanTsys 12 22.09.17 08:26 Сейчас в теме
Если всё еще зацикливается то у вас два варианта

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

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


2. Попробовать при переборе штатный механизм позволяющий продолжать поиск со следующей строки после той которая нашлась:
Номер=0;
Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
    Пока Ячейка <> Неопределено Цикл
        Номер=Номер+1;
        Сообщить("Ячейка 12345 номер "+Строка(Номер)+" нашлась");
        Ячейка = ТабДокумент.НайтиТекст("12345",Ячейка,,,,ИСТИНА,);
    КонецЦикла;
NatalkaBal; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. YanTsys 12 21.09.17 17:13 Сейчас в теме
Так вы хотите нумеровать по мере вывода или уже потом после вывода искать поля в готовом документе и делать подстановку?

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


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

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

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

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

Функция Печать() Экспорт
	
	ТабДокумент = Новый ТабличныйДокумент;

	
	ВыборкаРаботники = СформироватьЗапросДляПечати("ПоТабличнойЧастиДокумента").Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	// запоминаем области макета
	Макет = ПолучитьМакет("Макет");
	ОбластьМакетаЗаголовок                          = Макет.ПолучитьОбласть("Заголовок"); 
	ОбластьМакетаНовоеПодразделение                 = Макет.ПолучитьОбласть("ПереводВНовоеПодразделение");
	ОбластьМакетаНовыйКлассУсловийТруда             = Макет.ПолучитьОбласть("НовыйКлассУсловийТруда");
	ОбластьМакетаПодвал                             = Макет.ПолучитьОбласть("Подвал");
	ОбластьДополнительныйОтпуск                     = Макет.ПолучитьОбласть("ДополнительныйОтпуск");
	ОбластьРежимРабочегоВремениИВремениОтдыхаОтпуск = Макет.ПолучитьОбласть("РежимРабочегоВремениИВремениОтдыхаОтпуск");
	ОбластьМакетаНовыйГрафик                        = Макет.ПолучитьОбласть("НовыйГрафик");
	ОбластьМакетаНовыйГрафикСуммированныйУчет       = Макет.ПолучитьОбласть("НовыйГрафикСуммированныйУчет");
	ОбластьДобавлениеДополнительныхНадбавок         = Макет.ПолучитьОбласть("ДобавлениеДополнительныхНадбавок");
	ОбластьСтрокаДополнительныхНадбавок             = Макет.ПолучитьОбласть("СтрокаДополнительныхНадбавок");
	ОбластьИзменениеОплатыТруда                     = Макет.ПолучитьОбласть("ИзменениеОплатыТруда");
	ОбластьУдалениеНадбавокПункт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");
	КонецЦикла;
	
КонецПроцедуры

Показать
3. YanTsys 12 21.09.17 17:15 Сейчас в теме
Можете привести пример того кода который у вас выводит области?
5. YanTsys 12 22.09.17 08:26 Сейчас в теме
Если всё еще зацикливается то у вас два варианта

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

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


2. Попробовать при переборе штатный механизм позволяющий продолжать поиск со следующей строки после той которая нашлась:
Номер=0;
Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
    Пока Ячейка <> Неопределено Цикл
        Номер=Номер+1;
        Сообщить("Ячейка 12345 номер "+Строка(Номер)+" нашлась");
        Ячейка = ТабДокумент.НайтиТекст("12345",Ячейка,,,,ИСТИНА,);
    КонецЦикла;
NatalkaBal; +1 Ответить
6. NatalkaBal 28 22.09.17 08:38 Сейчас в теме
Почему-то зацикливается такой вариант

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

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

Показать


Ставлю Если заменяет только первый пункт
7. NatalkaBal 28 22.09.17 08:45 Сейчас в теме
Получилось!!!! Спасибо большое!!!

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

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

Показать
Оставьте свое сообщение
Вакансии
Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день