Имя: Пароль:
1C
1С v8
Работа с макета и вывод таб документа в таб документа
0 Rizhij_Nikitos
 
15.09.11
16:37
Пишу обработку печать ценников, где можно выбирать шаблоны для ценника, их размеры и количество. Но вот такое дело, если выбрать для товаров одинаковый шаблон и размер, то все будет четко как тута ftp://213.234.18.51/4.jpg
А если разные шаблоны, то все плывет, причем плывет не понятно почему, как бы макеты одни и те же а размеры уменьшаются сами. Все это выглядит так: ftp://213.234.18.51/3.jpg
Еще такая проблема линии почему то , то не доконца пририсовываются, как тута:
ftp://213.234.18.51/1.jpg  
ftp://213.234.18.51/2.jpg
ftp://213.234.18.51/5.jpg

Вот сам код, вывода таб документов.
ДокументПечати = Новый ТабличныйДокумент;
       ПоискВыбранных = Новый Структура();
       ПоискВыбранных.Вставить("Выбран",Истина);
       СтрокиДляПечати = Товары.НайтиСтроки(ПоискВыбранных);
       ЭтотОбъект = РеквизитФормыВЗначение("Объект");
       ПустойТабДок = Новый ТабличныйДокумент;
       Для НомерСтроки = 0 По СтрокиДляПечати.Количество()-1 Цикл
         ДокументЦенник = Новый ТабличныйДокумент;
         СтрокаДанных = СтрокиДляПечати.Получить(НомерСтроки);
         Макет= ЭтотОбъект.ПолучитьМакет(СтрокаДанных.ШаблонЦенника+СтрокаДанных.РазмерЦенника);
         ОбластьМакета = Макет.ПолучитьОбласть("Организация|Столбец");
         ОбластьМакета.Параметры.Организация = Объект.Организация;
         ДокументЦенник.Вывести(ОбластьМакета);
         ОбластьМакета = Макет.ПолучитьОбласть("Наименование|Столбец");
         ОбластьМакета.Параметры.Наименование = СтрокаДанных.Номенклатура;
         ДокументЦенник.Вывести(ОбластьМакета);
         Попытка      
             Если СтрокаДанных.ШаблонЦенника = "ЦенникЛинолеум" Тогда
                 ОбластьМакетаЦена = Макет.ПолучитьОбласть("Цена|Столбец");
                 ОбластьМакетаЦена.Параметры.Цена = ПредставлениеЦены(СтрокаДанных.Цена,Объект.Валюта);
                 ОбластьМакетаДопЦена = Макет.ПолучитьОбласть("ДопЦена");
                 ОбластьМакетаДопЦена.Параметры.ДопЦена = ПредставлениеЦены(СтрокаДанных.ДопЦена,Объект.Валюта);
                 ДокументЦенник.Вывести(ОбластьМакетаДопЦена);
                 ДокументЦенник.Вывести(ОбластьМакетаЦена);
             ИначеЕсли СтрокаДанных.ШаблонЦенника = "ЦенникПлитка" ИЛИ СтрокаДанных.ШаблонЦенника="ЦенникЛаминат" Тогда
                 ОбластьМакетаЦена = Макет.ПолучитьОбласть("Цена");
                 ОбластьМакетаЦена.Параметры.Цена = ПредставлениеЦены(СтрокаДанных.Цена,Объект.Валюта);
                 ОбластьМакетаДопЦена = Макет.ПолучитьОбласть("ДопЦена|Столбец");
                 ОбластьМакетаДопЦена.Параметры.ДопЦена = ПредставлениеЦены(СтрокаДанных.ДопЦена,Объект.Валюта);
                 ДокументЦенник.Вывести(ОбластьМакетаЦена);
                 ДокументЦенник.Вывести(ОбластьМакетаДопЦена);
             ИначеЕсли СтрокаДанных.ШаблонЦенника = "ЦенникБольшинствоТоваров" Тогда
                 ОбластьМакетаЦена = Макет.ПолучитьОбласть("Цена|Столбец");
                 ОбластьМакетаЦена.Параметры.Цена = ПредставлениеЦены(СтрокаДанных.Цена,Объект.Валюта);
                 ДокументЦенник.Вывести(ОбластьМакетаЦена);
                 ОбластьМакета = Макет.ПолучитьОбласть("ЕдиницаИзмерения|Столбец");
                 ОбластьМакета.Параметры.ЕдиницаИзмерения = СтрокаДанных.Упаковка;
                 ДокументЦенник.Вывести(ОбластьМакета);
             КонецЕсли;
     Исключение
     КонецПопытки;
   
         ОбластьМакета = Макет.ПолучитьОбласть("КодТовара|Столбец");
         ОбластьМакета.Параметры.КодТовара = СтрокаДанных.Код;
         ДокументЦенник.Вывести(ОбластьМакета);
         ОбластьМакета = Макет.ПолучитьОбласть("Подпись|Столбец");
         ДокументЦенник.Вывести(ОбластьМакета);
         //Заполняем выходной документ ценниками с их указанным количеством
         Если СтрокаДанных.РазмерЦенника = "Малыш" Тогда
             КоличествоВСтроке = 4;
             КоличествоСтрок = 8;
         ИначеЕсли СтрокаДанных.РазмерЦенника = "Малый" Тогда
             КоличествоВСтроке = 2;
             КоличествоСтрок = 6 ;
         ИначеЕсли СтрокаДанных.РазмерЦенника = "Средний" Тогда
             КоличествоВСтроке = 1;
             КоличествоСтрок = 5;
         ИначеЕсли СтрокаДанных.РазмерЦенника = "Большой" Тогда
             КоличествоВСтроке = 1;
             КоличествоСтрок =2;
         КонецЕсли;
         ТекСтолбец = 0;
         ТекСтрока = 0;
         Для КоличествоКопией = 0 По СтрокаДанных.КоличествоЦенников-1 Цикл
                 Если ТекСтолбец <КоличествоВСтроке Тогда
                   ДокументПечати.Присоединить(ДокументЦенник);
                   ДокументПечати.ВывестиВертикальныйРазделительСтраниц();
                   ТекСтолбец = ТекСтолбец + 1;
               КонецЕсли;
               Если ТекСтолбец = КоличествоВСтроке Тогда
                   ТекСтрока  = ТекСтрока + 1;
                   ТекСтолбец = 0;
                   ДокументПечати.Вывести(ПустойТабДок);
                 КонецЕсли;
               Если ТекСтрока = КоличествоСтрок И КоличествоКопией<СтрокаДанных.КоличествоЦенников-1 Тогда
                   ТекСтрока = 0;
                   ДокументПечати.ВывестиГоризонтальныйРазделительСтраниц();
               КонецЕсли
           КонецЦикла;
       //переход на новую страницу для ценников другого товара
       ДокументПечати.ВывестиГоризонтальныйРазделительСтраниц();
   КонецЦикла;
         ДокументПечати.ОтображатьСетку = Ложь;
   Возврат ДокументПечати;
1 mikecool
 
15.09.11
16:38
если плывет макет - надо для каждой области устанавливать размеры вручную, т.е. отключать автовысоту и автоширину
2 Rizhij_Nikitos
 
15.09.11
17:02
Да вроде бы сам макет, фиксированный, я его в один табдокумент заполняю, в другой выгружаю, высоту и тд и тп, в соотвествии с самим макетом. То есть я ширину и высоту им не проставляю. А где все это отключить.
3 ptiz
 
15.09.11
17:06
В 1ой картинке ширина 1го столбца больше, чем во второй. Что непонятного?
4 ptiz
 
15.09.11
17:07
тьфу, наооборот, во 2ой картинке ширина больше
5 Rizhij_Nikitos
 
15.09.11
17:17
Я и сказал, что плывет, а почему не понятно ...
6 mikecool
 
15.09.11
17:17
(5) что не понятно в "отключать автовысоту и автоширину"?
7 ptiz
 
15.09.11
21:06
(5) Потому что столбец шире. Либо делать везде одинаковую, либо делать для каждой секции "особую" ширину (т.е. выделить секцию-строку в макете в конфигураторе и изменить ширину столбцов).
8 Rizhij_Nikitos
 
16.09.11
08:50
(7) че значит особую ширину.
(6) программно отключать или в настройках? Везде одинаковая смотрите 3 рисунок, там же все нормально, макеты одни и те же и размеры тоже.
9 Rizhij_Nikitos
 
16.09.11
09:03
Up
10 Rizhij_Nikitos
 
16.09.11
09:58
Вверх
11 Rizhij_Nikitos
 
16.09.11
11:09
Up
12 ptiz
 
16.09.11
12:02
На рисунке ftp://213.234.18.51/3.jpg
первый столбец шире других.

Еще раз про "особую" ширину.
Выделить секцию-строку в макете в конфигураторе и (не убирая выделения) мышкой изменить ширину столбцов (1С выдаст вопрос). Тогда столбцы секции будет иметь "особую" ширину, которая не будет сбиваться при выводе в таб.док.
13 Rizhij_Nikitos
 
16.09.11
12:24
(12) да я уже их менял двигал эту ширину, даже писал
ТабДок.ШиринаСтраницы и указывал, и все равно первый ценник как в рисунке ftp://213.234.18.51/3.jpg, шире, зато другие более менее уже одинаковые...
14 ptiz
 
16.09.11
12:32
(13) У тебя, видимо, выводятся секции в один таб.док из разных макетов. В таком случае ширина колонок приводится к ширине первой выведеной секции. Чтобы этого не было, я и писал про "особую" ширину для секции, которые "не первые".
15 ptiz
 
16.09.11
12:32
Если всё совсем плохо, выложи куда-нибудь обработку.
16 Rizhij_Nikitos
 
16.09.11
12:39
Да все выводится в один таб док. Конструкция такая у меня 16 макетов, со своими размерами и видами. И в зависимости от выбюираемых параметров берется один из этих макетов, штампуется в соотвествии с количеством. Но почему то вот так получается. И тока щас уже первый, остальные нормально идут.
17 Rizhij_Nikitos
 
16.09.11
12:40
(15) НАсчет секций, нет секции в один табдок, а этот табдок лепится в другой. В коде посмотрие последние строчки в цикле, в (0) сообщении.
18 Шапокляк
 
16.09.11
12:50
Сделай в макетах все колонки одной ширины, а для вывода широких записей объединяй ячейки. Неужели не очевидно?
19 ptiz
 
16.09.11
13:04
Я так и не понял - сделана "особая" ширина у исходных секций или нет. Выложи любой макет.
20 Rizhij_Nikitos
 
16.09.11
16:29
ftp://213.234.18.51/%cf%e5%f7%e0%f2%fc%d6%e5%ed%ed%e8%ea%ee%e2.epf

вот моя обработка, можешь посмотреть там макеты и тд, даже будет работать, если есть УТ 11.0, даже демо наверно подойдет.
21 Rizhij_Nikitos
 
16.09.11
18:29
UP!
22 Rizhij_Nikitos
 
19.09.11
11:49
up
23 ptiz
 
19.09.11
12:50
С 7го поста долблю как в стену.
Надо сделать ЭТО для всех секций ценников всех макетов.
http://narod.ru/disk/25595964001/ЦенникБольшинствоТоваровБольшой.mxl.html
24 Rizhij_Nikitos
 
19.09.11
16:29
Я честно не понял, что это сделать и как?
25 Rizhij_Nikitos
 
19.09.11
16:32
И что ты сделал в скинутом макете...
26 ptiz
 
19.09.11
17:40
См. (12).
В макете из (23):
Кликни сначала в строку, которая входит в секцию - посмотри ширину столбцов.
Потом кликни в строку вне секции - посмотри ширину столбцов.
27 Rizhij_Nikitos
 
20.09.11
08:59
(26) да терь я понял в чем дело, твоя идея мне подсказала, дело в столбцах, так они изначально разные в самих макета, и как бы я не увеличивал и не уменьшал, все будет ехать, если не в начале то в конце, все же в один табдок выводится будет, а там все будет ровняться по первому выведеному макету. спасибо за помощь.
28 Шапокляк
 
20.09.11
09:42
(27) Если б ты прочитал (18), то понял бы это несколько раньше.
29 Rizhij_Nikitos
 
20.09.11
13:48
(28) ну я прочитал, я же говорил спасибо, но до этого надо еще самому дойти, так более лучше запомнить)
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.