Процедура СформироватьТекущуюКвитанцию(СтруктураОбщихТаблиц, СтруктураНастроек, ОбщиеДанные, ДокументРезультат, врТабличныйДокумент, КвитанцияНаКР = Ложь)
врТабличныйДокумент.Очистить();
Если ОбщиеДанные.Свойство("КвитанцияНаКР") Тогда
ОбщиеДанные.КвитанцияНаКР = КвитанцияНаКР;
Иначе
ОбщиеДанные.Вставить("КвитанцияНаКР", КвитанцияНаКР);
КонецЕсли;
Если ОбщиеДанные.Свойство("КвитанцияПоПени") И ОбщиеДанные.КвитанцияПоПени = Истина Тогда
ОбщиеДанные.КвитанцияПоПени = Ложь;
Иначе
ОбщиеДанные.Вставить("КвитанцияПоПени", Ложь);
КонецЕсли;
ОбщиеДанные.Вставить("ОтсутствуетРасчСчетКР", Ложь);
Если СтруктураНастроек.ВидМакета = Перечисления.УПЖКХ_ВидыПлатежныхДокументов.СтандартныйКР Тогда
СтруктураТекущихИОбщихДанных = ПолучитьТекущиеИОбщиеДанныеПоОбъекту924(СтруктураОбщихТаблиц, ОбщиеДанные, СтруктураНастроек);
Если СтруктураТекущихИОбщихДанных.ПечататьКвитанцию Тогда
// Текст для одномерного штрихкода.
ПолучитьТекстОдномерногоШтрихКода(СтруктураНастроек, СтруктураТекущихИОбщихДанных.ОбщиеДанные);
// Выводим в табличный документ квитанцию по текущему объекту отчета.
СформироватьКвитанцию(врТабличныйДокумент, СтруктураНастроек, СтруктураТекущихИОбщихДанных.ТекущиеДанные,
СтруктураТекущихИОбщихДанных.ОбщиеДанные);
СформироватьШтрихкоды(врТабличныйДокумент, СтруктураНастроек, СтруктураТекущихИОбщихДанных.ОбщиеДанные);
ВывестиОбласть(ДокументРезультат, врТабличныйДокумент);
КонецЕсли;
Иначе
Если ОбщиеДанные.Свойство("КвитанцияНаКР") Тогда
ОбщиеДанные.КвитанцияНаКР = КвитанцияНаКР;
Иначе
ОбщиеДанные.Вставить("КвитанцияНаКР", КвитанцияНаКР);
КонецЕсли;
Если (НЕ ОбщиеДанные.КвитанцияНаКР И СтруктураНастроек.ВыводитьQRштрихкодДляСитикардПоОсн)
ИЛИ (ОбщиеДанные.КвитанцияНаКР И СтруктураНастроек.ВедетсяРаздельныйУчетПоУслугамКапремонта И СтруктураНастроек.ВыводитьQRштрихкодДляСитикардПоКР) Тогда
ОбщиеДанные.Вставить("ВыводитьQRштрихкодДляСитикард", Истина);
Иначе
ОбщиеДанные.Вставить("ВыводитьQRштрихкодДляСитикард", Ложь);
КонецЕсли;
// Подготавливаем структуру с таблицами по текущему объекту отчета.
ТекущиеДанные = УПЖКХ_ПечатьКвитанцийСервер.ПолучитьСтруктуруДанныхПоТекущемуОбъекту(СтруктураОбщихТаблиц, ОбщиеДанные, СтруктураНастроек);
Если КвитанцияНаКР И ОбщиеДанные.ОтсутствуетРасчСчетКР Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Для лицевого счета """
+ ОбщиеДанные.ЛицевойСчет.Наименование
+ """ квитанция по кап. ремонту не сформирована, т.к. не заполнен расчетный счет капитального ремонта здания!";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
// Записываем в структуру суммовые показатели по текущему объекту отчета.
УПЖКХ_ПечатьКвитанцийСервер.ПолучитьИтоговыеПоказателиПоТекущемуОбъекту(ОбщиеДанные, ТекущиеДанные, СтруктураНастроек);
ПечататьКвитанцию = УПЖКХ_ПечатьКвитанцийСервер.ПечататьКвитанцииПоОтбору(СтруктураОбщихТаблиц, ОбщиеДанные, СтруктураНастроек, Ложь);
Если ПечататьКвитанцию Тогда
// Текст для одномерного штрихкода.
ПолучитьТекстОдномерногоШтрихКода(СтруктураНастроек, ОбщиеДанные);
// Выводим в табличный документ квитанцию по текущему объекту отчета.
СформироватьКвитанцию(врТабличныйДокумент, СтруктураНастроек, ТекущиеДанные, ОбщиеДанные);
СформироватьШтрихкоды(врТабличныйДокумент, СтруктураНастроек, ОбщиеДанные);
// АльфаКом
// Сохранить файл pdf!!!
//Если ЗначениеЗаполнено(ЭтотОбъект.КаталогВыгрузки) Тогда
// ВремФайл = ПолучитьИмяВременногоФайла("pdf");
// //Сообщить(ВремФайл);
// ТНаим = ОбщиеДанные.НаименованиеЛицевогоСчета;
// ТНаим = СтрЗаменить(ТНаим, "л", "");
// ТНаим = СтрЗаменить(ТНаим, "с", "");
// ТНаим = СтрЗаменить(ТНаим, "Л", "");
// ТНаим = СтрЗаменить(ТНаим, "С", "");
// ТНаим = СтрЗаменить(ТНаим, "/", "");
// ТНаим = СтрЗаменить(ТНаим, "\", "");
// ТНаим = СтрЗаменить(ТНаим, "№", "");
// ТНаим = СтрЗаменить(ТНаим, " ", "");
// ИмяФайла = ЭтотОбъект.КаталогВыгрузки + "\" + ТНаим + ".pdf";
// //Сообщить(ИмяФайла);
//Попытка
// ДокументРезультат.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF);
//Исключение
// КонецПопытки;
// Попытка
// ПереместитьФайл(ВремФайл, ИмяФайла);
// Исключение
// Сообщить("Каталог выгрузки указан не верно или нет возможности записи в этот каталог!");
// КонецПопытки;
// УдалитьФайлы(ВремФайл);
//КонецЕсли;
ПолучитьКаталог(ОбщиеДанные,врТабличныйДокумент);
ВывестиОбласть(ДокументРезультат, врТабличныйДокумент);
врТабличныйДокумент.Очистить();
КонецЕсли;
КонецЕсли;
Если СтруктураНастроек.ПечататьОтдельнуюКвитанциюПоПеням Тогда
// (ПЕНИ) // Производим формирование квитанции по пеням.
Если СтруктураНастроек.ВидМакета = Перечисления.УПЖКХ_ВидыПлатежныхДокументов.СтандартныйКР Тогда
СформироватьТекущуюКвитанциюПоПеням(СтруктураТекущихИОбщихДанных.ТекущиеДанные, СтруктураОбщихТаблиц, СтруктураНастроек,
СтруктураТекущихИОбщихДанных.ОбщиеДанные, ДокументРезультат, врТабличныйДокумент);
Иначе
СформироватьТекущуюКвитанциюПоПеням(ТекущиеДанные, СтруктураОбщихТаблиц, СтруктураНастроек, ОбщиеДанные, ДокументРезультат, врТабличныйДокумент);
КонецЕсли;
КонецЕсли;
КонецПроцедуры // СформироватьТекущуюКвитанцию()
Функция ПолучитьКаталог(ОбщиеДанные,врТабличныйДокумент)
Если ЗначениеЗаполнено(ЭтотОбъект.КаталогВыгрузки) Тогда
ВремФайл = ПолучитьИмяВременногоФайла("pdf");
//Сообщить(ВремФайл);
ТНаим = ОбщиеДанные.НаименованиеЛицевогоСчета;
ТНаим = СтрЗаменить(ТНаим, "л", "");
ТНаим = СтрЗаменить(ТНаим, "с", "");
ТНаим = СтрЗаменить(ТНаим, "Л", "");
ТНаим = СтрЗаменить(ТНаим, "С", "");
ТНаим = СтрЗаменить(ТНаим, "/", "");
ТНаим = СтрЗаменить(ТНаим, "\", "");
ТНаим = СтрЗаменить(ТНаим, "№", "");
ТНаим = СтрЗаменить(ТНаим, " ", "");
ИмяФайла = ЭтотОбъект.КаталогВыгрузки + "\" + ТНаим + ".pdf";
//Сообщить(ИмяФайла);
Попытка
врТабличныйДокумент.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF);
Исключение
КонецПопытки;
Попытка
ПереместитьФайл(ВремФайл, ИмяФайла);
Исключение
Сообщить("Каталог выгрузки указан не верно или нет возможности записи в этот каталог!");
КонецПопытки;
УдалитьФайлы(ВремФайл);
КонецЕсли;
КонецФункции
Показать
Это отчет формирования платежных документов, нужно чтобы формировались и сохранялись в пдф в папку. Почему то это происходит через раз. Отлавливал отладчиком, валилось всегда на Записать
Процедура СформироватьПлатежныйДокументНаОснованииГотовыхДанных(ДокументРезультат, СтруктураГотовыхДанных) Экспорт
СтруктураНастроек = СтруктураГотовыхДанных.СтруктураНастроек;
Отказ = Ложь;
СтруктураНастроек.Вставить("КомпонентаQRКода", УПЖКХ_ПечатьКвитанцийСервер.КомпонентаФормированияQRКода());
СтруктураНастроек.Вставить("КомпонентаШК", УПЖКХ_ПечатьКвитанцийСервер.КомпонентаФормированияШтрихКода(Отказ));
Если Отказ Тогда
Возврат;
КонецЕсли;
ОбщиеДанные = СтруктураГотовыхДанных.ОбщиеДанные;
СтруктураПлательщиков = СтруктураГотовыхДанных.СтруктураПлательщиков;
СтруктураОбщихТаблиц = СтруктураГотовыхДанных.СтруктураОбщихТаблиц;
СтруктураОбщихТаблицОсновная = СтруктураГотовыхДанных.СтруктураОбщихТаблицОсновная;
СтруктураОбщихТаблицКапРемонт = СтруктураГотовыхДанных.СтруктураОбщихТаблицКапРемонт;
врТабличныйДокумент = Новый ТабличныйДокумент;
УстановитьПараметрыПечати(врТабличныйДокумент, СтруктураНастроек.ВидМакета);
ЭтоПервая = Истина;
// Выводим в табличный документ квитанцию для каждого объекта отчета.
Для Каждого СтрокаОбъекта Из СтруктураНастроек.ТаблицаОбъектов Цикл
врТабличныйДокумент.Очистить();
// Квитанцию для каждого объекта отчета выводим с новой страницы.
Если ЭтоПервая Тогда
ЭтоПервая = Ложь;
Иначе
ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
// Записываем в структуру сведения о плательщике.
УПЖКХ_ПечатьКвитанцийСервер.ПодготовитьСведенияОПлательщике(ОбщиеДанные, СтруктураНастроек, СтруктураПлательщиков, СтрокаОбъекта);
Если СтруктураНастроек.ВедетсяРаздельныйУчетПоУслугамКапремонта ИЛИ СтруктураНастроек.ВидМакета = Перечисления.УПЖКХ_ВидыПлатежныхДокументов.СтандартныйКР Тогда
Если СтруктураНастроек.ПечататьКвитанциюКапРемонт Тогда
Если СтруктураНастроек.СпособПечатиКвитанцииКапРемонт = "основную квитанцию и квитанцию на кап. ремонт" Тогда
Если СтруктураНастроек.ВидМакета = Перечисления.УПЖКХ_ВидыПлатежныхДокументов.СтандартныйКР Тогда
СтруктураОбщихТаблицОсновнаяИКапРемонт = Новый Структура("СтруктураОбщихТаблицОсновная, СтруктураОбщихТаблицКапРемонт, СтруктураОбщихТаблицДляСтандартныйКР",
СтруктураОбщихТаблицОсновная, СтруктураОбщихТаблицКапРемонт, СтруктураОбщихТаблиц);
СформироватьТекущуюКвитанцию(СтруктураОбщихТаблицОсновнаяИКапРемонт, СтруктураНастроек, ОбщиеДанные, ДокументРезультат, врТабличныйДокумент);
Иначе
СформироватьТекущуюКвитанцию(СтруктураОбщихТаблицОсновная, СтруктураНастроек, ОбщиеДанные, ДокументРезультат, врТабличныйДокумент);
ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
СформироватьТекущуюКвитанцию(СтруктураОбщихТаблицКапРемонт, СтруктураНастроек, ОбщиеДанные, ДокументРезультат, врТабличныйДокумент, Истина);
КонецЕсли;
Иначе // СпособПечатиКвитанцииКапРемонт = мСпособПечатиКвитанцииКапРемонт[2].Значение
СформироватьТекущуюКвитанцию(СтруктураОбщихТаблицКапРемонт, СтруктураНастроек, ОбщиеДанные, ДокументРезультат, врТабличныйДокумент, Истина);
КонецЕсли;
Иначе // СпособПечатиКвитанцииКапРемонт = мСпособПечатиКвитанцииКапРемонт[1].Значение
СформироватьТекущуюКвитанцию(СтруктураОбщихТаблицОсновная, СтруктураНастроек, ОбщиеДанные, ДокументРезультат, врТабличныйДокумент);
КонецЕсли;
Иначе
// Данная проверка нужна для формирования ПД согласно настройке "СпособПечатиКвитанцииКапРемонт", так как
// - Для формы "Плат. документ (пост. №679/30 для МО)" данная настройка не должна влиять, если не ведется
// раздельный учет по услугам кап.ремонта.
// - Для формы "Плат. документ (приказ №924/пр)" факт ведения раздельного учета по услугам кап.ремонта обязателен.
// - Для остальных форм ПД данная настройка "СпособПечатиКвитанцииКапРемонт" должна всегда учитываться.
Если (СтруктураНастроек.ВидМакета <> Перечисления.УПЖКХ_ВидыПлатежныхДокументов.Москва679
И (СтруктураНастроек.ВедетсяРаздельныйУчетПоУслугамКапремонта И СтруктураНастроек.СпособПечатиКвитанцииКапРемонт = "только квитанцию на кап. ремонт")
ИЛИ СтруктураНастроек.СпособПечатиКвитанцииКапРемонт = "только основную квитанцию"
ИЛИ СтруктураНастроек.СпособПечатиКвитанцииКапРемонт = "единая квитанция на осн. услуги и кап. ремонт"
ИЛИ СтруктураНастроек.СпособПечатиКвитанцииКапРемонт = "основную квитанцию и квитанцию на кап. ремонт")
ИЛИ СтруктураНастроек.ВидМакета = Перечисления.УПЖКХ_ВидыПлатежныхДокументов.Москва679 Тогда
СформироватьТекущуюКвитанцию(СтруктураОбщихТаблиц, СтруктураНастроек, ОбщиеДанные, ДокументРезультат, врТабличныйДокумент);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
(5)"Если право доступа "Вывод" установлено, то вывод разрешен, иначе запрещен." у вас стоит "Авто", значит контроль на уровне прав, т.е. у кого то есть вправо вывода у кого то нет, у тех у кого нет, вылазит ошибка на методе "Записать"
Авто (Auto) (при авто используется право вывода пользователя)!!!!
Запретить (Disable)
Разрешить (Enable)
Описание:
Содержит варианты использования права доступа Вывод.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/ui}. Имя типа XDTO: UseOutput.
См. также:
(19) Закоментируйте функцию получитькатолог, а вот этот кусок раскомменте, только вместо ДокументРезультат.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF); напишите врТабличныйДокумент.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF);
(19) потому-что отладчик всегда работает как получение результата.
Т.е. в отладчике этот код будет вызван как функция. Что соответственно приводит к ошибке. Нельзя в отладчике это проверять.
(24) Она работает, сохраняет, но не всегда
Раз я запущу допустим, он сохранит 30 платежёк, второй раз в другую папку пытаюсь сохранить, просто вываливает "Не удалось сохранить т.д т.п" и даже печатку не выводит показать.
(24) Может ли это быть как то связано с сервером? То есть при сохранении на сервер отказ идёт?
Потому что у меня при открытии внешней обработки более 2ух раз вываливается "Ошибка файловой операции и путь"
Если файловая база - проверьте у пользователя доступность ко всем каталогам на чтение и запись, если серверная - у пользователя 1cv8User доступ на чтение и запись к каталогам.
Допускается использование схем http, https и ftp для адресации файлов. При использовании этих схем в адресах необходимо указывать прямые слеши '/', а не обратные '\'.
Для работы метода на веб-клиенте необходимо предварительно подключить расширение работы с файлами.
На веб-клиенте метод работает только с локальными файлами.
Пример:
В синтаксисе перемещения файла нет ни временных файлов ни табличных документов - в параметрах только строковые значения адресов Откуда и Куда перемещать.
(41) может антивирус блокировать файл. Т.е. первый раз переместили. Антивирусы не любят, когда программа генерирует файлы. Блокирует файл для проверки.
Следующая запись в тот же файл (при перемещении) может не получить доступ к файлу.
(45) А оно там стандартное, конфигурация ЖКХ, просто пишет что следует адаптировать к актуальному релизу. Она даже не формирует квитанции при выводе этой ошибки потому что отваливается на "ПереместитьФайл"
(46) у вас переменная ИмяФайла формируется из значений лицевого счета, возможно просто задваивается значение и происходит попытка переместить файл в уже существующий
у моего клиента была похожая ситуация с выгрузкой в формате doc(docx).Что-то проходило,что-то нет,зависало в процессах.
Админ сервера обновил опен офис, и нашел где-то информацию про конфликты сервера и приложения(опена).
Возможно и у вас что-то похожее.Конфликты -Сервер и Acrobat.Или платформа 1с и выгрузка в акробат.
А может шрифты в каких-то платежках не те. Загуглите "1с проблемы с pdf". Там кое-что есть на эту тему.