Имя: Пароль:
IT
Админ
Не печатается печатная форма
0 werik
 
17.12.13
18:24
Прошу помощи у опытных программистов. Конфа «Трактиръ: Head-Office», вер. 1.0 (1.0.19.05)

У обработки с двух форм идет оправка на печать. На первой форме это список документов, а на второй это событие "при записи" в создании документа. На первой форме все норм. Выводится печатная форма, можно выбрать "распечатать" и все остальное(http://s019.radikal.ru/i626/1312/70/2fc8a5b7761a.jpg). А со второй форма выводится каким-то маленьким окном,кнопки "свернуть"(http://s020.radikal.ru/i712/1312/37/2ddad9e5ddb7.jpg),справа вверху,нет. Причем при попытке нажать "Печать" форма сразу становится неактивным и кнопки сразу становятся серыми(http://i024.radikal.ru/1312/57/d2fb4614d0ae.jpg) и распечатать нельзя. Если прописать сразу отправку на печать все норм, а вот вывод кривой.
Первый вариант кода, когда выводится все норм:
Процедура ПечатьНажатие(Элемент)
    
    
       КоличествоЭкземпляров = 1;
        НаПринтер = Ложь;
        ИмяПринтера = Неопределено;
        Тов = ЭлементыФормы.Продажи.ТекущаяСтрока;
     ссылка=Тов.Документ.Ссылка;

    если тов.ОткудаС=тов.КудаC тогда
     ТабДокумент = Новый ТабличныйДокумент;
    
    Макет = ПолучитьМакет("Продажи");
    
    ОбластьМакета = Макет.ПолучитьОбласть("Дата");
    ОбластьМакета.Параметры.Дата = Тов.Дата;    
    ТабДокумент.Вывести(ОбластьМакета);
    
    ОбластьМакета = Макет.ПолучитьОбласть("Время");
    ОбластьМакета.Параметры.Время = Тов.Время;
    ТабДокумент.Вывести(ОбластьМакета);
    
    ОбластьМакета = Макет.ПолучитьОбласть("Позиции");
    
    //Для Каждого Поз из Тов Цикл
    //
    Результ = Тов.Документ.Товары.Выгрузить();
    Для каждого позиц из Результ цикл
        ОбластьМакета.Параметры.Позиции = позиц.номенклатура;
        ОбластьМакета.Параметры.Кол = позиц.Количество;
        ТабДокумент.Вывести(ОбластьМакета);
    КонецЦикла;

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

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

    Шапка=Макет.ПолучитьОбласть("Шапка");
     Шапка.Параметры.Цех=Тов.ОткудаС;
     Шапка.Параметры.ЦехПолучатель=Тов.КудаC;
     ТабДокумент.Вывести(Шапка);
    
    
     Надпись="Накладная № "+Тов.Документ.Номер+" от "+Тов.Дата;    
     Заголовок1=Макет.ПолучитьОбласть("Заголовок");
     заголовок1.Параметры.НакладнаяСДанными=Надпись;
     ТабДокумент.Вывести(Заголовок1);
    
    
    
     Макушка=Макет.ПолучитьОбласть("МакушкаТаблицы");
     ТабДокумент.Вывести(Макушка);
    
      ном=0;
      Для Каждого Стр из Тов.Документ.Товары цикл
          ном=ном+1;
         Табл=Макет.ПолучитьОбласть("Тело");
         Табл.Параметры.Ном=Ном;
         Табл.Параметры.Наим=Стр.Номенклатура;
         Табл.Параметры.Колво=Стр.Количество;
         ТабДокумент.Вывести(Табл);
     КонецЦикла;
    
     НизНакладной=Макет.ПолучитьОбласть("Подвал");
     ТабДокумент.Вывести(НизНакладной);
      НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, Ссылка, Ссылка.Автор, ИмяПринтера);
       //ТабДокумент.Показать();
        
     конецесли;
    
КонецПроцедуры

Второй вариант когда выводится неправильно:тело-ссылка на документ
процедура произвестипечать(тело)
      
       Если тело.Склад=тело.СкладПолучатель тогда
    КоличествоЭкземпляров = 1;
       НаПринтер = Ложь;
        ИмяПринтера = Неопределено;    
    ТабДокумент = Новый ТабличныйДокумент;
      документ=тело;
     ссылка=Документ.Ссылка;
    Макет = ПолучитьМакет("Продажи");
    
    ОбластьМакета = Макет.ПолучитьОбласть("Дата");
    ОбластьМакета.Параметры.Дата = тело.Дата;    
    ТабДокумент.Вывести(ОбластьМакета);
    датанов=тело.Дата;
    датаном=Формат('20020820153309', "ДЛФ=В");
        
    Время = Макет.ПолучитьОбласть("Время");
    Время.Параметры.Время =датаном;
    ТабДокумент.Вывести(Время);
    
    //Позиции = Макет.ПолучитьОбласть("Позиции");
    
    //Для Каждого Поз из Тов Цикл
    //
    Для каждого позиц из тело.товары цикл
         Позиции = Макет.ПолучитьОбласть("Позиции");

        Позиции.Параметры.Позиции = позиц.номенклатура;
        Позиции.Параметры.Кол = позиц.Количество;
        ТабДокумент.Вывести(Позиции);
    КонецЦикла;

    Подвал = Макет.ПолучитьОбласть("Подвал");
    ТабДокумент.Вывести(Подвал);
    НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, Ссылка, Ссылка.Автор, ИмяПринтера);
    //ТабДокумент.Показать();
       //табдокумент.Напечатать(ИмяПринтера="\\srv01\Canon_MF3200");
  Иначе
      документ=тело;
          КоличествоЭкземпляров = 1;
       НаПринтер = Ложь;
        ИмяПринтера = Неопределено;
        ссылка=Документ.ссылка;
    ИмяМакета = "Накладная";
    Макет=Обработки.РабочееМестоПроизводства.ПолучитьМакет("Накладная");
    ТабДокумент=Новый ТабличныйДокумент;
    
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Накладная";

    Шапка=Макет.ПолучитьОбласть("Шапка");
    Шапка.Параметры.Цех=тело.Склад;
    Шапка.Параметры.ЦехПолучатель=тело.СкладПолучатель;
    ТабДокумент.Вывести(Шапка);
    
    
    Надпись="Накладная № "+тело.Номер+" от "+тело.Дата;    
    Заголовок1=Макет.ПолучитьОбласть("Заголовок");
    заголовок1.Параметры.НакладнаяСДанными=Надпись;
    ТабДокумент.Вывести(Заголовок1);
    
    
    
    Макушка=Макет.ПолучитьОбласть("МакушкаТаблицы");
    ТабДокумент.Вывести(Макушка);
    
     ном=0;
     Для Каждого Стр из тело.товары цикл
          ном=ном+1;
         Табл=Макет.ПолучитьОбласть("Тело");
         Табл.Параметры.Ном=Ном;
         Табл.Параметры.Наим=Стр.Номенклатура;
         Табл.Параметры.Колво=Стр.Количество;
        ТабДокумент.Вывести(Табл);
    КонецЦикла;
    
    НизНакладной=Макет.ПолучитьОбласть("Подвал");
    ТабДокумент.Вывести(НизНакладной);
        НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, Ссылка, Ссылка.Автор, ИмяПринтера);
    //табдокумент.Напечатать(ИмяПринтера="\\srv01\Canon_MF3200");
    табдокумент.Напечатать();

     конецесли;

    
конецпроцедуры

Функция печати в общем модуле выглядит так:
Процедура НапечататьДокумент(ПечДокумент, КоличествоЭкземпляров = 1, НаПринтер = Ложь, Заголовок = "", Автор = Неопределено, ИмяПринтера = Неопределено, ВыводитьКолонтитулы = Истина) Экспорт

    Если ПечДокумент = Неопределено тогда
        Возврат;
    КонецЕсли;

    // Получить необходимое количество копий
    Если КоличествоЭкземпляров < 1 Тогда
        ПечДокумент.КоличествоЭкземпляров = 1;
    Иначе
        ПечДокумент.КоличествоЭкземпляров = КоличествоЭкземпляров;
    КонецЕсли;
    
    Если ИмяПринтера <> Неопределено Тогда
        ПечДокумент.ИмяПринтера = ИмяПринтера;
    КонецЕсли;
        
    Если НЕ ПечДокумент.АвтоМасштаб
       И ЗначениеНеЗаполнено(ПечДокумент.ИмяПринтера) Тогда
        ПечДокумент.АвтоМасштаб = Истина;
    КонецЕсли;
    
    Если ВыводитьКолонтитулы Тогда
        
        ПечДокумент.НижнийКолонтитул.Выводить     = Истина;
        ПечДокумент.НижнийКолонтитул.ТекстВЦентре = "[&НомерСтраницы]/[&СтраницВсего]";
        ПечДокумент.НижнийКолонтитул.Шрифт        = Новый Шрифт(ПечДокумент.НижнийКолонтитул.Шрифт,,6,,Истина);
        ПечДокумент.ВерхнийКолонтитул.Выводить    = Истина;
        ПечДокумент.ВерхнийКолонтитул.НачальнаяСтраница = 2;
        ПечДокумент.РазмерКолонтитулаСверху  = 5;
        ПечДокумент.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Верх;
        ПечДокумент.ВерхнийКолонтитул.ТекстВЦентре = Заголовок;
        ПечДокумент.ВерхнийКолонтитул.Шрифт = Новый Шрифт(ПечДокумент.НижнийКолонтитул.Шрифт,,6);
        
        Если ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийТО, "ВыводитьАвтораВКолонтитулеПечатныхФорм") Тогда
            
            Если Автор <> Неопределено Тогда
                
                ПечДокумент.НижнийКолонтитул.ТекстСправа  = СокрЛП(Автор.Код)+ " (" + ТекущаяДата()+ ")";
                ПечДокумент.НижнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
                Если ПечДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт Тогда        
                    ПечДокумент.ПолеСнизу                     = 10;
                    ПечДокумент.РазмерКолонтитулаСнизу        = 5;
                Иначе
                    ПечДокумент.ПолеСнизу                     = 15;
                    ПечДокумент.РазмерКолонтитулаСнизу        = 5;
                КонецЕсли;
                
            КонецЕсли;
        КонецЕсли;
        
    КонецЕсли;
    
    Если НаПринтер Тогда

        ПечДокумент.Напечатать();

    Иначе

        // Отобразить печатный документ на экране
        ПечДокумент.ОтображатьЗаголовки           = Ложь;                                                            
        ПечДокумент.ОтображатьСетку               = Ложь;
        ПечДокумент.Защита                        = НЕ ПолучитьПравоПользователяПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ОтключитьЗащитуПечатныхФорм");
        ПечДокумент.ТолькоПросмотр                = Истина;                             
        ПечДокумент.Показать(Заголовок);

    КонецЕсли;

КонецПроцедуры // НапечататьДокумент()
1 Wobland
 
17.12.13
18:29
ты серьёзно думаешь, что это кто-то будет читать?
2 werik
 
17.12.13
20:51
надежда умирает последней. постарался подать развернуто чтобы меньше неясностей было. надуюсь хоть кому-то будет не лень и  идею какую-нибудь(кроме чтения книг по 1с:) ) подаст.
3 werik
 
17.12.13
20:52
надеюсь*
4 Klesk666
 
17.12.13
20:53
в отладчик + смотри как формируется те которые печатаются
5 werik
 
17.12.13
21:00
(4) уже. разницу пока не могу найти по данным между этими двумя формами.
6 Oleg_ka
 
18.12.13
07:58
Такое ощущение, что где-то выставляется свойство Вывод и (или) Защита... (Может кто-то ошибся и написал вместо .Выводить = Ложь строчку .Вывод = Ложь)
ТабДок.Вывод и (или) ТабДок.Защита
7 Oleg_ka
 
18.12.13
07:59
(6) Туплю... ищи вот такую конструкцию
ИспользованиеВывода.Запретить
8 Danilov
 
18.12.13
08:17
Посмотри последние строчки твоего кода " ПечДокумент.Защита                        = НЕ ПолучитьПравоПользователяПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ОтключитьЗащитуПечатныхФорм"); "
9 werik
 
18.12.13
16:42
(7) поискал. нет нигде. А вручную нигде опцию задать нельзя чтобы выводил нормально?
(8) посмотрел. все параметры возвращает одинаковые.