Имя: Пароль:
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) посмотрел. все параметры возвращает одинаковые.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший