![]() |
|
Печать адреса на конверте. Разделение названия фирмы на 2 строки. | ☑ | ||
---|---|---|---|---|
0
Босечка
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) или макет просто подогнать, само перенесет правильно |
|||
3
Fish
гуру
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) Распиши.
|
|||
8
Fish
гуру
30.11.17
✎
09:26
|
(5) Можно сделать так, что не будет разъезжаться. С бухией давно дела не имею, но не вижу проблемы.
|
|||
9
Fish
гуру
30.11.17
✎
09:28
|
(6) вроде на просторах инета полно всяких обработок для печати на конвертах.
|
|||
10
Йохохо
30.11.17
✎
09:36
|
(5) достаточно отключить автовысота и настроить, ага
(6) рисуешь макет, тратишь десяток А4 чтоб попасть, сохраняешь макет, профит. Никакого кода |
|||
11
probably
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
|
спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |