Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 дек 2024, 10:25

Обработка печати конвертов

Автор retker, 04 фев 2014, 14:47

0 Пользователей и 1 гость просматривают эту тему.

retker

Доброго времени суток возникла такая сложность. Было дано задание написать обработку для печати адресов на конверте, три формата: а4, а5, Е65. В инете нашел обработку которая делает это, но через внешнюю прогу которая печатает конверты. Начал переделывать, чтобы она печатала из макетов конвертов, прикрепил макеты, прописал чтобы данные присваивались макету, но вот индекс почтовый не получается макету передать
Ниже привожу код подскажите, как это сделать, точнее как получить отдельно индекс


Перем целеваяОрганизация;
Перем целевойКонтрагент;

Перем НазванияВариантовОтКого;
Перем ЗначенияВариантовОтКого;

Перем НазванияВариантовОткуда;
Перем ЗначенияВариантовОткуда;

Перем НазванияВариантовКому;
Перем ЗначенияВариантовКому;

Перем НазванияВариантовКуда;
Перем ЗначенияВариантовКуда;

Процедура ДобОтКого(название,значение)
  НазванияВариантовОтКого.Добавить(название);
  ЗначенияВариантовОтКого.Добавить(значение);
КонецПроцедуры

Процедура ДобОткуда(название,значение)
  НазванияВариантовОткуда.Добавить(название);
  ЗначенияВариантовОткуда.Добавить(значение);
КонецПроцедуры

Процедура ДобКому(название,значение)
  НазванияВариантовКому.Добавить(название);
  ЗначенияВариантовКому.Добавить(значение);
КонецПроцедуры

Процедура ДобКуда(название,значение)
  НазванияВариантовКуда.Добавить(название);
  ЗначенияВариантовКуда.Добавить(значение);
КонецПроцедуры

Процедура ДобКудаК(к, название, названиеОписания)
  перем ТекущаяДата;
  перем СведенияОбОрганизации;
  перем Куда;
 
  ТекущаяДата= ТекущаяДата();
  СведенияОбОрганизации= УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(к, ТекущаяДата);
  Куда= ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации, названиеОписания);
  ДобКуда(название,Куда);
КонецПроцедуры

Процедура ДобНННН(название,значение,названия,значения)
  перем индекс;
  индекс= 0;
  пока индекс<названия.Количество() цикл
    если (строка(названия[индекс])=строка(название)) и (строка(значения[индекс])=строка(значение)) тогда
      возврат;
    конецесли;
    индекс= индекс+1;
  конеццикла;
  названия.Добавить(название);
  значения.Добавить(значение);
КонецПроцедуры

Процедура ЗаполнитьВариантыНаименования(к,названия,значения)
  названия.Очистить();
  значения.Очистить();
  Попытка ДобНННН("Наименование",             к.Наименование,                   названия,значения); Исключение КонецПопытки;
  Попытка ДобНННН("Наименование полное",      к.НаименованиеПолное,             названия,значения); Исключение КонецПопытки;
  Попытка ДобНННН("Название",                 к.НазваниеОрганизации,            названия,значения); Исключение КонецПопытки;
  Попытка ДобНННН("Официальное название",     к.ОфициальноеНазваниеОрганизации, названия,значения); Исключение КонецПопытки;
  Попытка ДобНННН("Полное наименование",      к.ПолнНаименование,               названия,значения);  Исключение КонецПопытки; 
  Попытка ДобНННН("Наименование сокращённое", к.НаименованиеСокращенное,        названия,значения);  Исключение КонецПопытки; 
  Попытка ДобНННН("Наименование плательщика при перечислении налогов",
                                              к.НаименованиеПлательщикаПриПеречисленииНалогов,
                                              названия,значения);
  Исключение КонецПопытки;
КонецПроцедуры

Процедура ЗаполнитьВариантыАдреса(к,названия,значения)
  перем ТекущаяДата;
  перем СведенияОЮрФизЛице;
  перем Адрес;

  названия.Очистить();
  значения.Очистить();

  Попытка ДобНННН("Юридический адрес",          к.ЮридическийАдрес,       названия,значения);  Исключение КонецПопытки;
  Попытка ДобНННН("Почтовый адрес",             к.ПочтовыйАдрес,          названия,значения);  Исключение КонецПопытки;
  Попытка ДобНННН("Адрес прописки",             к.АдресПрописка,          названия,значения);  Исключение КонецПопытки;
  Попытка ДобНННН("Адрес фактический",          к.АдресФакт,              названия,значения);  Исключение КонецПопытки;
  Попытка ДобНННН("Адрес в стране проживания",  к.АдресВСтранеПроживания, названия,значения);  Исключение КонецПопытки;
  Попытка ДобНННН("Адрес",                      к.Адрес,                  названия,значения);  Исключение КонецПопытки;

  ТекущаяДата= ТекущаяДата();

  Попытка
    СведенияОЮрФизЛице= УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(к, ТекущаяДата);

    Попытка
      ДобНННН("Юридический адрес",ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЮрФизЛице, "ЮридическийАдрес"),
              названия,значения);
    Исключение КонецПопытки;
    Попытка
      ДобНННН("Фактический адрес",ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЮрФизЛице, "ФактическийАдрес"),
              названия,значения);
    Исключение КонецПопытки;
  Исключение КонецПопытки;

  Попытка
    Адрес= РегламентированнаяОтчетность.ПолучитьСведенияОбОрганизации(к, ТекущаяДата, "АдрПочт").АдрПочт;
    Если (НЕ РегламентированнаяОтчетность.ПустоеЗначение(СтрЗаменить(Адрес, ",", ""))) Тогда
        Адрес= РегламентированнаяОтчетность.ПредставлениеАдресаВФормате9Запятых(Адрес);
        ДобНННН("Почтовый адрес",Адрес,названия,значения);
    КонецЕсли;
  Исключение КонецПопытки;

  Попытка
    ЗапросАдреса = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ
                                | КонтактнаяИнформация.Представление,
                                | КонтактнаяИнформация.Объект,
                                | КонтактнаяИнформация.Тип,
                                | КонтактнаяИнформация.Вид,
                                | КонтактнаяИнформация.Поле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;
  КонецЕсли;
 
  ВидДокумента= "Конверт";
КонецПроцедуры

Процедура ПриОткрытии()
  ЗаполнитьВарианты(СсылкаНаОбъект);
  ЗаполнитьЭлементыУправления(); 
КонецПроцедуры       

Процедура КнопкаВыполнитьНажатие(Кнопка)

КонецПроцедуры

Процедура ПечататьНажатие(Элемент)
  Печатать();
КонецПроцедуры

Процедура ОтКогоВариантПриИзменении(Элемент)
ОтКогоВариантПриСмене()
КонецПроцедуры

Процедура ОткудаВариантПриИзменении(Элемент)
ОткудаВариантПриСмене()
КонецПроцедуры

Процедура КомуВариантПриИзменении(Элемент)
КомуВариантПриСмене()
КонецПроцедуры

Процедура КудаВариантПриИзменении(Элемент)
КудаВариантПриСмене()
КонецПроцедуры

Процедура ОрганизацияПриИзменении(Элемент)
  ОрганизацияСмене();
КонецПроцедуры

НазванияВариантовОтКого= Новый Массив();
ЗначенияВариантовОтКого= Новый Массив();

НазванияВариантовОткуда= Новый Массив();
ЗначенияВариантовОткуда= Новый Массив();

НазванияВариантовКому= Новый Массив();
ЗначенияВариантовКому= Новый Массив();

НазванияВариантовКуда= Новый Массив();
ЗначенияВариантовКуда= Новый Массив();


MuI_I_Ika

Пожалей нас. Ты привел весь модуль печати. Можно конечно покопаться и посмотреть где там процедура выборки индекса. Хотелось бы понять что конкретно не работает. На что обратить внимание.

retker

Цитата: MuI_I_Ika от 04 фев 2014, 18:40
Пожалей нас. Ты привел весь модуль печати. Можно конечно покопаться и посмотреть где там процедура выборки индекса. Хотелось бы понять что конкретно не работает. На что обратить внимание.

Процедура в которой выполняется запрос и потом обрабатывается для вывода в поля макета
Вот

