Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 04:51

Нужна Помощь в написании кода!!! Не типовая конфа. Управляемые формы. Работа с формой документа

Автор Кот_Леопольд, 18 янв 2019, 12:43

0 Пользователей и 1 гость просматривают эту тему.

Кот_Леопольд

Нужна Помощь в написании кода!!! Не типовая конфа. Управляемые формы.
Имеется справочник ТипДоговора в котором по мимо наименования есть табличная часть в которой храниться текст Договора разбитый на пункты. И есть документ Договор в котором при выборе Типа Договора и Контрагента должен формироваться печатная форма документа. Только при нажатии на кнопку печать выходит ошибка:
{Документ.Договоры.Форма.ФормаДокумента.Форма(72)}: Значение не является значением объектного типа (Скопировать)
   ТекущийТекстДоговора=ТекстДоговора.Скопировать();

Перем ТекстДоговора;

&НаСервере
Процедура  ЗаполнитьТекстДоговора()
Если ЗначениеЗаполнено(Объект.ТипДоговора) Тогда
        ТекстДоговора=Объект.ТипДоговора.ПунктыДоговора.Выгрузить();
        ПодписиНаСтраницах=Объект.ТипДоговора.ПунктыДоговора.Выгрузить();
        Подписи=Объект.ТипДоговора.Подписи.Выгрузить();
        ПодписьНаПоследнейСтранице=Объект.ТипДоговора.ПодписьНаПоследнейСтранице;
    КонецЕсли;
КонецПроцедуры


&НаСервере
Процедура ТипДоговораПриИзменении(Элемент)
ЗаполнитьТекстДоговора();
КонецПроцедуры           //ЗаполнитьТекстДоговора
&НаСервере
Процедура ПечатьНаСервере()
ЗаполнитьПараметры();
    УстановитьПараметры();
    ВычислитьВысотуПодписиИСтраницы();
    ТекущаяВысотаСтраницы=0;

    ТабДок=Новый ТабличныйДокумент;
    Макет=Документы.Договоры.ПолучитьМакет("Договор");
    ТекущийТекстДоговора=Новый ТаблицаЗначений;
ТекущийТекстДоговора=ТекстДоговора.Скопировать();
    Для каждого СтрокаДоговора из Объект.ИзмененныеПунктыДоговора Цикл
        ПараметрыПоиска=новый Структура;
        ПараметрыПоиска.Вставить("Пункт",СтрокаДоговора.Пункт);
        РезультатПоиска=ТекущийТекстДоговора.НайтиСтроки(ПараметрыПоиска);
        Если РезультатПоиска.Количество()>0 Тогда
            РезультатПоиска[0].Текст=СтрокаДоговора.Текст;
            РезультатПоиска[0].СимволФорматирования=СтрокаДоговора.СимволФорматирования;
            РезультатПоиска[0].Заголовок=СтрокаДоговора.Заголовок;
            РезультатПоиска[0].Положение=СтрокаДоговора.Положение;
          Иначе
            НоваяСтрока=ТекущийТекстДоговора.Добавить();
            НоваяСтрока.Текст= СтрокаДоговора.Текст;
            НоваяСтрока.Пункт= СтрокаДоговора.Пункт;
            НоваяСтрока.СимволФорматирования=СтрокаДоговора.СимволФорматирования;
            НоваяСтрока.Заголовок=СтрокаДоговора.Заголовок;
            НоваяСтрока.Положение=СтрокаДоговора.Положение;
        КонецЕсли;
    КонецЦикла;
ТекущийТекстДоговора.Сортировать("Пункт Возр");
    Для каждого СтрокаДоговора из ТекущийТекстДоговора Цикл
        Если Найти(СтрокаДоговора.Текст,"&")<>0 Тогда
            Для Каждого СтрокаПараметров из ТаблицаПараметров Цикл
                СтрокаДоговора.Текст=СтрЗаменить(СтрокаДоговора.Текст,"&"+СтрокаПараметров.Реквизит,СтрокаПараметров.Значение);   
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    ВременныйТекстДоговора=Новый ТаблицаЗначений;
    ВременныйТекстДоговора=ТекущийТекстДоговора.Скопировать();
    ТекущийТекстДоговора.Очистить();
      Для каждого ПунктДоговора из ВременныйТекстДоговора Цикл
        ТекстСтроки="";
        Если СтрДлина(ПунктДоговора.СимволФорматирования)>0 Тогда
            ТекстСтроки=ПунктДоговора.СимволФорматирования+ПунктДоговора.Текст;
        Иначе
            ТекстСтроки=ПунктДоговора.Пункт+" "+ПунктДоговора.Текст;
        КонецЕсли;
        РазложеннаяСтрока=ТаблицаСтрок(ТекстСтроки,ПунктДоговора.Положение);
        Для каждого СтрокаТаблицы из РазложеннаяСтрока Цикл
            НоваяСтрока=ТекущийТекстДоговора.Добавить();
            Если СтрокаТаблицы.Положение=Перечисления.ПоложениеНаСтраницеБМА.ПоШирине Тогда
                НоваяСтрока.Текст=ВыровнятьПоШирине(СтрокаТаблицы.Текст);
            Иначе
                НоваяСтрока.Текст=СтрокаТаблицы.Текст;   
            КонецЕсли;
            НоваяСтрока.Заголовок=ПунктДоговора.Заголовок;
            НоваяСтрока.Положение=СтрокаТаблицы.Положение;
        КонецЦикла;
    КонецЦикла;
    ВременныйТекстДоговора.Очистить();
    ПоследняяСтраница=ложь;
    ТекущаяВысотаСтраницы=0;
    Для каждого ПунктДоговора из ТекущийТекстДоговора Цикл
Если ТекущаяВысотаСтраницы Тогда
Если ПунктДоговора.Заголовок Тогда
                Область=Макет.ПолучитьОбласть("ТекстЗаголовка");   
            Иначе
                Область=Макет.ПолучитьОбласть("Текст");
            КонецЕсли;
            Область.Параметры.Текст=ПунктДоговора.Текст;
            ПоложениеНаСтранице(Область,ПунктДоговора.Положение);
            ТабДок.Вывести(Область);
            ТекущаяВысотаСтраницы=ТекущаяВысотаСтраницы+ВысотаСтроки;
        Иначе
            ТекущаяВысотаСтраницы=0;
            Остаток=ТекущийТекстДоговора.Количество()-1-ТекущийТекстДоговора.Индекс(ПунктДоговора);
            Если Остаток>0 Тогда
                ВывестиПодписи();
            КонецЕсли;
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();

        КонецЕсли;
    КонецЦикла;
    ВывестиРеквизиты();
    Если ПодписьНаПоследнейСтранице Тогда
        ВывестиПодписи();   
    КонецЕсли;
    ТабДок.ПолеСлева=15;
    ТабДок.ОтображатьЗаголовки=Ложь;
    ТабДОк.ОтображатьСетку=Ложь;
    ТабДок.Показать(Объект.ТипДоговора);
КонецПроцедуры


&НаКлиенте
Процедура Печать(Команда)
ПечатьНаСервере();
КонецПроцедуры


Так же прикреплю конф. 


wise

Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Кот_Леопольд


Кот_Леопольд

у меня такая же ошибка была при нажатии на кнопку шаблон я добавил туда процедуру ЗаполнитьТекстДоговора() и все заработало:
Перем ТекстДоговора;
&НаСервере
функция ШаблонНаСервере()
ЗаполнитьТекстДоговора();
ТабДок=Новый ТабличныйДокумент;
    Макет=Документы.Договоры.ПолучитьМакет("Договор");
ТекущийТекстДоговора=Новый ТаблицаЗначений;
ТекущийТекстДоговора=ТекстДоговора.Скопировать();
    Для каждого СтрокаТЧ из ТекстДоговора Цикл
        Область=Макет.ПолучитьОбласть("Текст");
        Область.Параметры.Текст=СтрокаТЧ.Пункт+СтрокаТЧ.Текст;
        ТабДок.Вывести(Область);
    КонецЦикла;   
    ТабДок.ОтображатьГруппировки=Ложь;
    ТабДок.ОтображатьЗаголовки=Ложь;
    ТабДок.ОтображатьСетку=Ложь;
    Возврат ТабДок;
Конецфункции

&НаКлиенте
Процедура Шаблон(Команда)
ТабДок = ШаблонНаСервере();
ТабДок.Показать("Шаблон "+СокрЛП(Объект.ТипДоговора));
КонецПроцедуры           //КомандаШаблон
&НаСервере
Процедура  ЗаполнитьТекстДоговора()
Если ЗначениеЗаполнено(Объект.ТипДоговора) Тогда
        ТекстДоговора=Объект.ТипДоговора.ПунктыДоговора.Выгрузить();
        ПодписиНаСтраницах=Объект.ТипДоговора.ПунктыДоговора.Выгрузить();
        Подписи=Объект.ТипДоговора.Подписи.Выгрузить();
        ПодписьНаПоследнейСтранице=Объект.ТипДоговора.ПодписьНаПоследнейСтранице;
    КонецЕсли;
КонецПроцедуры

А тут если добавляю процедуру  ЗаполнитьТекстДоговора() зацикливание происходит!!!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск