Меню

Ошибка при вызове метода контекста получитьобщиймакет

Ошибка при вызове метода «ПолучитьОбщийМакет»

Автор skif3005, 27 сен 2015, 14:00

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

Добрый день.
Не могу понять почему вылезает ошибка:
    {Форма.Форма.Форма(4)}: Ошибка при вызове метода контекста (ПолучитьОбщийМакет)
        Макет = ПолучитьОбщийМакет(Метаданные.ОбщиеМакеты);
    по причине:
    Недопустимое значение параметра (параметр номер ‘1’)

Код:
        ТабДокумент = Новый ТабличныйДокумент;
   Макет = ПолучитьОбщийМакет(«Реквизит»);
   ОбластьМакета = Макет.ПолучитьОбласть(«Шапка»);
   ОбластьМакета.Параметры.НаимКонтр = Объект.Контрагент.ПолноеНаименование();
   ТабДокумент.Вывести(ОбластьМакета);
   ТабДокумент.ТолькоПросмотр = Истина;
   ТабДокумент.ОтображатьСетку = Ложь;
   ТабДокумент.Показать();


НУ вы бы хоть логически думали бы. Вы таким способом получаете ВСЕ макеты, а не конкретный

ПолучитьОбщийМакет("ТОРГ12");

Помог? Нажми — Спасибо :)
skype: Soprov1C


ошибка — в одном коде
а потом пример — совсем другой код…

Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.


1C. «Недопустимое значение параметра» при вызове макета в расширении

Дано: 1С (в данном примере конфигурация 1С:Университет ПРОФ), платформа 8.3.10. Создано расширение, в котором к документу добавлен новый макет. В модуле менеджера документа есть процедура, формирующая печатную форму на базе макета. Необходимо было заменить данную процедуру (при помощи директивы расширения «&Вместо») и заменить вызов встроенного макета на наш, добавленный в расширение.
Проблема: при вызове добавленного макета в момент его печати в режиме «1С:Предприятие» возникала ошибка при получении макета:

{ЗаявлениеПоступающегоРасширение Документ.ЗаявлениеПоступающего.МодульМенеджера(176)}: Ошибка при вызове метода контекста (ПолучитьМакет)
Макет = Документы.ЗаявлениеПоступающего.ПолучитьМакет («Расш1_МакетЗаявлениеПоступающего»);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)

Код, вызывающий ошибку:

Варианты решения:

1. Добавить функцию, выполняемую на сервере, которая вызовет добавленный макет из документа:

&НаСервере

Функция ПолучитьМакетЗаявленияИзРасширения()

    Макет = Документы.ЗаявлениеПоступающего.ПолучитьМакет («Расш1_МакетЗаявлениеПоступающего»);

    Возврат Макет;

КонецФункции

А затем из заменяемой процедуры вызвать эту функцию:

(как оказалось этот способ не нужен. Причину читайте ниже)

2. Другой вариант — перенести макеты в общие и следующей командой вызвать (получить) макет из «Общие макеты»:

Макет = ПолучитьОбщийМакет («Расш1_МакетЗаявлениеПоступающего»);

——
Видимо это всё-таки какой-то глюк платформы (протестировано на 8.3.10.2252 и 8.3.10.2299), но если просто добавить пустой макет в общие макеты в расширении, то команда, ранее вызывавшая ошибку (ПолучитьМакет из макета документа без допфункций на сервере), начинает нормально работать. При удалении пустого общего макета, команда вызова макета из документа снова вызывает ошибку (даже если вынесена в функцию на сервере, как показано в способе 1).
Т.е. если всё-таки хочется сделать макеты нормально в документе (ожидая, что когда-нибудь этот глюк исправят), то нужно сделать макет-заглушку в общих макетах. Например:

При этом, если в расширении добавлено несколько макетов к документу, то «заглушки» достаточно только одной.

Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

   tip22

07.07.11 — 21:29

8.1  УТ после обновления перестала печататься внешняя печатная форма ..

ошибка такая

Не удалось сформировать внешнюю печатную форму!

Поле объекта не обнаружено (Ссылка) , печатную форму переподключал после обновления , код посмотрел вроде все нормально , что могло поменяться ?

Функция Печать()Экспорт

   
   
   Тип = «Счет»;

   
   ПараметрыПечати =ПолучитьПараметрыПечатиСчетаЗаказа(Тип);

   
   ТабДокумент = Новый ТабличныйДокумент;

   ТабДокумент.ИмяПараметровПечати = «ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказПокупателя_СчетЗаказ»;

   Макет = ПолучитьОбщийМакет(«СчетЗаказ1»);

   // Выводим шапку накладной

   Если Тип = «Счет» Тогда

       ОбластьМакета       = Макет.ПолучитьОбласть(«ЗаголовокСчета»);

       ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);

       ТабДокумент.Вывести(ОбластьМакета);

   КонецЕсли;

   ОбластьМакета = Макет.ПолучитьОбласть(«Заголовок»);

   ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);

   ТабДокумент.Вывести(ОбластьМакета);

   ОбластьМакета = Макет.ПолучитьОбласть(«Поставщик»);

   ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);

   ТабДокумент.Вывести(ОбластьМакета);

   ОбластьМакета = Макет.ПолучитьОбласть(«Покупатель»);

   ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);

   ТабДокумент.Вывести(ОбластьМакета);

   
   ОбластьНомера = Макет.ПолучитьОбласть(«ШапкаТаблицы|НомерСтроки»);

   ОбластьКодов  = Макет.ПолучитьОбласть(«ШапкаТаблицы|КолонкаКодов»);

   ОбластьДанных = Макет.ПолучитьОбласть(«ШапкаТаблицы|Данные»);

   ОбластьСкидок = Макет.ПолучитьОбласть(«ШапкаТаблицы|Скидка»);

   ОбластьСуммы  = Макет.ПолучитьОбласть(«ШапкаТаблицы|Сумма»);

   ОбластьТовар = Макет.ПолучитьОбласть(«ШапкаТаблицы|Товар»);

   Если Не ПараметрыПечати.ВыводитьКоды И ПараметрыПечати.ЕстьСкидки Тогда

       ОбластьТовар = Макет.ПолучитьОбласть(«ШапкаТаблицы|ТоварБезКодов»);

   ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И ПараметрыПечати.ВыводитьКоды Тогда

       ОбластьТовар = Макет.ПолучитьОбласть(«ШапкаТаблицы|ТоварБезСкидок»);

   ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И НЕ ПараметрыПечати.ВыводитьКоды Тогда

       ОбластьТовар = Макет.ПолучитьОбласть(«ШапкаТаблицы|ТоварБезКодовИСкидок»);

   КонецЕсли;

   ТабДокумент.Вывести(ОбластьНомера);

   Если ПараметрыПечати.ВыводитьКоды Тогда

       ОбластьКодов.Параметры.ИмяКолонкиКодов = ПараметрыПечати.ИмяКолонкиКодов;

       ТабДокумент.Присоединить(ОбластьКодов);

   КонецЕсли;

   ОбластьТовар.Параметры.Товар = «Товары (работы, услуги)»;

   ТабДокумент.Присоединить(ОбластьТовар);

   ТабДокумент.Присоединить(ОбластьДанных);

   Если ПараметрыПечати.ЕстьСкидки Тогда

       ТабДокумент.Присоединить(ОбластьСкидок);

   КонецЕсли;

   ТабДокумент.Присоединить(ОбластьСуммы);

   ОбластьНомера = Макет.ПолучитьОбласть(«Строка|НомерСтроки»);

   ОбластьКодов  = Макет.ПолучитьОбласть(«Строка|КолонкаКодов»);

   ОбластьДанных = Макет.ПолучитьОбласть(«Строка|Данные»);

   ОбластьСкидок = Макет.ПолучитьОбласть(«Строка|Скидка»);

   ОбластьСуммы  = Макет.ПолучитьОбласть(«Строка|Сумма»);

   ОбластьТовар = Макет.ПолучитьОбласть(«Строка|Товар»);

   Если Не ПараметрыПечати.ВыводитьКоды И ПараметрыПечати.ЕстьСкидки Тогда

       ОбластьТовар = Макет.ПолучитьОбласть(«Строка|ТоварБезКодов»);

   ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И ПараметрыПечати.ВыводитьКоды Тогда

       ОбластьТовар = Макет.ПолучитьОбласть(«Строка|ТоварБезСкидок»);

   ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И НЕ ПараметрыПечати.ВыводитьКоды Тогда

       ОбластьТовар = Макет.ПолучитьОбласть(«Строка|ТоварБезКодовИСкидок»);

   КонецЕсли;

   Для каждого ПараметрыПозиции Из ПараметрыПечати.Позиции Цикл

       Если не ЗначениеЗаполнено(ПараметрыПозиции.Номенклатура) Тогда

           Сообщить(«В одной из строк не заполнено значение номенклатуры — строка при печати пропущена.», СтатусСообщения.Важное);

           Продолжить;

       КонецЕсли;

       ОбластьНомера.Параметры.Заполнить(ПараметрыПозиции);

       ТабДокумент.Вывести(ОбластьНомера);

       Если ПараметрыПечати.ВыводитьКоды Тогда

           ОбластьКодов.Параметры.Заполнить(ПараметрыПозиции);

           ТабДокумент.Присоединить(ОбластьКодов);

       КонецЕсли;

       ОбластьТовар.Параметры.Заполнить(ПараметрыПозиции);

       ТабДокумент.Присоединить(ОбластьТовар);

       ОбластьДанных.Параметры.Заполнить(ПараметрыПозиции);

       ТабДокумент.Присоединить(ОбластьДанных);

       Если ПараметрыПечати.ЕстьСкидки Тогда

           ОбластьСкидок.Параметры.Заполнить(ПараметрыПозиции);

           ТабДокумент.Присоединить(ОбластьСкидок);

       КонецЕсли;

       ОбластьСуммы.Параметры.Заполнить(ПараметрыПозиции);

       ТабДокумент.Присоединить(ОбластьСуммы);

       
   КонецЦикла;

   // Вывести Итого

   ОбластьНомера = Макет.ПолучитьОбласть(«Итого|НомерСтроки»);

   ОбластьКодов  = Макет.ПолучитьОбласть(«Итого|КолонкаКодов»);

   ОбластьДанных = Макет.ПолучитьОбласть(«Итого|Данные»);

   ОбластьСкидок = Макет.ПолучитьОбласть(«Итого|Скидка»);

   ОбластьСуммы  = Макет.ПолучитьОбласть(«Итого|Сумма»);

   ОбластьТовар = Макет.ПолучитьОбласть(«Итого|Товар»);

   Если Не ПараметрыПечати.ВыводитьКоды И ПараметрыПечати.ЕстьСкидки Тогда

       ОбластьТовар = Макет.ПолучитьОбласть(«Итого|ТоварБезКодов»);

   ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И ПараметрыПечати.ВыводитьКоды Тогда

       ОбластьТовар = Макет.ПолучитьОбласть(«Итого|ТоварБезСкидок»);

   ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И НЕ ПараметрыПечати.ВыводитьКоды Тогда

       ОбластьТовар = Макет.ПолучитьОбласть(«Итого|ТоварБезКодовИСкидок»);

   КонецЕсли;

   ТабДокумент.Вывести(ОбластьНомера);

   Если ПараметрыПечати.ВыводитьКоды Тогда

       ТабДокумент.Присоединить(ОбластьКодов);

   КонецЕсли;

   ТабДокумент.Присоединить(ОбластьТовар);

   ТабДокумент.Присоединить(ОбластьДанных);

   Если ПараметрыПечати.ЕстьСкидки Тогда

       ОбластьСкидок.Параметры.Заполнить(ПараметрыПечати);

       ТабДокумент.Присоединить(ОбластьСкидок);

   КонецЕсли;

   ОбластьСуммы.Параметры.Заполнить(ПараметрыПечати);

   ТабДокумент.Присоединить(ОбластьСуммы);

   // Вывести ИтогоНДС

   Если ПараметрыПечати.УчитыватьНДС Тогда

       ОбластьНомера = Макет.ПолучитьОбласть(«ИтогоНДС|НомерСтроки»);

       ОбластьКодов  = Макет.ПолучитьОбласть(«ИтогоНДС|КолонкаКодов»);

       ОбластьДанных = Макет.ПолучитьОбласть(«ИтогоНДС|Данные»);

       ОбластьСкидок = Макет.ПолучитьОбласть(«ИтогоНДС|Скидка»);

       ОбластьСуммы  = Макет.ПолучитьОбласть(«ИтогоНДС|Сумма»);

       ОбластьТовар = Макет.ПолучитьОбласть(«ИтогоНДС|Товар»);

       Если Не ПараметрыПечати.ВыводитьКоды И ПараметрыПечати.ЕстьСкидки Тогда

           ОбластьТовар = Макет.ПолучитьОбласть(«ИтогоНДС|ТоварБезКодов»);

       ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И ПараметрыПечати.ВыводитьКоды Тогда

           ОбластьТовар = Макет.ПолучитьОбласть(«ИтогоНДС|ТоварБезСкидок»);

       ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И НЕ ПараметрыПечати.ВыводитьКоды Тогда

           ОбластьТовар = Макет.ПолучитьОбласть(«ИтогоНДС|ТоварБезКодовИСкидок»);

       КонецЕсли;

       ТабДокумент.Вывести(ОбластьНомера);

       Если ПараметрыПечати.ВыводитьКоды Тогда

           ТабДокумент.Присоединить(ОбластьКодов);

       КонецЕсли;

       ОбластьТовар.Параметры.Заполнить(ПараметрыПечати);

       ТабДокумент.Присоединить(ОбластьТовар);

       ОбластьДанных.Параметры.Заполнить(ПараметрыПечати);

       ТабДокумент.Присоединить(ОбластьДанных);

       Если ПараметрыПечати.ЕстьСкидки Тогда

           ТабДокумент.Присоединить(ОбластьСкидок);

       КонецЕсли;

       ОбластьСуммы.Параметры.Заполнить(ПараметрыПечати);

       ТабДокумент.Присоединить(ОбластьСуммы);

       
       ОбластьНомера = Макет.ПолучитьОбласть(«ВсегоКОплате|НомерСтроки»);

       ОбластьКодов  = Макет.ПолучитьОбласть(«ВсегоКОплате|КолонкаКодов»);

       ОбластьДанных = Макет.ПолучитьОбласть(«ВсегоКОплате|Данные»);

       ОбластьСкидок = Макет.ПолучитьОбласть(«ВсегоКОплате|Скидка»);

       ОбластьСуммы  = Макет.ПолучитьОбласть(«ВсегоКОплате|Сумма»);

       ОбластьТовар = Макет.ПолучитьОбласть(«ВсегоКОплате|Товар»);

       Если Не ПараметрыПечати.ВыводитьКоды И ПараметрыПечати.ЕстьСкидки Тогда

           ОбластьТовар = Макет.ПолучитьОбласть(«ВсегоКОплате|ТоварБезКодов»);

       ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И ПараметрыПечати.ВыводитьКоды Тогда

           ОбластьТовар = Макет.ПолучитьОбласть(«ВсегоКОплате|ТоварБезСкидок»);

       ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И НЕ ПараметрыПечати.ВыводитьКоды Тогда

           ОбластьТовар = Макет.ПолучитьОбласть(«ВсегоКОплате|ТоварБезКодовИСкидок»);

       КонецЕсли;

       ТабДокумент.Вывести(ОбластьНомера);

       Если ПараметрыПечати.ВыводитьКоды Тогда

           ТабДокумент.Присоединить(ОбластьКодов);

       КонецЕсли;

       ОбластьТовар.Параметры.Заполнить(ПараметрыПечати);

       ТабДокумент.Присоединить(ОбластьТовар);

       ОбластьДанных.Параметры.Заполнить(ПараметрыПечати);

       ТабДокумент.Присоединить(ОбластьДанных);

       Если ПараметрыПечати.ЕстьСкидки Тогда

           ТабДокумент.Присоединить(ОбластьСкидок);

       КонецЕсли;

       ОбластьСуммы.Параметры.Заполнить(ПараметрыПечати);

       ТабДокумент.Присоединить(ОбластьСуммы);

       
   КонецЕсли;

   // Вывести Сумму прописью

   ОбластьМакета = Макет.ПолучитьОбласть(«СуммаПрописью»);

   ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);

   ТабДокумент.Вывести(ОбластьМакета);

   // Вывести подписи

   Если Тип = «Счет» Тогда

       ОбластьМакета = Макет.ПолучитьОбласть(«ПодвалСчета»);

   Иначе

       ОбластьМакета = Макет.ПолучитьОбласть(«ПодвалЗаказа»);

   КонецЕсли;

   
   ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);

   
   ТабДокумент.Вывести(ОбластьМакета);

   Возврат ТабДокумент;

КонецФункции // ПечатьАктаОбОказанииУслуг()

// Функция помещает в структуру все данные, отображаемые при печати документа.

// Вызывается из функции ПечатьСчетаЗаказа и из веб-приложения

//

// Параметры:

//  Тип — строка, содержит тип печатаемого документа (счет или заказ)

//

// Возвращаемое значение:

//  Структура

//

Функция ПолучитьПараметрыПечатиСчетаЗаказа(Тип)    

   
   ПараметрыПечати = Новый Структура;

   Позиции = Новый Массив;

   Запрос = Новый Запрос;

   Запрос.УстановитьПараметр(«ТекущийДокумент», ЭтотОбъект.Ссылка);

   Запрос.УстановитьПараметр(«ПустойКонтрагент», Справочники.Контрагенты.ПустаяСсылка());

   Запрос.Текст =»

   |ВЫБРАТЬ

   |    Номер,

   |    Дата,

   |    ДоговорКонтрагента,

   |    Организация,

   |    Контрагент КАК Получатель,

   |    ДоговорКонтрагента КАК ДоговорКонтрагента,

   |    ВЫБОР КОГДА Грузоотправитель = &ПустойКонтрагент

   |          ТОГДА Организация

   |          ИНАЧЕ Грузоотправитель КОНЕЦ КАК Грузоотправитель,

   |    ВЫБОР КОГДА Грузополучатель = &ПустойКонтрагент

   |          ТОГДА Контрагент

   |          ИНАЧЕ Грузополучатель КОНЕЦ КАК Грузополучатель,

   |    Организация КАК Руководители,

   |    Организация КАК Поставщик,

   |    СуммаДокумента,

   |    ВалютаДокумента,

   |    УчитыватьНДС,

   |    СуммаВключаетНДС

   |ИЗ

   |    Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю

   |

   |ГДЕ

   |    СчетНаОплатуПокупателю.Ссылка = &ТекущийДокумент»;

   Шапка = Запрос.Выполнить().Выбрать();

   Шапка.Следующий();

   СтрокаВыборкиПоляСодержания = ОбработкаТабличныхЧастей.ПолучитьЧастьЗапросаДляВыбораСодержания(«СчетНаОплату»);

   
   Запрос = Новый Запрос;

   Запрос.УстановитьПараметр(«ТекущийДокумент», СсылкаНаОбъект);

   Запрос.Текст = «ВЫБРАТЬ

   |    ВложенныйЗапрос.Номенклатура,

   |    ВЫРАЗИТЬ (ВложенныйЗапрос.Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК НаименованиеПолное,

   |    ВложенныйЗапрос.Номенклатура.Код                КАК Код,

   |    ВложенныйЗапрос.Номенклатура.Артикул            КАК Артикул,

   |    ВложенныйЗапрос.Количество,

   |    ВложенныйЗапрос.ЕдиницаИзмерения.Представление  КАК ЕдиницаИзмерения,

   |    ВложенныйЗапрос.ПроцентСкидкиНаценки

   |    + ВложенныйЗапрос.ПроцентАвтоматическихСкидок   КАК Скидка,

   |    ВложенныйЗапрос.Цена,

   |    ВложенныйЗапрос.Сумма,

   |    ВложенныйЗапрос.СуммаНДС,

   |    ВложенныйЗапрос.Характеристика,

   |    NULL                           КАК Серия,

   |    ВложенныйЗапрос.НомерСтроки    КАК НомерСтроки,

   |    ВложенныйЗапрос.Метка          КАК Метка

   |ИЗ

   |    (ВЫБРАТЬ

   |        СчетНаОплату.Номенклатура               КАК Номенклатура,

   |        СчетНаОплату.ЕдиницаИзмерения           КАК ЕдиницаИзмерения,

   |        СчетНаОплату.ПроцентСкидкиНаценки       КАК ПроцентСкидкиНаценки,

   |        СчетНаОплату.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,

   |        СчетНаОплату.Цена КАК Цена,

   |        СУММА(СчетНаОплату.Количество)          КАК Количество,

   |        СУММА(СчетНаОплату.Сумма)               КАК Сумма,

   |        СУММА(СчетНаОплату.СуммаНДС)            КАК СуммаНДС,

   |        СчетНаОплату.ХарактеристикаНоменклатуры КАК Характеристика,

   |        МИНИМУМ(СчетНаОплату.НомерСтроки)       КАК НомерСтроки,

   |        0 КАК Метка

   |    ИЗ

   |        Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплату

   |    

   |    ГДЕ

   |        СчетНаОплату.Ссылка = &ТекущийДокумент

   |    

   |    СГРУППИРОВАТЬ ПО

   |        СчетНаОплату.Номенклатура,

   |        СчетНаОплату.ЕдиницаИзмерения,

   |        СчетНаОплату.ПроцентСкидкиНаценки,

   |        СчетНаОплату.ПроцентАвтоматическихСкидок,

   |        СчетНаОплату.Цена,

   |        СчетНаОплату.ХарактеристикаНоменклатуры

   |        ) КАК ВложенныйЗапрос

   |

   |ОБЪЕДИНИТЬ ВСЕ

   |

   |ВЫБРАТЬ

   |    СчетНаОплату.Номенклатура,

   |    Минимум(» + СтрокаВыборкиПоляСодержания + «) КАК Товар,

   |    СчетНаОплату.Номенклатура.Код     КАК Код,

   |    СчетНаОплату.Номенклатура.Артикул КАК Артикул,

   |    Сумма(СчетНаОплату.Количество),

   |    СчетНаОплату.Номенклатура.ЕдиницаХраненияОстатков,

   |    СчетНаОплату.ПроцентСкидкиНаценки + СчетНаОплату.ПроцентАвтоматическихСкидок,

   |    СчетНаОплату.Цена,

   |    Сумма(СчетНаОплату.Сумма),

   |    Сумма(СчетНаОплату.СуммаНДС),

   |    NULL,

   |    NULL,

   |    Минимум(СчетНаОплату.НомерСтроки),

   |    1

   |ИЗ

   |    Документ.СчетНаОплатуПокупателю.Услуги КАК СчетНаОплату

   |

   |ГДЕ

   |    СчетНаОплату.Ссылка = &ТекущийДокумент

   |    СГРУППИРОВАТЬ ПО

   |        СчетНаОплату.Номенклатура,

   |        СчетНаОплату.ПроцентСкидкиНаценки,

   |        СчетНаОплату.ПроцентАвтоматическихСкидок,

   |        СчетНаОплату.Цена

   |

   |УПОРЯДОЧИТЬ ПО

   |    Метка,

   |    НомерСтроки»;

   ЗапросТовары = Запрос.Выполнить().Выгрузить();

   // Выводим шапку накладной

   ПараметрыПечати.Вставить(«УчитыватьНДС», Шапка.УчитыватьНДС);

   ПараметрыПечати.Вставить(«ДоговорКонтрагента», Шапка.ДоговорКонтрагента);

   СведенияОПоставщике = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Поставщик, Шапка.Дата);

   Если Тип = «Счет» Тогда

       ПараметрыПечати.Вставить(«ИНН», СведенияОПоставщике.ИНН);

       ПараметрыПечати.Вставить(«КПП», СведенияОПоставщике.КПП);

       ПредставлениеПоставщикаДляПлатПоручения = «»;

       Если ТипЗнч(СсылкаНаОбъект.СтруктурнаяЕдиница) = Тип(«СправочникСсылка.БанковскиеСчета») Тогда

           Банк       = ?(не ЗначениеЗаполнено(СсылкаНаОбъект.СтруктурнаяЕдиница.БанкДляРасчетов), СсылкаНаОбъект.СтруктурнаяЕдиница.Банк, СсылкаНаОбъект.СтруктурнаяЕдиница.БанкДляРасчетов);

           БИК        = Банк.Код;

           КоррСчет   = Банк.КоррСчет;

           ГородБанка = Банк.Город;

           НомерСчета = СсылкаНаОбъект.СтруктурнаяЕдиница.НомерСчета;

           ПараметрыПечати.Вставить(«БИКБанкаПолучателя», БИК);

           ПараметрыПечати.Вставить(«БанкПолучателя», Банк);

           ПараметрыПечати.Вставить(«БанкПолучателяПредставление», СокрЛП(Банк) + » » + ГородБанка);

           ПараметрыПечати.Вставить(«СчетБанкаПолучателя», КоррСчет);

           ПараметрыПечати.Вставить(«СчетБанкаПолучателяПредставление», КоррСчет);

           ПараметрыПечати.Вставить(«СчетПолучателяПредставление», НомерСчета);

           ПараметрыПечати.Вставить(«СчетПолучателя», НомерСчета);

           ПредставлениеПоставщикаДляПлатПоручения = СсылкаНаОбъект.СтруктурнаяЕдиница.ТекстКорреспондента;

       КонецЕсли;

       Если ПустаяСтрока(ПредставлениеПоставщикаДляПлатПоручения) Тогда

           ПредставлениеПоставщикаДляПлатПоручения = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, «ПолноеНаименование,»);

       КонецЕсли;

       ПараметрыПечати.Вставить(«ПредставлениеПоставщикаДляПлатПоручения», ПредставлениеПоставщикаДляПлатПоручения);

   КонецЕсли;

   ПараметрыПечати.Вставить(«ТекстЗаголовка», ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, «Счет на оплату»));

   ПараметрыПечати.Вставить(«ТекстПоставщик», ?(Тип = «Счет», «Поставщик:», «Исполнитель:»));

   ПараметрыПечати.Вставить(«ПредставлениеПоставщика», ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.Дата), «ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,»));

   Если Шапка.Организация = Шапка.Грузоотправитель Тогда

       ПараметрыПечати.Вставить(«ПредставлениеГрузоотправителя», ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.Дата), «ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,»));

   Иначе

       ПараметрыПечати.Вставить(«ПредставлениеГрузоотправителя», ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Грузоотправитель, Шапка.Дата), «ПолноеНаименование,ИНН,КПП,ФактическийАдрес,Телефоны,»));

   КонецЕсли;

   СведенияОПолучателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата);

   ПараметрыПечати.Вставить(«ТекстПокупатель», ?(Тип = «Счет», «Покупатель:», «Заказчик:»));

   ПараметрыПечати.Вставить(«ПредставлениеПолучателя», ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата), «ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,»));

   ПараметрыПечати.Вставить(«ПредставлениеГрузополучателя», ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Грузополучатель, Шапка.Дата), «ПолноеНаименование,ИНН,КПП,ФактическийАдрес,Телефоны,»));

   ПараметрыПечати.Вставить(«ЕстьСкидки», Ложь);

   Для каждого ВыборкаСтрокТовары Из ЗапросТовары Цикл

       Если ЗначениеЗаполнено(ВыборкаСтрокТовары.Скидка) Тогда

           ПараметрыПечати.ЕстьСкидки = Истина;

           Прервать;

       КонецЕсли;

   КонецЦикла;

   ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();

   ПараметрыПечати.Вставить(«ВыводитьКоды», Ложь);

   Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда

       ПараметрыПечати.ВыводитьКоды = Истина;

       Колонка = «Артикул»;

   ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда

       ПараметрыПечати.ВыводитьКоды = Истина;

       Колонка = «Код»;

   КонецЕсли;

   
   Если ПараметрыПечати.ВыводитьКоды Тогда

       ПараметрыПечати.Вставить(«ИмяКолонкиКодов», Колонка);

   КонецЕсли;

   Сумма    = 0;

   СуммаНДС = 0;

   ВсегоСкидок    = 0;

   ВсегоБезСкидок = 0;

   Для каждого ВыборкаСтрокТовары Из ЗапросТовары Цикл

       
       ПараметрыПозиции = Новый Структура;

       ПараметрыПозиции.Вставить(«Номенклатура», ВыборкаСтрокТовары.Номенклатура);

       ПараметрыПозиции.Вставить(«НомерСтроки», ЗапросТовары.Индекс(ВыборкаСтрокТовары) + 1);

       Если ПараметрыПечати.ВыводитьКоды Тогда

           Если Колонка = «Артикул» Тогда

               ПараметрыПозиции.Вставить(«Артикул», ВыборкаСтрокТовары.Артикул);

           Иначе

               ПараметрыПозиции.Вставить(«Артикул», ВыборкаСтрокТовары.Код);

           КонецЕсли;

       КонецЕсли;

       ПараметрыПозиции.Вставить(«Количество», ВыборкаСтрокТовары.Количество);

       ПараметрыПозиции.Вставить(«ЕдиницаИзмерения», ВыборкаСтрокТовары.ЕдиницаИзмерения);

       ПараметрыПозиции.Вставить(«Цена», ВыборкаСтрокТовары.Цена);

       ПараметрыПозиции.Вставить(«Товар», СокрП(ВыборкаСтрокТовары.НаименованиеПолное)

                                                   + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары));

       Скидка = Ценообразование.ПолучитьСуммуСкидки(ВыборкаСтрокТовары.Сумма, ВыборкаСтрокТовары.Скидка);

       Если ПараметрыПечати.ЕстьСкидки Тогда

           ПараметрыПозиции.Вставить(«Скидка», Скидка);

           ПараметрыПозиции.Вставить(«СуммаБезСкидки», ВыборкаСтрокТовары.Сумма + Скидка);

       КонецЕсли;

       ПараметрыПозиции.Вставить(«Сумма», ВыборкаСтрокТовары.Сумма);

       
       Сумма          = Сумма       + ВыборкаСтрокТовары.Сумма;

       СуммаНДС       = СуммаНДС    + ВыборкаСтрокТовары.СуммаНДС;

       ВсегоСкидок    = ВсегоСкидок + Скидка;

       ВсегоБезСкидок = Сумма       + ВсегоСкидок;

       #Если ВнешнееСоединение Тогда

       WEBПриложения.ПодготовитьСтруктуруДляВнешнегоСоединения(ПараметрыПозиции);

       #КонецЕсли

       Позиции.Добавить(ПараметрыПозиции);

   КонецЦикла;

   
   ПараметрыПечати.Вставить(«Позиции», Позиции);

   // Вывести Итого

   Если ПараметрыПечати.ЕстьСкидки Тогда

       ПараметрыПечати.Вставить(«ВсегоСкидок», ВсегоСкидок);

       ПараметрыПечати.Вставить(«ВсегоБезСкидок», ВсегоБезСкидок);

   КонецЕсли;

   ПараметрыПечати.Вставить(«Всего», ОбщегоНазначения.ФорматСумм(Сумма));

   // Вывести ИтогоНДС

   Если ПараметрыПечати.УчитыватьНДС Тогда

       ПараметрыПечати.Вставить(«НДС», ?(Шапка.СуммаВключаетНДС, «В том числе НДС:», «Сумма НДС:»));

       ПараметрыПечати.Вставить(«ВсегоНДС», ОбщегоНазначения.ФорматСумм(ЗапросТовары.Итог(«СуммаНДС»)));

       ПараметрыПечати.Вставить(«ВсегоКОплате», ОбщегоНазначения.ФорматСумм(Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС)));

   КонецЕсли;

   // Вывести Сумму прописью

   СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);

   ПараметрыПечати.Вставить(«ИтоговаяСтрока», «Всего наименований » + ЗапросТовары.Количество()

   + «, на сумму » + ОбщегоНазначения.ФорматСумм(СуммаКПрописи, Шапка.ВалютаДокумента));

   ПараметрыПечати.Вставить(«СуммаПрописью», ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, Шапка.ВалютаДокумента));

   // Вывести подписи

   Если Тип = «Счет» Тогда

       Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизации(Шапка.Руководители, Шапка.Дата,);

       Руководитель = Руководители.Руководитель;

       ДолжностьРуководителя = Руководители.РуководительДолжность;

       Бухгалтер    = Руководители.ГлавныйБухгалтер;

       
       ПараметрыПечати.Вставить(«ФИОРуководителя»,        Руководитель);

       ПараметрыПечати.Вставить(«ДолжностьРуководителя»,    ДолжностьРуководителя);

       ПараметрыПечати.Вставить(«ФИОБухгалтера»,            Бухгалтер);

       ПараметрыПечати.Вставить(«ФИОИсполнителя»,            СсылкаНаОбъект.Ответственный);

       
       Если НЕ ЗначениеЗаполнено(СсылкаНаОбъект.Ответственный.ФизЛицо) Тогда

           ФИООтветственный = СокрЛП(СсылкаНаОбъект.Ответственный);  

       Иначе

           ФамилияИмяОтчествоФизЛица           = ФормированиеПечатныхФорм.ФамилияИмяОтчество(СсылкаНаОбъект.Ответственный.ФизЛицо, Шапка.Дата);

           ФамилияИмяОтчествоОтветственного = ФамилияИмяОтчествоФизЛица.Фамилия + » » + ФамилияИмяОтчествоФизЛица.Имя + » » + ФамилияИмяОтчествоФизЛица.Отчество;

           ФИООтветственный                 = ОбщегоНазначения.ФамилияИнициалыФизЛица(ФамилияИмяОтчествоОтветственного);

       КонецЕсли;

       ПараметрыПечати.Вставить(«ФИООтветственный», ФИООтветственный);

   КонецЕсли;

   #Если ВнешнееСоединение Тогда

   WEBПриложения.ПодготовитьСтруктуруДляВнешнегоСоединения(ПараметрыПечати);

   #КонецЕсли

   Возврат ПараметрыПечати;

