|
ПроверитьВывод() непонятно как то работает | ☑ | ||
---|---|---|---|---|
0
DeniIT
07.10.13
✎
21:27
|
Подскажите безграмотному, где собака зарыта, пол дня уже бьюсь(
ТабличныйДокумент.Вывести(ОбластьПодвала1); МассивВыводимыхОбластей.Очистить(); МассивВыводимыхОбластей.Добавить(ОбластьПодвала1); ТабличныйДокумент.АвтоМасштаб = Истина; ТабличныйДокумент.ЭкземпляровНаСтранице = 1; Док = ДанныеПечати.Ссылка; Для каждого СтрокаКомиссия Из Док.ЧленыКомиссии Цикл Если Не (ТабличныйДокумент.ПроверитьВывод(МассивВыводимыхОбластей)) Тогда ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); НомерСтраницы = НомерСтраницы + 1; ОбластьНомерСтраницы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; ТабличныйДокумент.Вывести(ОбластьНомерСтраницы); МассивВыводимыхОбластей.Очистить(); МассивВыводимыхОбластей.Добавить(ОбластьНомерСтраницы); КонецЕсли; Если СтрокаКомиссия.НомерСтроки = 1 Тогда ОбластьКомиссия.Параметры.СтрокаЧленыКомиссии = "Члены комиссии: "; Иначе ОбластьКомиссия.Параметры.СтрокаЧленыКомиссии = ""; КонецЕсли; ОбластьКомиссия.Параметры.ФИОЧленаКомиссии = СтрокаКомиссия.ФИО; ОбластьКомиссия.Параметры.ДолжностьЧленаКомиссии = СтрокаКомиссия.Должность; ТабличныйДокумент.Вывести(ОбластьКомиссия); МассивВыводимыхОбластей.Добавить(ОбластьКомиссия); КонецЦикла; Есть такой вот код, вот не могу понять, почему у меня ПроверитьВывод срабатывает когда примерно заполнилось пол страниы |
|||
1
Мимохожий Однако
07.10.13
✎
21:43
|
Попробуй закомментировать первую строчку
|
|||
2
DeniIT
07.10.13
✎
21:48
|
(1) закомментировал, он мне просто подвал не вывел, который нужен, но на печать выводит так же пол страницы, дальше горизонтальный разделитель соответственно и новая страница пошла, снова пол страницы заполняется и снова новая. Не могу понять что не так(
|
|||
3
Мимохожий Однако
07.10.13
✎
21:50
|
Зачем
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); загнал в цикл? Подписи обычно делают вместе и на одной страничке |
|||
4
DeniIT
07.10.13
✎
21:56
|
(3) а куда его еще загнать? Может я чего то недопонимаю, но в цикле же стоит условие, что если проверка вывода выдаст Ложь, т.е. страница заполнена, тогда выводить горизонтальный разделитель
|
|||
5
DJ Anthon
07.10.13
✎
22:04
|
есть такой глюк. обходи дополнительным текстовым документом
|
|||
6
Мимохожий Однако
07.10.13
✎
22:04
|
там же в цикле любопытная команда
МассивВыводимыхОбластей.Очистить(); без неё никак? |
|||
7
DJ Anthon
07.10.13
✎
22:05
|
вроде КоличествоСтраниц() пока еще работает...
|
|||
8
DeniIT
07.10.13
✎
22:08
|
(6) без нее когда массив на страницу наполнится будет каждую строчку с новой страницы выводить
(5)(7) придется видимо ковыряться другим способом, попробую предложенным, спасибо |
|||
9
Мимохожий Однако
07.10.13
✎
22:10
|
Я бы посмотрел пример вывода в типовых ТОРГ-12
|
|||
10
DeniIT
07.10.13
✎
22:12
|
(9) спасибо, гляну
|
|||
11
DJ Anthon
07.10.13
✎
22:12
|
ПроверитьВывод не работает. однозначно. проверено на сферическом вакууме. вот как я его обошел (буквально вчера)
три табличных документа: ТД ТДКопия ТДСтрока в ТДСтрока формирую строку, которую можно переносить (она может состоять из нескольких строк) В ТДКопия вывожу область из ТДСтрока, относящуюся к этой строке таблицы. если число страниц в тдкопия больше, чем в тд, то делаю разрыв, после чего копирую ТД в ТДКопия (чтобы разрывы совпадали), а ТДСтрока очищаю. не забудь предусмотреть, если строка у тебя последняя, так как надо в ТДСтрока сразу загнать и подвал отчета. если же у тебя еще есть страничный подвал таблицы, то его тоже надо будет загонять в ТДСтрока. |
|||
12
DeniIT
07.10.13
✎
22:18
|
(11) задним местом чувствую что таким способом у меня отчет в 200 страниц будет пол часа формироваться))) Да должен этот "ПроверитьВывод" работать, где то просто я не то сделал чувствую, завтра еще поборюсь, может чего нарою, расскажу)) Если не получится придется так и делать, как ты подсказываешь
|
|||
13
Мимохожий Однако
07.10.13
✎
22:27
|
// Проверяет, умещаются ли переданные табличные документы на страницу при печати.
// // Параметры // ТабДокумент – Табличный документ // ВыводимыеОбласти – Массив из проверяемых таблиц или табличный документ // РезультатПриОшибке - Какой возвращать результат при возникновении ошибки // // Возвращаемое значение: // Булево – умещаются или нет переданные документы // Функция ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти, РезультатПриОшибке = Истина) Экспорт Попытка Возврат ТабДокумент.ПроверитьВывод(ВыводимыеОбласти); Исключение Возврат РезультатПриОшибке; КонецПопытки; КонецФункции // ПроверитьВыводТабличногоДокумента() |
|||
14
DJ Anthon
07.10.13
✎
22:28
|
(12) ну, 200 страниц, это даааа.. придется мухлевать, тогда мой метод примени для первой страницы, а дальше проверяй этой долбанутой функцией
(13) эта хрень как раз первую страницу и портит. |
|||
15
Мимохожий Однако
07.10.13
✎
22:28
|
а в документе
Если НЕ ТабДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда НомерСтраницы = НомерСтраницы + 1; ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; ТабДокумент.Вывести(ЗаголовокТаблицы); КонецЕсли; ......... взято из УТ10.3 |
|||
16
DJ Anthon
07.10.13
✎
22:33
|
(15) да знаю я, откуда это взято, во всех типовых така хрень. но если пишешь отчет сам с нуля, сталкиваешься с проблемой, которую до сих пор никто решить не смог. видимо, дело в каком-то реквизите табличного документа, который в типовых имеет правильное значение, при котором функция работает без бага. что непонятного? посмотрите на форуме, много раз тема поднималась
|
|||
17
DeniIT
07.10.13
✎
22:40
|
(15)(16) так вот тоже смотрю что в типовых работает эта хрень, так почему когда сам пишешь не работает, не могу понять(
|
|||
18
DJ Anthon
07.10.13
✎
22:44
|
найдешь - дай знать. я, кстати, переделаю отчетик, по методу (14), а то на 20 страничках подтормаживать начинает..
|
|||
19
DeniIT
07.10.13
✎
22:47
|
(18) отпишусь тут как добил
а ты мне еще на 200 страниц предлагал))) если уже на 20 тормозит))) |
|||
20
DeniIT
07.10.13
✎
22:48
|
(13) попробую завтра еще через эту функцию, хотя по сути тоже самое)
|
|||
21
catena
08.10.13
✎
06:31
|
А ориентировка страницы случайно не ландшафт стоит?
|
|||
22
v4442
08.10.13
✎
06:43
|
(0) Точно , был такой фокус.
В инете нашел решение, если что позже выложу код, там вроде массив нужно создавать каждый раз, а не очищать. |
|||
23
DJ Anthon
08.10.13
✎
06:50
|
(22) а что, очищенный массив чем-то отличается от нового?
|
|||
24
DJ Anthon
08.10.13
✎
06:50
|
(21) да, ландшафт
|
|||
25
v4442
08.10.13
✎
06:57
|
Пока ВыборкаСтрокТовары.Следующий() Цикл
Ном = Ном + 1; ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары); Кратность = 1; СтрокаСуммСписания = ТаблицаСуммСписания.Найти(ВыборкаСтрокТовары.Номенклатура, "Номенклатура"); Если СтрокаСуммСписания = Неопределено Тогда ВсегоСНДС = 0; Цена = 0; Иначе Цена = ?(СтрокаСуммСписания.Количество = 0, 0, СтрокаСуммСписания.Сумма / СтрокаСуммСписания.Количество); ВсегоСНДС = Цена * ВыборкаСтрокТовары.КоличествоПринято; КонецЕсли; Количество = ВыборкаСтрокТовары.КоличествоПринято; ОбластьМакета.Параметры.Количество = Количество; ОбластьМакета.Параметры.СуммаСНДС = ВсегоСНДС; ОбластьМакета.Параметры.СуммаБезНДС = ВсегоСНДС; ОбластьМакета.Параметры.СуммаНДС = 0; ОбластьМакета.Параметры.Цена = Цена; ОбластьМакета.Параметры.ТоварНаименование = СокрЛП(ВыборкаСтрокТовары.ТоварНаименование); ОбластьМакета.Параметры.КоррСчет = СокрЛП(ВыборкаСтрокТовары.СчетУчета); ОбластьМакета.Параметры.НоменклатурныйНомер = ВыборкаСтрокТовары.ТоварКод; МассивОбластей =Новый Массив; МассивОбластей.Добавить(ОбластьМакета); Если (Не ТабДокумент.ПроверитьВывод(МассивОбластей)) Тогда // Или (Ном = КоличествоСтрок) Тогда НомерСтраницы = НомерСтраницы + 1; ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); ТабДокумент.Вывести(ЗаголовокТаблицы); МассивОбластей.Очистить(); КонецЕсли; ТабДокумент.Вывести(ОбластьМакета); ИтогоКоличествоП |
|||
26
v4442
08.10.13
✎
06:58
|
(25) вот такой код у меня, там есть еще один нюанс, время будет доделаю.
|
|||
27
v4442
08.10.13
✎
06:59
|
(23) не знаю, с очисткой не получилось )))
|
|||
28
AndyD
08.10.13
✎
08:15
|
автомасштаб предлагали уже отключить?
|
|||
29
Бледно Золотистый
08.10.13
✎
08:18
|
(28) + количество экземпляров на странице с авто на 1 установить.
|
|||
30
catena
08.10.13
✎
08:26
|
Мнэ... Вы не умеете готовить ПроверитьВывод... Он проверяет, умещаются ли добавляемые области на УЖЕ ВЫВЕДЕННЫЙ табличный документ. Т.е. вы сперва выводите строку, а потом еще и ее добавляете - поместится ли она, если я выведу ее еще раз?
Кушайте: ТабличныйДокумент.Вывести(ОбластьПодвала1); МассивВыводимыхОбластей.Очистить(); // МассивВыводимыхОбластей.Добавить(ОбластьПодвала1); ТабличныйДокумент.АвтоМасштаб = Истина; Док = ДанныеПечати.Ссылка; Для каждого СтрокаКомиссия Из Док.РабочееВремя Цикл Если СтрокаКомиссия.НомерСтроки = 1 Тогда ОбластьКомиссия.Параметры.СтрокаЧленыКомиссии = "Члены комиссии: "; Иначе ОбластьКомиссия.Параметры.СтрокаЧленыКомиссии = ""; КонецЕсли; ОбластьКомиссия.Параметры.ФИОЧленаКомиссии = СтрокаКомиссия.Физлицо; ОбластьКомиссия.Параметры.ДолжностьЧленаКомиссии = СтрокаКомиссия.Должность; МассивВыводимыхОбластей.Добавить(ОбластьКомиссия); Если Не (ТабличныйДокумент.ПроверитьВывод(ОбластьКомиссия)) Тогда ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); НомерСтраницы = НомерСтраницы + 1; ОбластьНомерСтраницы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; МассивВыводимыхОбластей.Очистить(); МассивВыводимыхОбластей.Добавить(ОбластьНомерСтраницы); ТабличныйДокумент.Вывести(ОбластьНомерСтраницы); КонецЕсли; ТабличныйДокумент.Вывести(ОбластьКомиссия); КонецЦикла; |
|||
31
catena
08.10.13
✎
08:26
|
+(30) Имя табличной части не забудьте поменять.
|
|||
32
dmpl
08.10.13
✎
08:27
|
(0) Настройки печати когда устанавливаешь? Надо до проверки вывода, в т.ч. и принтер надо выбирать до проверки вывода. У тебя, скорее всего, по умолчанию альбомная ориентация, а ты ставишь уже после проверки книжную...
|
|||
33
DJ Anthon
08.10.13
✎
08:34
|
(28) а если он нужен?
|
|||
34
DJ Anthon
08.10.13
✎
08:35
|
(31) ну а мы разве не так же делаем?
(32) да, настройки принтера ставим первыми и все настройки до первого вывода заранее ставим |
|||
35
catena
08.10.13
✎
08:39
|
(34)Нет. В (0) написано
ТабДокумент(который уже содержит весь массив областей).ПроверитьВывод(а скажи-ка нам, поместится ли в тебе, если мы ЕЩЕ РАЗ выведем ->)(МассивОбластей) |
|||
36
catena
08.10.13
✎
08:40
|
+(35)А нода все лишь проверять только то, что еще не добавлено в таб.документ, но хочется добавить.
|
|||
37
DJ Anthon
08.10.13
✎
09:16
|
(36) я код в (0) не читал, у меня как раз проблема была именно с тем, что я проверял именно перед выводом области и он выдавал, что страница закончится, однако, она только наполовину заполнена. и у всех, кто до этого темы создавал раньше. я понимаю, как она работает, но вижу что работает она неправильно. ведь когда я переписал на обход глюка, у меня же все правильно встало. могу скинуть отчет до и после (она для стандартного зика)
|
|||
38
catena
08.10.13
✎
09:24
|
(37)Нет там глюков. Есть неправильное прочтение описания. У меня везде работает. В авторском коде меняем проверку вывода массива на проверку вывода добавляемой строки - тоже все работает как ожидалось.
|
|||
39
hhhh
08.10.13
✎
09:39
|
(0) ну вот тут же бред
ТабличныйДокумент.Вывести(ОбластьКомиссия); МассивВыводимыхОбластей.Добавить(ОбластьКомиссия); получается выводишь два раза, и в табдокумент и в массив. И правильно получается полстраницы. |
|||
40
v4442
08.10.13
✎
09:58
|
(37) покажи что получилось.
|
|||
41
Serg_1960
08.10.13
✎
10:09
|
PS: ТС взял фрагменты типовых алгоритмов, но не совсем разобравшись, соединил их с точностью до наоборот? :)
Массив выводимых областей нужен для проверки вывода (т.е. до вывода), а автор добавляет туда значения уже после вывода. (имхо) По опубликованному фрагменту алгоритма, массив выводимых областей, в принципе, не нужен. Достаточно всего лишь сформировать ОбластьКомиссия и проверить перед выводом Если Не (ТабличныйДокумент.ПроверитьВывод(ОбластьКомиссия+Областьподвала1) Тогда |
|||
42
DeniIT
08.10.13
✎
11:30
|
о блин, сколько полезного понаписали)) ща буду пробовать)
|
|||
43
v4442
08.10.13
✎
11:36
|
(42) Давай, я тоже возьмусь за свою недоделку))
Может кто скинет рабочий код с выводом последней строки с подвалом , когда она не помещается на выводимую. |
|||
44
v4442
08.10.13
✎
11:39
|
+(43) пока вод немного исправленный вариант, но нужно добавить вывод последней строки с подвалом.
Макет = ПолучитьМакет("М15"); ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПередачаТоваров_М15"; // Зададим параметры макета ТабДокумент.ПолеСверху = 0; ТабДокумент.ПолеСлева = 0; ТабДокумент.ПолеСнизу = 0; ТабДокумент.ПолеСправа = 0; ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; // Выводим общие реквизиты шапки СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.ЮрФизЛицо, Шапка.ДатаСоставления); ОбластьМакета = Макет.ПолучитьОбласть("Шапка"); ОбластьМакета.Параметры.Заполнить(Шапка); ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации); ОбластьМакета.Параметры.ОрганизацияПоОКПО = СведенияОбОрганизации.КодПоОКПО; ОбластьМакета.Параметры.НомерДокумента = ОбщегоНазначения.ПолучитьНомерНаПечать(Шапка); СведенияОКонтрагенте = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Контрагент, Шапка.ДатаСоставления); ПредставлениеКонтрагента = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОКонтрагенте, "НаименованиеДляПечатныхФорм,"); ОбластьМакета.Параметры.КонтрагентНаименование = "" + ПредставлениеКонтрагента; ОбластьМакета.Параметры.Получатель = ПредставлениеКонтрагента; ОбластьМакета.Параметры.Основание = "Договор " + СсылкаНаОбъект.ДоговорКонтрагента.Наименование + " № " + СсылкаНаОбъект.ДоговорКонтрагента.Номер + " от " + Формат(СсылкаНаОбъект.ДоговорКонтрагента.Дата, "ДЛФ=D"); ТабДокумент.Вывести(ОбластьМакета); // Выводим заголовок таблицы ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы"); ТабДокумент.Вывести(ЗаголовокТаблицы); СтрокНаСтранице = 24; СтрокШапки = 9; СтрокПодвала = 3; НомерСтраницы = 1; КоличествоСтрок = ВыборкаСтрокТовары.Количество(); // Инициализация итогов в документе ИтогоКоличествоПринято = 0; ИтогоСуммаБезНДС = 0; ИтогоСуммаНДС = 0; ИтогоВсегоСНДС = 0; Ном = 0; ТаблицаСуммСписания = БухгалтерскийУчет.ПолучитьСуммуСписанияАктивов(СсылкаНаОбъект); ТаблицаСуммСписания.Индексы.Добавить("Номенклатура"); ОбластьМакетаПодвал = Макет.ПолучитьОбласть("Подвал"); ОбластьМакетаПодвал.Параметры.ФИОРуководителя = Руководитель; ОбластьМакетаПодвал.Параметры.ВывДоверености = ДовРуководитель.ДоверенностьНомерДата; ОбластьМакетаПодвал.Параметры.ДолжностьРуководителя = ДолжностьРуководитель; ОбластьМакетаПодвал.Параметры.ФИОГлавБухгалтера = ГлБухгалтер; ОбластьМакетаПодвал.Параметры.ВывДовереностиГлБух = ДовГлБухгалтер.ДоверенностьНомерДата; ОбластьМакетаПодвал.Параметры.КоличествоПорядковыхНомеровЗаписейПрописью = ЧислоПрописью(КоличествоСтрок, ,",,,,,,,,0"); ОбластьМакетаПодвал.Параметры.СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(ИтогоВсегоСНДС, Шапка.ВалютаДокумента); ОбластьМакетаПодвал.Параметры.ИтогНДС = ОбщегоНазначения.СформироватьСуммуПрописью(0, Шапка.ВалютаДокумента); ОбластьМакета = Макет.ПолучитьОбласть("Строка"); Пока ВыборкаСтрокТовары.Следующий() Цикл Ном = Ном + 1; ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары); Кратность = 1; СтрокаСуммСписания = ТаблицаСуммСписания.Найти(ВыборкаСтрокТовары.Номенклатура, "Номенклатура"); Если СтрокаСуммСписания = Неопределено Тогда ВсегоСНДС = 0; Цена = 0; Иначе Цена = ?(СтрокаСуммСписания.Количество = 0, 0, СтрокаСуммСписания.Сумма / СтрокаСуммСписания.Количество); ВсегоСНДС = Цена * ВыборкаСтрокТовары.КоличествоПринято; КонецЕсли; Количество = ВыборкаСтрокТовары.КоличествоПринято; ОбластьМакета.Параметры.Количество = Количество; ОбластьМакета.Параметры.СуммаСНДС = ВсегоСНДС; ОбластьМакета.Параметры.СуммаБезНДС = ВсегоСНДС; ОбластьМакета.Параметры.СуммаНДС = 0; ОбластьМакета.Параметры.Цена = Цена; ОбластьМакета.Параметры.ТоварНаименование = СокрЛП(ВыборкаСтрокТовары.ТоварНаименование); ОбластьМакета.Параметры.КоррСчет = СокрЛП(ВыборкаСтрокТовары.СчетУчета); ОбластьМакета.Параметры.НоменклатурныйНомер = ВыборкаСтрокТовары.ТоварКод; МассивОбластей.Очистить(); МассивОбластей.Добавить(ОбластьМакета); Если (Не ТабДокумент.ПроверитьВывод(МассивОбластей)) Тогда // Или (Ном = КоличествоСтрок) Тогда НомерСтраницы = НомерСтраницы + 1; ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); ТабДокумент.Вывести(ЗаголовокТаблицы); МассивОбластей.Очистить(); КонецЕсли; ТабДокумент.Вывести(ОбластьМакета); ИтогоКоличествоПринято = ИтогоКоличествоПринято + Количество; ИтогоСуммаБезНДС = ИтогоСуммаБезНДС + ВсегоСНДС; ИтогоВсегоСНДС = ИтогоВсегоСНДС + ВсегоСНДС; КонецЦикла; ТабДокумент.Вывести(ОбластьМакетаПодвал); |
|||
45
v4442
08.10.13
✎
12:05
|
Немого коряво, но вроде работает
ПодвалВывели=0; ОбластьМакета = Макет.ПолучитьОбласть("Строка"); Пока ВыборкаСтрокТовары.Следующий() Цикл Ном = Ном + 1; ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары); Кратность = 1; СтрокаСуммСписания = ТаблицаСуммСписания.Найти(ВыборкаСтрокТовары.Номенклатура, "Номенклатура"); Если СтрокаСуммСписания = Неопределено Тогда ВсегоСНДС = 0; Цена = 0; Иначе Цена = ?(СтрокаСуммСписания.Количество = 0, 0, СтрокаСуммСписания.Сумма / СтрокаСуммСписания.Количество); ВсегоСНДС = Цена * ВыборкаСтрокТовары.КоличествоПринято; КонецЕсли; Количество = ВыборкаСтрокТовары.КоличествоПринято; ОбластьМакета.Параметры.Количество = Количество; ОбластьМакета.Параметры.СуммаСНДС = ВсегоСНДС; ОбластьМакета.Параметры.СуммаБезНДС = ВсегоСНДС; ОбластьМакета.Параметры.СуммаНДС = 0; ОбластьМакета.Параметры.Цена = Цена; ОбластьМакета.Параметры.ТоварНаименование = СокрЛП(ВыборкаСтрокТовары.ТоварНаименование); ОбластьМакета.Параметры.КоррСчет = СокрЛП(ВыборкаСтрокТовары.СчетУчета); ОбластьМакета.Параметры.НоменклатурныйНомер = ВыборкаСтрокТовары.ТоварКод; МассивОбластей.Очистить(); МассивОбластей.Добавить(ОбластьМакета); Если Ном = КоличествоСтрок Тогда МассивОбластей.Добавить(ОбластьМакетаПодвал); Если (Не ТабДокумент.ПроверитьВывод(МассивОбластей)) Тогда НомерСтраницы = НомерСтраницы + 1; ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); ТабДокумент.Вывести(ЗаголовокТаблицы); ТабДокумент.Вывести(ОбластьМакета); ТабДокумент.Вывести(ОбластьМакетаПодвал); ПодвалВывели=1; КонецЕсли; Прервать; КонецЕсли; Если (Не ТабДокумент.ПроверитьВывод(МассивОбластей)) и (Ном <> КоличествоСтрок) Тогда НомерСтраницы = НомерСтраницы + 1; ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); ТабДокумент.Вывести(ЗаголовокТаблицы); МассивОбластей.Очистить(); КонецЕсли; ТабДокумент.Вывести(ОбластьМакета); ИтогоКоличествоПринято = ИтогоКоличествоПринято + Количество; ИтогоСуммаБезНДС = ИтогоСуммаБезНДС + ВсегоСНДС; ИтогоВсегоСНДС = ИтогоВсегоСНДС + ВсегоСНДС; КонецЦикла; Если ПодвалВывели=0 Тогда ТабДокумент.Вывести(ОбластьМакетаПодвал); КонецЕсли; |
|||
46
DeniIT
08.10.13
✎
12:06
|
сделал по коду (30), все получилось, спасибо огромное!!! Теперь понял как это все работает)) МассивВыводимыхОбластей тут вообще теперь не нужен по сути)) Проверяется область чисто. Все круто залетало) Вторую часть кода сам допинаю щас и все в ажуре)
|
|||
47
DeniIT
08.10.13
✎
12:24
|
Все круто, выводится все как надо)
|
|||
48
DJ Anthon
08.10.13
✎
16:15
|
(38) вот тот мой код, который не работал (я специально обработку сохранил, которая глючила):
ВыводимыеОбласти = Новый Массив(); ВыводимыеОбласти.Добавить(ОбластьМакетаСтрока); ВыводимыеОбласти.Добавить(ОбластьМакетаПодвал); Если Не ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти) И (Строка.Сотрудник = ТЗ[ТЗ.Количество() - 1].Сотрудник) Тогда ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); ИначеЕсли Не ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(ТабДокумент, ОбластьМакетаСтрока) Тогда ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; ТабДокумент.Вывести(ОбластьМакетаСтрока); вывод у меня стоит после проверки. но, ужас, сегодня почему-то он заработал... хотя я уже написал другой. сейчас решил проверить - добавил функцию ПроверитьВывод... и он тоже заработал (( ну почему мне так не везет?? столько времени зря убил |
|||
49
DeniIT
09.10.13
✎
08:27
|
(48) тоже целые сутки на это убил, пока не объяснили тут) Сейчас все удачно работает)
|
|||
50
Serg_1960
09.10.13
✎
09:06
|
(48) "...И (Строка.Сотрудник = ТЗ[ТЗ.Количество() - 1].Сотрудник)" - ужас, летящий в ночи.
|
|||
51
DJ Anthon
09.10.13
✎
09:43
|
(50) предложите лучше. вы же не знаете, как устроена моя таблица
|
|||
52
Serg_1960
09.10.13
✎
10:14
|
Да, я не знаю как устроена Ваша таблица.
Если размер таблицы ТЗ не изменяется во время цикла обхода (что скорее всего так и есть), то значение "ТЗ[ТЗ.Количество() - 1].Сотрудник" - постоянно и значение можно запомнить в переменной до входа в цикл. Имхо: счетчики строк работают быстрее. И что-то мне подсказывает, что это банальный алгоритм контроля последней строки с подвалом на последней странице документа. |
|||
53
DJ Anthon
09.10.13
✎
15:44
|
(52) изменяется. в запросе не все можно отфильтровать. и это не последняя строчка. а сгруппированные по сотруднику строчки, и весь вывод сделан в одном цикле, без использования дополнительных таблиц. просто экономия кода и переменных.
|
|||
54
DJ Anthon
09.10.13
✎
15:45
|
до входа в цикл надо сделать проверку на наличие строк в таблице - лишние строки кода. а процессорного времени это условие много не отнимет.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |