|
Отправка на почту, печатного документа -внешняя печ. форма | ☑ | ||
---|---|---|---|---|
0
anisa8310
25.05.15
✎
15:16
|
Всем доброго дня!
Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.39.52) Прикрутила печатную форму, все нормально работает, но пытаюсь ее отправить на почту через общую форму: "ПечатьДокументов"-выходит ошибка (скрин в самом низу сообщения), видимо массив собрала неверно-не могу найти ошибку ! массив [0] это ссылка на объект в моей внешней печ. форме (КОД НИЖЕ) в Процедуре ЗаполнитьТемуПолучателяПисьма(МассивОбъектов, КоллекцияПечатныхФорм, ПараметрыВывода, КоличествоЭД = 0) Экспорт общего модуля ОтправкаПочтовыхСообщений. массив [0] проверяет ТИП организация- как это исправить -конфу лучше не трогать-лучше обработку ...где то не пойму где Внешняя печатная форма: // Возвращает сведения о внешней обработке. Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("1.0.0.0"); ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма(); ПараметрыРегистрации.Версия = "1.0"; ПараметрыРегистрации.БезопасныйРежим = Истина; //ПараметрыРегистрации.Назначение.Добавить("Документ.СчетНаОплатуПокупателю"); НоваяКоманда = ПараметрыРегистрации.Команды.Добавить(); НоваяКоманда.Представление = НСтр("ru = 'Договор-Счет с печатью'"); НоваяКоманда.Идентификатор = "СчетНаОплатуПокупателю_ФЛ"; НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода(); НоваяКоманда.ПоказыватьОповещение = Истина; НоваяКоманда.Модификатор = "ПечатьMXL"; Возврат ПараметрыРегистрации; КонецФункции // Интерфейс для выполнения команд обработки. Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт Если МассивОбъектов.Количество()=0 Тогда Возврат; КонецЕсли; ТекДок = МассивОбъектов[0]; //Ссылка на документ для которой формируем печатную форму Макет = ПолучитьМакет("ФЛ"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СчетНаОплатуПокупателю.Ссылка, | СчетНаОплатуПокупателю.Представление, | СчетНаОплатуПокупателю.Номер, | СчетНаОплатуПокупателю.Организация, | СчетНаОплатуПокупателю.Склад, | СчетНаОплатуПокупателю.ПодразделениеОрганизации, | СчетНаОплатуПокупателю.Контрагент, | СчетНаОплатуПокупателю.ДоговорКонтрагента, | СчетНаОплатуПокупателю.СуммаДокумента, | СчетНаОплатуПокупателю.Дата, | СчетНаОплатуПокупателю.ДоговорКонтрагента.РуководительКонтрагента КАК РуководительКонтрагента, | СчетНаОплатуПокупателю.ДоговорКонтрагента.ЗаРуководителяКонтрагентаПоПриказу КАК ПоПриказуКонтрагента |ИЗ | Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю |ГДЕ | СчетНаОплатуПокупателю.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", МассивОбъектов[0]); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Возврат; КонецЕсли; ОбластьТекст1 = Макет.ПолучитьОбласть("Текст1"); ОбластьТекст2 = Макет.ПолучитьОбласть("Текст2"); ОбластьРеквизиты = Макет.ПолучитьОбласть("Реквизиты"); ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы"); ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); ОбластьИтого = Макет.ПолучитьОбласть("Итого"); ОбластьПодписи = Макет.ПолучитьОбласть("Подписи"); //ОбластьПечать = Макет.ПолучитьОбласть("Печать"); ТабДок = Новый ТабличныйДокумент; ВыборкаШапка=РезультатЗапроса.Выбрать(); ВыборкаШапка.Следующий(); Подразделение= ВыборкаШапка.ПодразделениеОрганизации; Организация=ВыборкаШапка.Организация; Контрагент=ВыборкаШапка.Контрагент; НомерДокумента=ВыборкаШапка.Номер; НаименованиеДокумента=ВыборкаШапка.Представление; ДатаДокумента=ВыборкаШапка.Дата; СуммаДокумента=ВыборкаШапка.СуммаДокумента; РуководительКонтрагента=ВыборкаШапка.РуководительКонтрагента; ПоПриказуКонтрагента=ВыборкаШапка.ПоПриказуКонтрагента; ЗначениеДаты = ТекущаяДатаСеанса(); СведенияОПолучателе = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(Организация, ЗначениеДаты); СведенияОКонтрагенте = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(Контрагент, ЗначениеДаты); ОтветственныеЛицаОрганизации = ОтветственныеЛицаБП.ОтветственныеЛица(Организация, ДатаДокумента, Подразделение); ТабДок.Очистить(); ОбластьТекст1.Параметры.ПечОрганизация=СведенияОПолучателе.НаименованиеДляПечатныхФорм; ОбластьТекст1.Параметры.ПечПокупатель=Контрагент.Наименование; ОбластьТекст1.Параметры.РуководительКонтрагента=РуководительКонтрагента; ОбластьТекст1.Параметры.ПоПриказуКонтрагента=ПоПриказуКонтрагента; ОбластьТекст1.Параметры.ПечНомер=НомерДокумента; ОбластьТекст1.Параметры.ПечДата=Формат(ДатаДокумента, "ДЛФ=DD"); ОбластьТекст1.Параметры.ПечРуководитель=ОтветственныеЛицаОрганизации.РуководительПредставление; ТабДок.Вывести(ОбластьТекст1); ТабДок.Вывести(ОбластьШапкаТаблицы); ТабДок.НачатьАвтогруппировкуСтрок(); ЗапросПоТЧ=Новый Запрос; ЗапросПоТЧ.Текст= "ВЫБРАТЬ | СчетНаОплатуПокупателюТовары.Количество, | СчетНаОплатуПокупателюТовары.Цена, | СчетНаОплатуПокупателюТовары.Сумма, | СчетНаОплатуПокупателюТовары.СуммаНДС, | СчетНаОплатуПокупателюТовары.Ссылка, | СчетНаОплатуПокупателюТовары.Номенклатура, | СчетНаОплатуПокупателюТовары.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | СчетНаОплатуПокупателюТовары.Номенклатура.НаименованиеПолное КАК НаименованиеПолное |ИЗ | Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары |ГДЕ | СчетНаОплатуПокупателюТовары.Ссылка = &Ссылка"; ЗапросПоТЧ.УстановитьПараметр("Ссылка", МассивОбъектов[0]); РезультатПоТЧ=ЗапросПоТЧ.Выполнить(); Если не РезультатПоТч.Пустой() Тогда ВыборкаПоТЧ=РезультатПоТч.Выбрать(); НомерСтроки=1; Пока ВыборкаПоТЧ.Следующий() Цикл ОбластьСтрока.Параметры.НомерСтроки=НомерСтроки; ОбластьСтрока.Параметры.НаименованиеПолное=ВыборкаПоТЧ.НаименованиеПолное; ОбластьСтрока.Параметры.Количество=ВыборкаПоТЧ.Количество; ОбластьСтрока.Параметры.ЕдиницаИзмерения=ВыборкаПоТЧ.ЕдиницаИзмерения; ОбластьСтрока.Параметры.Цена=ВыборкаПоТЧ.Цена; ОбластьСтрока.Параметры.Сумма=ВыборкаПоТЧ.Сумма; ТабДок.Вывести(ОбластьСтрока, ВыборкаПоТЧ.Уровень()); НомерСтроки=НомерСтроки+1; КонецЦикла; КонецЕсли; ТабДок.ЗакончитьАвтогруппировкуСтрок(); ОбластьИтого.Параметры.ОбщСумма=СуммаДокумента; ТабДок.Вывести(ОбластьИтого); ТабДок.Вывести(ОбластьТекст2); РеквизитыТекст = СокрЛП(Контрагент.НаименованиеПолное) + Символы.ПС + Символы.ПС; РеквизитыТекст = РеквизитыТекст+ " ИНН/КПП "+СокрЛП(Контрагент.ИНН)+" / "+СокрЛП(Контрагент.КПП)+ Символы.ПС; РеквизитыТекст = РеквизитыТекст + "документ у/л: " + СокрЛП(Контрагент.ДокументУдостоверяющийЛичность) + Символы.ПС + Символы.ПС; РеквизитыТекст = РеквизитыТекст + "адрес: " + СведенияОКонтрагенте.ЮридическийАдрес + Символы.ПС + Символы.ПС; Если ЗначениеЗаполнено(Контрагент.ОсновнойБанковскийСчет) Тогда РеквизитыТекст = РеквизитыТекст + "р/с " + СведенияОКонтрагенте.НомерСчета + " в " + СведенияОКонтрагенте.Банк + ", к/с " + СведенияОКонтрагенте.КоррСчет + ", БИК " + СведенияОКонтрагенте.БИК; КонецЕсли; РеквизитыТекст2 = СокрЛП(Организация.НаименованиеПолное) + Символы.ПС + Символы.ПС; РеквизитыТекст2 = РеквизитыТекст2 + "ИНН: " + СокрЛП(Организация.ИНН) + ", КПП: " + СокрЛП(Организация.КПП) + Символы.ПС + Символы.ПС; РеквизитыТекст2 = РеквизитыТекст2 + "адрес: " + СведенияОПолучателе.ЮридическийАдрес + Символы.ПС + Символы.ПС; РеквизитыТекст2 = РеквизитыТекст2 + "р/с " + СведенияОПолучателе.НомерСчета + " в " + СведенияОПолучателе.Банк + ", к/с " + СведенияОПолучателе.КоррСчет + ", БИК " + СведенияОПолучателе.БИК; ОбластьРеквизиты.Параметры.ПечПокупатель = РеквизитыТекст; ОбластьРеквизиты.Параметры.ПечОрганизация = РеквизитыТекст2; ТабДок.Вывести(ОбластьРеквизиты); ОбластьПодписи.Параметры.ПечПокупатель = Контрагент.Наименование; ОбластьПодписи.Параметры.ПечРуководитель =ОтветственныеЛицаОрганизации.РуководительПредставление; ТабДок.Вывести(ОбластьПодписи); //ТабДок.Вывести(ОбластьПечать); КоллекцияПечатныхФорм[0].ТабличныйДокумент = ТабДок; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ Функция ПечатьДокумента(МассивОбъектов, ОбъектыПечати, ПараметрыСозданияФайла=Неопределено) Экспорт КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("СчетНаОплатуПокупателю_ФЛ"); ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода(); Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); //ОбработатьДополнительныеПараметрыПечатнойФормы(МассивОбъектов, ПараметрыСозданияФайла); Для каждого СтрокаКоллекции Из КоллекцияПечатныхФорм Цикл Возврат СтрокаКоллекции.ТабличныйДокумент; КонецЦикла; КонецФункции КОД ОБЩЕГО МОДУЛЯ Процедура ЗаполнитьТемуПолучателяПисьма(МассивОбъектов, КоллекцияПечатныхФорм, ПараметрыВывода, КоличествоЭД = 0) Экспорт Если ТипЗнч(МассивОбъектов[0]) = Тип("СправочникСсылка.Организации") Тогда ЗаполнитьТемуТелоПисьмаСКарточкойОрганизации(МассивОбъектов, ПараметрыВывода, КоллекцияПечатныхФорм); Возврат; КонецЕсли; СтруктураТиповОбъектыПечати = РазложитьСписокПоТипамОбъектов(МассивОбъектов); ОписаниеДопустимыхТиповКонтрагента = ОписаниеТиповИзСтроки("Контрагенты, Организации, ФизическиеЛица"); ОрганизацияПоПисьму = ПолучитьЗначениеОбщегоРеквизита(СтруктураТиповОбъектыПечати, "Организация", ОписаниеТиповИзСтроки("Организации")); КонтрагентПоПисьму = ПолучитьЗначениеОбщегоРеквизита(СтруктураТиповОбъектыПечати, "Контрагент", ОписаниеДопустимыхТиповКонтрагента); Если ПараметрыВывода.Свойство("ПараметрыОтправки") Тогда ПараметрыПисьма = ПараметрыВывода.ПараметрыОтправки; Иначе ПараметрыПисьма = ПараметрыВывода; КонецЕсли; ПараметрыПисьма.Получатель = АдресаЭлектроннойПочты(КонтрагентПоПисьму); КоличествоВложений = 0; Если ПараметрыПисьма.Свойство("Вложения") Тогда КоличествоВложений = ПараметрыПисьма.Вложения.Количество(); КонецЕсли; ЕстьОбщийКонтрагент = НЕ КонтрагентПоПисьму = Неопределено; Если ЕстьОбщийКонтрагент Тогда ПредставлениеКонтрагента = ПолучитьПредставлениеСПрефиксом(НСтр("ru='для'"), Справочники.Контрагенты.ПолучитьКраткоеНаименованиеКонтрагента(КонтрагентПоПисьму)); Иначе ПредставлениеКонтрагента = ""; КонецЕсли; ЕстьОбщаяОрганизация = НЕ ОрганизацияПоПисьму = Неопределено; Если ЕстьОбщаяОрганизация Тогда ПредставлениеОрганизации = ПолучитьПредставлениеСПрефиксом(НСтр("ru='от'"), ПолучитьНаименованиеКонтрагента(ОрганизацияПоПисьму)); Иначе ПредставлениеОрганизации = ""; КонецЕсли; ТемаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Документы %1 %2'"), ПредставлениеКонтрагента, ПредставлениеОрганизации); ТекстПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'К письму приложены документы %1 %2:'"), ПредставлениеКонтрагента, ПредставлениеОрганизации); Запрос = Новый Запрос; СхемаЗапроса = Новый СхемаЗапроса; ЗапросСхемы = СхемаЗапроса.ПакетЗапросов[0]; ЗапросСхемы.ВыбиратьРазрешенные = Истина; ЭтоПервыйОператорВыбора = Истина; Для Каждого ТипОбъекта Из СтруктураТиповОбъектыПечати Цикл ЕстьРеквизитСумма = ОбщегоНазначения.ЕстьРеквизитОбъекта("СуммаДокумента", ТипОбъекта.Ключ); ЕстьРеквизитВалюта = ОбщегоНазначения.ЕстьРеквизитОбъекта("ВалютаДокумента", ТипОбъекта.Ключ); Если ЭтоПервыйОператорВыбора Тогда ЭтоПервыйОператорВыбора = Ложь; ОператорВыбора = ЗапросСхемы.Операторы[0]; Иначе ОператорВыбора = ЗапросСхемы.Операторы.Добавить(); КонецЕсли; Источник = ОператорВыбора.Источники.Добавить("Документ." + ТипОбъекта.Ключ.Имя, "ВыгружаемыйДокумент"); ОператорВыбора.ВыбираемыеПоля.Добавить("ВыгружаемыйДокумент.Ссылка"); ИмяПоляСумма = ?(ЕстьРеквизитСумма, "ВыгружаемыйДокумент.СуммаДокумента", "0"); ОператорВыбора.ВыбираемыеПоля.Добавить(ИмяПоляСумма); ИмяПоляВалюта = ?(ЕстьРеквизитВалюта, "ВыгружаемыйДокумент.ВалютаДокумента", "ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)"); ОператорВыбора.ВыбираемыеПоля.Добавить(ИмяПоляВалюта); НаименованиеОтбора = "МассивОбъектов" + ТипОбъекта.Ключ.Имя; ОператорВыбора.Отбор.Добавить("ВыгружаемыйДокумент.Ссылка В(&" + НаименованиеОтбора + ")"); Запрос.УстановитьПараметр(НаименованиеОтбора, ТипОбъекта.Значение); КонецЦикла; ЗапросСхемы.Колонки[0].Псевдоним = "Ссылка"; ЗапросСхемы.Колонки[1].Псевдоним = "СуммаДокумента"; ЗапросСхемы.Колонки[2].Псевдоним = "ВалютаДокумента"; Запрос.Текст = СхемаЗапроса.ПолучитьТекстЗапроса(); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда ТаблицаСведенийОбъектовПечати = Неопределено; Иначе ТаблицаСведенийОбъектовПечати = РезультатЗапроса.Выгрузить(); ТаблицаСведенийОбъектовПечати.Индексы.Добавить("Ссылка"); КонецЕсли; Для Каждого Объект Из МассивОбъектов Цикл ТекстСуммаДокумента = ""; Если ТаблицаСведенийОбъектовПечати <> Неопределено Тогда СведенияОбъектаПечати = ТаблицаСведенийОбъектовПечати.Найти(Объект, "Ссылка"); Если ЗначениеЗаполнено(СведенияОбъектаПечати.СуммаДокумента) Тогда Шаблон = Нстр("ru='на сумму %1 %2'"); ТекстСуммаДокумента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Формат(СведенияОбъектаПечати.СуммаДокумента, "ЧЦ=15; ЧДЦ=2"), СведенияОбъектаПечати.ВалютаДокумента); КонецЕсли; КонецЕсли; ПутьКДанным = ""; Если КоллекцияПечатныхФорм.Колонки.Найти("СинонимМакета") <> Неопределено Тогда ПутьКДанным = "СинонимМакета"; ИначеЕсли КоллекцияПечатныхФорм.Колонки.Найти("Представление") <> Неопределено Тогда ПутьКДанным = "Представление"; Иначе СведенияОбъектаПечати = КоллекцияПечатныхФорм.Найти(Объект, "Объект"); Для Каждого ПечатнаяФорма Из СведенияОбъектаПечати.ПечатныеФормы Цикл ТекстПисьма = ТекстПисьма + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 %2'"), ОбщегоНазначенияБПВызовСервера.СформироватьЗаголовокДокумента(Объект, ПечатнаяФорма.Ключ.Представление), ТекстСуммаДокумента); КонецЦикла; КонецЕсли; Если ЗначениеЗаполнено(ПутьКДанным) Тогда Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл ТекстПисьма = ТекстПисьма + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 %2'"), ОбщегоНазначенияБПВызовСервера.СформироватьЗаголовокДокумента(Объект, ПечатнаяФорма[ПутьКДанным]), ТекстСуммаДокумента); КонецЦикла; КонецЕсли; КонецЦикла; Если КоличествоВложений > 0 И КоличествоЭД > 0 Тогда НачальныйИндекс = КоличествоВложений - КоличествоЭД; Для Индекс = НачальныйИндекс По КоличествоВложений - 1 Цикл ТекстПисьма = ТекстПисьма + Символы.ПС+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1'"), ПараметрыПисьма.Вложения[Индекс].Представление); КонецЦикла; КонецЕсли; ДокументHTML = ПолучитьДокументHTMLИзОбычногоТекста(ТекстПисьма); ТекстПисьма = ПолучитьТекстHTMLИзОбъектаДокументHTML(ДокументHTML); ПараметрыПисьма.Тема = УдалитьЛишниеПробелы(ТемаПисьма); ПараметрыПисьма.Текст = УдалитьЛишниеПробелы(ТекстПисьма); КонецПроцедуры Скрин ошибки: http://radikall.com/image/Q652 |
|||
1
zak555
25.05.15
✎
15:29
|
точку останова поставь на строчку
Если ТипЗнч(МассивОбъектов[0]) = Тип("СправочникСсылка.Организации") Тогда и посмотри, что в МассивОбъектов |
|||
2
stix2010
25.05.15
✎
15:30
|
телепатирую в Массиве объектов ничего нет
|
|||
3
anisa8310
29.05.15
✎
10:25
|
(2) {ОбщийМодуль.ОтправкаПочтовыхСообщений.Модуль(170)}: Индекс находится за границами массива
Если ТипЗнч(МассивОбъектов[0]) = Тип("СправочникСсылка.Организации") Тогда |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |