8.х Создание печатной формы М-11

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем MyNameNoName, 17 май 2013.

  1. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте. Мне нужно изменить печатную форму М-11, не меняя конфигурацию. Можно ли как-нибудь вытащить стандартную форму М-11 из УПП? Как я понимаю мне придется создавать внешний отчет? Или есть возможность создания именно внешней печатной формы?
    Спасибо.
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Создавайте Внешнюю печатную форму, коди макет - вытащие из УПп скопокойно
  3. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    То что можно сохранить отчеты и обработки как внешнюю обработку отчет я знаю. Я в документе ТребованиеНакладная, зашел в макеты, там есть нужный мне макет. Как его как внешний отчет-обработка сохранить?
  4. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
  5. Vitalik85
    Offline

    Vitalik85 Опытный в 1С

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

    Vitalik85 Опытный в 1С

    Регистрация:
    29 мар 2011
    Сообщения:
    147
    Симпатии:
    0
    Баллы:
    26
    Как функцию назвать? В примере:
    Код:
    Функция ПечатьСчетаЗаказа(Тип)
    
    Опять же в примере:
    Код:
    ТабДокумент = ПечатьСчетаЗаказа(ИмяМакета);
    
    А у меня
    Код:
    ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Ссылка, ИмяМакета);
    
    Не могу понять, видимо механизм поменяли.
  7. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.400
    Симпатии:
    40
    Баллы:
    54
    Пример на БП
    Посмотреть вложение 14730
    Посмотреть вложение 14731
    Из справки в 1С

    Вложения:

  8. Vitalik85
    Offline

    Vitalik85 Опытный в 1С

    Регистрация:
    29 мар 2011
    Сообщения:
    147
    Симпатии:
    0
    Баллы:
    26
    А как быть вот с такими функциями?
    Код:
    Функция НапечататьВнешнююФорму(Ссылка, ИсточникМакета) Экспорт
    
    С параметром ссылка понятно, указать на документ. А что такое за параметр ИсточникМакета?
  9. Vitalik85
    Offline

    Vitalik85 Опытный в 1С

    Регистрация:
    29 мар 2011
    Сообщения:
    147
    Симпатии:
    0
    Баллы:
    26
    Не удалось сформировать внешнюю печатную форму!
    Поле объекта не обнаружено (ИсточникМакета)

    Вот исходная функция.
    Код:
    Функция НапечататьВнешнююФорму(Ссылка, ИсточникМакета) Экспорт
    
    Перем ДополнительныеПараметры;
    
    ДвоичныеДанные = ИсточникМакета.СсылкаНаВнешнююОбработку.Принадлежность[ИсточникМакета.НомерСтроки - 1].ХранилищеВнешнейОбработки.Получить();
    
    // Получить дополнительные параметры внешней обработки
    ИсточникМакета.Свойство("ДополнительныеПараметрыОбработки", ДополнительныеПараметры);
    
    Если ДвоичныеДанные = Неопределено Тогда
    ДвоичныеДанные = ИсточникМакета.СсылкаНаВнешнююОбработку.ХранилищеВнешнейОбработки.Получить();
    КонецЕсли;
    
    Если ДвоичныеДанные = Неопределено Тогда
    Возврат Неопределено;
    КонецЕсли;
    
    ТабДокумент = Неопределено;
    
    ИмяФайла = ПолучитьИмяВременногоФайла("epf");
    Попытка
    ДвоичныеДанные.Записать(ИмяФайла);
    Обработка = ВнешниеОбработки.Создать(ИмяФайла);
    Обработка.СсылкаНаОбъект = Ссылка;
    
    // Передать внешней обработке дополнительные параметры
    Если ДополнительныеПараметры <> Неопределено Тогда
    
    // Если у внешней обработки есть реквизит для дополнительных параметров, присвоить ему значение
    Если НЕ Обработка.Метаданные().Реквизиты.Найти("ДополнительныеПараметры") = Неопределено Тогда
    Обработка.ДополнительныеПараметры = ДополнительныеПараметры;
    КонецЕсли;
    
    КонецЕсли;
    
    ТабДокумент = Обработка.Печать();
    УдалитьФайлы(ИмяФайла);
    Исключение
    ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),, "Не удалось сформировать внешнюю печатную форму!");
    КонецПопытки;
    
    Возврат ТабДокумент;
    
    КонецФункции
    
    Добавил реквизит в виде ссылки на документ ТребованиеНакладная, назвал его СсылкаНаДокумент
  10. Vitalik85
    Offline

    Vitalik85 Опытный в 1С

    Регистрация:
    29 мар 2011
    Сообщения:
    147
    Симпатии:
    0
    Баллы:
    26
    Подскажите, а откуда взялись эти внешние печатные формы? Они вручную формировались или нет?
    Вопрос в том, я никак не могу понять откуда берется этот модуль.
    Эта строка у меня в модуле объекта даже близко не встречается.
    Код:
    СтруктураПолей.Вставить("МатериалНаименование",		 "Номенклатура.НаименованиеПолное");
    
    
  11. Vitalik85
    Offline

    Vitalik85 Опытный в 1С

    Регистрация:
    29 мар 2011
    Сообщения:
    147
    Симпатии:
    0
    Баллы:
    26
    В очередной раз обращаюсь к вам, не могу найти исполняемый модуль печатный формы М11 в УПП.
    В документе ТребованиеНакладная
    Код:
    Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
    ссылается на
    Код:
    Функция НапечататьВнешнююФорму(Ссылка, ИсточникМакета) Экспорт
    В этих модулях даже и близко нету самого кода для отбора, заполнения формы итд.
    Не могу найти код, а хочу понять принцип работы.
    Пересмотрел все статьи и видеоуроки, там на конкретную форму ссылается, а тут на общую без нужного мне кода.
    Если кто-нибудь может помогите разобраться, где же в конфигураторе спрятан нужный мне код.
    Спасибо.
  12. Vitalik85
    Offline

    Vitalik85 Опытный в 1С

    Регистрация:
    29 мар 2011
    Сообщения:
    147
    Симпатии:
    0
    Баллы:
    26
    РАЗОБРАЛСЯ!!! В самом объекте код нужно брать не из модуля объекта, а из Модуля менеджера.
  13. Vitalik85
    Offline

    Vitalik85 Опытный в 1С

    Регистрация:
    29 мар 2011
    Сообщения:
    147
    Симпатии:
    0
    Баллы:
    26
    Код:
    // Сформировать печатные формы объектов
    // ВХОДЯЩИЕ:
    //   МассивОбъектов  - Массив    - Массив ссылок на объекты которые нужно распечатать
    // ИСХОДЯЩИЕ:
    //   ОбъектыПечати		 - Список значений  - Объекты печати (значение - ссылка на объект, представление - имя области в которой был выведен объект)
    
    Функция ПечатьМ11(МассивОбъектов, ОбъектыПечати) Экспорт
    
    ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
    Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
    ТоварКод = "Артикул";
    Иначе
    ТоварКод = "Код";
    КонецЕсли;
    
    ТекстЗапроса_Шапка =
    "ВЫБРАТЬ
    |    Ссылка.Номер    КАК НомерДокумента,
    |    Ссылка.Дата    КАК ДатаДокумента,
    |    Ссылка.Дата    КАК ДатаСоставления,
    |    Ссылка.Организация,
    |    Ссылка.Склад,
    |    Ссылка.ПодразделениеОрганизации КАК Подразделение
    |    //ПОЛЕ_КорСчет, ВЫБОР КОГДА КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СчетЗатрат) = 1 ТОГДА
    |    //ПОЛЕ_КорСчет    МИНИМУМ(СчетЗатрат)
    |    //ПОЛЕ_КорСчет ИНАЧЕ """" КОНЕЦ КАК КоррСчет
    |ИЗ
    |    Документ.ТребованиеНакладная КАК ТребованиеНакладная
    |
    |ГДЕ
    |    ТребованиеНакладная.Ссылка = &ТекущийДокумент
    |//ПОЛЕ_КорСчет СГРУППИРОВАТЬ ПО Ссылка";
    
    ТекстЗапроса_Материалы = "
    |ВЫБРАТЬ
    |    ТребованиеНакладная.Номенклатура,
    |    ВЫРАЗИТЬ(ТребованиеНакладная.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)) КАК МатериалНаименование,
    |    ТребованиеНакладная.Номенклатура." + ТоварКод + " КАК НоменклатурныйНомер,
    |    ТребованиеНакладная.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмеренияНаименование,
    |    ТребованиеНакладная.ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКод,
    |    ТребованиеНакладная.Характеристика,
    |    ТребованиеНакладная.Серия,
    |    ТребованиеНакладная.Количество,
    |    ТребованиеНакладная.Счет,
    |    ТребованиеНакладная.НомерСтроки КАК НомерСтроки,
    |    ВЫРАЗИТЬ(
    |        ЕСТЬNULL(ТаблицаСебестоимостиОбороты.Стоимость, 0)
    |        * ТребованиеНакладная.Количество
    |        * ТребованиеНакладная.Коэффициент
    |        / ЕСТЬNULL(ТребованиеНакладная.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 1)
    |        / ЕСТЬNULL(ТаблицаСебестоимостиОбороты.Количество, 1)
    |     КАК ЧИСЛО(15,2) ) КАК Сумма
    |ИЗ (
    |    ВЫБРАТЬ
    |        ТребованиеНакладная.Номенклатура,
    |        ТребованиеНакладная.ЕдиницаИзмерения,
    |        ТребованиеНакладная.Коэффициент,
    |        ТребованиеНакладная.Счет,
    |        ТребованиеНакладная.ХарактеристикаНоменклатуры КАК Характеристика,
    |        ТребованиеНакладная.СерияНоменклатуры КАК Серия,
    |        СУММА(ТребованиеНакладная.Количество) КАК Количество,
    |        МИНИМУМ(ТребованиеНакладная.НомерСтроки) КАК НомерСтроки
    |    ИЗ
    |        Документ.ТребованиеНакладная.Материалы КАК ТребованиеНакладная
    |    ГДЕ
    |        ТребованиеНакладная.Ссылка = &ТекущийДокумент
    |    
    |    СГРУППИРОВАТЬ ПО
    |        ТребованиеНакладная.Номенклатура,
    |        ТребованиеНакладная.ЕдиницаИзмерения,
    |        ТребованиеНакладная.Коэффициент,
    |        ТребованиеНакладная.ХарактеристикаНоменклатуры,
    |        ТребованиеНакладная.СерияНоменклатуры,
    |        ТребованиеНакладная.Счет
    |    ) КАК ТребованиеНакладная
    |
    |    ЛЕВОЕ СОЕДИНЕНИЕ
    |        ТаблицаСебестоимостиОбороты КАК ТаблицаСебестоимостиОбороты
    |        ПО ТребованиеНакладная.Номенклатура = ТаблицаСебестоимостиОбороты.Номенклатура
    |            И ТаблицаСебестоимостиОбороты.Регистратор = &Регистратор
    |            И ((ТребованиеНакладная.Характеристика = ТаблицаСебестоимостиОбороты.ХарактеристикаНоменклатуры)
    |                ИЛИ (ТаблицаСебестоимостиОбороты.ХарактеристикаНоменклатуры = ""Не используется""))
    |            И ((ТребованиеНакладная.Серия = ТаблицаСебестоимостиОбороты.СерияНоменклатуры)
    |                ИЛИ (ТаблицаСебестоимостиОбороты.СерияНоменклатуры = ""Не используется""))
    |            И ((ТребованиеНакладная.Счет = ТаблицаСебестоимостиОбороты.СчетУчета)
    |                ИЛИ (ТаблицаСебестоимостиОбороты.СчетУчета = ""Не используется""))
    |        
    |ГДЕ
    |    ТаблицаСебестоимостиОбороты.Регистратор = &ТекущийДокумент
    |    ИЛИ ТаблицаСебестоимостиОбороты.Регистратор ЕСТЬ NULL
    |
    |УПОРЯДОЧИТЬ ПО
    |    НомерСтроки
    |";
    
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ТребованиеНакладная_М11";
    
    // Вывод заголовка
    Макет = ПолучитьОбщийМакет("М11");
    
    ПервыйДокумент = Истина;
    
    Для Каждого Ссылка Из МассивОбъектов Цикл
    
    Если Не ПервыйДокумент Тогда
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    
    ПервыйДокумент = Ложь;
    
    НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка);
    Запрос.Текст = ТекстЗапроса_Шапка;
    Если Ссылка.ОтражатьВБухгалтерскомУчете Тогда
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "Документ.ТребованиеНакладная", "Документ.ТребованиеНакладная.Материалы");
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "//ПОЛЕ_КорСчет", "");
    Иначе
    Запрос.Текст = СтрЗаменить(Запрос.Текст,"Ссылка.", "");
    Запрос.Текст = СтрЗаменить(Запрос.Текст,"ПодразделениеОрганизации", "Подразделение");
    КонецЕсли;
    
    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();
    
    СтруктраПараметров = Новый Структура();
    СтруктраПараметров.Вставить("ТекущийДокумент", Ссылка);
    СтруктраПараметров.Вставить("Регистратор", Ссылка);
    СтруктраПараметров.Вставить("НачГраница", Новый Граница(Ссылка.Дата, ВидГраницы.Включая));
    
    ТекстЗапроса = ТекстЗапроса_Материалы;
    
    ТаблицаЗатрат = УправлениеЗапасами.ПолучитьТаблицуЗатратДляПечатиИЗаполненияДокументов(Ссылка, ТекстЗапроса, СтруктраПараметров);
    
    Если ТаблицаЗатрат = Неопределено Тогда
    Продолжить;
    КонецЕсли;    
    
    Область = Макет.ПолучитьОбласть("Шапка");
    Область.Параметры.Заголовок	 = "ТРЕБОВАНИЕ-НАКЛАДНАЯ № " + Строка(Шапка.НомерДокумента);
    Область.Параметры.Заполнить(Шапка);
    
    СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);
    
    Область.Параметры.ПредставлениеОрганизации   = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОбОрганизации);
    Область.Параметры.ПредставлениеПодразделения = Шапка.Подразделение;
    Область.Параметры.КодОКПО				    = СведенияОбОрганизации.КодПоОКПО;
    
    ТабДокумент.Вывести(Область);
    
    Для Каждого ВыборкаПоСтрокам Из ТаблицаЗатрат Цикл
    
    Область = Макет.ПолучитьОбласть("Строка");
    Область.Параметры.Заполнить(ВыборкаПоСтрокам);
    Область.Параметры.Цена = ?( ВыборкаПоСтрокам.Количество = 0, ВыборкаПоСтрокам.Сумма, Окр(ВыборкаПоСтрокам.Сумма / ВыборкаПоСтрокам.Количество, 2, 1));
    Область.Параметры.МатериалНаименование = СокрЛП(ВыборкаПоСтрокам.МатериалНаименование) + ФормированиеПечатныхФормСервер.ПредставлениеСерий(ВыборкаПоСтрокам);
    
    ТабДокумент.Вывести(Область);
    
    КонецЦикла;
    
    Область = Макет.ПолучитьОбласть("Подвал");
    ТабДокумент.Вывести(Область);
    УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДокумент, НомерСтрокиНачало, ОбъектыПечати, Ссылка);
    
    КонецЦикла;
    Возврат ТабДокумент;
    
    КонецФункции // ПечатьМ11()
    
    К чему приравнять значения:
    МассивОбъектов
    ОбъектыПечати

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