Процедура ЗаполнитьВариантыАдреса(к,названия,значения)
  перем ТекущаяДата;
  перем СведенияОЮрФизЛице;
  перем Адрес;

  названия.Очистить();
  значения.Очистить();

  Попытка ДобНННН("Юридический адрес",          к.ЮридическийАдрес,       названия,значения);  Исключение КонецПопытки;
  Попытка ДобНННН("Почтовый адрес",             к.ПочтовыйАдрес,          названия,значения);  Исключение КонецПопытки;
  Попытка ДобНННН("Адрес прописки",             к.АдресПрописка,          названия,значения);  Исключение КонецПопытки;
  Попытка ДобНННН("Адрес фактический",          к.АдресФакт,              названия,значения);  Исключение КонецПопытки;
  Попытка ДобНННН("Адрес в стране проживания",  к.АдресВСтранеПроживания, названия,значения);  Исключение КонецПопытки;
  Попытка ДобНННН("Адрес",                      к.Адрес,                  названия,значения);  Исключение КонецПопытки;

  ТекущаяДата= ТекущаяДата();

  Попытка
    СведенияОЮрФизЛице= УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(к, ТекущаяДата);

    Попытка
      ДобНННН("Юридический адрес",ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЮрФизЛице, "ЮридическийАдрес"),
              названия,значения);
    Исключение КонецПопытки;
    Попытка
      ДобНННН("Фактический адрес",ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЮрФизЛице, "ФактическийАдрес"),
              названия,значения);
    Исключение КонецПопытки;
  Исключение КонецПопытки;

  Попытка
    Адрес= РегламентированнаяОтчетность.ПолучитьСведенияОбОрганизации(к, ТекущаяДата, "АдрПочт").АдрПочт;
    Если (НЕ РегламентированнаяОтчетность.ПустоеЗначение(СтрЗаменить(Адрес, ",", ""))) Тогда
        Адрес= РегламентированнаяОтчетность.ПредставлениеАдресаВФормате9Запятых(Адрес);
        ДобНННН("Почтовый адрес",Адрес,названия,значения);
    КонецЕсли;
  Исключение КонецПопытки;

  Попытка
    ЗапросАдреса = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ
                                | КонтактнаяИнформация.Представление,
                                | КонтактнаяИнформация.Объект,
                                | КонтактнаяИнформация.Тип,
                                | КонтактнаяИнформация.Вид,
                                | КонтактнаяИнформация.Поле1,
                                | КонтактнаяИнформация.Поле2,
                                | КонтактнаяИнформация.Поле3,
                                | КонтактнаяИнформация.Поле4,
                                | КонтактнаяИнформация.Поле5,
                                | КонтактнаяИнформация.Поле6,
                                | КонтактнаяИнформация.Поле7,
                                | КонтактнаяИнформация.Поле8,
                                | КонтактнаяИнформация.Поле9,
                                | КонтактнаяИнформация.Поле10,
                                | КонтактнаяИнформация.Вид
                                |ИЗ
                                | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
                                |ГДЕ
                                | КонтактнаяИнформация.Объект = &Объект
                                | И КонтактнаяИнформация.Тип = &Тип");
    ЗапросАдреса.УстановитьПараметр("Объект", к);
    ЗапросАдреса.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);

    Выборка = ЗапросАдреса.Выполнить().Выбрать();
    пока Выборка.Следующий() цикл
      попытка
        ДобНННН(Выборка.Вид,Выборка.Представление,названия,значения);
      Исключение КонецПопытки;
      конеццикла;
  Исключение КонецПопытки;
КонецПроцедуры


А вот в этой процедуре заполнение макета пока только один типа конверта E65. На макете есть объекты ИндекПолучателя, ИндексОтправителя и еще ИндексОтправителяБольшой, это который в нижнем левом углу. Я не могу понять как из-за запроса выбрать именно индекс  и передать этим полям на макете.

Процедура ПечататьКонверт()
 
  Макет = ПолучитьМакет("E65");
  Область = Макет.ПолучитьОбласть("ОбластьКонверта");
  Область.Параметры.ОтКого = ОтКого;
  Область.Параметры.ОтКуда = Откуда;
//  Область.Параметры.Рисунок.ИндексОтправителя =
  Область.Параметры.Кому = Кому;
  Область.Параметры.Куда = Куда;
//  Область.Параметры.Рисунок.ИндексПолучателя =
 
  ТабДок = Новый ТабличныйДокумент;
  ТабДок.АвтоМасштаб = Истина;
  ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
  ТабДок.Вывести(Область);
 
  УниверсальныеМеханизмы.НапечататьДокумент(ТабДок);
КонецПроцедуры


KrivosheevEV

Цитата: retker от 04 фев 2014, 21:17Я не могу понять как из-за запроса выбрать именно индекс  и передать этим полям на макете.

Остановить отладку, посмотреть результат запроса или выполнить его отдельно в консоли запросов.
А, вообще, в используемой вами 1С почтовый индекс фигурирует?



retker

Проблема получения индекса решена таким образом. Беру из поля Откуда и Куда соответственно и вырезаю ф-ей Сред индекс и присваиваю значению на макете.

Теперь возник следующий вопрос, вот часть кода

Макет = ПолучитьМакет("E65");
  Область = Макет.ПолучитьОбласть("ОбластьКонверта");
  Область.Параметры.ОтКого = ОтКого;
  Область.Параметры.ОтКуда = Сред(Откуда,8,256);
  Область.Параметры.ИндексОтправителя = Сред(Откуда,1,6);
  Область.Параметры.Кому = Кому;
  Область.Параметры.Куда = Сред(Куда,8,256);
  Область.Параметры.ИндексПолучателя = Сред(Куда,1,6);
  Область.Параметры.ИндексПолучателяБольшой = Сред(Куда,1,6);
 
  ТабДок = Новый ТабличныйДокумент;
  ТабДок.АвтоМасштаб = Истина;
  ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
  ТабДок.Вывести(Область);
 
  УниверсальныеМеханизмы.НапечататьДокумент(ТабДок);



Здесь фигурирует один макет, но мне надо чтобы по выбору пользователя из компоненты ПолеВыбора, выбирался нужный макет, как это реализовать.

MuI_I_Ika

Добавляете поле ввода. Указываете, что значение выбирается из списка. Задаете список, в котором в значении пишите имена макетов, а в представлении красивые имена.

А в коде просто :

Область = Макет.ПолучитьОбласть(ИмяМакета);

Похожие темы (5)

Рейтинг@Mail.ru

Поиск