КонецФункции //ПолучитьПараметрыПечатиСчетаЗаказа()

В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:


	 Запрос = Новый Запрос;
	 Запрос.Текст =
	         "ВЫБРАТЬ
	          |        Номенклатура.Ссылка КАК Ссылка,
	          |        Номенклатура.ВерсияДанных КАК ВерсияДанных,
	          |        Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	          |        Номенклатура.Родитель КАК Родитель,
	          |        Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	          |        Номенклатура.Код КАК Код,
	          |        Номенклатура.Наименование КАК Наименование,
	          |        Номенклатура.Артикул КАК Артикул,
	          |        Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	          |        Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	          |        Номенклатура.Предопределенный КАК Предопределенный,
	          |        Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	          |ИЗ
	          |        Справочник.Номенклатура КАК Номенклатура
	          |ГДЕ
	          |         ";
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 КонецЦикла;
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.


	 Запрос = Новый Запрос;
	            Запрос.Текст =
	                       "ВЫБРАТЬ
	                        |          Номенклатура.Ссылка КАК Ссылка,
	                        |          Номенклатура.ВерсияДанных КАК ВерсияДанных,
	                        |          Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	                        |          Номенклатура.Родитель КАК Родитель,
	                        |          Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	                        |          Номенклатура.Код КАК Код,
	                        |          Номенклатура.Наименование КАК Наименование,
	                        |          Номенклатура.Артикул КАК Артикул,
	                        |          Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                        |          Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                        |          Номенклатура.Предопределенный КАК Предопределенный,
	                        |          Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	                        |ИЗ
	                        |          Справочник.Номенклатура КАК Номенклатура
	                        |ГДЕ
	                        |          НЕ Номенклатура.ЭтоГруппа ";
	 НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
	 КонецЦикла;
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Рис.3 Синтакс-помощник
Рис.3 Синтакс-помощник

В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает
Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

1

2

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Лянка

Дата регистрации: 05.08.2010
Сообщений: 124

«Добрый день! Создаю внешнюю печатную форму Заявка на расходование средств.<br>Проверяю модуль на синтаксические ошибки говорит что нет ошибок<br><br>Функция ПечатьЗаявка() Экспорт<br> <br> <br> СсылкаНаОбъект.РасчетыСКонтрагентами = СсылкаНаОбъект.ВидОперации;<br> СсылкаНаОбъект.РасчетыСПодотчетником = СсылкаНаОбъект.ВидОперации;<br> <br> ТабДокумент = Новый ТабличныйДокумент;<br> ТабДокумент.ИмяПараметровПечати = «ПАРАМЕТРЫ_ПЕЧАТИ_ЗаявкаНаРасходованиеСредств»;<br> <br> Макет = ПолучитьМакет(«Заявка»);<br> Обл = Макет.ПолучитьОбласть(«Шапка»);<br> Обл.Параметры.ЗаголовокЗаявки=»»»»+ЭтотОбъект+СсылкаНаОбъект.Символы.ПС+СсылкаНаОбъект.ВидОперации;<br><br> Обл.Параметры.Заполнить(СсылкаНаОбъект);<br> ТабДокумент.Вывести(Обл);<br><br> <br> Если СсылкаНаОбъект.РасчетыСПодотчетником тогда<br> ОбластьСтрока = Макет.ПолучитьОбласть(«ТаблицаПодотчетник»);<br> ОбластьСтрока.Параметры.ДолгПодотчетника =СсылкаНаОбъект.Ссылка;<br> Иначе<br> ОбластьСтрока = Макет.ПолучитьОбласть(«ТаблицаКонтрагент»);<br> КонецЕсли;<br> ОбластьСтрока.Параметры.Заполнить(ЭтотОбъект);<br> <br> <br> <br><br> ТабДокумент.Вывести(ОбластьСтрока);<br> <br> <br> Обл = Макет.ПолучитьОбласть(«Подвал»);<br> Обл.Параметры.Заполнить(СсылкаНаОбъект);<br> Обл.Параметры.РуководительЦФО = СсылкаНаОбъект.РуководительЦФО;<br> <br> Запрос = Новый Запрос;<br> Запрос.Текст = «ВЫБРАТЬ<br> | ОтветственныеЛицаОрганизацииСрезПоследних.ОтветственноеЛицо,<br> | ОтветственныеЛицаОрганизацииСрезПоследних.ФизическоеЛицо<br> |ИЗ<br> | РегистрСведений.ОтветственныеЛицаОрганизации.СрезПоследних(&Дата, СтруктурнаяЕдиница = &Организация) КАК ОтветственныеЛицаОрганизацииСрезПоследних»;<br> Запрос.УстановитьПараметр(«Дата», СсылкаНаОбъект);<br> Запрос.УстановитьПараметр(«Организация»,СсылкаНаОбъект);<br> Выборка = Запрос.Выполнить().Выбрать();<br> Пока Выборка.Следующий()Цикл<br> Если Выборка.ОтветственноеЛицо = СсылкаНаОбъект.ОтветственныеЛицаОрганизации.ГлавныйБухгалтер Тогда<br> Обл.Параметры.ГлБухгалтер = СсылкаНаОбъект.Выборка.ФизическоеЛицо;<br> ИначеЕсли Выборка.ОтветственноеЛицо = СсылкаНаОбъект.ОтветственныеЛицаОрганизации.БюджетныйКонтролер Тогда<br> Обл.Параметры.БюджетныйКонтролер = СсылкаНаОбъект.Выборка.ФизическоеЛицо;<br> ИначеЕсли Выборка.ОтветственноеЛицо = СсылкаНаОбъект.ОтветственныеЛицаОрганизации.ФинДиректор Тогда<br> Обл.Параметры.ФинДиректор =СсылкаНаОбъект.Выборка.ФизическоеЛицо;<br> КонецЕсли;<br> КонецЦикла;<br> <br> <br> ТабДокумент.Вывести(Обл);<br> <br> Возврат ТабДокумент;<br>КонецФункции<br><br><br>но когда тестирую выдает ошибку<br> <br>Ошибка при вызове метода контекста (ПолучитьФорму): Недопустимое значение параметра (параметр номер ‘1’)<br>Что я не так делаю?»

BelikovS

Дата регистрации: 05.03.2007
Сообщений: 1701

А Функция Печать () все-таки присутствует?

Лянка

Дата регистрации: 05.08.2010
Сообщений: 124

«Да!<br>Функция Печать() Экспорт<br> <br>ТабДокумент = ПечатьЗаявка();<br> <br>Возврат ТабДокумент;<br> <br>КонецФункции»

Thorvardr

Дата регистрации: 25.02.2005
Сообщений: 3082

«А я так делал, в этом случае оно вписывается в задуманную концепцию внешних печатных форм типовой конфигурации (в моем случае было Управление торговлей, редакция 11.0 (11.0.5.4)):<br> <br><pre>Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; МассивНазначений = Новый Массив; ПараметрыРегистрации.Вставить(«Вид», «ПечатнаяФорма»); МассивНазначений.Добавить(«Документ.ЗаказКлиента»); ПараметрыРегистрации.Вставить(«Назначение», МассивНазначений); ПараметрыРегистрации.Вставить(«Наименование», «Заказ клиента с выводом итога по таблице товаров с учетом НДС при ситуации ‘Цена без НДС'»); ПараметрыРегистрации.Вставить(«Версия», «1.0»); ПараметрыРегистрации.Вставить(«БезопасныйРежим», Истина); ПараметрыРегистрации.Вставить(«Информация», «Версия от 11.02.2011 г.»); ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд, «Заказ клиента с итогом по таблице при ‘Цена без НДС'», «СчетЗаказ», «ВызовСерверногоМетода», Истина, «ПечатьMXL»); ПараметрыРегистрации.Вставить(«Команды», ТаблицаКоманд); Возврат ПараметрыРегистрации;КонецФункции<br>Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить(«Представление», Новый ОписаниеТипов(«Строка»)); Команды.Колонки.Добавить(«Идентификатор», Новый ОписаниеТипов(«Строка»)); Команды.Колонки.Добавить(«Использование», Новый ОписаниеТипов(«Строка»)); Команды.Колонки.Добавить(«ПоказыватьОповещение», Новый ОписаниеТипов(«Булево»)); Команды.Колонки.Добавить(«Модификатор», Новый ОписаниеТипов(«Строка»)); Возврат Команды;КонецФункции<br>Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = «»»») НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор;КонецПроцедуры// Сформировать печатные формы объектов//// ВХОДЯЩИЕ:// ИменаМакетов — Строка — Имена макетов, перечисленные через запятую// МассивОбъектов — Массив — Массив ссылок на объекты которые нужно распечатать// ПараметрыПечати — Структура — Структура дополнительных параметров печати//// ИСХОДЯЩИЕ:// КоллекцияПечатныхФорм — Таблица значений — Сформированные табличные документы// ПараметрыВывода       — Структура       — Параметры сформированных табличных документов//Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, «СчетЗаказ») Тогда УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, «СчетЗаказ», «Заказ клиента», СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати)); КонецЕсли; КонецПроцедуры // Печать() Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати) УстановитьПривилегированныйРежим(Истина); ТабличныйДокумент = Новый ТабличныйДокумент;…. ТабличныйДокумент.АвтоМасштаб = Истина; Если ПривилегированныйРежим() Тогда УстановитьПривилегированныйРежим(Ложь); КонецЕсли; Возврат ТабличныйДокумент; КонецФункции // ПечатнаяФорма() </pre>»

BelikovS

Дата регистрации: 05.03.2007
Сообщений: 1701

А что подразумевалось под<br>> но когда тестирую<br>Вы подключили в сервис-дополнительные внешние отчеты…-Печатные формы, а потом из документа нажали печать и получили ошибку?

Лянка

Дата регистрации: 05.08.2010
Сообщений: 124

но у меня не типовая :( У меня УПП проф 1.2. (.1.2.36.1).<br>Думайте подойдет?

Лянка

Дата регистрации: 05.08.2010
Сообщений: 124

> А что подразумевалось под<br>> > но когда тестирую<br>> Вы подключили в сервис-дополнительные внешние отчеты…-Печатные формы, а потом из документа нажали печать и получили ошибку?<br>Да!

BelikovS

Дата регистрации: 05.03.2007
Сообщений: 1701

Приведите полный текст ошибки — там еще должна быть ссылка на строку, где произошла ошибка.<br>У вас Клиент-Серверный вариант?<br>Включите в конфигураторе (в режиме отладки) остановку по ошибке и посмотрите что за строка вызывает ошибку, и что за параметр передается.

BelikovS

Дата регистрации: 05.03.2007
Сообщений: 1701

Ничего себе не типовая :)<br>С изменениями наверно, но внешние формы работают на ура.

Лянка

Дата регистрации: 05.08.2010
Сообщений: 124

> Приведите полный текст ошибки — там еще должна быть ссылка на строку, где произошла ошибка.<br>> У вас Клиент-Серверный вариант?<br>> Включите в конфигураторе (в режиме отладки) остановку по ошибке и посмотрите что за строка вызывает ошибку, и что за параметр передается.<br> <br> Вот именно нет не какой строки. Если была бы можно было понять что я не так делаю. А он только и пишет<br>»Не удалось сформировать внешнюю печатную форму<br>Ошибка при вызове метода контекста (ПолучитьФорму): Недопустимое значение параметра (параметр номер ‘1’)»

Делаю внешнюю печатную форму. Добавила область «Приказ». Но вылезает ошибка: «Ошибка при вызове метода контекста (ПолучитьОбласть): Область не найдена: » Вывожу ее кодом: ОбластьМакета = Макет.ПолучитьОбласть(«Приказ»); ТабДокумент.Вывести(ОбластьМакета);

Наверное, нет такой области…

ОбластьМакета = ПолучитьМакет(«ИмяТвоегоМакета»).ПолучитьОбласть(«Приказ»);

Кстати, область, надеюсь, которая красными линиями выделяется (Ctrl+Shift+N), а не именованая область ячеек в табличном документе?

Есть =) Красными-красными =)

Без фото в профиле метод ПолучитьОбласть работать не будет

Не верю (с) Скриншоты в студию

Ерундистика какая-то. Может, макет не тот правишь.. А может прав… 🙂

А все остальные область нормально получаются?

а нафига в отдельную область выносить константу? моар кода?

а по делу — может не тот макет? 🙂 например, пытаешься получить общий макет ТОРГ-12, в котором нет этой области?

Все исправила!) Дошло в чем дело =) Надо было заменить сточку: Макет = ПолучитьОбщийМакет(«ТОРГ12»); На: И по этому, как бы я не меняла макет, который был добавлен в обработку, на печать выводился общий, в котором нет моих изменений)   Блин)))

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка при вызове метода контекста значениевданныеформы
  • Ошибка при вызове метода контекста получитьмакет недопустимое значение параметра параметр номер 1