Нумерация пунктов в макете по условию
Есть макет с различными областями которые выводятся по определенным условиям. Необходимо пронумеровать их по мере вывода. Подскажите пожалуйста как это можно сделать?
Например заменой символов в макете
Можно ли так, как-нибудь))) Так не получается зацикливается
Например заменой символов в макете
Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
Пока Ячейка <> Неопределено Цикл
Сообщить("Ячейка 12345 нашлась");
КонецЦикла;
Можно ли так, как-нибудь))) Так не получается зацикливается
По теме из базы знаний
- Не спеша, эффективно и правильно – путь разработки. Часть 3. Практика
- Интеграция с маркетплейсами МегаМаркет, Wildberries, OZON, ЯндексМаркет, VK, Avito, Леруа Мерлен, Aliexpress, Dostavista
- Транспортная накладная: приложение № 4 (в ред. Постановлений Правительства РФ от 21.12.2020 №2200) для УТ 10.3
- Как читать чужой код? Часть 3. Разбор и доработка запросов
- По-настоящему свои макеты в отчетах СКД. Исследование процесса компоновки и генерация кода отчета
Найденные решения
Если всё еще зацикливается то у вас два варианта
1. Сразу как нашли заменять в найденой ячейке текст на нужный вам номер чтобы эта ячейка больше не находилась
Что-то вроде
2. Попробовать при переборе штатный механизм позволяющий продолжать поиск со следующей строки после той которая нашлась:
1. Сразу как нашли заменять в найденой ячейке текст на нужный вам номер чтобы эта ячейка больше не находилась
Что-то вроде
Номер=0;
Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
Пока Ячейка <> Неопределено Цикл
Номер=Номер+1;
Ячейка.Текст=СтрЗаменить(Ячейка.Текст, "12345", Строка(Номер));
Сообщить("Ячейка 12345 номер "+Строка(Номер)+" нашлась");
Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
КонецЦикла;
2. Попробовать при переборе штатный механизм позволяющий продолжать поиск со следующей строки после той которая нашлась:
Номер=0;
Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
Пока Ячейка <> Неопределено Цикл
Номер=Номер+1;
Сообщить("Ячейка 12345 номер "+Строка(Номер)+" нашлась");
Ячейка = ТабДокумент.НайтиТекст("12345",Ячейка,,,,ИСТИНА,);
КонецЦикла;
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Так вы хотите нумеровать по мере вывода или уже потом после вывода искать поля в готовом документе и делать подстановку?
Если по мере вывода то сначала задаете
Номер = 0;
А потом при каждом выводе следующий код
Номер=Номер+1;
ОбластьСтроки.Параметры.НашКрасивыйНомерСтроки = Номер;
ТабДокумент.Вывести(ОбластьСтроки);
Для того чтобы программа знала где на макете этот номер располагать есть два способа:
1. Необходимо правой кнопкой щелкнуть по ячейке макета где будет номер, в появившемся меню выбрать пункт "Свойства", на появившейся панели свойств установить значение свойства "Заполнение" как "Параметр"
Потом в этой ячейке вбиваете содержимое НашКрасивыйНомерСтроки и программа сама его начнет отображать в треугольных скобках <НашКрасивыйНомерСтроки> это будет означать что вы можете использовать в программе для данной области такое имя параметра и код который мы описали выше будет работать.
2. Необходимо правой кнопкой щелкнуть по ячейке макета где будет номер, в появившемся меню выбрать пункт "Свойства", на появившейся панели свойств установить значение свойства "Заполнение" как "Шаблон"
Потом в этой ячейке вбиваете содержимое например такое
---[НашКрасивыйНомерСтроки].---
и программа сама его начнет отображать в треугольных скобках <---[НашКрасивыйНомерСтроки].---> это будет означать что вы можете использовать в программе для данной области такое имя параметра, код который мы описали выше будет работать и программа оставит все содержание строки но втиснет туда номер например
---1.---
---2.---
---3.---
Если по мере вывода то сначала задаете
Номер = 0;
А потом при каждом выводе следующий код
Номер=Номер+1;
ОбластьСтроки.Параметры.НашКрасивыйНомерСтроки = Номер;
ТабДокумент.Вывести(ОбластьСтроки);
Для того чтобы программа знала где на макете этот номер располагать есть два способа:
1. Необходимо правой кнопкой щелкнуть по ячейке макета где будет номер, в появившемся меню выбрать пункт "Свойства", на появившейся панели свойств установить значение свойства "Заполнение" как "Параметр"
Потом в этой ячейке вбиваете содержимое НашКрасивыйНомерСтроки и программа сама его начнет отображать в треугольных скобках <НашКрасивыйНомерСтроки> это будет означать что вы можете использовать в программе для данной области такое имя параметра и код который мы описали выше будет работать.
2. Необходимо правой кнопкой щелкнуть по ячейке макета где будет номер, в появившемся меню выбрать пункт "Свойства", на появившейся панели свойств установить значение свойства "Заполнение" как "Шаблон"
Потом в этой ячейке вбиваете содержимое например такое
---[НашКрасивыйНомерСтроки].---
и программа сама его начнет отображать в треугольных скобках <---[НашКрасивыйНомерСтроки].---> это будет означать что вы можете использовать в программе для данной области такое имя параметра, код который мы описали выше будет работать и программа оставит все содержание строки но втиснет туда номер например
---1.---
---2.---
---3.---
(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");
КонецЦикла;
КонецПроцедуры
Показать
Если всё еще зацикливается то у вас два варианта
1. Сразу как нашли заменять в найденой ячейке текст на нужный вам номер чтобы эта ячейка больше не находилась
Что-то вроде
2. Попробовать при переборе штатный механизм позволяющий продолжать поиск со следующей строки после той которая нашлась:
1. Сразу как нашли заменять в найденой ячейке текст на нужный вам номер чтобы эта ячейка больше не находилась
Что-то вроде
Номер=0;
Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
Пока Ячейка <> Неопределено Цикл
Номер=Номер+1;
Ячейка.Текст=СтрЗаменить(Ячейка.Текст, "12345", Строка(Номер));
Сообщить("Ячейка 12345 номер "+Строка(Номер)+" нашлась");
Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
КонецЦикла;
2. Попробовать при переборе штатный механизм позволяющий продолжать поиск со следующей строки после той которая нашлась:
Номер=0;
Ячейка = ТабДокумент.НайтиТекст("12345",,,,,ИСТИНА,);
Пока Ячейка <> Неопределено Цикл
Номер=Номер+1;
Сообщить("Ячейка 12345 номер "+Строка(Номер)+" нашлась");
Ячейка = ТабДокумент.НайтиТекст("12345",Ячейка,,,,ИСТИНА,);
КонецЦикла;
Почему-то зацикливается такой вариант
Ставлю Если заменяет только первый пункт
Процедура СформироватьНумерацию(ТабДокумент)
Номер=0;
Ячейка = ТабДокумент.НайтиТекст("88",,,,,ИСТИНА,);
Пока Ячейка <> Неопределено Цикл
Номер=Номер+1;
Ячейка.Текст=СтрЗаменить(Ячейка.Текст, "88", Строка(Номер));
Сообщить("Ячейка 88 номер "+Строка(Номер)+" нашлась");
КонецЦикла;
КонецПроцедуры
ПоказатьСтавлю Если заменяет только первый пункт
Получилось!!!! Спасибо большое!!!
Процедура СформироватьНумерацию(ТабДокумент)
Номер = 0;
Ячейка = ТабДокумент.НайтиТекст("88",,,,,ИСТИНА,);
Пока Ячейка <> Неопределено Цикл
Номер = Номер + 1;
Ячейка.Текст = СтрЗаменить(Ячейка.Текст, "88", Строка(Номер));
Сообщить("Ячейка 88 номер " + Строка(Номер) + " нашлась");
Ячейка = ТабДокумент.НайтиТекст("88",,,,,ИСТИНА,);
КонецЦикла;
КонецПроцедуры
Показать
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)