8.х Обработка печати адресов на конверте

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем retker, 4 фев 2014.

  1. TopicStarter Overlay
    retker
    Offline

    retker Опытный в 1С

    Регистрация:
    12 дек 2013
    Сообщения:
    124
    Симпатии:
    0
    Баллы:
    26
    Доброго времени суток, имеется задача печатать адрес средствами 1С на конвертах а4, а5 и Е65. В инете нашел обработку которая печатает, но с использованием сторонней программы, я решил сделать через макеты. Но столкнулся с проблемой не могу понять как мне вытащить индексы адресов на макет. На данный момент обработка запускается, формирует макет, в котором забито: От кого, Откуда, Кому и Куда. Осталось только индексы брать, но что-то я не могу понять что как надо прописать, подскажите.
    Код:
    Код:
    Перем целеваяОрганизация;
    Перем ИндексОтправителя;
    Перем ИндексПолучателя;
    Перем НазванияВариантовОтКого;
    Перем ЗначенияВариантовОтКого;
    Перем НазванияВариантовОткуда;
    Перем ЗначенияВариантовОткуда;
    Перем НазванияВариантовКому;
    Перем ЗначенияВариантовКому;
    Перем НазванияВариантовКуда;
    Перем ЗначенияВариантовКуда;
    Процедура ДобОтКого(название,значение)
    НазванияВариантовОтКого.Добавить(название);
    ЗначенияВариантовОтКого.Добавить(значение);
    КонецПроцедуры
    Процедура ДобОткуда(название,значение)
    НазванияВариантовОткуда.Добавить(название);
    ЗначенияВариантовОткуда.Добавить(значение);
    КонецПроцедуры
    Процедура ДобКому(название,значение)
    НазванияВариантовКому.Добавить(название);
    ЗначенияВариантовКому.Добавить(значение);
    КонецПроцедуры
    Процедура ДобКуда(название,значение)
    НазванияВариантовКуда.Добавить(название);
    ЗначенияВариантовКуда.Добавить(значение);
    КонецПроцедуры
    Процедура ДобКудаК(к, название, названиеОписания)
    перем ТекущаяДата;
    перем СведенияОбОрганизации;
    перем Куда;
    
    ТекущаяДата= ТекущаяДата();
    СведенияОбОрганизации= УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(к, ТекущаяДата);
    Куда= ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации, названиеОписания);
    ДобКуда(название,Куда);
    КонецПроцедуры
    Процедура ДобНННН(название,значение,названия,значения)
    перем индекс;
    индекс= 0;
    пока индекс<названия.Количество() цикл
    если (строка(названия[индекс])=строка(название)) и (строка(значения[индекс])=строка(значение)) тогда
    возврат;
    конецесли;
    индекс= индекс+1;
    конеццикла;
    названия.Добавить(название);
    значения.Добавить(значение);
    КонецПроцедуры
    Процедура ЗаполнитьВариантыНаименования(к,названия,значения)
    названия.Очистить();
    значения.Очистить();
    Попытка ДобНННН("Наименование",			 к.Наименование,				   названия,значения); Исключение КонецПопытки;
    Попытка ДобНННН("Наименование полное",	  к.НаименованиеПолное,			 названия,значения); Исключение КонецПопытки;
    Попытка ДобНННН("Название",				 к.НазваниеОрганизации,			названия,значения); Исключение КонецПопытки;
    Попытка ДобНННН("Официальное название",	 к.ОфициальноеНазваниеОрганизации, названия,значения); Исключение КонецПопытки;
    Попытка ДобНННН("Полное наименование",	  к.ПолнНаименование,			   названия,значения);  Исключение КонецПопытки;
    Попытка ДобНННН("Наименование сокращённое", к.НаименованиеСокращенное,		названия,значения);  Исключение КонецПопытки;
    Попытка ДобНННН("Наименование плательщика при перечислении налогов",
    к.НаименованиеПлательщикаПриПеречисленииНалогов,
    названия,значения);
    Исключение КонецПопытки;
    КонецПроцедуры
    Процедура ЗаполнитьВариантыАдреса(к,названия,значения)
    перем ТекущаяДата;
    перем СведенияОЮрФизЛице;
    перем Адрес;
    названия.Очистить();
    значения.Очистить();
    Попытка ДобНННН("Юридический адрес",		  к.ЮридическийАдрес,	   названия,значения);  Исключение КонецПопытки;
    Попытка ДобНННН("Почтовый адрес",			 к.ПочтовыйАдрес,		  названия,значения);  Исключение КонецПопытки;
    Попытка ДобНННН("Адрес прописки",			 к.АдресПрописка,		  названия,значения);  Исключение КонецПопытки;
    Попытка ДобНННН("Адрес фактический",		  к.АдресФакт,			  названия,значения);  Исключение КонецПопытки;
    Попытка ДобНННН("Адрес в стране проживания",  к.АдресВСтранеПроживания, названия,значения);  Исключение КонецПопытки;
    Попытка ДобНННН("Адрес",					  к.Адрес,				  названия,значения);  Исключение КонецПопытки;
    
    
    ТекущаяДата= ТекущаяДата();
    Попытка
    СведенияОЮрФизЛице= УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(к, ТекущаяДата);
    Попытка
    ДобНННН("Юридический адрес",ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЮрФизЛице, "ЮридическийАдрес"),
    названия,значения);
    Исключение КонецПопытки;
    Попытка
    ДобНННН("Фактический адрес",ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЮрФизЛице, "ФактическийАдрес"),
    названия,значения);
    Исключение КонецПопытки;
    Исключение КонецПопытки;
    Попытка
    Адрес= РегламентированнаяОтчетность.ПолучитьСведенияОбОрганизации(к, ТекущаяДата, "АдрПочт").АдрПочт;
    Если (НЕ РегламентированнаяОтчетность.ПустоеЗначение(СтрЗаменить(Адрес, ",", ""))) Тогда
    Адрес= РегламентированнаяОтчетность.ПредставлениеАдресаВФормате9Запятых(Адрес);
    ДобНННН("Почтовый адрес",Адрес,названия,значения);
    КонецЕсли;
    Исключение КонецПопытки;
    Попытка
    ЗапросАдреса = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ
    | КонтактнаяИнформация.Представление,
    | КонтактнаяИнформация.Объект,
    | КонтактнаяИнформация.Тип,
    | КонтактнаяИнформация.Вид,
    | КонтактнаяИнформация.Поле1,
    | КонтактнаяИнформация.Поле2,
    | КонтактнаяИнформация.Поле3,
    | КонтактнаяИнформация.Поле4,
    | КонтактнаяИнформация.Поле5,
    | КонтактнаяИнформация.Поле6,
    | КонтактнаяИнформация.Поле7,
    | КонтактнаяИнформация.Поле8,
    | КонтактнаяИнформация.Поле9,
    | КонтактнаяИнформация.Поле10,
    | КонтактнаяИнформация.Вид
    |ИЗ
    | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    | КонтактнаяИнформация.Объект = &Объект
    | И КонтактнаяИнформация.Тип = &Тип");
    ЗапросАдреса.УстановитьПараметр("Объект", к);
    ЗапросАдреса.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);
    Выборка = ЗапросАдреса.Выполнить().Выбрать();
    пока Выборка.Следующий() цикл
    попытка
    ДобНННН(Выборка.Вид,Выборка.Представление,названия,значения);
    Исключение КонецПопытки;
    конеццикла;
    Исключение КонецПопытки;
    
    КонецПроцедуры
    Процедура ЗаполнитьВариантыОтКого()
    //Попытка ДобОтКого("Название организации",			 Константа.НазваниеОрганизации);	   Исключение КонецПопытки;
    //Попытка ДобОтКого("Официальное название организации", Константа.ОфициальноеНазваниеОрганизации);  Исключение КонецПопытки;
    ЗаполнитьВариантыНаименования(целеваяОрганизация,НазванияВариантовОтКого,ЗначенияВариантовОтКого);
    КонецПроцедуры
    Процедура ЗаполнитьВариантыОткуда()
    //Попытка ДобОткуда("Юридический адрес организации",  Константа.АдресОрганизации);	  Исключение КонецПопытки;
    //Попытка ДобОткуда("Почтовый адрес организации",   Константа.ПочтовыйАдресОрганизации);  Исключение КонецПопытки;
    ЗаполнитьВариантыАдреса(целеваяОрганизация,НазванияВариантовОткуда,ЗначенияВариантовОткуда);
    КонецПроцедуры
    Процедура ЗаполнитьВариантыКому(к)
    ЗаполнитьВариантыНаименования(к,НазванияВариантовКому,ЗначенияВариантовКому);
    КонецПроцедуры
    Процедура ЗаполнитьВариантыКуда(к)
    ЗаполнитьВариантыАдреса(к,НазванияВариантовКуда,ЗначенияВариантовКуда);
    КонецПроцедуры
    Процедура ПечататьКонверт(к, название, значение)
    
    Попытка
    ЗапросАдреса = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ
    | КонтактнаяИнформация.Представление,
    | КонтактнаяИнформация.Объект,
    | КонтактнаяИнформация.Тип,
    | КонтактнаяИнформация.Вид,
    | КонтактнаяИнформация.Поле1,
    | КонтактнаяИнформация.Поле2,
    | КонтактнаяИнформация.Поле3,
    | КонтактнаяИнформация.Поле4,
    | КонтактнаяИнформация.Поле5,
    | КонтактнаяИнформация.Поле6,
    | КонтактнаяИнформация.Поле7,
    | КонтактнаяИнформация.Поле8,
    | КонтактнаяИнформация.Поле9,
    | КонтактнаяИнформация.Поле10,
    | КонтактнаяИнформация.Вид
    |ИЗ
    | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    | КонтактнаяИнформация.Объект = &Объект
    | И КонтактнаяИнформация.Тип = &Тип");
    ЗапросАдреса.УстановитьПараметр("Объект", к);
    ЗапросАдреса.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);
    Выборка = ЗапросАдреса.Выполнить().Выбрать();
    пока Выборка.Следующий() цикл
    попытка
    ДобНННН(Выборка.Вид,Выборка.Представление,названия,значения);
    Исключение КонецПопытки;
    конеццикла;
    Исключение КонецПопытки;
    
    
    Макет = ПолучитьМакет("E65");
    Область = Макет.ПолучитьОбласть("ОбластьКонверта");
    Область.Параметры.ОтКого = ОтКого;
    Область.Параметры.ОтКуда = Откуда;
    //  Область.Параметры.Рисунок.ИндексОтправителя =
    Область.Параметры.Кому = Кому;
    Область.Параметры.Куда = Куда;
    //  Область.Параметры.Рисунок.ИндексПолучателя =
    
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.АвтоМасштаб = Истина;
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    ТабДок.Вывести(Область);
    
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДок);
    КонецПроцедуры
    Процедура Печатать()
    ПечататьКонверт();
    КонецПроцедуры
    Процедура ЗаполнитьВариантыДляОорганизации()
    ЗаполнитьВариантыОтКого();
    ЗаполнитьВариантыОткуда();
    КонецПроцедуры
    Процедура ЗаполнитьВарианты(к)
    Попытка
    целеваяОрганизация= глЗначениеПеременной("ОсновнаяОрганизация");
    Исключение КонецПопытки;
    ЗаполнитьВариантыДляОорганизации();
    ЗаполнитьВариантыКому(к);
    ЗаполнитьВариантыКуда(к);
    КонецПроцедуры
    Процедура ОтКогоВариантПриСмене()
    ОтКого= ЗначенияВариантовОтКого[ОтКогоВариант];
    КонецПроцедуры
    Процедура ОткудаВариантПриСмене()
    Откуда= ЗначенияВариантовОткуда[ОткудаВариант];
    КонецПроцедуры
    Процедура КомуВариантПриСмене()
    Кому= ЗначенияВариантовКому[КомуВариант];
    КонецПроцедуры
    Процедура КудаВариантПриСмене()
    Куда= ЗначенияВариантовКуда[КудаВариант];
    КонецПроцедуры
    Процедура ЗаполнитьЭлементыУправленияОрганизации()
    перем индекс;
    
    Если НазванияВариантовОтКого.Количество()=0 Тогда
    ЭлементыФормы.ОтКогоВариант.Видимость= 0;
    ЭлементыФормы.ОтКогоВариантМетка.Видимость= 0;
    Иначе
    ЭлементыФормы.ОтКогоВариант.СписокВыбора.Очистить();
    индекс= 0;
    пока индекс<НазванияВариантовОтКого.Количество() цикл
    ЭлементыФормы.ОтКогоВариант.СписокВыбора.Добавить(индекс,НазванияВариантовОтКого[индекс]);
    индекс= индекс+1;
    конеццикла;
    ОтКого= ЗначенияВариантовОтКого[0];
    ОтКогоВариант= 0;
    КонецЕсли;
    Если НазванияВариантовОткуда.Количество()=0 Тогда
    ЭлементыФормы.ОткудаВариант.Видимость= 0;
    ЭлементыФормы.ОткудаВариантМетка.Видимость= 0;
    Иначе
    ЭлементыФормы.ОткудаВариант.СписокВыбора.Очистить();
    индекс= 0;
    пока индекс<НазванияВариантовОткуда.Количество() цикл
    ЭлементыФормы.ОткудаВариант.СписокВыбора.Добавить(индекс,НазванияВариантовОткуда[индекс]);
    индекс= индекс+1;
    конеццикла;
    Откуда= ЗначенияВариантовОткуда[0];
    ОткудаВариант= 0;
    КонецЕсли;
    КонецПроцедуры
    Процедура ОрганизацияСмене()
    целеваяОрганизация= Организация;
    ЗаполнитьВариантыДляОорганизации();
    ЗаполнитьЭлементыУправленияОрганизации();
    КонецПроцедуры
    Процедура ЗаполнитьЭлементыУправления()
    перем индекс;
    Организация= целеваяОрганизация;
    ЗаполнитьЭлементыУправленияОрганизации();
    Если НазванияВариантовКому.Количество()=0 Тогда
    //ЭлементыФормы.КомуВариант.Видимость= 0;
    //ЭлементыФормы.КомуВариантМетка.Видимость= 0;
    Иначе
    индекс= 0;
    пока индекс<НазванияВариантовКому.Количество() цикл
    ЭлементыФормы.КомуВариант.СписокВыбора.Добавить(индекс,НазванияВариантовКому[индекс]);
    индекс= индекс+1;
    конеццикла;
    Кому= ЗначенияВариантовКому[0];
    КомуВариант= 0;
    КонецЕсли;
    
    Если НазванияВариантовКуда.Количество()=0 Тогда
    ЭлементыФормы.КудаВариант.Видимость= 0;
    ЭлементыФормы.КудаВариантМетка.Видимость= 0;
    Иначе
    индекс= 0;
    пока индекс<НазванияВариантовКуда.Количество() цикл
    ЭлементыФормы.КудаВариант.СписокВыбора.Добавить(индекс,НазванияВариантовКуда[индекс]);
    индекс= индекс+1;
    конеццикла;
    Куда= ЗначенияВариантовКуда[0];
    КудаВариант= 0;
    КонецЕсли;
    
    ВидДокумента= "Конверт";
    КонецПроцедуры
    Процедура ПриОткрытии()
    ЗаполнитьВарианты(СсылкаНаОбъект);
    ЗаполнитьЭлементыУправления();
    КонецПроцедуры	  
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    КонецПроцедуры
    Процедура ПечататьНажатие(Элемент)
    Печатать();
    КонецПроцедуры
    Процедура ОтКогоВариантПриИзменении(Элемент)
    ОтКогоВариантПриСмене()
    КонецПроцедуры
    Процедура ОткудаВариантПриИзменении(Элемент)
    ОткудаВариантПриСмене()
    КонецПроцедуры
    Процедура КомуВариантПриИзменении(Элемент)
    КомуВариантПриСмене()
    КонецПроцедуры
    Процедура КудаВариантПриИзменении(Элемент)
    КудаВариантПриСмене()
    КонецПроцедуры
    Процедура ОрганизацияПриИзменении(Элемент)
    ОрганизацияСмене();
    КонецПроцедуры
    НазванияВариантовОтКого= Новый Массив();
    ЗначенияВариантовОтКого= Новый Массив();
    НазванияВариантовОткуда= Новый Массив();
    ЗначенияВариантовОткуда= Новый Массив();
    НазванияВариантовКому= Новый Массив();
    ЗначенияВариантовКому= Новый Массив();
    НазванияВариантовКуда= Новый Массив();
    ЗначенияВариантовКуда= Новый Массив();
    
  2. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Где хранятся индексы ?
  3. TopicStarter Overlay
    retker
    Offline

    retker Опытный в 1С

    Регистрация:
    12 дек 2013
    Сообщения:
    124
    Симпатии:
    0
    Баллы:
    26
    Индекс хранится в КонтактнаяИнформация.Поле1, но не только он если сделать запрос без параметров т.е. просто вывести все что есть в таблице РегистрыСведений.КонтактнаяИнформация, то получим, что в Поле1 хранится и код страны +7, и индекс пример на скриншоте 1 и индекс нужно выбирать по полю тип, т.е. тип = адрес и поле1 = индекс, если тип = телефон, то поле1 = +7 или "Югославия" для иностранного государства.

    Вложения:

  4. TopicStarter Overlay
    retker
    Offline

    retker Опытный в 1С

    Регистрация:
    12 дек 2013
    Сообщения:
    124
    Симпатии:
    0
    Баллы:
    26
    Так же еще в процедуре ПечататьКонверт(), которая в коде с параметрами и запросом, выглядит в полурабочем состоянии без запроса и параметров, в ней описывается только работа с макетом.
    т.е. Выглядеть она должна так
    Код:
    Процедура ПечататьКонверт()
    Макет = ПолучитьМакет("E65");
    Область = Макет.ПолучитьОбласть("ОбластьКонверта");
    Область.Параметры.ОтКого = ОтКого;
    Область.Параметры.ОтКуда = Откуда;
    Область.Параметры.Кому = Кому;
    Область.Параметры.Куда = Куда;
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.АвтоМасштаб = Истина;
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    ТабДок.Вывести(Область);
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДок);
    КонецПроцедуры
  5. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Посмотрите в типовой как выбираются адреса и телефоны, помню что там через структуру выбираются, через обращение к соответствующим полям (т.е. через тип КИ)
  6. TopicStarter Overlay
    retker
    Offline

    retker Опытный в 1С

    Регистрация:
    12 дек 2013
    Сообщения:
    124
    Симпатии:
    0
    Баллы:
    26
    А насколько правильно будет, если я буду брать целиком адрес, который уже есть в переменных Откуда и Куда и выбирать первые шесть символов (они будут символами индекса).

    И еще как правильно с полем выбора работать, мне нужно, чтобы можно было выдрать из этой компоненты соответствующий макет конверта?
  7. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    То что будете вырезать - велосипед с квадратными колесами. Что помешает пользователю перенести индекс в другую часть или вообще не заполнит ?
    Смотрите как в типовых все это работает.

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