|
Ошибка при выводе печатной формы в формате word: Слишком длинный строковый параметр 1с | ☑ | ||
---|---|---|---|---|
0
Natali15
24.05.22
✎
15:54
|
Есть таблица товаров в счете покупателя, ее нужно вывести в строку через запятую, код написала такого вида:
Запрос1 = Новый Запрос(" |ВЫБРАТЬ | СчетНаОплатуПокупателюТовары.Ссылка КАК Ссылка, | СчетНаОплатуПокупателюТовары.Номенклатура КАК Номенклатура, | СчетНаОплатуПокупателюТовары.Номенклатура КАК НоменклатураНаименование |ИЗ | Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары |ГДЕ | СчетНаОплатуПокупателюТовары.Ссылка = &Ссылка"); Запрос1.УстановитьПараметр("Ссылка", СсылкаНаОбъект); РезультатЗапроса = Запрос1.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); НаименованиеТоваров = Новый Массив; Пока Выборка.Следующий() Цикл НаименованиеТоваров.Добавить(Выборка.НоменклатураНаименование); СтрокаИзМассива = СтрСоединить(НаименованиеТоваров, ", "); КонецЦикла; Replace = Doc.Content.Find; Структура.Вставить("FindText", "{НаименованиеТоваров}"); Replace.Execute(Структура.FindText,,,,,,,,,СтрокаИзМассива); Ошибка происходит на последней строчке если много товаров в таблице, в предприятии выдает "Слишком длинный строковый параметр 1с", как можно решить эту проблему? |
|||
1
PLUT
24.05.22
✎
16:03
|
(0) искать по частям. это фича
с3.14жжено откуда-то из тырнета //костыль: (Microsoft Word): String parameter too long ДлинаСтроки = СтрДлина(ТекстЗамены); //Высчитывает длину строки ТекущаяПозиция = 1; // Переменная позициии ( 1 символ ) Пока ТекущаяПозиция <= ДлинаСтроки Цикл // Делает проверку, если позиция меньше всей длины Замена.Execute( КлючПоиска, //строка поиска Ложь, //учитывать регистр Истина, //только слово целиком Ложь, //если искомый текст является особым оператором поиска Ложь, //для поиска слов, которые похожи на поиск текста Ложь, //чтобы операция поиска обнаружила все формы искомого текста Истина, //для поиска вперед , //Определяет, что происходит, если поиск начинается с точки, отличной от начала документа, и достигнут конец документа Ложь, Сред(ТекстЗамены, ТекущаяПозиция, 235) + КлючПоиска //Замещающий текст ); ТекущаяПозиция = ТекущаяПозиция + 235; // Прибавляет к текущий позиции 235 символов. КонецЦикла; Замена.Execute(КлючПоиска, Ложь, Истина, Ложь, , , Истина, , Ложь, ""); |
|||
2
PLUT
24.05.22
✎
16:06
|
(1) вернее "вставлять" по частям
|
|||
3
PLUT
24.05.22
✎
16:11
|
+(1) в вашем случае
КлючПоиска = "{НаименованиеТоваров}"; |
|||
4
Natali15
24.05.22
✎
16:33
|
(3) Да, видела этот код, но не понимаю, где именно мне нужно его применить, после цикла?
|
|||
5
PLUT
24.05.22
✎
16:34
|
(4) вот этот код творчески заменить на магию из (1)
Replace = Doc.Content.Find; Структура.Вставить("FindText", "{НаименованиеТоваров}"); Replace.Execute(Структура.FindText,,,,,,,,,СтрокаИзМассива); |
|||
6
Natali15
24.05.22
✎
16:34
|
(5) спасибо, сейчас попробую
|
|||
7
PLUT
24.05.22
✎
16:38
|
(6) адаптированный г.внокод для (5)
//костыль: (Microsoft Word): String parameter too long КлючПоиска = "{НаименованиеТоваров}"; ТекстЗамены = СтрокаИзМассива; Replace = Doc.Content.Find; Replace.ClearFormatting(); ДлинаСтроки = СтрДлина(ТекстЗамены);//Высчитывает длину строки ТекущаяПозиция = 1;// Переменная позициии ( 1 символ ) Пока ТекущаяПозиция <= ДлинаСтроки Цикл// Делает проверку, если позиция меньше всей длины Replace.Execute( КлючПоиска,//строка поиска Ложь, //учитывать регистр Истина, //только слово целиком Ложь, //если искомый текст является особым оператором поиска Ложь, //для поиска слов, которые похожи на поиск текста Ложь, //чтобы операция поиска обнаружила все формы искомого текста Истина, //для поиска вперед , //Определяет, что происходит, если поиск начинается с точки, отличной от начала документа, и достигнут конец документа Ложь, Сред(ТекстЗамены, ТекущаяПозиция, 235) + КлючПоиска//Замещающий текст ); ТекущаяПозиция = ТекущаяПозиция + 235;// Прибавляет к текущий позиции 235 символов. КонецЦикла; Replace.Execute(КлючПоиска, Ложь, Истина, Ложь, , , Истина, , Ложь, ""); |
|||
8
Natali15
24.05.22
✎
16:52
|
(7) Также эту же ошибку выдает
|
|||
9
PLUT
24.05.22
✎
16:53
|
(8) текст ашипки какой?
|
|||
10
Natali15
24.05.22
✎
16:56
|
||||
11
Natali15
24.05.22
✎
16:56
|
||||
12
Natali15
24.05.22
✎
16:58
|
(9) https://ibb.co/4sv8k55 на этом месте останавливается
|
|||
13
Выпрь
24.05.22
✎
17:02
|
заменять частями
наименование товара - стр1:стр2:стр3... и уже каждут стрN на свою подстроку |
|||
14
PLUT
24.05.22
✎
17:02
|
(12) попробуйте уменьшить длину "части" с 235 до 200 букв
//костыль: (Microsoft Word): String parameter too long КлючПоиска = "{НаименованиеТоваров}"; ТекстЗамены = СтрокаИзМассива; Replace = Doc.Content.Find; Replace.ClearFormatting(); ДлинаСтроки = СтрДлина(ТекстЗамены)//Высчитывает длину строки ТекущаяПозиция = 1// Переменная позициии ( 1 символ ) Пока ТекущаяПозиция <= ДлинаСтроки Цикл// Делает проверку, если позиция меньше всей длины Replace.Execute( КлючПоиска//строка поиска Ложь, //учитывать регистр Истина, //только слово целиком Ложь, //если искомый текст является особым оператором поиска Ложь, //для поиска слов, которые похожи на поиск текста Ложь, //чтобы операция поиска обнаружила все формы искомого текста Истина, //для поиска вперед , //Определяет, что происходит, если поиск начинается с точки, отличной от начала документа, и достигнут конец документа Ложь, Сред(ТекстЗамены, ТекущаяПозиция, 200) + КлючПоиска//Замещающий текст ); ТекущаяПозиция = ТекущаяПозиция + 200// Прибавляет к текущий позиции 200 символов. КонецЦикла; Replace.Execute(КлючПоиска, Ложь, Истина, Ложь, , , Истина, , Ложь, ""); |
|||
15
PLUT
24.05.22
✎
17:03
|
//костыль: (Microsoft Word): String parameter too long
КлючПоиска = "{НаименованиеТоваров}"; ТекстЗамены = СтрокаИзМассива; Replace = Doc.Content.Find; Replace.ClearFormatting(); ДлинаСтроки = СтрДлина(ТекстЗамены)//Высчитывает длину строки ТекущаяПозиция = 1// Переменная позициии ( 1 символ ) Пока ТекущаяПозиция <= ДлинаСтроки Цикл// Делает проверку, если позиция меньше всей длины Replace.Execute( КлючПоиска//строка поиска Ложь, //учитывать регистр Истина, //только слово целиком Ложь, //если искомый текст является особым оператором поиска Ложь, //для поиска слов, которые похожи на поиск текста Ложь, //чтобы операция поиска обнаружила все формы искомого текста Истина, //для поиска вперед , //Определяет, что происходит, если поиск начинается с точки, отличной от начала документа, и достигнут конец документа Ложь, Сред(ТекстЗамены, ТекущаяПозиция, 200) + КлючПоиска//Замещающий текст ); ТекущаяПозиция = ТекущаяПозиция + 200// Прибавляет к текущий позиции 200 символов. КонецЦикла; Replace.Execute(КлючПоиска, Ложь, Истина, Ложь, , , Истина, , Ложь, ""); |
|||
16
PLUT
24.05.22
✎
17:04
|
сцуко, что-то код при копипасте криво вставляется. попытка номер три
КлючПоиска = "{НаименованиеТоваров}"; ТекстЗамены = СтрокаИзМассива; Replace = Doc.Content.Find; Replace.ClearFormatting(); ДлинаСтроки = СтрДлина(ТекстЗамены);//Высчитывает длину строки ТекущаяПозиция = 1;// Переменная позициии ( 1 символ ) Пока ТекущаяПозиция <= ДлинаСтроки Цикл// Делает проверку, если позиция меньше всей длины Replace.Execute( КлючПоиска,//строка поиска Ложь, //учитывать регистр Истина, //только слово целиком Ложь, //если искомый текст является особым оператором поиска Ложь, //для поиска слов, которые похожи на поиск текста Ложь, //чтобы операция поиска обнаружила все формы искомого текста Истина, //для поиска вперед , //Определяет, что происходит, если поиск начинается с точки, отличной от начала документа, и достигнут конец документа Ложь, Сред(ТекстЗамены, ТекущаяПозиция, 200) + КлючПоиска//Замещающий текст ); ТекущаяПозиция = ТекущаяПозиция + 200; // Прибавляет к текущий позиции 200 символов. КонецЦикла; Replace.Execute(КлючПоиска, Ложь, Истина, Ложь, , , Истина, , Ложь, ""); |
|||
17
Natali15
24.05.22
✎
17:17
|
(14) Все получилось! Спасибо Вам. Объясните, пожалуйста, как повлияло уменьшение длины?
|
|||
18
PLUT
24.05.22
✎
17:22
|
(17) ну там магия 1С
поиском по {ШляпаКакаяТо} ищется позиция куда вставляем. берем из длинной строки только часть 200 символов и добавляем к этой части {ШляпаКакаяТо}. в найденную позицию вставляем эту часть со шляпой. и так в цикле, пока всё не вставим а в последней строке кода {ШляпаКакаяТо} заменяется на "" |
|||
19
PLUT
24.05.22
✎
17:24
|
а ноги растут отсюда:
При замене текста в файле Word, если количество символов вставляемого текста больше 255 возникает ошибка String Parameter too long. |
|||
20
ptiz
24.05.22
✎
17:32
|
Я так делаю:
Процедура ВывестиСтруктуруВWord(Структура, MSWord) Поиск = MSWord.Selection.Find; Поиск.Wrap = 1; Для каждого КлючИЗначение Из Структура Цикл MSWord.Selection.HomeKey(6); Результат = Поиск.Execute("[" + КлючИЗначение.Ключ + "]"); Пока Результат = Истина Цикл MSWord.Selection.Text = КлючИЗначение.Значение; MSWord.Selection.HomeKey(6); Результат = Поиск.Execute("[" + КлючИЗначение.Ключ + "]"); КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
21
PLUT
24.05.22
✎
17:33
|
(20) попробуй в своё "я так делаю" в структуру запихать что-то длиннее 255 символов (ну там строку длиной 500 к примеру)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |