Имя: Пароль:
1C
1С v8
Ошибка при создании внешней печатной формы
, , ,
0 nushenka
 
06.08.13
06:58
Создаю внешнюю печатную форму акта выполненных работ:

Функция ПечатьАктаОбОказанииУслуг()
    //мВалютаРегламентированногоУчета = глЗначениеПеременной("ВалютаРегламентированногоУчета");
    мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
    СуммыВРублях = Ложь;
    ЗапросШапка = Новый Запрос;
    ЗапросШапка.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
    ЗапросШапка.Текст =
    
        "ВЫБРАТЬ
        | РеализацияТоваровУслуг.Номер,
        | РеализацияТоваровУслуг.Дата,
        | РеализацияТоваровУслуг.ДоговорКонтрагента,
        | РеализацияТоваровУслуг.Контрагент КАК Получатель,
        | РеализацияТоваровУслуг.Организация КАК Поставщик,
        | РеализацияТоваровУслуг.Организация,
        | РеализацияТоваровУслуг.СуммаДокумента,
        | РеализацияТоваровУслуг.ВалютаДокумента,
        | РеализацияТоваровУслуг.УчитыватьНДС,
        | РеализацияТоваровУслуг.СуммаВключаетНДС,
        | РеализацияТоваровУслуг.КратностьВзаиморасчетов,
        | РеализацияТоваровУслуг.КурсВзаиморасчетов
        |ИЗ
        | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        |ГДЕ
        | РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент";
        
    Шапка = ЗапросШапка. Выполнить ().Выбрать();
    Шапка.Следующий();
    
    ЗапросУслуги = Новый Запрос;
    ЗапросУслуги.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
    СтрокаВыборкиПоляСодержания = ОбработкаТабличныхЧастей.ПолучитьЧастьЗапросаДляВыбораСодержания("РеализацияТоваровУслуг");
    ЗапросУслуги.Текст =
    
        "ВЫБРАТЬ
        | Номенклатура КАК Номенклатура,
        | " + СтрокаВыборкиПоляСодержания + " КАК Товар,
        | СУММА(Количество) КАК Количество,
        | ВЫБОР
        | КОГДА
        | Номенклатура.ЕдиницаХраненияОстатков.Представление ЕСТЬ NULL
        | ТОГДА
        | Номенклатура.БазоваяЕдиницаИзмерения.Представление
        | ИНАЧЕ
        | Номенклатура.ЕдиницаХраненияОстатков.Представление
        | КОНЕЦ КАК ЕдиницаИзмерения,
        | Цена * &Курс / &Кратность КАК Цена,
        | СУММА(Сумма * &Курс / &Кратность) КАК Сумма,
        | СтавкаНДС,
        | СУММА(СуммаНДС * &Курс / &Кратность) КАК СуммаНДС,
        | ПроцентСкидкиНаценки КАК Скидка,
        | МИНИМУМ(НомерСтроки) КАК НомерСтроки
        |ИЗ
        | Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслуг
        |
        |ГДЕ
        | РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент
        |
        |СГРУППИРОВАТЬ ПО
        | Номенклатура,
        | " + СтрокаВыборкиПоляСодержания + ",
        | Количество,
        | ВЫБОР
        | КОГДА
        | Номенклатура.ЕдиницаХраненияОстатков.Представление ЕСТЬ NULL
        | ТОГДА
        | Номенклатура.БазоваяЕдиницаИзмерения.Представление
        | ИНАЧЕ
        | Номенклатура.ЕдиницаХраненияОстатков.Представление
        | КОНЕЦ,
        | Цена * &Курс / &Кратность,
        | СтавкаНДС,
        | ПроцентСкидкиНаценки
        |
        |УПОРЯДОЧИТЬ ПО НомерСтроки";
        
    // Вычислим курс документа для печати
    Если СуммыВРублях И Шапка.ВалютаДокумента <> мВалютаРегламентированногоУчета Тогда
        ЗапросКурсАванса = Новый Запрос;
        ЗапросКурсАванса.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбЪект);
        ЗапросКурсАванса.Текст =
        
        "ВЫБРАТЬ
        | Док.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов,
        | Док.СуммаРегл КАК СуммаРегл
        |ИЗ
        | Документ.РеализацияТоваровУслуг.ДокументыРасчетовСКонтрагентом КАК Док
        |ГДЕ
        | Док.Ссылка = &ТекущийДокумент
        |ИТОГИ
        | СУММА(СуммаВзаиморасчетов),
        | СУММА(СуммаРегл)
        |ПО
        | ОБЩИЕ";
        
        Выборка = ЗапросКурсАванса.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Если Выборка.Следующий() Тогда
        КурсОплаты = ?(Выборка.СуммаВзаиморасчетов = 0, 0, Выборка.СуммаРегл / Выборка.СуммаВзаиморасчетов);
        ВыборкаСуммаВзаиморасчетов = Выборка.СуммаВзаиморасчетов;
        ВыборкаСуммаРегл = Выборка.СуммаРегл;
    Иначе
        КурсОплаты = 0;
        ВыборкаСуммаВзаиморасчетов = 0;
        ВыборкаСуммаРегл = 0;
    КонецЕсли;

        СуммаВзаиморасчетов = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(УчетНДС.ПолучитьСуммуДокументаСНДС(СсылкаНаОбъект, "Услуги"),
        Шапка.ВалютаДокумента, Шапка.ДоговорКонтрагента.ВалютаВзаиморасчетов,
        ЗаполнениеДокументов.КурсДокумента(СсылкаНаОбъект, мВалютаРегламентированногоУчета), Шапка.КурсВзаиморасчетов,
        ЗаполнениеДокументов.КратностьДокумента(СсылкаНаОбъект, мВалютаРегламентированногоУчета), Шапка.КратностьВзаиморасчетов);
        НеоплаченнаяСумма = СуммаВзаиморасчетов - ВыборкаСуммаВзаиморасчетов;
    Если НеоплаченнаяСумма > 0 Тогда
        КурсДляПечати = (НеоплаченнаяСумма * Шапка.КурсВзаиморасчетов + ВыборкаСуммаРегл)/(НеоплаченнаяСумма + ВыборкаСуммаВзаиморасчетов);
    Иначе
        КурсДляПечати = КурсОплаты;
    КонецЕсли;
    Если КурсДляПечати = 0 Тогда
        ЗапросУслуги.УстановитьПараметр("Курс", СсылкаНаОбъект.КурсВзаиморасчетов);
        ЗапросУслуги.УстановитьПараметр("Кратность", ?(Шапка.КратностьВзаиморасчетов=0, 1, СсылкаНаОбъект.КратностьВзаиморасчетов));
    Иначе
        ЗапросУслуги.УстановитьПараметр("Курс", КурсДляПечати);
        ЗапросУслуги.УстановитьПараметр("Кратность", 1);
    КонецЕсли;
    Иначе
    // Пересчитывать цену и сумму не надо, т.к.
    // - либо документ оформлен и выводится в рублях
    // - либо документ выводится в той же валюте, в которой он оформлен
        ЗапросУслуги.УстановитьПараметр("Курс", 1);
        ЗапросУслуги.УстановитьПараметр("Кратность", 1);
    КонецЕсли;
    
    ТаблицаУслуги = ЗапросУслуги.Выполнить().Выгрузить();
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_Акт";
    
    Макет = ПолучитьМакет("АктВВалюте");
    
    ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
    ОбластьМакета.Параметры.ТекстЗаголовка = ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, "Акт");
    ТабДокумент.Вывести(ОбластьМакета);
    ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");
    ПредставлениеПоставщика = ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.Дата), "ПолноеНаименование,");
    ОбластьМакета.Параметры.ПредставлениеПоставщика = ПредставлениеПоставщика;
    ОбластьМакета.Параметры.Поставщик = Шапка.Поставщик;
    ТабДокумент.Вывести(ОбластьМакета);
    ОбластьМакета = Макет.ПолучитьОбласть("Покупатель");
    ПредставлениеПолучателя = ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата), "ПолноеНаименование,");
    ОбластьМакета.Параметры.ПредставлениеПолучателя = ПредставлениеПолучателя;
    ОбластьМакета.Параметры.Получатель = Шапка.Получатель;
    ТабДокумент.Вывести(ОбластьМакета);
    // Если количество строк с нулевой скидкой меньше общего количества строк, то в документе есть скидки
    ЕстьСкидки = (ТаблицаУслуги.НайтиСтроки(Новый Структура("Скидка", 0)).Количество() < ТаблицаУслуги.Количество());
    // Вывести табличную часть
    Если ЕстьСкидки Тогда
        ОбластьМакета = Макет.ПолучитьОбласть("ШапкаТаблицыСоСкидкой");
        ОбластьСтроки = Макет.ПолучитьОбласть("СтрокаСоСкидкой");
    Иначе
        ОбластьМакета = Макет.ПолучитьОбласть("ШапкаТаблицы");
        ОбластьСтроки = Макет.ПолучитьОбласть("Строка");
    КонецЕсли;
        ТабДокумент.Вывести(ОбластьМакета);
        НомерСтроки = 0;
    Для Каждого СтрокаТабличнойЧасти Из ТаблицаУслуги Цикл
        НомерСтроки = НомерСтроки + 1;
        ОбластьСтроки.Параметры.Заполнить(СтрокаТабличнойЧасти);
        ОбластьСтроки.Параметры.НомерСтроки = НомерСтроки;
        ОбластьСтроки.Параметры.Товар = СокрЛП(СтрокаТабличнойЧасти.Товар);
    Если ЕстьСкидки Тогда
        Скидка = Ценообразование.ПолучитьСуммуСкидки(СтрокаТабличнойЧасти.Сумма, СтрокаТабличнойЧасти.Скидка);
        ОбластьСтроки.Параметры.Скидка = Скидка;
        ОбластьСтроки.Параметры.СуммаБезСкидки = ОбщегоНазначения.ФорматСумм(СтрокаТабличнойЧасти.Сумма + Скидка);
    КонецЕсли;
        ТабДокумент.Вывести(ОбластьСтроки);
    КонецЦикла;
    Сумма = ТаблицаУслуги.Итог("Сумма");
    СуммаНДС = ТаблицаУслуги.Итог("СуммаНДС");
    ОбластьМакета = Макет.ПолучитьОбласть("Итого");
    ОбластьМакета.Параметры.Всего = ОбщегоНазначения.ФорматСумм(Сумма);
    ТабДокумент.Вывести(ОбластьМакета);
    
    Если Шапка.УчитыватьНДС Тогда
        ОбластьМакета = Макет.ПолучитьОбласть("ИтогоНДС");    
        ОбластьМакета.Параметры.ВсегоНДС = ОбщегоНазначения.ФорматСумм(СуммаНДС);
        ОбластьМакета.Параметры.НДС = ?(Шапка.СуммаВключаетНДС, "В том числе НДС", " Сумма НДС");
        ТабДокумент.Вывести(ОбластьМакета);
    КонецЕсли;
    
    ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
    СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);
    ВалютаДляПечати = ?(СуммыВРублях, мВалютаРегламентированногоУчета, Шапка.ВалютаДокумента);
    ВалютаДляПечати = Шапка.ВалютаДокумента;
    ОбластьМакета.Параметры.ИтоговаяСтрока = "Всего оказано услуг " + НомерСтроки
    + ", на сумму " + ОбщегоНазначения.ФорматСумм(СуммаКПрописи, ВалютаДляПечати);
    ОбластьМакета.Параметры.СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, ВалютаДляПечати);
    ТабДокумент.Вывести(ОбластьМакета);
    ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
    ТабДокумент.Вывести(ОбластьМакета);
    
    Возврат ТабДокумент;
КонецФункции // ПечатьАктаОбОказанииУслуг()

При попытке вызвать форму вылетает ошибка: Невозможно обработать параметр "ВалютаРегламентированногоУчета" для получения значения.
Что это значит и как исправить?
1 Zerg80
 
06.08.13
07:04
Конфа не Раруса случайно? Под полными правами все ОК?
2 nushenka
 
06.08.13
07:09
А как проверить права? я не знаю чья конфигурация, но мысль, что это из-за прав мне нравится
3 nushenka
 
06.08.13
07:24
Ну помогите кто-нибудь. Затык полнейший с этой ошибкой. Я даже не могу проверить работоспособность кода, потому что до этого не доходит
4 Zerg80
 
06.08.13
07:26
1. Поменяйте фотку на свою
2. Название и релиз конфы напиши
3. Зайти под полными правами (146% что ошибка в RLS)
5 nushenka
 
06.08.13
07:56
1) фотки у меня нет, я на работе. да и она не имеет отношения к проблеме.
2) Конфигурация: Бухгалтерия предприятия КОРП, редакция 2.0 (2.0.47.5) (http://v8.1c.ru/buh8corp/)
Copyright (С) ООО "1C", 2009 - 2013. Все права защищены
(http://www.1c.ru)
3) будете смеяться, но я не знаю как это сделать
6 Cube
 
06.08.13
07:59
(5) По п.1 - все так говорят. Стандартная отмазка. Фотка из контакта/одноклассников нас устроит))
"да и она не имеет отношения к проблеме" - к проблеме да, не имеет, а вот к решению проблемы - ещё как имеет. Чем удачнее фото, тем качественнее помощь :)
7 nushenka
 
06.08.13
08:02
меня нет ни в контакте, ни в одноклассниках
8 nushenka
 
06.08.13
08:02
я замужем и мои фото никого, кроме мужа интересовать не должны. Давайте перейдем к проблеме, пожалуйста
9 Rovan
 
гуру
06.08.13
08:05
(8) на этом форуме такая давняя традиция
10 nushenka
 
06.08.13
08:07
Не можете помочь, так и скажите. Разговор про фото закрыт
11 фросия
 
06.08.13
08:09
в конфигуратеро пользователю своему добавьте полные права. зайдите.
12 nushenka
 
06.08.13
08:11
(11) Где мне найти пользователей? Роли я нашла, там есть пункт полные права, что мне с ними сделать?
13 фросия
 
06.08.13
08:13
а внешнюю печатную форму вы как/где добавляете?
14 Rovan
 
гуру
06.08.13
08:13
(10) помощь уже была - советом
"Зайти под полными правами"
15 nushenka
 
06.08.13
08:16
(13) в пользовательском режиме через меню Сервис/Дополнительные отчеты и обработки/ Внешние печатные формы. Там указываю файл обработки и документ, к которому она привязана
16 фросия
 
06.08.13
08:21
(12) пользователю своему добавьте роль полные права
17 nushenka
 
06.08.13
08:33
Даже при полных правах вылетает та же самая ошибка
18 Галахад
 
гуру
06.08.13
08:39
Покажите полный текст ошибки.
19 dva1c
 
06.08.13
08:41
(18) +1
(17) Да. Покажите. Там номер строки показывает.
20 nushenka
 
06.08.13
08:57
Не удалось сформировать внешнюю печатную форму!
Невозможно обработать параметр "ВалютаРегламентированногоУчета" для получения значения
21 Zerg80
 
06.08.13
09:05
(17) Про фотку уже сказали, из ФКантагда тоже пойдет.
Про полные права - извини, не верю. Точно-точно есть полные права? Проверь еще раз, это недолго.
(18) Если это RLS, то там просто предупреждение вылазит
22 фросия
 
06.08.13
09:05
(20)а номер строки с ошибкой?
23 dva1c
 
06.08.13
09:07
(22) При подключении ВПФ, может и не выдавать строку.
(20) Надо пользоваться обработкой, для отладки ВПФ и отладчиком.
24 dva1c
 
06.08.13
09:10
+(23) Один из примеров http://infostart.ru/public/181590/
25 nushenka
 
06.08.13
09:17
Отложим этот вопрос. Теперь другая проблема. Написала по-другому: Перем мВалютаРегламентированногоУчета Экспорт;

Функция ПодготовитьДанныеДляПечатиАктаОбОказанииУслуг()
    
    ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
    Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
        ВыводитьКоды    = Истина;
        Колонка         = "Артикул";
        ТекстКодАртикул = "Артикул";
    ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда
        ВыводитьКоды    = Истина;
        Колонка         = "Код";
        ТекстКодАртикул = "Код";
    Иначе
        ВыводитьКоды    = Ложь;
        Колонка         = "";
        ТекстКодАртикул = "Код";
    КонецЕсли;

    ЗапросШапка = Новый Запрос;
    ЗапросШапка.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
    ЗапросШапка.Текст =
    "ВЫБРАТЬ
    |    Номер,
    |    Дата,
    |    ДоговорКонтрагента,
    |    ДоговорКонтрагента.РасчетыВУсловныхЕдиницах КАК РасчетыВУсловныхЕдиницах,
    |    Контрагент КАК Получатель,
    |    Организация КАК Поставщик,
    |    Организация,
    // {ОбособленныеПодразделения
    |    ПодразделениеОрганизации КАК ПодразделениеОрганизации,
    // }ОбособленныеПодразделения
    |    СуммаДокумента,
    |    ВалютаДокумента,
    |    УчитыватьНДС,
    |    СуммаВключаетНДС,
    |    ВалютаДокумента.Код КАК ВалютаДокументаКод,
    |    БанковскийСчетОрганизации КАК БанковскийСчет
    |ИЗ
    |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |ГДЕ
    |    РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент";
    
    ТаблицаШапки = ЗапросШапка.Выполнить().Выгрузить();
    Если ТаблицаШапки.Количество() = 0 Тогда
        Возврат Неопределено;
    Иначе
        Шапка = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(ТаблицаШапки[0]);
    КонецЕсли;

    ПодразделениеОтветственныхЛиц = Неопределено;
    // {ОбособленныеПодразделения
    ПодразделениеОтветственныхЛиц = СсылкаНаОбъект.ПодразделениеОрганизации;
    // }ОбособленныеПодразделения
    
    Руководители = ОбщегоНазначения.ОтветственныеЛица(СсылкаНаОбъект.Организация, СсылкаНаОбъект.Дата, ПодразделениеОтветственныхЛиц);
    СформироватьСтруктуруПодписейДляПечати(Руководители, Шапка);
    
    ЗапросУслуги = Новый Запрос;
    ЗапросУслуги.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
    ЗапросУслуги.УстановитьПараметр("Курс",            ЗаполнениеДокументов.КурсДокумента(ЭтотОбъект,      мВалютаРегламентированногоУчета));
    ЗапросУслуги.УстановитьПараметр("Кратность",       ЗаполнениеДокументов.КратностьДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета));
    
    ЧастьЗапросаДляВыбораСодержанияУслуг = ФормированиеПечатныхФорм.ПолучитьЧастьЗапросаДляВыбораСодержанияУслуг("РеализацияТоваровУслуг");
    
    ЗапросУслуги.Текст =
    "ВЫБРАТЬ
    |    ОбщаяТаблица.Номенклатура,
    |    ОбщаяТаблица.Товар,
    |    ОбщаяТаблица.КодАртикул,
    |    ОбщаяТаблица.Количество,
    |    ОбщаяТаблица.ЕдиницаИзмерения,
    |    ОбщаяТаблица.Цена,
    |    ОбщаяТаблица.Сумма,
    |    ОбщаяТаблица.СтавкаНДС,
    |    ОбщаяТаблица.СуммаНДС,
    |    ОбщаяТаблица.НомерСтроки,
    |    ОбщаяТаблица.НомерТабличнойЧасти,
    |    ОбщаяТаблица.ИмяТабличнойЧасти
    |ИЗ
    |(ВЫБРАТЬ
    |    Номенклатура КАК Номенклатура,
    |    ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК Товар,
    |    Номенклатура." + ТекстКодАртикул + " КАК КодАртикул,
    |    Количество,
    |    ЕдиницаИзмерения  КАК ЕдиницаИзмерения,
    |    Цена * &Курс / &Кратность КАК Цена,
    |    Сумма * &Курс / &Кратность КАК Сумма,
    |    СтавкаНДС,
    |    СуммаНДС * &Курс / &Кратность КАК СуммаНДС,
    |    НомерСтроки,
    |    1 КАК НомерТабличнойЧасти,
    |    ""Товары"" КАК ИмяТабличнойЧасти
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг
    |
    |ГДЕ
    |    РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент
    |    И
    |    РеализацияТоваровУслуг.Номенклатура.Услуга = Истина
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    Номенклатура,
    |    " + ЧастьЗапросаДляВыбораСодержанияУслуг + ",
    |    Номенклатура." + ТекстКодАртикул + " КАК КодАртикул,
    |    Количество,
    |    Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения,
    |    Цена * &Курс / &Кратность КАК Цена,
    |    Сумма * &Курс / &Кратность КАК Сумма,
    |    СтавкаНДС,
    |    СуммаНДС * &Курс / &Кратность КАК СуммаНДС,
    |    НомерСтроки,
    |    2 КАК НомерТабличнойЧасти,
    |    ""Услуги"" КАК ИмяТабличнойЧасти
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслуг
    |
    |ГДЕ
    |    РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    Номенклатура,
    |    " + ЧастьЗапросаДляВыбораСодержанияУслуг + ",
    |    Номенклатура." + ТекстКодАртикул + " КАК КодАртикул,
    |    Количество,    
    |    Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения,
    |    Цена * &Курс / &Кратность КАК Цена,
    |    Сумма * &Курс / &Кратность КАК Сумма,
    |    СтавкаНДС,
    |    СуммаНДС * &Курс / &Кратность КАК СуммаНДС,
    |    НомерСтроки,
    |    3 КАК НомерТабличнойЧасти,
    |    ""Агентские услуги"" КАК ИмяТабличнойЧасти
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.АгентскиеУслуги КАК РеализацияТоваровУслуг
    |
    |ГДЕ
    |    РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент) КАК ОбщаяТаблица
    |УПОРЯДОЧИТЬ ПО
    |    НомерТабличнойЧасти, НомерСтроки";
    
    ТабличнаяЧасть = ЗапросУслуги.Выполнить().Выгрузить();
    
    Если СсылкаНаОбъект.Проведен И (Шапка.РасчетыВУсловныхЕдиницах
        ИЛИ (Шапка.ВалютаДокумента <> мВалютаРегламентированногоУчета И СсылкаНаОбъект.Дата >= '20090101000000')) Тогда
        
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
        Запрос.УстановитьПараметр("СчетУчетаРасчетовСКонтрагентом", СсылкаНаОбъект.СчетУчетаРасчетовСКонтрагентом);
        Текст =
        "ВЫБРАТЬ
        |    СУММА(Хозрасчетный.Сумма) КАК Сумма
        |ИЗ
        |    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
        |ГДЕ
        |    Хозрасчетный.Регистратор = &Ссылка
        |    И Хозрасчетный.СчетДт = &СчетУчетаРасчетовСКонтрагентом
        |    И Хозрасчетный.СчетКт В
        |            (ВЫБРАТЬ РАЗЛИЧНЫЕ
        |                РеализацияТоваровУслугТовары.СчетДоходов
        |            ИЗ
        |                Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        |            ГДЕ
        |                РеализацияТоваровУслугТовары.Ссылка = &Ссылка
        |
        |           ОБЪЕДИНИТЬ
        |
        |            ВЫБРАТЬ РАЗЛИЧНЫЕ
        |                РеализацияТоваровУслугУслуги.СчетДоходов
        |            ИЗ
        |                Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги
        |            ГДЕ
        |                РеализацияТоваровУслугУслуги.Ссылка = &Ссылка)
        |";
        Запрос.Текст = Текст;
        СуммаВзаиморасчетов = Запрос.Выполнить().Выгрузить()[0].Сумма;
        
        РасчетСуммыНДСПоСтавке =  УчетНДС.РасчетНДСвРубляхПоСтавкеДокумента(Шапка.Дата);
        
        Если НЕ СуммаВзаиморасчетов = NULL Тогда
            
            ТабличнаяЧасть.Колонки.Добавить("СуммаБезНДС");
            
            МассивРаспределения = Новый Массив;
            
            Для Каждого СтрокаТовар Из ТабличнаяЧасть Цикл
                
                СуммаСНДС = СтрокаТовар.Сумма + ?(Шапка.СуммаВключаетНДС, 0, СтрокаТовар.СуммаНДС);
                СуммаБезНДС = СуммаСНДС - СтрокаТовар.СуммаНДС;

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

