|
Письма() в 1с 8x | ☑ | ||
---|---|---|---|---|
0
Kamich
12.03.13
✎
15:43
|
Добрый день.
Как можно будет в 1с 8.1 сделать что-то вроде исходящих писем? Есть форма документа. Как сделать так,что бы при печати документа, если в реквизите содержание письма не вмещается на один лист,то оставшаяся часть автоматически переходит на следующие листы.Так же остаются верхний и нижний колонтитулы. Ниже прикрепил фотоизображение. Подробнее и с картинками на: http://forum.infostart.ru/forum14/topic81758/message865109/?result=edit#message865109 |
|||
1
Fish
12.03.13
✎
15:51
|
(0) ТабличныйДокумент (SpreadsheetDocument)
ПроверитьВывод (CheckPut) Синтаксис: ПроверитьВывод(<Таблицы>) Параметры: <Таблицы> (обязательный) Тип: Массив; ТабличныйДокумент. Массив из проверяемых таблиц или табличный документ. Возвращаемое значение: Тип: Булево. Истина - умещаются; Ложь - в противном случае. Описание: Проверяет, умещаются ли переданные табличные документы на страницу при печати. Пойдёт? |
|||
2
Kamich
12.03.13
✎
15:54
|
Я не совсем профи если можно по подробнее
|
|||
3
Fish
12.03.13
✎
15:57
|
(2) Тогда объясни поподробнее, что именно непонятно.
|
|||
4
Kamich
12.03.13
✎
15:59
|
К примеру у меня идет следующий запрос:
ТабДок=Новый ТабличныйДокумент; Макет=Документы.Письмо.ПолучитьМакет("Макет"); ОбластьВерх=Макет.ПолучитьОбласть("Верх"); ТабДок.Вывести(ОбластьВерх); ОбластьГолова=Макет.ПолучитьОбласть("Голова"); ОбластьГолова.Параметры.Организация=Организация; ОбластьГолова.Параметры.Кому=Кому; ОбластьГолова.Параметры.Номер=номер; ТабДок.Вывести(ОбластьГолова); ОбластьСодержание=Макет.ПолучитьОбласть("Содержание"); ОбластьСодержание.Параметры.Содержание=СодержаниеПисьма; ТабДок.Вывести(ОбластьСодержание); ОбластьНиз=Макет.ПолучитьОбласть("Низ"); ТабДок.Вывести(ОбластьНиз); ТабДок.ОтображатьСетку = Ложь; ТабДок.АвтоМасштаб = Истина; ТабДок.Защита = Ложь; ТабДок.ТолькоПросмотр = Ложь; ТабДок.ОтображатьЗаголовки = Ложь; ТабДок.Показать(); То куда нужно и что конкретно нужно будет указать чтобы при печати документа, если в реквизите содержание письма не вмещается на один лист,то оставшаяся часть автоматически переходит на следующие листы.Так же чтобы верхний и нижний колонтитулы оставались на каждом листе и располагались на одном и том же месте. |
|||
5
1C_OOLer
12.03.13
✎
16:03
|
в цикле построчно перебирай содержание и вставляй туда проверку из (1)
|
|||
6
Kamich
12.03.13
✎
16:05
|
Можно на примере?
|
|||
7
1C_OOLer
12.03.13
✎
16:09
|
Пример:
Для Счетчик = 1 По СтрЧислоСтрок(ИсходныйТекст) Цикл ТекСтрока = СтрПолучитьСтроку(ИсходныйТекст, Счетчик); ... КонецЦикла; |
|||
8
Kamich
12.03.13
✎
16:18
|
ТабДок=Новый ТабличныйДокумент;
Макет=Документы.Письмо.ПолучитьМакет("Макет"); ОбластьВерх=Макет.ПолучитьОбласть("Верх"); ТабДок.Вывести(ОбластьВерх); ОбластьГолова=Макет.ПолучитьОбласть("Голова"); ОбластьГолова.Параметры.Организация=Организация; ОбластьГолова.Параметры.Кому=Кому; ОбластьГолова.Параметры.Номер=номер; ТабДок.Вывести(ОбластьГолова); ОбластьСодержание=Макет.ПолучитьОбласть("Содержание"); ОбластьСодержание.Параметры.Содержание=СодержаниеПисьма; ТабДок.Вывести(ОбластьСодержание); ОбластьНиз=Макет.ПолучитьОбласть("Низ"); ТабДок.Вывести(ОбластьНиз); ТабДок.ОтображатьСетку = Ложь; ТабДок.АвтоМасштаб = Истина; ТабДок.Защита = Ложь; ТабДок.ТолькоПросмотр = Ложь; ТабДок.ОтображатьЗаголовки = Ложь; ТабДок.Показать(); Куда мне его разместить вот этот код?: Для Счетчик = 1 По СтрЧислоСтрок(ИсходныйТекст) Цикл ТекСтрока = СтрПолучитьСтроку(ИсходныйТекст, Счетчик); ... КонецЦикла; |
|||
9
Fish
12.03.13
✎
16:23
|
(8) Перед тем, как выводить содержание письма, вестимо.
А по поводу колонтитулов советую почитать СП: "КолонтитулТабличногоДокумента" |
|||
10
Волшебник
12.03.13
✎
16:26
|
(9)* Кстати, СП — это Синтакс-помощник
|
|||
11
Kamich
12.03.13
✎
16:45
|
Безрезультатно.......
|
|||
12
Волшебник
12.03.13
✎
16:48
|
Надо так:
Если ТабДок.ПроверитьВывод() тогда //вмещается на страницу Иначе ТабДок.ВывестиВертикальныйРазделительСтраниц(); КонецЕсли; |
|||
13
Fish
12.03.13
✎
16:55
|
(11) какая-нибудь типовая конфигурация есть под рукой? Посмотри, как там это реализовано.
|
|||
14
Kamich
12.03.13
✎
17:06
|
Сделал следующее:
ТабДок=Новый ТабличныйДокумент; Макет=Документы.Письмо.ПолучитьМакет("Макет"); ОбластьВерх=Макет.ПолучитьОбласть("Верх"); ТабДок.Вывести(ОбластьВерх); ОбластьГолова=Макет.ПолучитьОбласть("Голова"); ОбластьГолова.Параметры.Организация=Организация; ОбластьГолова.Параметры.Кому=Кому; ОбластьГолова.Параметры.Номер=номер; ТабДок.Вывести(ОбластьГолова); Если ТабДок.ПроверитьВывод() тогда Для Счетчик = 1 По СтрЧислоСтрок(СодержаниеПисьма) Цикл ТекСтрока = СтрПолучитьСтроку(СодержаниеПисьма, Счетчик); КонецЦикла; Иначе ТабДок.ВывестиВертикальныйРазделительСтраниц(); КонецЕсли; ОбластьСодержание=Макет.ПолучитьОбласть("Содержание"); ОбластьСодержание.Параметры.Содержание=СодержаниеПисьма; ТабДок.Вывести(ОбластьСодержание); ОбластьНиз=Макет.ПолучитьОбласть("Низ"); ТабДок.Вывести(ОбластьНиз); ТабДок.ОтображатьСетку = Ложь; ТабДок.АвтоМасштаб = Истина; ТабДок.Защита = Ложь; ТабДок.ТолькоПросмотр = Ложь; ТабДок.ОтображатьЗаголовки = Ложь; ТабДок.Показать(); Вывел:Недостаточно фактических параметров ....Что не так? |
|||
15
Kamich
13.03.13
✎
12:34
|
ЧТо не так???
|
|||
16
Волшебник
13.03.13
✎
12:44
|
(14) посмотри номер строки
|
|||
17
Kamich
13.03.13
✎
12:49
|
Где мне нужно посмотреть номер строки?
|
|||
18
Волшебник
13.03.13
✎
13:02
|
(17) в сообщении об ошибке
|
|||
19
Kamich
13.03.13
✎
13:20
|
Вот такая ошибка
{Документ.Письмо.Форма.ФормаДокумента(13)}: Недостаточно фактических параметров Если ТабДок.ПроверитьВывод() тогда |
|||
20
Волшебник
13.03.13
✎
13:21
|
(19) надо так:
Если ТабДок.ПроверитьВывод(ОбластьСодержание) тогда |
|||
21
Kamich
13.03.13
✎
13:28
|
Теперь перестал выводить ошибку.
Но область верх выводится на первой страницы,область Содержание выводится на второй страницы, и областьниз выводится на 3-ей странице |
|||
22
Волшебник
13.03.13
✎
13:29
|
(21) потрясающе
|
|||
23
Kamich
13.03.13
✎
13:36
|
Что нужно изменить?
|
|||
24
Волшебник
13.03.13
✎
13:38
|
(23) Порядок строк
|
|||
25
Kamich
13.03.13
✎
13:40
|
Изменить 1 на больше или что?!
|
|||
26
Волшебник
13.03.13
✎
14:00
|
(25) Ты вообще понимаешь, что ты пишешь или нет?
|
|||
27
Kamich
13.03.13
✎
14:08
|
Тогда что необходимо сделать, изменить,в процедуре?
|
|||
28
Fish
13.03.13
✎
14:12
|
(27) попробую объяснить. Принцип такой: перед тем, как вывести область, тебе надо проверить, влезает она на лист или нет. Для этого и нужен цикл по строкам твоего письма.
До тех пор, пока область влезает, ты добавляешь в цикле ещё одну строку твоего текста. Как только не влезает - выводишь разделитель страниц и на следующей странице повторяешь те же действия с остатком текста. Так понятно? |
|||
29
Kamich
13.03.13
✎
14:37
|
Если ТабДок.ПроверитьВывод(ОбластьСодержание) тогда
Для Счетчик = 1 По СтрЧислоСтрок(СодержаниеПисьма) Цикл ТекСтрока = СтрПолучитьСтроку(СодержаниеПисьма, Счетчик); КонецЦикла; Иначе ТабДок.ВывестиВертикальныйРазделительСтраниц(); КонецЕсли; ТабДок.Вывести(ОбластьСодержание); Ребят,я новичек,и мне многое предстоит узнать по программированию.Fish,смысл я понял,нгу а в языке Кода ,я немогу этого осуществить из-за малого зания в программировании |
|||
30
Волшебник
13.03.13
✎
14:40
|
(29) Если ты надеешься, что тебе тут напишут работающий код, то зря. Думай головой, что и куда вставить. Ты же программистом собрался работать, правильно? Программирование — это фантазия плюс умение крутить циклы.
|
|||
31
Kamich
13.03.13
✎
14:47
|
Но ведь я не зря тут нахожусь.
|
|||
32
Kamich
13.03.13
✎
14:49
|
Чтобы получить примеры и по ним продолжить обучение
|
|||
33
Fish
13.03.13
✎
14:55
|
(32) Тебе поможет изучение начальной литературы. Вот, например, есть книга с примерами: "1с:предприятие 8.2. простые примеры разработки". Или вот список литературы: http://v8.1c.ru/metod/books/#l1. А здесь принято помогать тем, у кого чего-то не получается. Но учить тебя программированию с нуля здесь никто не будет.
|
|||
35
Волшебник
13.03.13
✎
14:57
|
ОбластьСодержание=Макет.ПолучитьОбласть("Содержание");
ТабДокДляПроверки = Новый ТабличныйДокумент; ТекстСодержания = ""; Для Счетчик = 1 По СтрЧислоСтрок(СодержаниеПисьма) Цикл ТекстСодержания = ТекстСодержания + СтрПолучитьСтроку(СодержаниеПисьма, Счетчик) + Символы.ПС; ОбластьСодержание.Параметры.Содержание = ТекстСодержания ; ТабДокДляПроверки.Вывести(ОбластьСодержание); ТабДокДляПроверки.Вывести(ОбластьНиз); Если ТабДок.ПроверитьВывод(ТабДокДляПроверки) тогда ТабДок.Вывести(ТабДокДляПроверки); Иначе ТабДок.ВывестиВертикальныйРазделительСтраниц(); ТабДок.Вывести(ОбластьВерх); ТабДок.Вывести(ОбластьГолова); ТабДокДляПроверки = Новый ТабличныйДокумент; ТекстСодержания = ""; КонецЕсли; ТабДок.Вывести(ОбластьНиз); КонецЦикла; ___ только не говори, что не работает |
|||
36
Kamich
13.03.13
✎
15:20
|
ТабДок=Новый ТабличныйДокумент;
Макет=Документы.Письмо.ПолучитьМакет("Макет"); ОбластьВерх=Макет.ПолучитьОбласть("Верх"); ТабДок.Вывести(ОбластьВерх); ОбластьГолова=Макет.ПолучитьОбласть("Голова"); ОбластьГолова.Параметры.Организация=Организация; ОбластьГолова.Параметры.Кому=Кому; ОбластьГолова.Параметры.Номер=номер; ТабДок.Вывести(ОбластьГолова); ОбластьНиз=Макет.ПолучитьОбласть("Низ"); ОбластьСодержание=Макет.ПолучитьОбласть("Содержание"); ТабДокДляПроверки = Новый ТабличныйДокумент; ТекстСодержания = ""; Для Счетчик = 1 По СтрЧислоСтрок(СодержаниеПисьма) Цикл ТекстСодержания = ТекстСодержания + СтрПолучитьСтроку(СодержаниеПисьма, Счетчик) + Символы.ПС; ОбластьСодержание.Параметры.Содержание = ТекстСодержания ; ТабДокДляПроверки.Вывести(ОбластьСодержание); ТабДокДляПроверки.Вывести(ОбластьНиз); ТабДок.Вывести(ТабДокДляПроверки); Если ТабДок.ПроверитьВывод(ОбластьСодержание) тогда ТабДок.Вывести(ОбластьСодержание); Иначе ТабДок.ВывестиВертикальныйРазделительСтраниц(); ТабДок.Вывести(ОбластьВерх); ТабДок.Вывести(ОбластьГолова); ТабДокДляПроверки = Новый ТабличныйДокумент; ТекстСодержания = ""; КонецЕсли; ТабДок.Вывести(ОбластьНиз); КонецЦикла; ТабДок.ОтображатьСетку = Ложь; ТабДок.АвтоМасштаб = Истина; ТабДок.Защита = Ложь; ТабДок.ТолькоПросмотр = Ложь; ТабДок.ОтображатьЗаголовки = Ложь; ТабДок.Показать(); Что не так в этой процедуре? |
|||
37
Волшебник
13.03.13
✎
15:36
|
(36) а что не так?
|
|||
38
Kamich
13.03.13
✎
15:36
|
В любом случае спасибо,что хоть как-то помогаете объснить человек,который начинает программирование в 1с,
|
|||
39
Kamich
13.03.13
✎
15:40
|
Макет формируется следующим образом:
Выводится Верхняя часть,голова,"ЧАСТЬ" Письма(около 4-6 строчек), затем нижнячасть,и снова,и так до тех пор,пока не закончится содержание письма? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |