8.х Параметры печати табличного документа

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем serega2671, 14 дек 2010.

  1. TopicStarter Overlay
    serega2671
    Offline

    serega2671 Опытный в 1С

    Регистрация:
    18 май 2009
    Сообщения:
    115
    Симпатии:
    0
    Баллы:
    26
    Подскажите как программно можно поменять парметры печати табличного документа?
    Дело в том что пробовал ставить ТабДокумент.ПолеСверху = 0;, пробежал отладчиком, показало что поле сверху действиельно 0, но как только открывается окно настройки принтера там все равно каждый раз стоит : все поля по 10 мм и колонтитулы также по 10 мм.
  2. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Скорее всего где-то дальше переопределяются параметры. Покажите код вывода документа.
    Какая конфигурация?
  3. TopicStarter Overlay
    serega2671
    Offline

    serega2671 Опытный в 1С

    Регистрация:
    18 май 2009
    Сообщения:
    115
    Симпатии:
    0
    Баллы:
    26
    конфигурация УТ 10.3.10.4
    Вот код печати
    Код:
    // Функция формирует табличный документ с печатной формой узкого чека для печати на принтерах с чековой лентой.
    Функция ПечатьТоварногоЧекаДляПД()
    
    ДокументЧекККМ  = Новый ТабличныйДокумент();
    МассивСтрокЧека = Новый Массив();
    
    // Получение макета
    МакетЧекаККМ             = Документы.ЧекККМ.ПолучитьМакет("ТоварныйЧекДляПД");
    ОбластьШапкаЧека         = МакетЧекаККМ.ПолучитьОбласть("ШапкаЧека|_"  + КассаККМ.ШиринаЛенты);
    ОбластьТелоЧека          = МакетЧекаККМ.ПолучитьОбласть("ТелоЧека|_"   + КассаККМ.ШиринаЛенты);
    ОбластьТелоЧекаСкидка    = МакетЧекаККМ.ПолучитьОбласть("ТелоЧекаСкидка|_"   + КассаККМ.ШиринаЛенты);
    ОбластьТелоЧекаОтступ    = МакетЧекаККМ.ПолучитьОбласть("ТелоЧекаОтступ|_"   + КассаККМ.ШиринаЛенты);
    ОбластьПодвалЧека        = МакетЧекаККМ.ПолучитьОбласть("ПодвалЧека|_" + КассаККМ.ШиринаЛенты);
    ОбластьПодвалЧекаОплата  = МакетЧекаККМ.ПолучитьОбласть("ПодвалЧекаОплата|_" + КассаККМ.ШиринаЛенты);
    ОбластьПодвалЧекаОстаток = МакетЧекаККМ.ПолучитьОбласть("ПодвалЧекаОстаток|_" + КассаККМ.ШиринаЛенты);
    
    // Получение данных документа
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос.УстановитьПараметр("Дата", Дата);
    
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    ДокЧек.Номер,
    |    ДокЧек.Дата,
    |    ДокЧек.КассаККМ,
    |    ДокЧек.Организация КАК Организация,
    |    ДокЧек.Организация.Представление КАК Поставщик,
    |    ДокЧек.СуммаДокумента,
    |    ДокЧек.ВидОперации,
    |    ДокЧек.Товары.(
    |        НомерСтроки,
    |        Номенклатура,
    |        Номенклатура.Представление КАК Товар,
    |        Номенклатура.НаименованиеПолное КАК ТоварПолноеНаименование,
    |        Номенклатура.Код КАК Код,
    |        Номенклатура.Артикул КАК Артикул,
    |        Количество,
    |        ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения,
    |        Цена,
    |        ПроцентСкидкиНаценки КАК Скидка,
    |        ПроцентАвтоматическихСкидок КАК СкидкаАвтоматическая,
    |        Сумма,
    |        ХарактеристикаНоменклатуры КАК Характеристика,
    |        СерияНоменклатуры КАК Серия
    |    ),
    |    ДокЧек.Оплата.(
    |        НомерСтроки,
    |        ВидОплаты,
    |        Сумма
    |    ),
    |    ВЫБОР    КОГДА ЕСТЬNULL(ФИОФизЛицСрезПоследних.Фамилия, """") = """"
    |                ТОГДА """"
    |            ИНАЧЕ
    |                ФИОФизЛицСрезПоследних.Фамилия + "" "" +
    |                ВЫБОР    КОГДА ЕСТЬNULL(ФИОФизЛицСрезПоследних.Имя, """") = """"
    |                        ТОГДА """"
    |                        ИНАЧЕ ВЫРАЗИТЬ(ФИОФизЛицСрезПоследних.Имя КАК СТРОКА(1)) + "". ""
    |                КОНЕЦ
    |                +
    |                ВЫБОР    КОГДА ЕСТЬNULL(ФИОФизЛицСрезПоследних.Отчество, """") = """"
    |                        ТОГДА """"
    |                        ИНАЧЕ ВЫРАЗИТЬ(ФИОФизЛицСрезПоследних.Отчество КАК СТРОКА(1)) + "".""
    |                КОНЕЦ
    |    КОНЕЦ КАК ФИО
    </span>
    |ИЗ
    |    Документ.ЧекККМ КАК ДокЧек
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |    Справочник.Пользователи КАК Пользователи
    |ПО
    |    Пользователи.Ссылка = ДокЧек.Ответственный
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |    Справочник.ФизическиеЛица КАК ФизическиеЛица
    |ПО
    |    Пользователи.ФизЛицо = ФизическиеЛица.Ссылка
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |    РегистрСведений.ФИОФизЛиц.СрезПоследних(&Дата) КАК ФИОФизЛицСрезПоследних
    |ПО
    |    ФизическиеЛица.Ссылка = ФИОФизЛицСрезПоследних.ФизЛицо
    |ГДЕ
    |    ДокЧек.Ссылка = &ТекущийДокумент
    
    |УПОРЯДОЧИТЬ ПО
    |    ДокЧек.Товары.НомерСтроки,
    |    ДокЧек.Оплата.НомерСтроки
    |";
    
    РезультатЗапроса = Запрос.<span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/выполнить')">Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
    Ответ     = "Пустой чек не может быть пробит на устройстве!";
    Отказ     = Истина;
    Результат = Ложь;
    Возврат Результат;
    КонецЕсли;
    
    Выборка = РезультатЗапроса.Выбрать();
    Выборка.Следующий();
    
    // Формирование чека
    // ШАПКА
    Если Выборка.ВидОперации = Перечисления.ВидыОперацийЧекККМ.Возврат Тогда
    ОбластьШапкаЧека.Параметры.Заголовок = ОбщегоНазначения.СформироватьЗаголовокДокумента(Выборка, "Чек (возврат)");
    Иначе
    ОбластьШапкаЧека.Параметры.Заголовок = ОбщегоНазначения.СформироватьЗаголовокДокумента(Выборка, "Чек");
    КонецЕсли;
    ОбластьШапкаЧека.Параметры.Организация = Строка(Выборка.Организация);
    ОбластьШапкаЧека.Параметры.ИНН         = "ИНН: " + Выборка.Организация.ИНН;
    ДокументЧекККМ.Вывести(ОбластьШапкаЧека);
    
    
    // ТЕЛО
    ВыборкаТоваров = Выборка.Товары.Выбрать();
    Пока ВыборкаТоваров.Следующий() Цикл
    ОбластьТелоЧека.Параметры.НаименованиеТовара = ВыборкаТоваров.ТоварПолноеНаименование
    + "(" + ВыборкаТоваров.ЕдиницаИзмерения + ")";
    ОбластьТелоЧека.Параметры.КоличествоЦена     = Формат(ВыборкаТоваров.Количество, "ЧЦ=17; ЧДЦ=3; ЧРД=.; ЧН=; ЧГ=0")
    + " х "
    + Формат(ВыборкаТоваров.Цена, "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧН=; ЧГ=0");
    
    КонечнаяСкидка = ВыборкаТоваров.Количество * ВыборкаТоваров.Цена - ВыборкаТоваров.Сумма;
    ДокументЧекККМ.Вывести(ОбластьТелоЧека);
    
    Если КонечнаяСкидка <> 0 Тогда
    ОбластьТелоЧекаСкидка.Параметры.ЗагСкидка = ?(КонечнаяСкидка > 0, "Скидка:", "Надбавка:");
    ОбластьТелоЧекаСкидка.Параметры.Скидка    = Формат(?(КонечнаяСкидка > 0, КонечнаяСкидка, -КонечнаяСкидка), "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧН=; ЧГ=0");
    ДокументЧекККМ.Вывести(ОбластьТелоЧекаСкидка);
    КонецЕсли;
    
    ДокументЧекККМ.Вывести(ОбластьТелоЧекаОтступ);
    КонецЦикла;
    //ДокументЧекККМ.УдалитьСтроку(ДокументЧекККМ.КоличествоСтрок());
    
    // ПОДВАЛ
    ОбластьПодвалЧека.Параметры.Итог = Формат(Выборка.СуммаДокумента, "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧН=; ЧГ=0");
    ДокументЧекККМ.Вывести(ОбластьПодвалЧека);
    
    СуммаОплат = 0;
    СуммаБезналичныхОплат = 0;
    СписокОплат = Новый Соответствие();
    
    ВыборкаОплат = Выборка.Оплата.Выбрать();
    Пока ВыборкаОплат.Следующий() Цикл
    Если Выборка.ВидОперации = Перечисления.ВидыОперацийЧекККМ.Возврат
    И ВыборкаОплат.ВидОплаты.ТипОплаты <> Перечисления.ТипыОплатЧекаККМ.Наличные Тогда
    СуммаБезналичныхОплат = СуммаБезналичныхОплат + ВыборкаОплат.Сумма;
    КонецЕсли;
    
    ЗаписьОплаты = СписокОплат.Получить(Строка(ВыборкаОплат.ВидОплаты.ТипОплаты));
    Если ЗаписьОплаты = Неопределено Тогда
    СписокОплат.Вставить(Строка(ВыборкаОплат.ВидОплаты.ТипОплаты), ВыборкаОплат.Сумма);
    Иначе
    СписокОплат.Вставить(Строка(ВыборкаОплат.ВидОплаты.ТипОплаты), ЗаписьОплаты + ВыборкаОплат.Сумма);
    КонецЕсли;
    СуммаОплат = СуммаОплат + ВыборкаОплат.Сумма;
    КонецЦикла;
    
    //Отдельная подготовка наличной оплаты для чека возврата
    Если Выборка.ВидОперации = Перечисления.ВидыОперацийЧекККМ.Возврат Тогда
    СписокОплат.Вставить(Строка(Перечисления.ТипыОплатЧекаККМ.Наличные), Выборка.СуммаДокумента - СуммаБезналичныхОплат);
    КонецЕсли;
    
    ОплатаДобавлена = Ложь;
    Для Каждого ЗнПеречисления Из Перечисления.ТипыОплатЧекаККМ Цикл
    ЗаписьОплаты = СписокОплат.Получить(Строка(ЗнПеречисления));
    Если ЗаписьОплаты <> Неопределено Тогда
    ОбластьПодвалЧекаОплата.Параметры.ТипОплаты = Строка(ЗнПеречисления) + ":";
    ОбластьПодвалЧекаОплата.Параметры.Оплата = Формат(ЗаписьОплаты, "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧН=; ЧГ=0");
    //ОплатаДобавлена = Истина;
    ДокументЧекККМ.Вывести(ОбластьПодвалЧекаОплата);
    КонецЕсли;
    КонецЦикла;
    
    Если Выборка.ВидОперации <> Перечисления.ВидыОперацийЧекККМ.Возврат Тогда
    ОбластьПодвалЧекаОстаток.Параметры.Сдача = Формат(СуммаОплат - Выборка.СуммаДокумента, "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧН=; ЧГ=0");
    КонецЕсли;
    
    ОбластьПодвалЧекаОстаток.Параметры.Сотрудник = Выборка.ФИО;
    
    ДокументЧекККМ.Вывести(ОбластьПодвалЧекаОстаток);
    
    Возврат ДокументЧекККМ;
    
    КонецФункции
    
    
    Вот дальше процедура печать

    Код:
    // Процедура осуществляет печать документа. Можно направить печать на 
    // экран или принтер, а также распечатать необходмое количество копий.
    //
    //  Название макета печати передается в качестве параметра,
    // по переданному названию находим имя макета в соответствии.
    //
    // Параметры:
    //  НазваниеМакета - строка, название макета.
    //
    Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
    
    Если ЭтоНовый() Тогда
    Предупреждение("Документ можно распечатать только после его записи");
    Возврат;
    ИначеЕсли Не УправлениеДопПравамиПользователей.РазрешитьПечатьНепроведенныхДокументов(Проведен) Тогда
    Предупреждение("Недостаточно полномочий для печати непроведенного документа!");
    Возврат;
    КонецЕсли;
    
    Если Не РаботаСДиалогами.ПроверитьМодифицированность(ЭтотОбъект) Тогда
    Возврат;
    КонецЕсли;
    
    Если ИмяМакета = "Чек" Тогда
    Если НЕ ЗначениеЗаполнено(Организация) Тогда
    Если НЕ ЗначениеЗаполнено(КассаККМ) Тогда
    НачалоСообщенияОбОшибке = "Не выбрана касса ККМ."
    Иначе
    НачалоСообщенияОбОшибке = "У выбранной кассы ККМ не задана организация.";
    КонецЕсли;
    
    Предупреждение(НачалоСообщенияОбОшибке + Символы.ПС + "Печать чека невозможна.");
    Возврат;
    КонецЕсли;
    
    // Получить экземпляр документа на печать.
    ТабДокумент = ПечатьЧека();
    ИначеЕсли ИмяМакета = "ТоварныйЧекДляПД" Тогда
    Если НЕ ЗначениеЗаполнено(Организация) Тогда
    Если НЕ ЗначениеЗаполнено(КассаККМ) Тогда
    НачалоСообщенияОбОшибке = "Не выбрана касса ККМ."
    Иначе
    НачалоСообщенияОбОшибке = "У выбранной кассы ККМ не задана организация.";
    КонецЕсли;
    
    Предупреждение(НачалоСообщенияОбОшибке + Символы.ПС + "Печать чека невозможна.");
    Возврат;
    КонецЕсли;
    
    // Получить экземпляр документа на печать.
    ТабДокумент = ПечатьТоварногоЧекаДляПД();
    ИначеЕсли ИмяМакета = "СерийныеНомера" Тогда
    ТабДокумент = УчетСерийныхНомеров.ПечатьСерийныхНомеров(Ссылка, "Товары");
    ИначеЕсли ИмяМакета = "РасходСРозничныхСкладовВЦенахАТТ" Тогда
    ТабДокумент = ЗаполнениеДокументов.НапечататьПриходРасходСРозничныхСкладовВЦенахАТТ(Ссылка, мВалютаРегламентированногоУчета, Ложь);
    ИначеЕсли ТипЗнч(ИмяМакета) = Тип("ДвоичныеДанные") Тогда
    ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Ссылка, ИмяМакета);
    
    Если ТабДокумент = Неопределено Тогда
    Возврат;
    КонецЕсли;
    КонецЕсли;
    
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект, ЭтотОбъект.Метаданные().Представление()), Ссылка);
    
    
    вот УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект, ЭтотОбъект.Метаданные().Представление()), Ссылка)

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

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Под рукой только УТ 11. 10 нету.
    А где указание параметров полей в вашем коде?
    Посмотрите в общей форме ПечатьДокументов как выводиться печатный документ и есть ли задание параметра ИмяПараметровПечати (или покажите код модуля формы, [off]а то на 8.1 у меня Бухгалтерия, а там всего строчек 5 кода[/off]).

    P.S. Такой большой код лучше приатачивать к сообщению в текстовом файле.
  5. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    1) Перед самым выводом документа на дисплей запишите
    Код:
    ТабДок.ПолеСверху			= 3;
    ТабДок.ПолеСнизу			= 3;
    ТабДок.ПолеСправа			= 3;
    ТабДок.ПолеСлева			= 3;
    ТабДок.ОтображатьСетку		= Ложь;//Истина;
    ТабДок.Защита				= Ложь;
    ТабДок.ТолькоПросмотр		= Истина;
    ТабДок.ОтображатьЗаголовки	= Истина;
    ТабДок.ОтображатьГруппировки= Истина;
    ТабДок.АвтоМасштаб			= Истина;
    ТабДок.ОриентацияСтраницы	= ОриентацияСтраницы.Портрет;
    
    //и выводим на дисплей
    ТабДок.Показать();
    
    
    
    И еще, не надо границы устанавливать в 0 (ноль) - это некорректно. Попробуйте в ворде или там экселе воткнуть границы 0 - MS Office вам мягко намекнет ;)
  6. UnNone
    Offline

    UnNone Опытный в 1С

    Регистрация:
    21 мар 2007
    Сообщения:
    148
    Симпатии:
    0
    Баллы:
    26
    В процедуре НапечататьДокумент необходимо продублировать нужные значения для формы, в которой откроется документ для печати.
    к примеру:
  7. TopicStarter Overlay
    serega2671
    Offline

    serega2671 Опытный в 1С

    Регистрация:
    18 май 2009
    Сообщения:
    115
    Симпатии:
    0
    Баллы:
    26
    а где указывать сами значения полей? ТабДокумент.ПолеСверху = 0???
  8. UnNone
    Offline

    UnNone Опытный в 1С

    Регистрация:
    21 мар 2007
    Сообщения:
    148
    Симпатии:
    0
    Баллы:
    26
    В вашей основной функции, которая формирует сам отчет, ПечатьТоварногоЧекаДляПД, перед тем как вы делаете возврат созданного табличного документа.
    Код:
     Если Выборка.ВидОперации <> Перечисления.ВидыОперацийЧекККМ.Возврат Тогда
    ОбластьПодвалЧекаОстаток.Параметры.Сдача = Формат(СуммаОплат - Выборка.СуммаДокумента, "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧН=; ЧГ=0");
    КонецЕсли;
    
    ОбластьПодвалЧекаОстаток.Параметры.Сотрудник = Выборка.ФИО;
    
    ДокументЧекККМ.Вывести(ОбластьПодвалЧекаОстаток);
    
    <Вот ЗДЕСЬ!>   
    
    Возврат ДокументЧекККМ;
    

Поделиться этой страницей