Вход | Регистрация

1С:Предприятие ::

Метки: 

Печать сразу на принтер без предпросмотра

Я
   pprig
 
29.06.18 - 11:44
Добра Вам!!!
ВПФ товарного чека надо чтоб сразу печатался на принтере без предпросмотра.
Куда в коде надо вставить "Напечатать()" 

Функция СведенияОВнешнейОбработке() экспорт
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.ЧекККМ"); 
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "Чек на склад (внешний)");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
    ПараметрыРегистрации.Вставить("Версия", "1.0"); 
    ПараметрыРегистрации.Вставить("Информация", "Чек на склад (внешний)"); 
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, "Чек на склад (внешний)", "ЧекНаСклад", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;
КонецФункции

Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"))//как будет выглядеть описание печ.формы для пользователя

    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));//имя макета печ.формы

    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));//ВызовСерверногоМетода

    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление; 
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры

//#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда


//#Область СлужебныеПроцедурыИФункции


//#Область Печать


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    ПараметрыПечати = Новый Структура();
    СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);;
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЧекНаСклад") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
        КоллекцияПечатныхФорм,
        "ЧекНаСклад",
        НСтр("ru = 'Чек на склад'"),
        СформироватьПечатнуюФормуЧекНаСклад(СтруктураТипов, ОбъектыПечати, ПараметрыПечати));
        
    КонецЕсли;
        
КонецПроцедуры


&НаСервере
Функция СформироватьПечатнуюФормуЧекНаСклад(СтруктураТипов, ОбъектыПечати, ПараметрыПечати)
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    //ТабличныйДокумент.ИмяПринтера="\\192.168.7.11\T58";

    ТабличныйДокумент.ИмяПринтера="\\10.18.0.63\doPDF 8";
    ТабличныйДокумент.ПолеСверху=0;
    ТабличныйДокумент.ПолеСлева=0;
    ТабличныйДокумент.ПолеСнизу=0;
    ТабличныйДокумент.ПолеСправа=0;
    ТабличныйДокумент.РазмерКолонтитулаСверху=0;
    ТабличныйДокумент.РазмерКолонтитулаСнизу=0;
    ТабличныйДокумент.ВерхнийКолонтитул.Выводить=Ложь;
    ТабличныйДокумент.НижнийКолонтитул.Выводить=Ложь;
    ТабличныйДокумент.АвтоМасштаб=Истина;       
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЧекНаСклад";
    
        
    НомерТипаДокумента = 0;
    
    Для Каждого СтруктураОбъектов Из СтруктураТипов Цикл
        
        Если НЕ (СтруктураОбъектов.Ключ = "Документ.ЧекККМ"
            Или СтруктураОбъектов.Ключ = "Документ.ОтчетОРозничныхПродажах"
            Или СтруктураОбъектов.Ключ = "Документ.ЧекККМВозврат") Тогда
            Продолжить;
        КонецЕсли;
        
        НомерТипаДокумента = НомерТипаДокумента + 1;
        Если НомерТипаДокумента > 1 Тогда
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        
        МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтруктураОбъектов.Ключ);
        ДанныеДляПечати = МенеджерОбъекта.ПолучитьДанныеДляПечатнойФормыТоварныйЧек(ПараметрыПечати, СтруктураОбъектов.Значение);
        
        ЗаполнитьТабличныйДокументТоварныйЧек(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати);
        
    КонецЦикла;
    
    Возврат ТабличныйДокумент;
    
КонецФункции


Процедура ЗаполнитьТабличныйДокументТоварныйЧек(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати)
    
    УстановитьПривилегированныйРежим(Истина);
    
    ШаблонОшибкиТовары = НСтр("ru = 'В документе %1 отсутствуют товары. Печать товарного чека не требуется'");
    Макет = ПолучитьМакет("ПФ_MXL_ТоварныйЧек");

    ПоказыватьНДС = Константы.ВыводитьДопКолонкиНДС.Получить();
    
    ДанныеПечати = ДанныеДляПечати.РезультатПоШапке.Выбрать();
    Товары       = ДанныеДляПечати.РезультатПоТабличнойЧасти.Выгрузить();
    
    ПервыйДокумент = Истина;
    
    Пока ДанныеПечати.Следующий() Цикл
        
        СтруктураПоиска = Новый Структура("Ссылка", ДанныеПечати.Ссылка);
        ТаблицаТовары = Товары.НайтиСтроки(СтруктураПоиска);
        
        Если ТаблицаТовары.Количество() = 0 Тогда
            
            ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                ШаблонОшибкиТовары,
                ДанныеПечати.Ссылка);
            
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ДанныеПечати.Ссылка);
            Продолжить;
            
        КонецЕсли;
        
        Если Не ПервыйДокумент Тогда
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        
        ПервыйДокумент = Ложь;
        НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
        
        // Выводим шапку накладной.

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

        ОбластьНомера    = Макет.ПолучитьОбласть("Итого|НомерСтроки");
        ОбластьДанных    = Макет.ПолучитьОбласть("Итого|Данные");
        
        ТабличныйДокумент.Вывести(ОбластьНомера);
        ТабличныйДокумент.Присоединить(ОбластьДанных);
        
        УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка);
        
    КонецЦикла;
    
КонецПроцедуры// ЗаполнитьТабличныйДокументТоварныйЧек()


// Функция возвращает структуру с заголовками Скидка или Наценка для таблицы печатной формы,

// а также с флагами ЕстьСкидки и ТолькоНаценка
//

Функция ЗаголовокСкидки(ТаблицаТовары, ИспользоватьСкидки) Экспорт
    
    ЕстьНаценки = Ложь;
    ЕстьСкидки  = Ложь;
    
    СтруктураШапки = Новый Структура("Скидка, СуммаСкидки, ТолькоНаценка");
    
    Если ИспользоватьСкидки Тогда
        
        Для Каждого СтрокаТовары Из ТаблицаТовары Цикл
            Если СтрокаТовары.СуммаСкидки > 0 Тогда
                ЕстьСкидки = Истина;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        
        Для Каждого СтрокаТовары Из ТаблицаТовары Цикл
            Если СтрокаТовары.СуммаСкидки < 0 Тогда
                ЕстьНаценки = Истина;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        
        Если ЕстьНаценки И ЕстьСкидки Тогда
            СтруктураШапки.Вставить("Скидка", НСтр("ru = 'Скидка (Наценка)'"));
            СтруктураШапки.Вставить("СуммаСкидки", НСтр("ru = 'Сумма'") + Символы.ПС + НСтр("ru = 'без скидки (наценки)'"));
        ИначеЕсли ЕстьНаценки И НЕ ЕстьСкидки Тогда
            СтруктураШапки.Вставить("Скидка", НСтр("ru = 'Наценка'"));
            СтруктураШапки.Вставить("СуммаСкидки", НСтр("ru = 'Сумма'") + Символы.ПС + НСтр("ru = 'без наценки'"));
        ИначеЕсли ЕстьСкидки Тогда
            СтруктураШапки.Вставить("Скидка", НСтр("ru = 'Скидка'"));
            СтруктураШапки.Вставить("СуммаСкидки", НСтр("ru = 'Сумма'") + Символы.ПС + НСтр("ru = 'без скидки'"));
        КонецЕсли;
        
        СтруктураШапки.Вставить("ТолькоНаценка", ЕстьНаценки);
        
    КонецЕсли;
    
    Возврат СтруктураШапки;
    
КонецФункции

Процедура УстановитьПараметр(ОбластьМакета, ИмяПараметра, ЗначениеПараметра)
    ОбластьМакета.Параметры.Заполнить(Новый Структура(ИмяПараметра, ЗначениеПараметра));
КонецПроцедуры

//#КонецОбласти


//#КонецОбласти


//#КонецЕсли
 
  Рекламное место пустует
   pprig
 
1 - 29.06.18 - 11:46
"&НаСервере" опечатка


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует