Имя: Пароль:
1C
 
VBA
,
0 hawksib
 
20.02.15
04:44
{Форма.Форма.Форма(283)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft Word): Слишком длинный строковый параметр.

а вставляю я этот параметр в трех местах, и длина параметра всё время разная, как можно обойти?
1 Cube
 
20.02.15
04:47
(0) Не использовать "Слишком длинный строковый параметр".
Ваш КО http://sngservice.ru/cards/images/announce/9e2b115a.jpg
2 hawksib
 
20.02.15
04:58
нужен слишком длинный
3 MiniMuk
 
20.02.15
05:03
(2) причем тут VBA? использую 2 параметра.
4 hawksib
 
20.02.15
05:06
(3) а если два мало оказывается, три?
5 hawksib
 
20.02.15
05:06
а VBA при том, что может какой другой метод есть
6 MiniMuk
 
20.02.15
05:15
Я вангую что замену в ворде делаешь.
И скороей всего Execute
Почитай тут
7 MiniMuk
 
20.02.15
05:15
8 hawksib
 
20.02.15
05:49
(6) ещё один капитан?
9 VladZ
 
20.02.15
05:53
Я для таких "длинных параметров" использую закладки. Там нет таких ограничений.
10 hawksib
 
20.02.15
06:01
(9) спасибо за подсказку, на днях попробую
11 DrZombi
 
гуру
20.02.15
07:22
(0) Покажи лучше сам код, что ты там куда вставляешь?
Может ты туда бацаешь Войну и Мир, а нм тут позх пудришь :)
12 DrZombi
 
гуру
20.02.15
07:23
(8) Нет не капитан, Телепат. По твой ошибке, все дело в твоих руках :)
13 hawksib
 
20.02.15
09:57
(12) ну по ошибке-то понятно, что Execute метод юзаю
(11) ну не войну и мир, просто анекдоты в договор вставляю
ну код пусть будет такой
&НаКлиенте
Процедура ПечатьДоговора(Вариант)
    МакетВФайл(Вариант).Записать(КаталогВременныхФайлов() + "contract" + Строка(Вариант) + ".dot");
    Попытка
        MsWord = Новый COMОбъект("Word.Application");
        MsWord.Documents.Add(КаталогВременныхФайлов() + "contract" + Строка(Вариант) + ".dot");
        Документ = MsWord.Documents(1);
        Замена = Документ.Content.Find;
        Замена.Execute("<TypeOfWork>", Ложь, Истина, Ложь, , , Истина, , Ложь, ВидРаботПоДоговору);
        Документ.Application.Visible = Истина;
        Сообщение = Новый СообщениеПользователю();
        Если Вариант < 1 Тогда
            Сообщение.Текст = "Акт напечатан";
        Иначе
            Сообщение.Текст = "Договор напечатан";
        КонецЕсли;
        Сообщение.Сообщить();
    Исключение
        Сообщение = Новый СообщениеПользователю();
        Сообщение.Текст = "не удалось сформировать документ :
        |" + ОписаниеОшибки();
        Сообщение.Сообщить();
        MsWord.Application.Quit();
        //Документ.Application.Quit();
    КонецПопытки;
КонецПроцедуры
14 hawksib
 
27.02.15
11:34
короче че-то с закладками экспериментировать не стал, сегодня во сне мне реально приснилось как надо в цикле заполнить договор, с учетом того, что я гуглил, и на этом же форуме нашел, что заменить в ворде строку больше 255 символов ни у кого не получалось, минут за 30, с учетом того что во сне думал, написал вот такую функцию (чтобы меняло наверняка, взял длину строки 100 символов)

&НаКлиенте
Функция РазбитьВидРаботПоСтрокам(ОстатокСтроки)
    Результат = Новый Структура;
    МассивСтрок = Новый Массив;
    Счетчик = 0;
    ПараметрыДляПечати = "";
    Пока СтрДлина(ОстатокСтроки) > 100 Цикл
        ПараметрыДляПечати = ПараметрыДляПечати + "<n" + Строка(Счетчик) + ">";
        СтрокаМассива = Лев(ОстатокСтроки, 100);
        МассивСтрок.Добавить(СтрокаМассива);
        ОстатокСтроки = Прав(ОстатокСтроки, СтрДлина(ОстатокСтроки) - 100);
        Счетчик = Счетчик + 1;
    КонецЦикла;
    ПараметрыДляПечати = ПараметрыДляПечати + "<n" + Строка(Счетчик) + ">";
    МассивСтрок.Добавить(ОстатокСтроки);
    Результат.Вставить("Параметры", ПараметрыДляПечати);
    Результат.Вставить("Строки", МассивСтрок);
    Возврат Результат;
КонецФункции

и исходную процедуру чуть чуть допилил

&НаКлиенте
Процедура ПечатьДоговора(Вариант)
    МакетВФайл(Вариант).Записать(КаталогВременныхФайлов() + "contract" + Строка(Вариант) + ".dot");
    ВидРабот = РазбитьВидРаботПоСтрокам(ВидРаботПоДоговору);
    Попытка
        MsWord = Новый COMОбъект("Word.Application");
        MsWord.Documents.Add(КаталогВременныхФайлов() + "contract" + Строка(Вариант) + ".dot");
        Документ = MsWord.Documents(1);
        Замена = Документ.Content.Find;
    Замена.Execute("<TypeOfWork>", Ложь, Истина, Ложь, , , Истина, , Ложь, ВидРабот.Параметры);
    Счетчик = 0;
    Для Каждого Строка Из ВидРабот.Строки Цикл
        Замена = Документ.Content.Find;
        Замена.Execute("<n" + Строка(Счетчик) + ">", Ложь, Истина, Ложь, , , Истина, , Ложь, Строка);
        Счетчик = Счетчик + 1;
    КонецЦикла;
        Документ.Application.Visible = Истина;
        Сообщение = Новый СообщениеПользователю();
        Если Вариант < 1 Тогда
            Сообщение.Текст = "Акт напечатан";
        Иначе
            Сообщение.Текст = "Договор напечатан";
        КонецЕсли;
        Сообщение.Сообщить();
    Исключение
        Сообщение = Новый СообщениеПользователю();
        Сообщение.Текст = "не удалось сформировать документ :
        |" + ОписаниеОшибки();
        Сообщение.Сообщить();
        MsWord.Application.Quit();
    КонецПопытки;
КонецПроцедуры

Всем спасибо