Функция СформироватьСтруктуруПодписейДляПечати( Руководители, ВозвращаемаяСтруктура = Неопределено)
    
    Если ВозвращаемаяСтруктура = Неопределено Тогда
        ВозвращаемаяСтруктура = Новый Структура;
    КонецЕсли;
    
    Если ЗначениеЗаполнено(СсылкаНаОбъект.Руководитель) Тогда
        ФИОРуководителя = ОбщегоНазначения.ФамилияИнициалыФизЛица(СсылкаНаОбъект.Руководитель) + " " + СсылкаНаОбъект.ЗаРуководителяПоПриказу;
        ВозвращаемаяСтруктура.Вставить("Руководитель",          СсылкаНаОбъект.Руководитель);
        ВозвращаемаяСтруктура.Вставить("ФИОРуководителя",         ФИОРуководителя);
        ВозвращаемаяСтруктура.Вставить("ДолжностьРуководителя", Руководители.РуководительДолжность);
    Иначе
        ВозвращаемаяСтруктура.Вставить("Руководитель",          Руководители.Руководитель);
        ВозвращаемаяСтруктура.Вставить("ФИОРуководителя",       Руководители.РуководительПредставление);
        ВозвращаемаяСтруктура.Вставить("ДолжностьРуководителя", Руководители.РуководительДолжность);
    КонецЕсли;
    
    Если ЗначениеЗаполнено(СсылкаНаОбъект.ГлавныйБухгалтер) Тогда
        ФИОГлавБух = ОбщегоНазначения.ФамилияИнициалыФизЛица(СсылкаНаОбъект.ГлавныйБухгалтер) + " " + СсылкаНаОбъект.ЗаГлавногоБухгалтераПоПриказу;
        ВозвращаемаяСтруктура.Вставить("ГлавныйБухгалтер",      СсылкаНаОбъект.ГлавныйБухгалтер);
        ВозвращаемаяСтруктура.Вставить("ФИОГлавБухгалтера",        ФИОГлавБух);
    Иначе
        ВозвращаемаяСтруктура.Вставить("ГлавныйБухгалтер",      Руководители.ГлавныйБухгалтер);
        ВозвращаемаяСтруктура.Вставить("ФИОГлавБухгалтера",     Руководители.ГлавныйБухгалтерПредставление);
    КонецЕсли;
    
    Если ЗначениеЗаполнено(СсылкаНаОбъект.ОтпускПроизвел) Тогда
        ДанныеПодотчетногоЛица = ОбщегоНазначения.ДанныеФизЛица(СсылкаНаОбъект.Организация, СсылкаНаОбъект.ОтпускПроизвел, СсылкаНаОбъект.Дата);
        ФИОКладовщика = ОбщегоНазначения.ФамилияИнициалыФизЛица(СсылкаНаОбъект.ОтпускПроизвел);
        ВозвращаемаяСтруктура.Вставить("ФИОКладовщика", ФИОКладовщика);
        Если ДанныеПодотчетногоЛица.Должность <> Null Тогда
            ВозвращаемаяСтруктура.Вставить("ДолжностьКладовщика", ДанныеПодотчетногоЛица.Должность.Наименование);
        Иначе
            ВозвращаемаяСтруктура.Вставить("ДолжностьКладовщика", "");
        КонецЕсли;
        ВозвращаемаяСтруктура.Вставить("ФИОКладовщика", ФИОКладовщика);
    Иначе
        ВозвращаемаяСтруктура.Вставить("ФИОКладовщика", "");
        ВозвращаемаяСтруктура.Вставить("ДолжностьКладовщика", "");
    КонецЕсли;
    
    Возврат ВозвращаемаяСтруктура;
    
КонецФункции    


Функция ПечатьАктаОбОказанииУслуг()
    
    ТабДокумент = Новый ТабличныйДокумент;
    
    ДанныеДляПечати = ПодготовитьДанныеДляПечатиАктаОбОказанииУслуг();
    Если ДанныеДляПечати = Неопределено Тогда
        Возврат ТабДокумент;
    КонецЕсли;
    
    Шапка          = ДанныеДляПечати.Шапка;
    ТабличнаяЧасть = ДанныеДляПечати.ТабличнаяЧасть;
    
    Если ДанныеДляПечати.ВыводитьКоды Тогда
        ОбластьШапки  = "ШапкаСКодом";
        ОбластьСтроки = "СтрокаСКодом";
    Иначе
        ОбластьШапки  = "ШапкаТаблицы";
        ОбластьСтроки = "Строка";
    КонецЕсли;
    
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_Акт";
    Макет       = ПолучитьМакет("Акт");

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

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

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

    ЕстьСкидки = Ложь;

    // Вывести табличную часть
    ОбластьМакета = Макет.ПолучитьОбласть(ОбластьШапки);
    Если ДанныеДляПечати.ВыводитьКоды Тогда
        ОбластьМакета.Параметры.ИмяКодАртикул = ДанныеДляПечати.ТекстКодАртикул;
    КонецЕсли;
    ТабДокумент.Вывести(ОбластьМакета);
    
    ОбластьМакета = Макет.ПолучитьОбласть(ОбластьСтроки);

    НомерСтроки = 0;

    Для Каждого СтрокаТабличнойЧасти Из ТабличнаяЧасть Цикл

        НомерСтроки = НомерСтроки + 1;
        
        ОбластьМакета.Параметры.Заполнить(СтрокаТабличнойЧасти);
        ОбластьМакета.Параметры.НомерСтроки = НомерСтроки;
        ОбластьМакета.Параметры.Товар = СокрЛП(СтрокаТабличнойЧасти.Товар);
        
        Если Шапка.ВалютаДокумента <> мВалютаРегламентированногоУчета Тогда
            ОбластьМакета.Параметры.Цена  = СтрокаТабличнойЧасти.Сумма / ?(СтрокаТабличнойЧасти.Количество = 0, 1, СтрокаТабличнойЧасти.Количество);
        КонецЕсли;
        
        ТабДокумент.Вывести(ОбластьМакета);

    КонецЦикла;

    Если ТабличнаяЧасть <> Неопределено Тогда

        Сумма    = ТабличнаяЧасть.Итог("Сумма");
        СуммаНДС = ТабличнаяЧасть.Итог("СуммаНДС");

    Иначе

        Сумма    = 0;
        СуммаНДС = 0;

    КонецЕсли;

    ОбластьМакета = Макет.ПолучитьОбласть("Итого");
    ОбластьМакета.Параметры.Всего = ОбщегоНазначения.ФорматСумм(Сумма);
    ТабДокумент.Вывести(ОбластьМакета);

    Если Шапка.УчитыватьНДС Тогда

        ОбластьМакета = Макет.ПолучитьОбласть("ИтогоНДС");
        
        Если СуммаНДС <> 0 Тогда
            ОбластьМакета.Параметры.ВсегоНДС = ОбщегоНазначения.ФорматСумм(СуммаНДС);
            ОбластьМакета.Параметры.НДС      = ?(Шапка.СуммаВключаетНДС, "В том числе НДС", " Сумма НДС");
        Иначе
            ОбластьМакета.Параметры.ВсегоНДС = "-";
            ОбластьМакета.Параметры.НДС      = "Без налога (НДС)";
        КонецЕсли;
        
        ТабДокумент.Вывести(ОбластьМакета);

    КонецЕсли;

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

    ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
    Если Шапка.ДолжностьРуководителя = "" ИЛИ Шапка.ДолжностьРуководителя = Неопределено Тогда
        ДолжностьИНазваниеОрганизации = ПредставлениеПоставщика;
    Иначе
        ДолжностьИНазваниеОрганизации = Шапка.ДолжностьРуководителя.Наименование + " " + ПредставлениеПоставщика;
    КонецЕсли;
    ОбластьМакета.Параметры.ДолжностьИНазваниеОрганизации = ДолжностьИНазваниеОрганизации;
    
    ОбластьМакета.Параметры.ЗаместительПоПриказу = Шапка.ФИОРуководителя;
    ТабДокумент.Вывести(ОбластьМакета);

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

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

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


Теперь выдает ошибку:
Не удалось сформировать внешнюю печатную форму!
Поле объекта не обнаружено (Ссылка)

Не могу найти причину, вроде везде поменяла все ссылки на "СсылкаНаОбъект"
26 фросия
 
06.08.13
09:17
(24)  я просто впф добавляю форму в которой можно выбрать ссылку на док, и отладчиком смотрю.
27 dva1c
 
06.08.13
09:22
(26) C формой в ВПФ, прокатит. Я не использую формы в ВПФ, поэтому отлаживаю, через обработку.
28 dva1c
 
06.08.13
09:24
+(27) Отладчиком. )
(25) Надо локализовать проблему. Для этого есть отладчик.
29 nushenka
 
06.08.13
09:39
Не заходит в отладчик. ставлю точку останова в начале функции ПечатьАктаОбОказанииУслуг и все равно программа не заходит туда, когда вызываю печатную форму.
30 dva1c
 
06.08.13
09:42
(29) И не будет заходить. Надо или создать форму в ВПФ (описано в (26)) или воспользоваться (24).