Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Печать адреса на конверте. Разделение названия фирмы на 2 строки.

Печать адреса на конверте. Разделение названия фирмы на 2 строки.
Я
   Босечка
 
30.11.17 - 09:13
Надо сделать разделение название фирмы на 2 строки. И адрес на 2 строки для печати на конверте . Кто-нибудь имел с этим дело?
 
 
   Масянька
 
1 - 30.11.17 - 09:16
(0)     Перем ПечАдресОтправителя[2];
    Перем ПечПолучатель[2];
    Перем ПечАдресПолучателя[4];

    СписокДанных = СоздатьОбъект("СписокЗначений");
    
    ПечТабл = СоздатьОбъект("Таблица");

    Если (ФорматКонверта = 1) Тогда
        ПечТабл.ИсходнаяТаблица("Е65");
    Иначе
        ПечТабл.ИсходнаяТаблица("С4");
    КонецЕсли;
    
    Результат = Проверка(Отправитель, Получатель);
    
    Если (Результат <> 0) Тогда Возврат; КонецЕсли;
    
    // оправитель

    // наименование

    ПечОтправитель = СокрЛП(Отправитель.ЮрЛицо.Наименование);
    
    // адрес - разбиваем на строки

    СписокДанных.УдалитьВсе();
    СписокДанных = Строковые.стрРазбитьТекстНаСтроки(СокрЛП(ПолучитьАдрес(Отправитель.ЮрЛицо.ФактАдрес)), 39, 1);    
    КоличествоПечатныхСтрок = СписокДанных.РазмерСписка();
    
    Для Счетчик = 1 По КоличествоПечатныхСтрок Цикл
        ПечАдресОтправителя[Счетчик] = СписокДанных.ПолучитьЗначение(Счетчик);
    КонецЦикла;

стрРазбитьТекстНаСтроки:
        СписокСтрок = СоздатьОбъект("СписокЗначений");    
        
        ДлинаСтроки     = СтрДлина(мСтрока);
        ТекстПострочно    = СтрЗаменить(мСтрока, " ", "" "");
        КоличествоСлов    = СтрКоличествоСтрок(ТекстПострочно);
        СтрокаНаПечать     = СтрПолучитьСтроку(ТекстПострочно, 1);
        СчетчикВывода    = 1;
        
        Для Счетчик = 2 По КоличествоСлов Цикл
            ДлинаСтроки = СтрДлина(СтрокаНаПечать);
            ДлинаСлова     = СтрДлина(СтрПолучитьСтроку(ТекстПострочно, Счетчик)) ;
            ОбщаяДлина     = ДлинаСлова + ДлинаСтроки;
            
            Если (ОбщаяДлина) >= мДлинаПечатнойСтроки Тогда
                СписокСтрок.ДобавитьЗначение(СтрокаНаПечать);
                СтрокаНаПечать     = СтрПолучитьСтроку(ТекстПострочно, Счетчик);
                СчетчикВывода     = СчетчикВывода + 1;
            Иначе
                СтрокаНаПечать    = СтрокаНаПечать + " " + СтрПолучитьСтроку(ТекстПострочно, Счетчик);
            КонецЕсли;
            
        КонецЦикла; 
        
        СписокСтрок.ДобавитьЗначение(СтрокаНаПечать);
        
        Возврат СписокСтрок;
   Йохохо
 
2 - 30.11.17 - 09:18
(1) ошибка, не учтен разделитель
ОбщаяДлина     = ДлинаСлова + ДлинаСтроки;
(0) или макет просто подогнать, само перенесет правильно
   Fish
 
3 - 30.11.17 - 09:20
(0) А что, автоперенос не устраивает?
   Масянька
 
4 - 30.11.17 - 09:20
(2) Какой разделитель?
   Масянька
 
5 - 30.11.17 - 09:23
(2) (3) Например, доверенность на ТОРГ-12. В ней отводится три (по-моему) строки для данных доверенности. Но - слева идут подписи продавца. И если подгонять макет и использовать автоперенос - подвал (с подписями) разъезжается.
Попробуйте и убедитесь.
   Босечка
 
6 - 30.11.17 - 09:23
(0) Нет к сожалению, надо на конверте напечатать попасть в конкретные строки
   Масянька
 
7 - 30.11.17 - 09:23
(6) Распиши.
   Fish
 
8 - 30.11.17 - 09:26
(5) Можно сделать так, что не будет разъезжаться. С бухией давно дела не имею, но не вижу проблемы.
   Fish
 
9 - 30.11.17 - 09:28
(6) вроде на просторах инета полно всяких обработок для печати на конвертах.
   Йохохо
 
10 - 30.11.17 - 09:36
(5) достаточно отключить автовысота и настроить, ага
(6) рисуешь макет, тратишь десяток А4 чтоб попасть, сохраняешь макет, профит. Никакого кода
 
 Рекламное место пустует
   probably
 
11 - 30.11.17 - 09:42
(6) в унф заполняется кодом - проверяют, уместится ли на строке слово и если нет, то заполняют следующую.
Предположу, что в бп так же и надо разобраться почему не переносит
   Босечка
 
12 - 30.11.17 - 10:49
(1) стрРазбитьТекстНаСтроки( это в какой конфе?
   Масянька
 
13 - 30.11.17 - 11:16
(12) Там ниже код. Это самописка. И, это, забыла сказать - код семерочный.
У меня в семерке реализовано 2 конверта С4 и Е65, внешняя обработка. Конверты чисто белые (закуплены), печатается лицо (отправитель/получатель), на почте клеят марки.
   Босечка
 
14 - 30.11.17 - 11:16
(1) Если можно скиньте мне эту функцию, а то у меня такой нет. Мне надо разбить текст на строки фиксированной длины.
   Злопчинский
 
15 - 30.11.17 - 11:19
(14) это только если курьером
   Масянька
 
16 - 30.11.17 - 11:22
(14) Функция стрРазбитьТекстНаСтрокиГлавная(мСтрока, мДлинаПечатнойСтроки, мРежим = 0) Экспорт

    // мРежим: 0 - возвращаем одну строку с разделителями, 1 - возвращаем массив строк


    Если (мРежим = 1) Тогда
        СписокСтрок = СоздатьОбъект("СписокЗначений");    
        
        ДлинаСтроки     = СтрДлина(мСтрока);
        ТекстПострочно    = СтрЗаменить(мСтрока, " ", "" "");
        КоличествоСлов    = СтрКоличествоСтрок(ТекстПострочно);
        СтрокаНаПечать     = СтрПолучитьСтроку(ТекстПострочно, 1);
        СчетчикВывода    = 1;
        
        Для Счетчик = 2 По КоличествоСлов Цикл
            ДлинаСтроки = СтрДлина(СтрокаНаПечать);
            ДлинаСлова     = СтрДлина(СтрПолучитьСтроку(ТекстПострочно, Счетчик)) ;
            ОбщаяДлина     = ДлинаСлова + ДлинаСтроки;
            
            Если (ОбщаяДлина) >= мДлинаПечатнойСтроки Тогда
                СписокСтрок.ДобавитьЗначение(СтрокаНаПечать);
                СтрокаНаПечать     = СтрПолучитьСтроку(ТекстПострочно, Счетчик);
                СчетчикВывода     = СчетчикВывода + 1;
            Иначе
                СтрокаНаПечать    = СтрокаНаПечать + " " + СтрПолучитьСтроку(ТекстПострочно, Счетчик);
            КонецЕсли;
            
        КонецЦикла; 
        
        СписокСтрок.ДобавитьЗначение(СтрокаНаПечать);
        
        Возврат СписокСтрок;
    Иначе
        ОдинСимволВОстатке = 0;
        
        Список = СоздатьОбъект("СписокЗначений");
        
        СтрокаПеч     = "";
        Разделитель = "";
        ДлинаСтроки = СтрДлина(мСтрока);
        ПолныхСтрок = Цел(ДлинаСтроки / мДлинаПечатнойСтроки);
        
        СчетчикПолныхСтрок = 0;
        
        Если (ДлинаСтроки > мДлинаПечатнойСтроки) Тогда
            Для СчетчикСтроки = 1 По ДлинаСтроки Цикл
                СтрокаПеч     = СтрокаПеч + Сред(мСтрока, СчетчикСтроки, 1);
                ДлинаПечати = СтрДлина(СтрокаПеч);
                Если (ДлинаСтроки - СчетчикСтроки) = 2 Тогда
                    ПоследнийСимвол = Прав(мСтрока, 1);
                    Если (КодСимв(ПоследнийСимвол) = 41) Тогда
                        ОдинСимволВОстатке     = 1;
                        СтрокаПеч             = СтрокаПеч + Сред(мСтрока, СчетчикСтроки + 1, 2);
                        СчетчикСтроки         = СчетчикСтроки + 2;
                        ДлинаПечати         = ДлинаПечати + 2;
                    КонецЕсли;
                КонецЕсли;
                Если (ДлинаСтроки - СчетчикСтроки) = 1 Тогда
                    ОдинСимволВОстатке     = 1;
                    СтрокаПеч                = СтрокаПеч + Сред(мСтрока, СчетчикСтроки + 1, 1);
                    СчетчикСтроки         = СчетчикСтроки + 1;
                    ДлинаПечати         = ДлинаПечати + 1;
                КонецЕсли;
                Если ДлинаПечати >= мДлинаПечатнойСтроки Тогда
                    Список.ДобавитьЗначение(СтрокаПеч);
                    СтрокаПеч             = "";
                    СчетчикПолныхСтрок     = СчетчикПолныхСтрок + 1;
                КонецЕсли;
                Если СчетчикПолныхСтрок = ПолныхСтрок Тогда
                    Прервать;
                КонецЕсли;
            КонецЦикла;
            
            Если (ОдинСимволВОстатке = 0) Тогда
                ОстатокСимволов = ДлинаСтроки - СчетчикСтроки;
                Остаток         = Сред(мСтрока, СчетчикСтроки + 1, ОстатокСимволов);
                Список.ДобавитьЗначение(Остаток);
            КонецЕсли;
            
            КолВоСтрок     = Список.РазмерСписка();
            НоваяСтрока = Список.ПолучитьЗначение(1);
            
            Если КолВоСтрок > 1 Тогда
                Для Врем = 2 По КолВоСтрок Цикл
                    ТекСтрока     = Список.ПолучитьЗначение(Врем);
                    НоваяСтрока = НоваяСтрока + РазделительСтрок + ТекСтрока;
                КонецЦикла;
            КонецЕсли;
            
        Иначе
            НоваяСтрока = мСтрока;
        КонецЕсли;
        
        Возврат НоваяСтрока;
        
    КонецЕсли;
    
КонецФункции    // стрРазбитьТекстНаСтрокистрРазбитьТекстНаСтрокиГлавная()


//************ Разбивает текст на строки заданной длины (подготовка) ***********

Функция стрРазбитьТекстНаСтроки(мИсхСтрока, мДлинаПечатнойСтроки, мРежим = 0) Экспорт

    // мРежим: 0 - возвращаем одну строку с разделителями, 1 - возвращаем массив строк


    НоваяСтрока = "";
    
    // сама строка может быть с переносом строк

    мСтрКолВоСтрок = СтрКоличествоСтрок(мИсхСтрока);

    // для режима 1 (массив строк) в самой строке не должно быть переносов

    Если ((мРежим = 1) И (мСтрКолВоСтрок > 1)) Тогда
        Предупреждение("Нельзя использовать перенос строк. " + РазделительСтрок + 
                       "Исправьте строку:" + РазделительСтрок + мИсхСтрока);
        Возврат "";
    КонецЕсли;
    
    Если (мСтрКолВоСтрок = 1) Тогда        // если в самой строке нет переносов строки - просто разбиваем

        НоваяСтрока = стрРазбитьТекстНаСтрокиГлавная(мИсхСтрока, мДлинаПечатнойСтроки, мРежим);
    Иначе        // если в самой строке переносы строк есть - разбиваем в цикле для каждой строки

        Для Счетчик = 1 По мСтрКолВоСтрок Цикл
            мСтрока = СтрПолучитьСтроку(мИсхСтрока, Счетчик);
            НоваяСтрока = СокрЛП(НоваяСтрока) + РазделительСтрок + стрРазбитьТекстНаСтрокиГлавная(мСтрока, мДлинаПечатнойСтроки, мРежим);
        КонецЦикла;
    КонецЕсли;

    Возврат НоваяСтрока;
    
КонецФункции    // стрРазбитьТекстНаСтроки()


Только там через вспомогательную функцию (так надо).
   Босечка
 
17 - 30.11.17 - 11:47
спасибо.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует