Имя: Пароль:
1C
1С v8
Письма() в 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 строчек), затем нижнячасть,и снова,и так до тех пор,пока не закончится содержание письма?
Программист всегда исправляет последнюю ошибку.