Как стать автором
Обновить

1С: Предприятие — Как напечатать адреса для конвертов

Время на прочтение9 мин
Количество просмотров5.1K
image

Всем, кто ведет свои дела официально, знакома такая рутинная операция, как отправка счетов и актов контрагентам. И с увеличением количества партнеров Вашего бизнеса, операция становится все неприятнее.

Чтобы рутинный труд стал приятнее, нужно его автоматизировать!

В этой статье я расскажу как делал обработку для «1С: Предприятие 8» для печати адресов для конвертов. В своей работе я использую конфигурацию «1С: Упрощенка 8», поэтому все рассказанное будет относится к ней. Для рассылки документов используются конверты формата С5 с окошком (адрес печатается на обычном листе А4, который вкладывается в конверт).

Для нетерпеливых в конце поста есть ссылка на загрузку готовой обработки.

Создаем печатную форму


Запускаем 1С-ку в режиме конфигуратора и создаем новую Внешнюю обработку:



В открывшемся окне обработки кликаем правой кнопкой по Реквизитам и выбираем Добавить:



Вводим имя «СсылкаНаОбъект» и выбираем тип «СправочникСсылка.Контрагенты»:



Тут будет храниться ссылка на запись из справочника «Контрагенты», из которой будет извлекаться информация об адресе.

Следующий шаг — создание печатного макета. Правая кнопка мыши на Макет и выбираем Добавить. Нам нужен тип Табличный документ:



Вид макета зависит от вида и формата конверта, на котором вы будете печатать. Для С5 с окошком получается примерно так:



Закончив с макетом — выделяем строки для печати и делаем так:



Вводим имя «Адрес». Чтобы в ячейки созданного макета можно было записывать значения, нужно в свойствах ячейки, в разделе Макет в Заполнении выбрать Параметр, а в Параметр написать название. У меня это НаименованиеПолучателя, АдресПолучателя и ИндексПолучателя (см. скриншот с макетом).

Макет готов. Пишем код, который будет заполнять его данными.

Пишем код модуля


Для этого на форме обработки находим кнопку Действия (внизу) и выбираем Открыть модуль объекта
Функция ПолучитьАдресКонтрагента(Объект)  <br/>  <br/>    Запрос = Новый Запрос;  <br/>    Запрос.Текст = "  <br/>    |ВЫБРАТЬ РАЗРЕШЕННЫЕ  <br/>    | КонтактнаяИнформация.Представление КАК Представление  <br/>    |ИЗ  <br/>    | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация  <br/>    |  <br/>    |ГДЕ  <br/>    | КонтактнаяИнформация.Объект = &Объект  <br/>    |   И КонтактнаяИнформация.Вид = &Вид  <br/>    |   И КонтактнаяИнформация.Тип = &Тип";  <br/>  <br/>    Запрос.УстановитьПараметр("Объект", Объект);  <br/>    Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента);  <br/>    Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);  <br/>  <br/>    ДанныеЗапроса = Запрос.Выполнить().Выгрузить(); <br/>    Возврат ?(ДанныеЗапроса.Количество() = 0"", ДанныеЗапроса[0].Представление) <br/> <br/>КонецФункции // ПолучитьАдресКонтрагента() <br/> <br/>Функция ПолучитьАдресКонтакта(Объект)  <br/>  <br/>    Запрос = Новый Запрос;  <br/>    Запрос.Текст = "  <br/>    |ВЫБРАТЬ РАЗРЕШЕННЫЕ  <br/>    | КонтактнаяИнформация.Представление КАК Представление  <br/>    |ИЗ  <br/>    | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация  <br/>    |  <br/>    |ГДЕ  <br/>    | КонтактнаяИнформация.Объект = &Объект  <br/>    |   И КонтактнаяИнформация.Тип = &Тип";  <br/>  <br/>    Запрос.УстановитьПараметр("Объект", Объект);  <br/>    Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);  <br/>             <br/>    ДанныеЗапроса = Запрос.Выполнить().Выгрузить();     <br/>    Возврат ?(ДанныеЗапроса.Количество() = 0"", ДанныеЗапроса[0].Представление) <br/> <br/>КонецФункции // ПолучитьАдресКонтакта() <br/> <br/>Функция ПолучитьПредставлениеКонтактногоЛица(КонтактноеЛицо)  <br/>  <br/>    Запрос = Новый Запрос;  <br/>    Запрос.Текст = "  <br/>    |ВЫБРАТЬ РАЗРЕШЕННЫЕ   <br/>    | КонтактныеЛица.Представление  КАК Представление  <br/>    |ИЗ  <br/>    | Справочник.КонтактныеЛица КАК КонтактныеЛица  <br/>    |  <br/>    |ГДЕ  <br/>    | КонтактныеЛица.Ссылка = &КонтактноеЛицо  <br/>    |  <br/>    |УПОРЯДОЧИТЬ ПО  <br/>    | КонтактныеЛица.Наименование ВОЗР";  <br/>  <br/>    Запрос.УстановитьПараметр("КонтактноеЛицо", КонтактноеЛицо);   <br/>    ДанныеЗапроса = Запрос.Выполнить().Выгрузить(); <br/>    Возврат ?(ДанныеЗапроса.Количество() = 0"", ДанныеЗапроса[0].Представление) <br/> <br/>КонецФункции // ПолучитьПочтовыйАдрес() <br/> <br/>Функция ПечатьДокумента()  <br/>    Запрос = Новый Запрос;  <br/>    Запрос.Текст =   <br/>    "ВЫБРАТЬ  <br/>    |    Контрагенты.НаименованиеПолное,  <br/>    |    Контрагенты.ОсновноеКонтактноеЛицо  <br/>    |ИЗ  <br/>    |    Справочник.Контрагенты КАК Контрагенты  <br/>    |ГДЕ  <br/>    |    Контрагенты.Ссылка = &ТекущийКонтрагент";  <br/>    Запрос.УстановитьПараметр("ТекущийКонтрагент", СсылкаНаОбъект);  <br/>      <br/>    Контрагент = Запрос.Выполнить().Выбрать();  <br/>    Контрагент.Следующий();  <br/>      <br/>    ТабДокумент = Новый ТабличныйДокумент;  <br/>      <br/>    Макет = ПолучитьМакет("Макет");  <br/>    ОбластьМакета = Макет.ПолучитьОбласть("Адрес"); <br/>     <br/>    Если Контрагент.ОсновноеКонтактноеЛицо <> Неопределено Тогда  <br/>        КонтактПолучателя = ПолучитьПредставлениеКонтактногоЛица(Контрагент.ОсновноеКонтактноеЛицо); <br/>         <br/>        Если КонтактПолучателя <> "" Тогда  <br/>            ОбластьМакета.Параметры.НаименованиеПолучателя = КонтактПолучателя + " (" + Контрагент.НаименованиеПолное + ")";  <br/>        Иначе  <br/>            ОбластьМакета.Параметры.НаименованиеПолучателя = Контрагент.НаименованиеПолное; <br/>        КонецЕсли;  <br/>          <br/>        АдресКонтакта = ПолучитьАдресКонтакта(Контрагент.ОсновноеКонтактноеЛицо);  <br/>        Адрес = ?(АдресКонтакта = "", ПолучитьАдресКонтрагента(СсылкаНаОбъект), АдресКонтакта);  <br/>          <br/>        ОбластьМакета.Параметры.ИндексПолучателя = Лев(Адрес, 6);  <br/>        ОбластьМакета.Параметры.АдресПолучателя = Прав(Адрес, СтрДлина(Адрес) - 8);  <br/>    Иначе  <br/>        ОбластьМакета.Параметры.НаименованиеПолучателя = Контрагент.НаименованиеПолное;  <br/>        Адрес = ПолучитьАдресКонтрагента(СсылкаНаОбъект);  <br/>          <br/>        ОбластьМакета.Параметры.ИндексПолучателя = Лев(Адрес, 6);  <br/>        ОбластьМакета.Параметры.АдресПолучателя = Прав(Адрес, СтрДлина(Адрес) - 8); <br/>    КонецЕсли;  <br/>      <br/>    ТабДокумент.Вывести(ОбластьМакета); <br/>    Возврат ТабДокумент; <br/> <br/>КонецФункции // ПечатьДокумента() <br/> <br/>Функция Печать() Экспорт  <br/>    ТабДокумент = ПечатьДокумента(); <br/>    Возврат ТабДокумент; <br/>КонецФункции // Печать  <br/>

При выполнении модуля выполняется функция Печать(), которая возвращает форму, готовую к печати. Внутри этой функции стоит единственный вызов функции ПечатьДокумента(), которая отвечает за заполнение макета данными.

Что происходит внутри этой функции:
  • По ссылке на элемент из справочника Контрагенты выбираем полное наименование и контактное лицо
  • Подгружаем наш макет
  • Если у контрагента указано контактное лицо — выбираем его представление (ФИО). Если оно не пустое — в ячейку НаименованиеПолучателя запишется что-то типа Пупкин Василий Харитонович (ООО «Рога и Копыта»), иначе просто — ООО «Рога и копыта»
  • В АдресПолучателя записываем либо адрес контактного лица (если указан), либо фактический адрес контрагента, предварительно вырезав оттуда индекс, который записываем в ИндексПолучателя

На этом работа в конфигураторе закончена. Не забудьте сохранить нашу обработку.

Подключаем внешнюю печатную форму


Запускаем 1С в обычном режиме. В меню Сервис выбираем Дополнительные отчеты и обработкиДополнительные внешние печатные формы.



В Исходном файле кликаем по кнопке Открыть и выбираем наш файл с обработкой.



В разделе Принадлежность печатной формы кликаем Добавить и в открывшемся окне на вкладке Справочники выбираем Контрагенты.



Жмем OK.

Все. Готово. Можно перевести дыхание. :)

Теперь, если открыть список контрагентов (ПредприятиеКонтрагенты) и зайти в любого из них, в правой нижней части окна появится кнопка для печати адресов. При клике на которую откроется окно, подобное этому:



Ее можно напечатать через меню ФайлПечать

Готовую обработку можно скачать тут: АдресДляКонвертаФИО.zip

Успешного Вам ведения дел!
Теги:
Хабы:
Всего голосов 14: ↑8 и ↓6+2
Комментарии17

Публикации

Истории

Ближайшие события