Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from reportlab.lib import colors
- from reportlab.platypus import Paragraph, Frame, Table, TableStyle, KeepInFrame, BaseDocTemplate, PageTemplate
- # Добавя редове в Актива, за да се приложи SPAN
- # @param data_row list Списък от 3 стойности/колони
- # @param extra_row None/dect Речник от свойства/стилове
- def append_data_row(data_row, extra_row = None, target = None): # data_
- target_data_table = data_table_a
- target_extra = extra_a
- if target is not None and target == "p":
- target_data_table = data_table_p
- target_extra = extra_p
- if data_row[1] == '0' and data_row[2] == '0':
- return
- target_data_table.append(data_row)
- print(f"Добавен ред на индекс {len(target_data_table) - 1}")
- if extra_row is None:
- extra_row = {}
- if "Общо" in data_row[0]:
- extra_row["is_total"] = True
- line_breaks_count = data_row[0].count("\n")
- print(f"Ред: {data_row[0]}")
- print(f"Брой преноси: {line_breaks_count}")
- if line_breaks_count: # Само ако има поне 1 пренос
- extra_row["span_rows"] = line_breaks_count + 1 # е нужно спан-ване
- target_extra.append(extra_row)
- print(f"Добавен extra на индекс {len(target_extra) - 1}")
- for line_break_idx in range(line_breaks_count): # за всеки пренос добавя по 1 празен ред
- target_data_table.append(['', '', ''])
- print(f"Добавен празен ред на индекс {len(target_data_table)-1}")
- target_extra.append({})
- print(f"Добавен extra на индекс {len(target_extra) - 1}")
- # Антетка
- text_antec = [
- ['АКТИВ', '', '', 'ПАСИВ', '', ''], # Антетка 5 реда
- ['РАЗДЕЛИ, ГРУПИ, СТАТИИ', 'Сума (хил.лв)', '', 'РАЗДЕЛИ, ГРУПИ, СТАТИИ', 'Сума (хил.лв)', ''], # Антетка
- ['', 'Текуща\nгодина', 'Предх.\nгодина', '', 'Текуща\nгодина', 'Предх.\nгодина'], # Антетка
- ['', '', '', '', '', ''], # Антетка
- ['a', '1', '2', 'a', '1', '2'], # Антетка
- ]
- style_antec = TableStyle([
- ('GRID',(0,0),(-1,-1),0.5,colors.blue),
- ('FONT', (0,0),(0,3),'Timesbd',9), # АКТИВ, РАЗДЕЛИ, ГРУПИ, СТАТИИ, а
- ('FONT', (3,0),(3,3),'Timesbd',9), # ПАСИВ, РАЗДЕЛИ, ГРУПИ, СТАТИИ, а
- ('FONT', (1,1),(2,3),'Times',8), # Сума (хил. лв), Тек и Предходна години
- ('FONT', (4,1),(5,3),'Times',8), # Сума (хил. лв), Тек и Предходна години
- ('FONT', (0,4),(5,4),'Timesbd',8), # 1, 2
- ('ALIGN', (0, 0), (5, 4), 'CENTER'), # Център по X
- ('BACKGROUND', (0, 0), (5, 4), colors.lightgoldenrodyellow),
- ('SPAN', (0, 0), (2, 0)), # АКТИВ
- ('SPAN', (3, 0), (5, 0)), # ПАСИВ
- ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), # Център по Y
- ('SPAN', (0, 1), (0, 3)), # РАЗДЕЛИ, ГРУПИ, СТАТИИ - Актива
- ('SPAN', (3, 1), (3, 3)), # РАЗДЕЛИ, ГРУПИ, СТАТИИ - Пасива
- ('SPAN', (1, 1), (2, 1)), # Сума (хил. лв) - Актива
- ('SPAN', (4, 1), (5, 1)), # Сума (хил. лв) - Пасива
- ('SPAN', (1, 2), (1, 3)), # Текуща година - Актива
- ('SPAN', (4, 2), (4, 3)), # Текуща година - Пасива
- ('SPAN', (2, 2), (2, 3)), # Предходна година - Актива
- ('SPAN', (5, 2), (5, 3)), # Предходна година - Пасива
- ])
- # Актив
- a1 = 0
- a2 = 0
- totals_a = {
- "раздел_Б": ['Общо за раздел Б:', f'{a1}', f'{a2:_}'.replace('_', ' ')],
- "група_БI": ['Общо за група I:', '23', f'{9550:_}'.replace('_', ' ')],
- "група_БII": ['Общо за група II:', '23', f'{9550:_}'.replace('_', ' ')],
- "група_БIII": ['Общо за група III:', '23', f'{9550:_}'.replace('_', ' ')],
- "раздел_В": ['Общо за раздел В:', '23', f'{9550:_}'.replace('_', ' ')],
- "група_ВI": ['Общо за група I:', '23', f'{9550:_}'.replace('_', ' ')],
- "група_ВII": ['Общо за група II:', '23', f'{9550:_}'.replace('_', ' ')],
- "група_ВIII": ['Общо за група III:', f'{a1}', f'{a2:_}'.replace('_', ' ')]
- }
- data_table_a = [] # MAX 45 ROWS per Sheet !!
- extra_a = []
- append_data_row(['А. Записан, но невнесен капитал', '255', '355'])
- if (totals_a["раздел_Б"][1] == "0" and totals_a["раздел_Б"][2] == "0"):
- pass # Пропускаме целия раздел Б
- else: # Иначе добавяме раздел Б
- append_data_row(['Б. Нетекущи активи', '', ''])
- if (totals_a["група_БI"][1] == "0" and totals_a["група_БI"][2] == "0"):
- pass # Пропускаме цялата група БI
- else: # Добавяме група БI
- append_data_row(['I. Нематериални активи', '', ''])
- append_data_row(['1. Продукти от развойна дейност', '255', '355'])
- append_data_row(['2. Концесии, патенти, лицензии, \nтърговски марки, програмни '
- 'продукти и \nдруги подобни права и активи', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row(['3. Търговска репутация', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row(['4. Предоставени аванси и нематериални\nактиви в процес на изграждане', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row(totals_a["група_БI"]) # ляво, наклонено, bd
- if (totals_a["група_БII"][1] == "0" and totals_a["група_БII"][2] == "0"):
- pass # Пропускаме цялата група БII
- else: # Добавяме група БII
- append_data_row(['II. Дълготрайни материални активи', '', ''])
- append_data_row(['1. Земи и сгради, в т.ч.:', '255', '355'])
- append_data_row([' - земи', '255', '355'])
- append_data_row([' - сгради', '255', '355'])
- append_data_row(['2. Машини, производствено оборудване и апаратура', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row(['3. Съоръжения и други', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row(['4. Предоставени аванси и дълготрайни материални\nактиви в процес на изграждане', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row(totals_a['група_БII'])
- if (totals_a["група_БIII"][1] == "0" and totals_a["група_БIII"][2] == "0"):
- pass # Пропускаме цялата група БIII
- else: # Добавяме група БIII
- append_data_row(['III. Дългосрочни финансови активи', '', ''])
- append_data_row(['1. Акции и дялове в предприятия от групата', '255', '355'])
- append_data_row(['2. Предоставени заеми на предприятия от групата', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row(['3. Акции и дялове в асоциирани и смесени предприятия', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row(['4. Предоставени заеми, свързани с асоциирани и\nсмесени предприятия', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row(['5. Дългосрочни инвестиции (инвестиционни имоти)', '255', '355'])
- append_data_row(['6. Други инвестиции', '255', '355'])
- append_data_row(['7. Изкупени собствени акции', '255', '355'])
- append_data_row(['- с ном. стойност: ..... хил.лв.', 'x', 'x'])
- append_data_row(totals_a['група_БIII'])
- append_data_row(['IV. Отсрочени данъци', '223', '45'])
- append_data_row(totals_a["раздел_Б"])
- if (totals_a["раздел_В"][1] == "0" and totals_a["раздел_В"][2] == "0"):
- pass # Пропускаме целия раздел Б
- else: # Иначе добавяме раздел Б
- append_data_row(['В. Текущи активи', '', ''])
- if (totals_a["група_ВI"][1] == "0" and totals_a["група_ВI"][2] == "0"):
- pass # Пропускаме цялата група ВI
- else: # Добавяме група ВI
- append_data_row(['I. Материални запаси', '', ''])
- append_data_row(['1. Суровини и материали', '255', '355'])
- append_data_row(['2. Незавършено производство', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row(['3. Продукция и стоки, в т.ч.:', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row([' - продукция', '255', '355'])
- append_data_row([' - стоки', '255', '355'])
- append_data_row(['4. Предоставени аванси', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row(totals_a["група_ВI"])
- if (totals_a["група_ВII"][1] == "0" and totals_a["група_ВII"][2] == "0"):
- pass # Пропускаме цялата група ВII
- else: # Добавяме група ВII
- append_data_row(['II. Взземания', '', ''])
- append_data_row(['1. Вземания от клиенти и доставчици, в т.ч.:', '255', '355'])
- append_data_row([' - над 1 година', '255', '355'])
- append_data_row(['2. Вземания от предприятия от група, в т.ч.:', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row([' - над 1 година', '255', '355'])
- append_data_row(['3. Вземания, свързани с асоциирани и смесени предприятия, в т.ч.:', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row([' - над 1 година', '255', '355'])
- append_data_row(['4. Други вземания, в т.ч.:', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row([' - над 1 година', '255', '355'])
- append_data_row(totals_a["група_ВII"])
- if (totals_a["група_ВIII"][1] == "0" and totals_a["група_ВIII"][2] == "0"):
- pass # Пропускаме цялата група ВIII
- else: # Добавяме група ВIII
- append_data_row(['III. Инвестиции', '', ''])
- append_data_row(['1. Акции и дялове в предприятия от групата', '255', '355'])
- append_data_row(['2. Изкупени собствени акции', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row(['- с ном. стойност: ..... хил.лв.', 'x', 'x'])
- append_data_row(['3. Други инвестиции', '23', f'{9550:_}'.replace('_', ' ')])
- append_data_row(totals_a["група_ВIII"])
- append_data_row(['IV. Парични средства, в т.ч.:', '223', '45'])
- append_data_row([' - в брой', '255', '355'])
- append_data_row([' - в безсрочни сметки(депозити)', '255', '355'])
- append_data_row(totals_a["раздел_В"])
- append_data_row(['Г. Разходи за бъдещи периоди', '22', '0'])
- # append_data_row(['СУМА НА АКТИВА', '255', '355'])
- list_style_a = TableStyle([
- ('GRID',(0,0),(-1,-1),0.5,colors.blue),
- ('FONT', (0,0),(2,-1),'Times',9),
- ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), # Център по Y
- ('RIGHTPADDING', (0, 5), (2, -1), 3), # Залепя числото на дясно
- ('ALIGN', (1, 5), (2, -1), 'RIGHT'),
- ('SPAN', (0, 6), (2, 6)),
- ('SPAN', (0, 7), (2, 7)),
- ('BACKGROUND', (0, 6), (2, 7), colors.lightgoldenrodyellow),
- # ('SPAN', (0, 9), (0, 10)),
- # ('SPAN', (1, 9), (1, 10)),
- # ('SPAN', (2, 9), (2, 10)),
- # ('SPAN', (0, 12), (0, 13)),
- # ('SPAN', (1, 12), (1, 13)),
- # ('SPAN', (2, 12), (2, 13)),
- ('ALIGN', (0, 14), (0, 14), 'RIGHT'), # Център по X
- ('FONT', (0,14),(0,14),'Timesbi',9),
- ('FONT', (1,14),(2,14),'Timesbd',9),
- ])
- # [('LINEABOVE', (0,0), (-1,0), 0.1, colors.green),
- # ('RIGHTPADDING', (0, 0), (3, -2), 1),
- # ('TEXTCOLOR', (1,1), (-2,-2), colors.red),
- # #('GRID', (1, 1), (-2, -2), 0.25, colors.red),
- # ('BOX', (0, 0),(-1, -1), 0.1, colors.blue, None, (2,2,1)),
- # ('INNERGRID', (0,0), (-1,-1), 0.25, colors.blue),
- # #('RIGHTPADDING', (1, 5), (2, 5), 1),
- # ('BACKGROUND', (0, 0), (2, 4), colors.lightgrey), # (col, row), (col, row) от колона 0 до 2 от ред 1 до ред 2
- # #('NOSPLIT', (0, 0), (0, 0))]
- # # ('ROUNDEDCORNERS', [None, None, None, None])]; ('ROUNDEDCORNERS', [5, 10, 20, 30]) радиуси на дъгите
- # # ('spitfirst'), # за 1-ви ред само
- # # ('spitlast'),] # за последен ред само
- # # ('FONT', (0,1),(len(topiclist)-1,1),'Helvetica-Bold',12),
- # # ('FONTSIZE', (0,1),(-1,-1), 10),
- # # LEFTPADDING - takes an integer, defaults to 6.
- # ('RIGHTPADDING', (1, 8), (2, -1), 1), # - takes an integer, defaults to 6.
- # ('BOTTOMPADDING', (0, 4), (2, -1), 0)] # - takes an integer, defaults to 3.
- # # TOPPADDING - takes an integer, defaults to 3.
- # # ROWBACKGROUNDS - takes a list of colors to be used cyclically.
- # # COLBACKGROUNDS - takes a list of colors to be used cyclically.
- # # VALIGN - takes one of TOP, MIDDLE or the default BOTTOM
- # # LEADING - takes leading in points.
- # Title
- # ('LEFTPADDING', (0, 0), (1, 0), 0),
- # ('RIGHTPADDING', (0, 0), (1, 0), 0),
- # ('VALIGN', (0, 0), (1, 0), 'TOP'),
- # ('ALIGN', (0, 0), (1, 0), 'CENTRE'),
- # # DataTable
- # ('ALIGN', (0, 1), (1, -1), 'CENTRE'),
- # ('SIZE', (0, 1), (-1, -1), 7), # Размер на шрифта
- # ('LEADING', (0, 1), (-1, -1), 8.4), #8.4 допълнително разсточние под текста и клетката
- # ('VALIGN', (0, 1), (-1, -1), 'MIDDLE'),
- # ('TOPPADDING', (0, 1), (-1, -1), 2.6),
- # ('BOTTOMPADDING', (0, 1), (-1, -1), 2.6),
- # ('LINEBELOW', (0, 1), (-1, -1), 0.3, colors.red), # Линия на таблицата само отдолу на редовете
- # ПАСИВ
- totals_p = { # По аналогия с totals_a
- "раздел_Б": ['Общо за раздел Б:', f'{a1}', f'{a2:_}'.replace('_', ' ')],
- "група_БI": ['Общо за група I:', '23', f'{9550:_}'.replace('_', ' ')],
- "група_БII": ['Общо за група II:', '23', f'{9550:_}'.replace('_', ' ')],
- "група_БIII": ['Общо за група III:', '23', f'{9550:_}'.replace('_', ' ')],
- "раздел_В": ['Общо за раздел В:', '23', f'{9550:_}'.replace('_', ' ')],
- "група_ВI": ['Общо за група I:', '23', f'{9550:_}'.replace('_', ' ')],
- "група_ВII": ['Общо за група II:', '23', f'{9550:_}'.replace('_', ' ')],
- "група_ВIII": ['Общо за група III:', f'{a1}', f'{a2:_}'.replace('_', ' ')]
- }
- extra_p = []
- data_table_p = []
- append_data_row(['А. Собствен капитал', '', ''], target="p")
- data_table_p = [ # MAX 45 ROWS per Sheet without Odit!!
- ['А. Собствен капитал', '', ''],
- ['I. Записан капитал', '130', '150'],
- ['II. Премии от емисии', '10', '10'],
- ['III. Резерв от последваща оценка', '20', '15'],
- ['IV. Резерви', '', ''],
- ['1. Законови резерви', '255', '355'],
- ['2. Резерв, свързан с изкупени собствени акции', '23', f'{9550:_}'.replace('_', ' ')],
- ['3. Резерв съгласно учредителен акт', '23', f'{9550:_}'.replace('_', ' ')],
- ['4. Други резерви', '23', f'{9550:_}'.replace('_', ' ')],
- ['Общо за група IV:', '23', f'{9550:_}'.replace('_', ' ')], # ляво, наклонено, bd
- ['V. Натрупана печалба(загуба) от минали години, в т.ч.:', '23', f'{9550:_}'.replace('_', ' ')], # ляво, наклонено, bd
- [' - неразпределена печалба', '255', '355'],
- [' - непокрита загуба', '255', '355'],
- ['VI. Текуща печалба(загуба)', '23', f'{9550:_}'.replace('_', ' ')],
- ['Общо за раздел А:', '23', f'{9550:_}'.replace('_', ' ')], # ляво, наклонено, bd
- ['Б. Провизии и сходни задължения', '', ''],
- ['1. Провизии за пенсии и други подобни задължения', '255', '355'],
- ['2. Провизии за данъци, в т.ч.:', '23', f'{9550:_}'.replace('_', ' ')],
- [' - отсрочени данъци', '255', '355'],
- ['3. Други провизии и сходни задължения', '23', f'{9550:_}'.replace('_', ' ')],
- ['Общо за раздел Б:', '23', f'{9550:_}'.replace('_', ' ')], # ляво, наклонено, bd
- ['В. Задължения', '', ''], # Balance_1
- ['1. Облигационни заеми, в т.ч.:', '255', '355'],
- [' - конвертируеми', '255', '355'],
- [' - до 1 година', '255', '355'],
- [' - над 1 година', '255', '355'],
- ['2. Задължения към финансови предприятия, в т.ч.:', '255', '355'],
- [' - до 1 година', '255', '355'],
- [' - над 1 година', '255', '355'],
- ['3. Получени аванси, в т.ч.:', '255', '355'],
- [' - до 1 година', '255', '355'],
- [' - над 1 година', '255', '355'],
- ['4. Задължения към доставчици, в т.ч.:', '255', '355'],
- [' - до 1 година', '255', '355'],
- [' - над 1 година', '255', '355'],
- ['5. Задължения по полици, в т.ч.:', '255', '355'],
- [' - до 1 година', '255', '355'],
- [' - над 1 година', '255', '355'],
- ['6. Задължения към предприятия от група, в т.ч.:', '255', '355'],
- [' - до 1 година', '255', '355'],
- [' - над 1 година', '255', '355'],
- ['7. Задължения, свързани с асоциирани и смесени предприятия, в т.ч.:', '255', '355'],
- [' - до 1 година', '255', '355'],
- [' - над 1 година', '255', '355'],
- ['8. Други задължения, в т.ч.:', '255', '355'],
- [' - до 1 година', '255', '355'],
- [' - над 1 година', '255', '355'],
- [' - към персонала, в т.ч.:', '255', '355'],
- [' - до 1 година', '255', '355'],
- [' - над 1 година', '255', '355'],
- [' - осигурителни задължения, в т.ч.:', '255', '355'],
- [' - до 1 година', '255', '355'],
- [' - над 1 година', '255', '355'],
- [' - данъчни задължения, в т.ч.:', '255', '355'],
- [' - до 1 година', '255', '355'],
- [' - над 1 година', '255', '355'],
- ['Общо за раздел В:', '23', f'{9550:_}'.replace('_', ' ')], #ляво, наклонено, bd
- [' - до 1 година', '255', '355'],
- [' - над 1 година', '255', '355'],
- ['Г. Финансирания и приходи за бъдещи периоди, в т.ч.:', '', ''],
- [' - финансирания', '255', '355'],
- [' - приходи за бъдещи периоди', '255', '355'],
- #['СУМА НА ПАСИВА', '255', '355'],
- ]
- if __name__ == '__main__':
- from reportlab.lib.units import mm
- from balance_2 import top_f, top_m, ta
- from reportlab.lib.pagesizes import A4
- count_data_rows = len(data_table_a) # Брой редове в таблицата
- print(count_data_rows) # 37
- print(mm)
- y1 = A4[1] - top_m - top_f - count_data_rows * 4 * mm
- print(y1)
- w, h = ta.wrap(0, 0) # Дава размерите на таблицата
- print(w, ' ', h) # 240.94488188976382 419.52755905511816
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement