Как удалить пустые табличные строки при заполнении шаблона документов в Word?

1. user870565 16.02.19 16:48 Сейчас в теме
Документооборот 8, КОРП 2.1. В конфигурации допилила к внутренним документам еще одну табличную часть. (Так там есть возможность иметь дело только с ТЧ "Товары и услуги"). В итоге столкнулась с проблемой, что все стандартные обработки модулей АвтозаполнениеШаблонов железно заточены под вывод в файл только одной полноценной таблицы. Потому получается, что если в ТЧ товары и услуги, допустим 4 позиции, а во второй моей таблице 2 заполненных строки, то при создании файла вторая таблица выводится с 2 лишними пустыми строками (ну то есть 1С при заполнении считает, что все мои столбцы - это часть одной таблицы, хотя при верстке шаблона я их разношу вообще по разным страницам). Я не хочу менять стандартные процедуры автозаполнения шаблонов, хочу, чтобы просто перед окончанием процедуры заполнения, 1С выполнила поиск пустых строк таблицы и их удалила. Я очень мало смыслю в xml-структурах, а вопрос очень срочный. Потому очень прошу мне помочь. Хотя бы подсказкой, в каком направлении вообще искать решение.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. soft_wind 16.02.19 18:52 Сейчас в теме
ну это вам к программисту надо. судя по описанным симптомам у вас в макете две области Таблица с одинаковым именем (удивительно что вообще еще разными строчками заполняется), задайте второй таблице новое имя, настройте заполнение новой таблицы. больше со слов посоветовать нечего.
для более детального ответа нужны:
1.ваш вордовский шаблон
2.код которым он заполняется
3. user870565 16.02.19 20:49 Сейчас в теме
(2) насколько я смогла понять, имена областей таблиц он вообще не проверяет. МассивДанныхДляАвтоЗамен берется в итоге из вот этой структуры.
			ДанныеВладельцаФайлаДляАвтозаполнения = Новый Структура(
				"ТермДляЗамены, ЗаменяемаяСтрока, ЗначениеЗамены, НомерКолонкиТабличнойЧасти");
			ДанныеВладельцаФайлаДляАвтозаполнения.ТермДляЗамены = ДанныеДляЗамены.ТермДляЗамены;
			ДанныеВладельцаФайлаДляАвтозаполнения.ЗаменяемаяСтрока = ДанныеДляЗамены.ЗаменяемаяСтрока;
			ДанныеВладельцаФайлаДляАвтозаполнения.НомерКолонкиТабличнойЧасти = 0  

Как видите, там не отлеживается принадлежность колонок какой-то из ТЧ. Поля у меня в таблицах повторяющихся имен не имеют, потому на выходе получается, что-то типа
Реквизит1ТЧ1 - Номер колонки = 1, ...
Реквизит5ТЧ1 - Номер колонки = 5,
Реквизит1ТЧ2 - Номер колонки = 6, ...
Реквизит1ТЧ2 - Номер колонки = 10

Количество строк, которые надо в файл вписать он берет по количеству строк в таблице Товары, но мне это не мешает - там строк всегда будет больше.
//Осуществляет выборку всех полей в файле MSWord
//Параметры:Расширение - расширение файла ("doc" и т.п.)
//			ДвоичныеДанныеФайла - двоичные данные файла
//Возвращает:Массив наименований полей. Массив пустой, если в файле нет полей.
//Выполняет замену полей и строк в документе MSOffice 2007+ (OpenXML)
//Параметры:ЧтениеXML - объект ЧтениеXML, содержащий в себе файл, составляющий OpenOffice документ
//			ЗаписьXML - объект ЧтениеXML, содержащий в себе файл с измененными данными, составляющий OpenOffice документ
//			МассивДанныхДляАвтоЗамен - массив настроек для заполнения файла данными

Процедура ВыполнитьЗаменуПолейИСтрокВДокументеMSOfficeOpenXML(ЧтениеXML, ЗаписьXML, АдресXML, МассивДанныхДляАвтоЗамен) Экспорт
	
	// Получаем количество строк в таблице товары, если она заполнена.
	КоличествоСтрок = 0;
	Для Каждого Настройка Из МассивДанныхДляАвтоЗамен Цикл 
		Если Настройка.НомерКолонкиТабличнойЧасти = 1 Тогда 
			КоличествоСтрок = Настройка.ЗначениеЗамены.Количество();
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	ЧтениеXML.ИгнорироватьПробелы = Ложь;
	
	ФлагНайденоПоле = Ложь;
	ФлагНайденаСтрока = Ложь;
	
	ПереводСтроки = Ложь; ВозможенПереводСтроки = Ложь;
	СтрЗамены = "";
	СтрПоиска = "";
	ТекстБылЗаписан = Ложь;
	
	СтрокаТаблицы = 0; НомерКолонки = 0;
	ФлагНайденаТаблица = Ложь; ФлагНайденаНашаТаблица = Ложь;
	ФлагНайденаСтрокаТаблицы = Ложь;
	ПервыйТег = КоличествоСтрок > 1; ПропуститьСтроку = Ложь;
	СтрокаXMLОткрыт = Ложь;
	
	Пока ЧтениеXML.Прочитать() Цикл
		Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
			// Найдено предполагаемое поле для замены
			Если ЧтениеXML.Имя = "w:bookmarkStart" Тогда
				ФлагНайденоПоле = Истина; 
				СкрытаяЗакладка = Ложь;
			КонецЕсли;
			
			Если ЧтениеXML.Имя = "w:t" Тогда
				ФлагНайденаСтрока = Истина;
			КонецЕсли;
			
			// Предполагаем, что найдена наша таблица для замены
			Если ЧтениеXML.Имя = "w:tbl" И КоличествоСтрок > 0 Тогда
				ФлагНайденаТаблица = Истина;
				СтрокаТаблицы = 0;
			КонецЕсли;
			
			// Предполагаем, что найдена строка нашей таблица для замены
			Если ЧтениеXML.Имя = "w:tr" И ФлагНайденаТаблица Тогда 
				Если СтрокаТаблицы > КоличествоСтрок И ФлагНайденаНашаТаблица Тогда 
					ПропуститьСтроку = Истина;
					Продолжить;
				КонецЕсли;
				
				СтрокаТаблицы = СтрокаТаблицы + 1;
				
				Если СтрокаТаблицы = 2 И КоличествоСтрок > 1 Тогда
					ФлагНайденаСтрокаТаблицы = Истина;
				КонецЕсли;
			КонецЕсли;
			
			Если ЧтениеXML.Имя = "w:tc" Тогда 
				НомерКолонки = НомерКолонки + 1;
			КонецЕсли;
			
			// В случае перезаполнения файла, этот тег пропускаем, чтобы не создавались лишние переводы строки.
			Если ЧтениеXML.Имя = "w:cr" И ВозможенПереводСтроки Тогда
				ПереводСтроки = Истина;
				Продолжить;
			КонецЕсли;
			
			Если ПропуститьСтроку Тогда 
				Продолжить;
			КонецЕсли;
			
			ЗаписьXML.ЗаписатьНачалоЭлемента(ЧтениеXML.Имя);
			
			Если ПервыйТег Или ФлагНайденаСтрокаТаблицы Тогда
				Если Не СтрокаXMLОткрыт Тогда 
					КопияСтрокиXML = СоздатьНовуюЗапись(АдресXML);
					СтрокаXMLОткрыт = Истина;
				КонецЕсли;
				
				КопияСтрокиXML.ЗаписатьНачалоЭлемента(ЧтениеXML.Имя);
			КонецЕсли;
			
			// Читаем и записываем атрибуты тега
			Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда
				Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
					Если ФлагНайденоПоле И ЧтениеXML.Имя = "w:name"
						И Найти(ЧтениеXML.Значение, "_GoBack") = 0 Тогда
						СтрПоиска = ЧтениеXML.Значение;
						
						// Скрытые закладки начинаются с символа "_"
						Если Лев(ЧтениеXML.Значение, 1) = "_" Тогда 
							СкрытаяЗакладка = Истина;
						КонецЕсли;
						
						Если ФлагНайденаТаблица И Не ФлагНайденаНашаТаблица Тогда
							Для Каждого НастройкаЗамены Из МассивДанныхДляАвтоЗамен Цикл
								Если НастройкаЗамены.ТермДляЗамены = СтрПоиска 
									И НастройкаЗамены.НомерКолонкиТабличнойЧасти > 0 Тогда
									ФлагНайденаНашаТаблица = Истина;
									Прервать;
								КонецЕсли;
							КонецЦикла;
						КонецЕсли;
						
						Если ПервыйТег Или ФлагНайденаСтрокаТаблицы Тогда 
							КопияСтрокиXML.ЗаписатьАтрибут(ЧтениеXML.Имя, Лев(СтрПоиска, 19) + "1");
						КонецЕсли;
					
					ИначеЕсли ПервыйТег Или ФлагНайденаСтрокаТаблицы Тогда 
						КопияСтрокиXML.ЗаписатьАтрибут(ЧтениеXML.Имя, ЧтениеXML.Значение);
					КонецЕсли;
					
					ЗаписьXML.ЗаписатьАтрибут(ЧтениеXML.Имя, ЧтениеXML.Значение);
				КонецЦикла
			КонецЕсли;
			
			ПервыйТег = Ложь;
			
		// Текст тега
		ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
			Если ПереводСтроки И ВозможенПереводСтроки Тогда
				ЗаписьXML.ЗаписатьБезОбработки("");
				
			// Перезаполняем поля таблицы
			ИначеЕсли ФлагНайденаНашаТаблица И ФлагНайденоПоле И ФлагНайденаСтрока Тогда
				Если ПропуститьСтроку Тогда 
					Продолжить;
				КонецЕсли;
				
				СтрЗамены = ЧтениеXML.Значение;
				БылаВыполненаЗамена = Ложь;
				
				Если ЗначениеЗаполнено(СтрЗамены) Тогда 
					Для Каждого НастройкаЗамены Из МассивДанныхДляАвтоЗамен Цикл
						ИмяРеквизита = СтрЗаменить(Лев(НастройкаЗамены.ТермДляЗамены, 20), " ", "_");
						Если ИмяРеквизита <> СтрПоиска Тогда
							Продолжить;
						КонецЕсли;
						
						СтрЗамены = НастройкаЗамены.ЗначениеЗамены[СтрокаТаблицы - 2].Значение;
						БылаВыполненаЗамена = Истина;
						Прервать;
					КонецЦикла;
				КонецЕсли;
				
				Если БылаВыполненаЗамена И Найти(СтрЗамены, Символы.ПС) > 0 Тогда
					СтрЗамены = СтрЗаменить(СтрЗамены, Символы.ПС, "<w:cr/>");
					Если СтрЗамены <> ЧтениеXML.Значение Тогда
						ЗаписьXML.ЗаписатьБезОбработки(СтрЗамены);
						
						Если ФлагНайденаСтрокаТаблицы Тогда 
							КопияСтрокиXML.ЗаписатьБезОбработки(СтрЗамены);
						КонецЕсли;
					Иначе
						ЗаписьXML.ЗаписатьТекст(СтрЗамены);
						
						Если ФлагНайденаСтрокаТаблицы Тогда 
							КопияСтрокиXML.ЗаписатьТекст(СтрЗамены);
						КонецЕсли;
					КонецЕсли;
				Иначе
					ЗаписьXML.ЗаписатьТекст(СтрЗамены);
					
					Если ФлагНайденаСтрокаТаблицы Тогда 
						КопияСтрокиXML.ЗаписатьТекст(СтрЗамены);
					КонецЕсли;
				КонецЕсли;
				
				СтрЗамены = "";
				ФлагНайденоПоле = Ложь;
				
			// Перезаполняем поля документа
			ИначеЕсли ФлагНайденоПоле И ФлагНайденаСтрока Тогда
				Для Каждого НастройкаЗамены Из МассивДанныхДляАвтоЗамен Цикл
					ИмяРеквизита = СтрЗаменить(Лев(НастройкаЗамены.ТермДляЗамены, 20), " ", "_");
					Если ИмяРеквизита = СтрПоиска Тогда
						СтрЗамены = НастройкаЗамены.ЗначениеЗамены;
						Прервать;
					КонецЕсли;
				КонецЦикла;
				
				СтрЗаменыССимволамиПС = СтрЗамены;
				СтрЗамены = СтрЗаменить(СтрЗамены, Символы.ПС, "<w:cr/>");
				
				Если ЗначениеЗаполнено(СтрЗамены) Тогда
					Если СтрЗамены <> СтрЗаменыССимволамиПС Тогда
						ЗаписьXML.ЗаписатьБезОбработки(СтрЗамены);
					Иначе
						ЗаписьXML.ЗаписатьТекст(СтрЗамены);
					КонецЕсли;
				ИначеЕсли Не СкрытаяЗакладка И СтрЗамены <> ЧтениеXML.Значение Тогда
					ЗаписьXML.ЗаписатьТекст(" ");
				Иначе
					ЗаписьXML.ЗаписатьТекст(ЧтениеXML.Значение);
				КонецЕсли;
				
				ФлагНайденоПоле = Ложь;
				СтрЗамены = "";
				ВозможенПереводСтроки = Истина;
				
			// Перезаполняем строки документа
			ИначеЕсли ФлагНайденаСтрока Тогда
				СтрЗамены = ЧтениеXML.Значение;
				БылаВыполненаЗамена = Ложь;
				Для Каждого НастройкаЗамены Из МассивДанныхДляАвтоЗамен Цикл
					Если Не ЗначениеЗаполнено(НастройкаЗамены.ЗаменяемаяСтрока) Тогда
						Продолжить;
					КонецЕсли;
					Если Найти(СтрЗамены, НастройкаЗамены.ЗаменяемаяСтрока) > 0 Тогда 
						СтрЗамены = СтрЗаменить(СтрЗамены, НастройкаЗамены.ЗаменяемаяСтрока, НастройкаЗамены.ЗначениеЗамены);
						БылаВыполненаЗамена = Истина;
					КонецЕсли;
				КонецЦикла;
				Если БылаВыполненаЗамена И Найти(СтрЗамены, Символы.ПС) > 0 Тогда
					СтрЗамены = СтрЗаменить(СтрЗамены, Символы.ПС, "<w:cr/>");
					Если СтрЗамены <> ЧтениеXML.Значение Тогда
						ЗаписьXML.ЗаписатьБезОбработки(СтрЗамены);
					Иначе
						ЗаписьXML.ЗаписатьТекст(СтрЗамены);
					КонецЕсли;
				Иначе
					ЗаписьXML.ЗаписатьТекст(СтрЗамены);
				КонецЕсли;
			Иначе
				ЗаписьXML.ЗаписатьТекст(ЧтениеXML.Значение);
				
				Если ФлагНайденаСтрокаТаблицы Тогда 
					КопияСтрокиXML.ЗаписатьТекст(ЧтениеXML.Значение);
				КонецЕсли;
			КонецЕсли;
			
		// Читаем и записываем конец тега
		ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
			// В случае перезаполнения файла, этот тег пропускаем, чтобы не создавались лишние переводы строки.
			Если ЧтениеXML.Имя = "w:cr" И ВозможенПереводСтроки Тогда
				Продолжить;
			КонецЕсли;
			
			Если ФлагНайденаТаблица И ЧтениеXML.Имя = "w:tbl" Тогда
				ФлагНайденаТаблица = Ложь;
				ФлагНайденаНашаТаблица = Ложь;
				ПропуститьСтроку = Ложь;
				СтрЗамены = "";
			КонецЕсли;
			
			Если ПропуститьСтроку Тогда 
				Продолжить;
			КонецЕсли;
			
			ЗаписьXML.ЗаписатьКонецЭлемента();
			Если ФлагНайденаСтрокаТаблицы Тогда
				КопияСтрокиXML.ЗаписатьКонецЭлемента();
			КонецЕсли;
			
			Если ФлагНайденоПоле И ЧтениеXML.Имя = "w:bookmarkEnd" Тогда
				ФлагНайденоПоле = Ложь; СкрытаяЗакладка = Ложь;
				СтрЗамены = "";
			КонецЕсли;
			Если ФлагНайденаСтрока Тогда
				ФлагНайденаСтрока = Ложь;
				СтрЗамены = "";
			КонецЕсли;
			
			Если ЧтениеXML.Имя = "w:tr" И ФлагНайденаТаблица Тогда 
				НомерКолонки = 0;
				ФлагНайденаСтрокаТаблицы = Ложь;
				
				Если СтрокаТаблицы = 2 И КоличествоСтрок > 1 Тогда 
					КопияСтрокиXML.ЗаписатьКонецЭлемента();
					КопияСтрокиXML.Закрыть();
					СтрокаXMLОткрыт = Ложь;
					ЗаменитьПространствоИменR(АдресXML);
					
					// Добавление в документ копии первой строки таблицы, с последующим заполнением данными документа
					Если ФлагНайденаНашаТаблица Тогда 
						Пока СтрокаТаблицы - 1 < КоличествоСтрок Цикл 
							ЧтениеСтрокиXML = Новый ЧтениеXML();
							ЧтениеСтрокиXML.ОткрытьФайл(АдресXML);
							ЧтениеСтрокиXML.ИгнорироватьПробелы = Ложь;
							ФлагНайденоПоле = Ложь; ФлагНайденаСтрока = Ложь;
							
							Пока ЧтениеСтрокиXML.Прочитать() Цикл
								Если ЧтениеСтрокиXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
									
									// Первый тег пропускаем
									Если ЧтениеСтрокиXML.Имя = "w:document" Тогда 
										Продолжить;
									КонецЕсли;
									
									Если ЧтениеСтрокиXML.Имя = "w:bookmarkStart" Тогда
										ФлагНайденоПоле = Истина; 
									КонецЕсли;
									
									Если ЧтениеСтрокиXML.Имя = "w:t" Тогда
										ФлагНайденаСтрока = Истина;
									КонецЕсли;
									
									Если ЧтениеСтрокиXML.Имя = "w:tr" Тогда 
										СтрокаТаблицы = СтрокаТаблицы + 1;
									КонецЕсли;
									Если ЧтениеСтрокиXML.Имя = "w:tc" Тогда 
										НомерКолонки = НомерКолонки + 1;
									КонецЕсли;
					
									// В случае перезаполнения файла, этот тег пропускаем, чтобы не создавались лишние переводы строки.
									Если ЧтениеСтрокиXML.Имя = "w:cr" И ВозможенПереводСтроки Тогда
										ПереводСтроки = Истина;
										Продолжить;
									КонецЕсли;
					
									ЗаписьXML.ЗаписатьНачалоЭлемента(ЧтениеСтрокиXML.Имя);
									Если ЧтениеСтрокиXML.КоличествоАтрибутов() > 0 Тогда
										Пока ЧтениеСтрокиXML.ПрочитатьАтрибут() Цикл
											
											Если ФлагНайденоПоле И ЧтениеСтрокиXML.Имя = "w:name"
												И Найти(ЧтениеXML.Значение, "_GoBack") = 0 Тогда
												СтрПоиска = ЧтениеСтрокиXML.Значение;
											КонецЕсли;
											
											ЗаписьXML.ЗаписатьАтрибут(ЧтениеСтрокиXML.Имя, ЧтениеСтрокиXML.Значение);
										КонецЦикла
									КонецЕсли;
									
								ИначеЕсли ЧтениеСтрокиXML.ТипУзла = ТипУзлаXML.Текст Тогда
									Если ПереводСтроки И ВозможенПереводСтроки Тогда
										ЗаписьXML.ЗаписатьБезОбработки("");
										
									ИначеЕсли ФлагНайденоПоле И ФлагНайденаСтрока Тогда 
										
										СтрЗамены = ЧтениеСтрокиXML.Значение;
										БылаВыполненаЗамена = Ложь;
										Для Каждого НастройкаЗамены Из МассивДанныхДляАвтоЗамен Цикл
											ИмяРеквизита = Лев(НастройкаЗамены.ТермДляЗамены, 19) + "1";
											Если ИмяРеквизита <> СтрПоиска Тогда
												Продолжить;
											КонецЕсли;
											
											СтрЗамены = НастройкаЗамены.ЗначениеЗамены[СтрокаТаблицы - 2].Значение;
											БылаВыполненаЗамена = Истина;
											Прервать;
										КонецЦикла;
										
										Если БылаВыполненаЗамена И Найти(СтрЗамены, Символы.ПС) > 0 Тогда
											СтрЗамены = СтрЗаменить(СтрЗамены, Символы.ПС, "<w:cr/>");
											Если СтрЗамены <> ЧтениеСтрокиXML.Значение Тогда
												ЗаписьXML.ЗаписатьБезОбработки(СтрЗамены);
											Иначе
												ЗаписьXML.ЗаписатьТекст(СтрЗамены);
											КонецЕсли;
										Иначе
											ЗаписьXML.ЗаписатьТекст(СтрЗамены);
										КонецЕсли;
										
										СтрЗамены = "";
										ФлагНайденоПоле = Ложь;
									Иначе 
										ЗаписьXML.ЗаписатьТекст(ЧтениеСтрокиXML.Значение);
									КонецЕсли;
									
								ИначеЕсли ЧтениеСтрокиXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
									// В случае перезаполнения файла, этот тег пропускаем, чтобы не создавались лишние переводы строки.
									Если ЧтениеСтрокиXML.Имя = "w:cr" И ВозможенПереводСтроки Тогда
										Продолжить;
									КонецЕсли;
									
									Если ЧтениеСтрокиXML.Имя = "w:document" Тогда 
										Продолжить;
									КонецЕсли;
									
									ЗаписьXML.ЗаписатьКонецЭлемента();
									
									Если ФлагНайденоПоле И ЧтениеСтрокиXML.Имя = "w:bookmarkEnd" Тогда
										ФлагНайденоПоле = Ложь;
										СтрЗамены = "";
									КонецЕсли;
									Если ФлагНайденаСтрока Тогда
										ФлагНайденаСтрока = Ложь;
										СтрЗамены = "";
									КонецЕсли;
									
									Если ЧтениеСтрокиXML.Имя = "w:tr" Тогда 
										НомерКолонки = 0;
									КонецЕсли;
								КонецЕсли;
							КонецЦикла;
						
							ЧтениеСтрокиXML.Закрыть();
						КонецЦикла;
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
			
			Если ВозможенПереводСтроки И ЧтениеXML.Имя = "w:bookmarkEnd" Тогда
				ПереводСтроки = Ложь;
				ВозможенПереводСтроки = Ложь;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать
Прикрепленные файлы:
Шаблон.docx
4. soft_wind 16.02.19 22:27 Сейчас в теме
упс, вот это код у вас, у меня код по заполнению документа в ворде примерно строк 20 (без учета запроса собирающего данные для вывода)
вот где-то здесь, точнее (без отладчика) сказать трудно.

Если БылаВыполненаЗамена И Найти(СтрЗамены, Символы.ПС) > 0 Тогда
СтрЗамены = СтрЗаменить(СтрЗамены, Символы.ПС, "<w:cr/>");
Если СтрЗамены <> ЧтениеXML.Значение Тогда
ЗаписьXML.ЗаписатьБезОбработки(СтрЗамены);

Если ФлагНайденаСтрокаТаблицы Тогда
КопияСтрокиXML.ЗаписатьБезОбработки(СтрЗамены);
КонецЕсли;
Иначе
ЗаписьXML.ЗаписатьТекст(СтрЗамены);

Если ФлагНайденаСтрокаТаблицы Тогда
КопияСтрокиXML.ЗаписатьТекст(СтрЗамены);
КонецЕсли;
КонецЕсли;
Иначе
ЗаписьXML.ЗаписатьТекст(СтрЗамены);

Если ФлагНайденаСтрокаТаблицы Тогда
КопияСтрокиXML.ЗаписатьТекст(СтрЗамены);
КонецЕсли;
КонецЕсли;



а еще есть подозрение на данные, проверьте данные таблицу для замены с данными из вашей ТЧ, возможно в ней есть пустые строчки
5. user870565 17.02.19 13:28 Сейчас в теме
(4) Насчет пустых строк вы оказались правы, но теперь всплыла другая проблема: когда строк во второй таблице меньше, чем в первой на вот этой строке вылетает ошибка:
                                            СтрЗамены = НастройкаЗамены.ЗначениеЗамены[СтрокаТаблицы - 2].Значение;

Что в принципе логично, ведь, допустим, значений замены для 3 строки нет, когда в таблице их всего 2)
Я решила это просто через исключения обойти. Типа если столкнулись с такой ошибкой, значит, мы дошли до конца более короткой таблицы.
    СтрЗамены = ЧтениеСтрокиXML.Значение;
		БылаВыполненаЗамена = Ложь;
		КонецКороткойТаблицы = Ложь;
		Для Каждого НастройкаЗамены Из МассивДанныхДляАвтоЗамен Цикл
			ИмяРеквизита = Лев(НастройкаЗамены.ТермДляЗамены, 19) + "1";
			Если ИмяРеквизита <> СтрПоиска Тогда
		 	       Продолжить;
			КонецЕсли;
											
			Попытка 
				СтрЗамены = НастройкаЗамены.ЗначениеЗамены[СтрокаТаблицы - 2].Значение;
				БылаВыполненаЗамена = Истина;
			Исключение
				СтрЗамены = "";
				БылаВыполненаЗамена = Ложь;
				КонецКороткойТаблицы = Истина;  //если не получилось получить значение из таблицы, значит, в ней было меньше строк, чем в Товарах
			КонецПопытки;
			Прервать;
		КонецЦикла;								
		Если БылаВыполненаЗамена И Найти(СтрЗамены, Символы.ПС) > 0 Тогда
			СтрЗамены = СтрЗаменить(СтрЗамены, Символы.ПС, "<w:cr/>");
			Если СтрЗамены <> ЧтениеСтрокиXML.Значение Тогда
				ЗаписьXML.ЗаписатьБезОбработки(СтрЗамены);
			Иначе
				ЗаписьXML.ЗаписатьТекст(СтрЗамены);
			КонецЕсли;
		Иначе
			Если Не КонецКороткойТаблицы Тогда   //если для короткой таблицы ничего больше не записывать, то пустая строка в файл не попадет, думала я...
				ЗаписьXML.ЗаписатьТекст(СтрЗамены);
			КонецЕсли;
		КонецЕсли;
Показать

Но, короче, в итоге работает точно так же как изначально - пустые строки в файл для более короткой таблицы все равно записываются.
6. user1640706 11.01.24 09:47 Сейчас в теме
(5)Добрый день, вам случайно не удалось решить проблему с автозаполнением нескольких таблиц?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот