Печать УПД и ТОРГ-12 на двух страницах

Автор Тимур, 16 августа 2019, 08:53

0 Пользователи и 1 гость просматривают эту тему.

Тимур

Подскажите как сформировать и распечатать документ УПД, Торг-12?
По правилам бух.учета УПД и ТОРГ-12 должны печататься так, чтобы подвал документа помещался целиком на лист, и в случае переноса хоть одной строки на новый лист, подвал должен полностью переноситься на новый лист и повторно должен выводится заголовок таблицы как минимум с последней строкой товара.
Рис.1 Верный перенос
Рис.2 Не верный перенос строк

mikekaganski

Как мне кажется, это автоматически встроенными средствами не обеспечить. Откройте в режиме разбивки страниц и проверьте правильность разбивки последней страницы. При необходимости перетащите автоматическую границу вверх над последней строкой данных.
С уважением,
Михаил Каганский

Rafik

В принципе, можно сделать макрос, который будет вставлять разрыв страницы, если кол-во строк на последнем листе менее определенного количества. Есть у этого способа недостаток: геморройно. Если есть нужда в обработке большого количества файлов "оптом", то тогда, может быть, имеет смысл делать.

mikekaganski

... и макрос должен сам проставлять "Документ составлен на ___ листах"
С уважением,
Михаил Каганский

Тимур

Но как тогда в других программах это реализовано? неужели никто не может помочь

mikekaganski

#5
В каких? Если у Вас есть пример, скажем, в Excel, можно посмотреть на реализацию там и сделать аналогично (выложите, пожалуйста, такой пример).
Цитата: Тимур от 21 августа 2019, 10:24
неужели никто не может помочь
Честно сказать, выглядит довольно невежливо говорить о том, что "никто не может помочь" после ответов, где Вам старались помочь в меру знаний и возможностей.
С уважением,
Михаил Каганский

Rafik

Вот некоторые подсказки для решения проблемы через макрос:
1. Получение разрывов страниц и определение их положения относительно индекса строк ' Расположение горизонтальных разрывов страниц
oRowPgBr = oSheet.getRowPageBreaks()
nRow = oRowPgBr(n).Position  'дает индекс строки, которая идет после разрыва страницы, где n - индекс разрыва страницы (порядковый номер минус 1)

2. Узнать адрес (координаты) последней ячейкиFunction GetEndAdr(oSheet As object)
' oSheet - Ссылка на лист
oCursor = oSheet.createCursor
oCursor.GotoEndOfUsedArea(false)
nEndRow = oCursor.RangeAddress.EndRow
nEndCol = oCursor.RangeAddress.EndColumn
GetEndAdr = Array(nEndCol,nEndRow) ' Возвращаем адрес последней ячейки документа
end Function
По разнице положения последнего разрыва и индекса строки последней ячейки, можно прикинуть сколько строк приходится на последний лист.
3. С принудительной вставкой разрыва страницы ни разу не сталкивался, поэтому как сделать это не могу подсказать.

Тимур

Цитата: mikekaganski от 21 августа 2019, 10:47
В каких? Если у Вас есть пример, скажем, в Excel, можно посмотреть на реализацию там и сделать аналогично (выложите, пожалуйста, такой пример).
Цитата: Тимур от 21 августа 2019, 10:24
неужели никто не может помочь
Честно сказать, выглядит довольно невежливо говорить о том, что "никто не может помочь" после ответов, где Вам старались помочь в меру знаний и возможностей.
1. С чего это вы приняли мое высказывание за Невежество. Ничего подобного... Я просто хочу найти конкретное решение своей проблемы...
2. Про примеры -  1С, сайты с онлайн формированием ТОРГ12, любые бухгалтерские и складские программы их множество...

kompilainenn

Цитата: Тимур от 22 августа 2019, 20:58С чего это вы приняли мое высказывание за Невежество
не "невежество", а "НЕ ВЕЖЛИВОСТЬ"
Цитата: Тимур от 22 августа 2019, 20:58любые бухгалтерские и складские программы их множество
прекрасно, советов в сети также много
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

mikekaganski

