Имя: Пароль:
1C
1С v8
Программная запись в PDF
0 Vladislava-smile
 
05.08.15
09:14
Сохраняю табдок в файл с расширением pdf. Сохраняет в 2-х экземплярах ...Понять почему не могу ((. Подскажите где рыть?
1 Cube
 
05.08.15
09:15
(0) "Подскажите где рыть?"
В своём коде.
2 ViSo76
 
05.08.15
09:16
1. Руки примять не пробовал?
2. Штатные телепаты все в отпуске.
3 Cube
 
05.08.15
09:16
(2) Пол - женский и фото есть...
4 Peltzer
 
05.08.15
09:18
В настройках печати табличного документа
5 ViSo76
 
05.08.15
09:18
Извиняюсь:

1. Ручёнки примять не пробовала?
2. К моему великому сожалению все штатные телепаты в отпуске, но если оставишь свой телефончик... ( шутка )
6 Vladislava-smile
 
05.08.15
09:23
Вот код:

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

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

    ТекстЗаголовка = "взаимных расчетов за период с " + Формат(ДатаНачалаПериода, "ДФ=dd.MM.yyyy") + " по " + Формат(ДатаОкончания, "ДФ=dd.MM.yyyy") + Символы.ПС
                    + "между " + НазваниеОрганизации + Символы.ПС + "и " + НаименованиеКонтрагента;
    Если ЗначениеЗаполнено(ДоговорКонтрагента) Тогда
        ТекстЗаголовка = ТекстЗаголовка + Символы.ПС + "по договору " + СокрЛП(ДоговорКонтрагента);
    КонецЕсли;
    ОбластьЗаголовок.Параметры.ТекстЗаголовка = ТекстЗаголовка;
    
    //ДанныеПредставителяОрганизации = ДанныеФизЛица(Организация, ПредставительОрганизации, ДатаОкончания);
    //ФИОПредставителя = ?(НЕ ЗначениеЗаполнено(ДанныеПредставителяОрганизации.Фамилия),"",ДанныеПредставителяОрганизации.Фамилия
    //                + ?(НЕ ЗначениеЗаполнено(ДанныеПредставителяОрганизации.Имя),""," "+ДанныеПредставителяОрганизации.Имя)
    //                + ?(НЕ ЗначениеЗаполнено(ДанныеПредставителяОрганизации.Отчество),""," "+ДанныеПредставителяОрганизации.Отчество));
    ФИОПредставителя = "" + ПредставительОрганизации;    
    СтрЗаголовокТаблица = "Мы, нижеподписавшиеся, "
                + ?(ДолжностьПредставителяОрганизации<>"",ДолжностьПредставителяОрганизации,"_____________________")+" "
                + НазваниеОрганизации
                + " " + ?(ФИОПредставителя<>"",ФИОПредставителя,"______________________________________") + ", с одной стороны, "
                + "и " + ?(ДолжностьПредставителяКонтрагента<>"",ДолжностьПредставителяКонтрагента,"_________________________")
                + " " + НаименованиеКонтрагента + " "
                + ?(НЕ ЗначениеЗаполнено(ПредставительКонтрагента),"________________________________________",ПредставительКонтрагента) + ", с другой стороны, "
                + "составили настоящий акт сверки в том, что состояние взаимных расчетов по данным учета следующее:";
    
    ОбластьЗаголовок.Параметры.СтрЗаголовокТаблица = СтрЗаголовокТаблица;
    ОбластьЗаголовок.Параметры.ВалютаДокумента = ВалютаДокумента;
    
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    
    ИтСуммаОборотДт      = 0;
    ИтСуммаОборотКт      = 0;
    ИтСуммаОборотДтКонтр = 0;
    ИтСуммаОборотКтКонтр = 0;
    
    НачОстДебет  = ?(ОстатокНаНачало > 0, ОстатокНаНачало, 0);
    НачОстКредит = ?(ОстатокНаНачало < 0, -ОстатокНаНачало, 0);
    
    ОстатокНаКонец = ОстатокНаНачало + ПоДаннымОрганизации.Итог("Дебет") -  ПоДаннымОрганизации.Итог("Кредит");
    
    КонОстДебет  = ?(ОстатокНаКонец > 0, ОстатокНаКонец, 0);
    КонОстКредит = ?(ОстатокНаКонец < 0, -ОстатокНаКонец, 0);
    
    ОстатокНаКонецК = -ОстатокНаНачало + ПоДаннымКонтрагента.Итог("Дебет") -  ПоДаннымКонтрагента.Итог("Кредит");
    
    КонОстДебетК  = ?(ОстатокНаКонецК > 0, ОстатокНаКонецК, 0);
    КонОстКредитК = ?(ОстатокНаКонецК < 0, -ОстатокНаКонецК, 0);
    
    ОбластьНачОстатки.Параметры.СуммаНачальныйОстатокДт = НачОстДебет;
    ОбластьНачОстатки.Параметры.СуммаНачальныйОстатокКт = НачОстКредит;
    ТабДок.Вывести(ОбластьНачОстатки);
    
    ТабДок.НачатьАвтогруппировкуСтрок();
    
    МаксИндекс = Макс(ПоДаннымОрганизации.Количество(), ПоДаннымКонтрагента.Количество()) - 1;
    Для Инд = 0 По МаксИндекс Цикл
        Если Инд < ПоДаннымОрганизации.Количество() Тогда
            СтрокаОрганизации = ПоДаннымОрганизации[Инд];
            Регистратор =     СтрокаОрганизации.Представление;
            СуммаОборотДт = СтрокаОрганизации.Дебет;
            СуммаОборотКт = СтрокаОрганизации.Кредит;
            ОбластьОбороты.Параметры.СуммаОборотДт = СуммаОборотДт;
            ОбластьОбороты.Параметры.СуммаОборотКт = СуммаОборотКт;
            ИтСуммаОборотДт = ИтСуммаОборотДт + СуммаОборотДт;
            ИтСуммаОборотКт = ИтСуммаОборотКт + СуммаОборотКт;
            ОбластьОбороты.Параметры.РегистраторПредставление = СтрокаОрганизации.Представление;
            ОбластьОбороты.Параметры.Регистратор = СтрокаОрганизации.ДокументРегистратор;
            ОбластьОбороты.Параметры.ДатаДокумента = Формат(СтрокаОрганизации.Дата,"ЧЦ=21; ЧДЦ=2; ДФ=dd.MM.yy");
        Иначе
            ОбластьОбороты.Параметры.СуммаОборотДт = "";
            ОбластьОбороты.Параметры.СуммаОборотКт = "";
            ОбластьОбороты.Параметры.РегистраторПредставление = "";
            ОбластьОбороты.Параметры.Регистратор = "";
            ОбластьОбороты.Параметры.ДатаДокумента = "";
        КонецЕсли;
        Если Инд < ПоДаннымКонтрагента.Количество() Тогда
            СтрокаОрганизации = ПоДаннымКонтрагента[Инд];
            Регистратор =     СтрокаОрганизации.Представление;
            СуммаОборотДт = СтрокаОрганизации.Дебет;
            СуммаОборотКт = СтрокаОрганизации.Кредит;
            ОбластьОбороты.Параметры.СуммаОборотДтКонтр = СуммаОборотДт;
            ОбластьОбороты.Параметры.СуммаОборотКтКонтр = СуммаОборотКт;
            ИтСуммаОборотДтКонтр = ИтСуммаОборотДтКонтр + СуммаОборотДт;
            ИтСуммаОборотКтКонтр = ИтСуммаОборотКтКонтр + СуммаОборотКт;
            ОбластьОбороты.Параметры.РегистраторПредставлениеКонтр = СтрокаОрганизации.Представление;
            ОбластьОбороты.Параметры.ДатаДокументаКонтр = Формат(СтрокаОрганизации.Дата,"ЧЦ=21; ЧДЦ=2; ДФ=dd.MM.yy");
        Иначе
            ОбластьОбороты.Параметры.СуммаОборотДтКонтр = "";
            ОбластьОбороты.Параметры.СуммаОборотКтКонтр = "";
            ОбластьОбороты.Параметры.РегистраторПредставлениеКонтр = "";
            ОбластьОбороты.Параметры.ДатаДокументаКонтр = "";
        КонецЕсли;
        ТабДок.Вывести(ОбластьОбороты);
    КонецЦикла;
    
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    
    ОбластьОборотыИтог.Параметры.СуммаОборотДт      = ИтСуммаОборотДт;
    ОбластьОборотыИтог.Параметры.СуммаОборотКт      = ИтСуммаОборотКт;
    Если СверкаСогласована тогда
        ОбластьОборотыИтог.Параметры.СуммаОборотДтКонтр = ИтСуммаОборотДтКонтр;
        ОбластьОборотыИтог.Параметры.СуммаОборотКтКонтр = ИтСуммаОборотКтКонтр;
    КонецЕсли;
    ТабДок.Вывести(ОбластьОборотыИтог);
    
    ОбластьКонОстатки.Параметры.СуммаКонечныйОстатокДт = КонОстДебет;
    ОбластьКонОстатки.Параметры.СуммаКонечныйОстатокКт = КонОстКредит;
    
    Если СверкаСогласована тогда
        ОбластьКонОстатки.Параметры.СуммаКонечныйОстатокДтКонтр = КонОстДебетК;
        ОбластьКонОстатки.Параметры.СуммаКонечныйОстатокКтКонтр = КонОстКредитК;
    КонецЕсли;
    
    ТабДок.Вывести(ОбластьКонОстатки);
    
    // Результаты сверки
    
       Если ПоДаннымОрганизации.Количество() = 0 и ОстатокНаНачало = 0 Тогда
           РезультатыСверки = "<сверка не проведена>";
      ИначеЕсли НЕ ЗначениеЗаполнено(ДатаОкончания) Тогда
           РезультатыСверки = "<не указана дата сверки>";
       ИначеЕсли НЕ ЗначениеЗаполнено(Контрагент) Тогда
           РезультатыСверки = "<не указан контрагент>";
       Иначе
        РезультатыСверки = "на " + Формат(ДатаОкончания, "ДФ=dd.MM.yyyy") + " задолженность ";
            
           Если ОстатокНаКонец > 0 Тогда
            РезультатыСверки = РезультатыСверки + "в пользу " + СокрЛП(НазваниеОрганизации) + " " + Формат(ОстатокНаКонец, "ЧЦ=21; ЧДЦ=2") + " " + строка(ВалютаДокумента);
    
           ИначеЕсли ОстатокНаКонец < 0 Тогда
            РезультатыСверки = РезультатыСверки + "в пользу " + СокрЛП(НаименованиеКонтрагента) + " " + Формат(-ОстатокНаКонец, "ЧЦ=21; ЧДЦ=2") + " " + строка(ВалютаДокумента);
    
           Иначе
               РезультатыСверки = РезультатыСверки + "отсутствует.";
           КонецЕсли;
    КонецЕсли;
    ОбластьПодвал.Параметры.РезультатыСверки = РезультатыСверки;
    
    Если СверкаСогласована тогда
        ОбластьПодвал.Параметры.ПоДаннымКонтрагента = "По данным " + СокрЛП(НаименованиеКонтрагента);
        
           Если ПоДаннымКонтрагента.Количество() = 0 и ОстатокНаНачало = 0 Тогда
               РезультатыСверки = "<сверка не проведена>";
          ИначеЕсли НЕ ЗначениеЗаполнено(ДатаОкончания) Тогда
               РезультатыСверки = "<не указана дата сверки>";
           ИначеЕсли НЕ ЗначениеЗаполнено(Контрагент) Тогда
               РезультатыСверки = "<не указан контрагент>";
           Иначе
            РезультатыСверки = "на " + Формат(ДатаОкончания, "ДФ=dd.MM.yyyy") + " задолженность ";
                
               Если ОстатокНаКонецК < 0 Тогда
                РезультатыСверки = РезультатыСверки + "в пользу " + СокрЛП(НазваниеОрганизации) + " " + Формат(-ОстатокНаКонецК, "ЧЦ=21; ЧДЦ=2") + " " + строка(ВалютаДокумента);
        
               ИначеЕсли ОстатокНаКонецК > 0 Тогда
                РезультатыСверки = РезультатыСверки + "в пользу " + СокрЛП(НаименованиеКонтрагента) + " " + Формат(ОстатокНаКонецК, "ЧЦ=21; ЧДЦ=2") + " " + строка(ВалютаДокумента);
        
               Иначе
                   РезультатыСверки = РезультатыСверки + "отсутствует.";
               КонецЕсли;
           КонецЕсли;
        
        ОбластьПодвал.Параметры.РезультатыСверкиК = РезультатыСверки;
        
        Если ОстатокНаКонец+ОстатокНаКонецК<>0 Тогда
             ИтогСверки = "В результате сверки выявлено расхождение информации о состоянии расчетов в размере "+Формат(?(ОстатокНаКонец+ОстатокНаКонецК>0,1,-1)*(ОстатокНаКонец+ОстатокНаКонецК), "ЧЦ=21; ЧДЦ=2") +" "+ Строка(ВалютаДокумента);
             ОбластьПодвал.Параметры.ИтогСверки = Символы.ПС+ ИтогСверки+Символы.ПС+" ";
        КонецЕсли;
    КонецЕсли;
    
    ОбластьПодвал.Параметры.НазваниеОрганизации = СокрЛП(НазваниеОрганизации);
    ОбластьПодвал.Параметры.НаименованиеКонтрагента = СокрЛП(НаименованиеКонтрагента);
    
//    ОбластьПодвал.Параметры.Должность = "________________";
    ОбластьПодвал.Параметры.ДолжностьК ="________________";
    
    
    Доверенность = СтрЗаменить(Доверенность, "Доверенность", "доверенности");
    ОбластьПодвал.Параметры.Доверенность=Доверенность;
    
    ОбластьПодвал.Параметры.ФИОПредставителя  = "("+ ОбщегоНазначения.ФамилияИнициалыФизЛица(ФИОПредставителя) +")";
    ОбластьПодвал.Параметры.ФИОПредставителяК = "("+?(НЕ ЗначениеЗаполнено(ПредставительКонтрагента),"_______________________",ПредставительКонтрагента)+")";
    
// Печать организации    
    Картинка = Организация.ИзображениеПечати.Получить();
            Если ТипЗнч(Картинка) = Тип("Картинка") Тогда
                ОбластьПодвал.Рисунки.ПечатьОрганизации.Картинка = Картинка;
            Иначе
            ОбластьПодвал.Рисунки.Удалить(ОбластьПодвал.Рисунки.ПечатьОрганизации);

            КонецЕсли;
// Печать подписи


Руководитель=ПредставительОрганизации;                    
Картинка = Руководитель.ИзображениеПодписи.Получить();
            Если ТипЗнч(Картинка) = Тип("Картинка") Тогда
                ОбластьПодвал.Рисунки.ИзображениеПодписи.Картинка = Картинка;
                
            Иначе
                ОбластьПодвал.Рисунки.Удалить(ОбластьПодвал.Рисунки.ИзображениеПодписи);

            КонецЕсли;

    

    ТабДок.Вывести(ОбластьПодвал);
    ИмяФайла = "Акт сверки по "+СокрЛП(Организация)+" для контрагента "+СокрЛП(Контрагент)+".pdf";
    СоздатьКаталог("C:\1C\tmp");
    ПутьКФайлу = "C:\1C\tmp\" + Имяфайла;
    ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
7 Vladislava-smile
 
05.08.15
09:24
Это, чтобы телепаты не напрягались ... )
8 ДенисЧ
 
05.08.15
09:24
ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_АктСверкиВзаиморасчетов_АктСверки";

Это попробуй убрать
9 Fedor-1971
 
05.08.15
09:35
(6) попробуй ТабДок.КоличествоЭкземпляров=1;,
Если качество результирующего документа устраивает, то можно и так оставить.
Для полностью корректного перевода в PDF лучше использовать PDF-принтер.
10 Vladislava-smile
 
05.08.15
09:43
(9) а зачем? Он полностью корректно вроде сохраняет и если есть возможность сразу сохранять в pdf.
Спасибо, про экземпляры - помогло, то, что нужно ).
11 Vladislava-smile
 
05.08.15
09:43
(8) - все кривится тогда ...
12 Fedor-1971
 
05.08.15
10:08
(10) Обрати внимание на выравнивание текста в ячейках таблицы (ПоШирине заменяется на ПоЛевомуКраю) и попробуй сделать длинную строку в ячейке, что-бы отработал автоматический перенос и оцени результат (скорее всего будет видна первая строка, а хвост иногда прячется - засада в высоте строки, глючит при конвертации, закономерность глюка не отловил).
Моё начальство не устроило качество создаваемого PDF пришлось сделать через BullZip PDF.

(11) явно выстави нужные параметры ТабДок, а ИмяПараметовПечати оставь пользователям под их настройки
13 Vladislava-smile
 
05.08.15
10:33
(12) - Спасибо, что так подробно, если возникнут какие-то проблемы, то воспользуюсь вашим методом. Автоматический перенос работает нормально.
14 viraboy
 
05.08.15
10:49
При сохранении в PDF используется виртуальный принтер. Соответственно количество копий будет скорее всего взято из настроек принтера по умолчанию
15 sapphire
 
05.08.15
11:00
(6) Проверьте в mxl-то правильно сохраняет? :)