Цитата: Тимур от 21 августа 2019, 10:24
Но как тогда в других программах это реализовано?
Цитата: Тимур от 22 августа 2019, 20:58
2. Про примеры -  1С, сайты с онлайн формированием ТОРГ12, любые бухгалтерские и складские программы их множество...

Ах, так речь про специализированные программы? Неужели разница между программой общего назначения (которая сделана для любых расчётов, но не затачивалась специально под особенности приказа номер какого-то там отдельно взятого министерства определённой страны) и 1С, которую только и пилят, чтобы она отвечала хотелкам Российского учёта?

Для сведения: все "специализированные программы" как раз и состоят целиком из тех самых макросов, для написания которых Rafik предложил свои подсказки. Ну, и нехилый штат программистов в 1С, а также армия "1С-программистов" по стране всё время шлифует эти макросы для 1С за деньги. Вы же хотите вдруг увидеть такое готовое решение здесь... почему нет, может, кто-то и сделал. Если найдётся такой добрый человек и выложит - будет здорово.
С уважением,
Михаил Каганский

bigor

Добавлю к тому, что Rafik написал, вставка разрыва страницы
oSheet.Rows(10).IsStartOfNewPage = True
вставит разрыв после 10 строки.

Кубики вроде все  :) вам осталось только собрать все в кучу   
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Тимур

Цитата: Rafik от 22 августа 2019, 07:27
Вот некоторые подсказки для решения проблемы через макрос:
1. Получение разрывов страниц и определение их положения относительно индекса строк ' Расположение горизонтальных разрывов страниц
oRowPgBr = oSheet.getRowPageBreaks()
nRow = oRowPgBr(n).Position  'дает индекс строки, которая идет после разрыва страницы, где n - индекс разрыва страницы (порядковый номер минус 1)

2. Узнать адрес (координаты) последней ячейкиFunction GetEndAdr(oSheet As object)
' oSheet - Ссылка на лист
oCursor = oSheet.createCursor
oCursor.GotoEndOfUsedArea(false)
nEndRow = oCursor.RangeAddress.EndRow
nEndCol = oCursor.RangeAddress.EndColumn
GetEndAdr = Array(nEndCol,nEndRow) ' Возвращаем адрес последней ячейки документа
end Function
По разнице положения последнего разрыва и индекса строки последней ячейки, можно прикинуть сколько строк приходится на последний лист.
3. С принудительной вставкой разрыва страницы ни разу не сталкивался, поэтому как сделать это не могу подсказать.

Спасибо.. огромное..!!!

Тимур


Тимур

Цитата: mikekaganski от 22 августа 2019, 21:46
Цитата: Тимур от 21 августа 2019, 10:24
Но как тогда в других программах это реализовано?
Цитата: Тимур от 22 августа 2019, 20:58
2. Про примеры -  1С, сайты с онлайн формированием ТОРГ12, любые бухгалтерские и складские программы их множество...

Ах, так речь про специализированные программы? Неужели разница между программой общего назначения (которая сделана для любых расчётов, но не затачивалась специально под особенности приказа номер какого-то там отдельно взятого министерства определённой страны) и 1С, которую только и пилят, чтобы она отвечала хотелкам Российского учёта?

Для сведения: все "специализированные программы" как раз и состоят целиком из тех самых макросов, для написания которых Rafik предложил свои подсказки. Ну, и нехилый штат программистов в 1С, а также армия "1С-программистов" по стране всё время шлифует эти макросы для 1С за деньги. Вы же хотите вдруг увидеть такое готовое решение здесь... почему нет, может, кто-то и сделал. Если найдётся такой добрый человек и выложит - будет здорово.

Да это прекрасно понимаю, есть специализированные программы. Просто я  собрал свою программу учета на базе mydataexpress, и столкнулся в данный момент с этой проблемой. Дело теперь даже не в ТОРГ12, а вообще  - как сделать такой перенос? Я вообще не силён в VB и макросах, поэтому и обратился на этот  форум, может для меня это проблема, а знающему человеку это раз плюнуть. Вот и всё.
Спасибо Вам- Rafik и Bigor. Я попробую  и надеюсь получится сделать.
А Вам спасибо - kompilainenn за мораль))))