Advertisement
ALEXANDAR_GEORGIEV

combobox_test

Dec 21st, 2022 (edited)
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 65.26 KB | Source Code | 0 0
  1. import tkinter as tk
  2. from tkinter import ttk
  3. # from cells_table import Cells
  4. from acc_rec_calculations import *
  5. # from json_file_io import JsonFileIo
  6. # from Opiti.from_excel.classes.global_inc import registry
  7. from pdf_dna_assets import *
  8. import copy
  9.  
  10.  
  11. class DnaRounding:
  12.     def __init__(self):
  13.         self.acc_rec_calculations = AccRecCalculations()
  14.         self.pdf_dna = DaPdfReport
  15.         self.widgets = Cells()
  16.         self.string_vars = Cells()
  17.         #self.diffs = Cells()  # Съдържа разликите като числа след последната проверка
  18.         self.diffs1 = Cells()  # Съдържа True ако поне 1 проверка е червена и False ако е ОК/зелена
  19.         self.locks = Cells() # Съдържа True ако клетката е заключена
  20.         self.span_cols = Cells()
  21.         self.heights = Cells()
  22.         self.error_cell = Cells()   # Съдържа клетките в червено след дадена проверка
  23.         self.step = ''
  24.         self.da = {'row_0': {'col_0': {'val_0': 'ПОКАЗАТЕЛИ'}, 'col_1': {'val_1': 'Отчетна стойност\nна нетекущите активи'},
  25.                         'col_2': {'val_2': ''}, 'col_3': {'val_3': ''}, 'col_4': {'val_4': ''}, 'col_5': {'val_5': ''},
  26.                         'col_6': {'val_6': ''}, 'col_7': {'val_7': ''}, 'col_8': {'val_8': 'Амортизации'},
  27.                         'col_9': {'val_9': ''}, 'col_10': {'val_10': ''}, 'col_11': {'val_11': ''},
  28.                         'col_12': {'val_12': ''}, 'col_13': {'val_13': ''}, 'col_14': {'val_14': ''},
  29.                         'col_15': {'val_15': 'Балансова\nстойност\nв края'}},
  30.               'row_1': {'col_0': {'val_0': ''}, 'col_1': {'val_1': 'В началото\nна периода'},
  31.                         'col_2': {'val_2': 'Постъпили\nпрез периода'}, 'col_3': {'val_3': 'Излезли\nпрез периода'},
  32.                         'col_4': {'val_4': 'В края на\nпериода'}, 'col_5': {'val_5': 'Преоценка в\nувеличение'},
  33.                         'col_6': {'val_6': 'Преоценка в\n намаление'}, 'col_7': {'val_7': 'Преоценена\nстойност'},
  34.                         'col_8': {'val_8': 'В началото\nна периода'}, 'col_9': {'val_9': 'Начислена\nпрез периода'},
  35.                         'col_10': {'val_10': 'Отписана\nпрез периода'}, 'col_11': {'val_11': 'В края на\nпериода'},
  36.                         'col_12': {'val_12': 'Преоценка в\nувеличение'}, 'col_13': {'val_13': 'Преоценка в\nнамаление'},
  37.                         'col_14': {'val_14': 'Преоценена\nамортизация'}, 'col_15': {'val_15': ''}},
  38.               'row_2': {'col_0': {'val_0': ['а']}, 'col_1': {'val_1': ['1']}, 'col_2': {'val_2': ['2', ' ']},
  39.                         'col_3': {'val_3': ['3', ' ']}, 'col_4': {'val_4': '4'}, 'col_5': {'val_5': ['5', ' ']},
  40.                         'col_6': {'val_6': ['6', ' ']}, 'col_7': {'val_7': '7'}, 'col_8': {'val_8': '8'},
  41.                         'col_9': {'val_9': ['9', ' ']}, 'col_10': {'val_10': ['10', ' ']}, 'col_11': {'val_11': '11'},
  42.                         'col_12': {'val_12': ['12', ' ']}, 'col_13': {'val_13': ['13', ' ']},
  43.                         'col_14': {'val_14': '14'}, 'col_15': {'val_15': '15 = 7-14'}},
  44.               'row_3': {'col_0': {'val_0': ['I. Нематериални активи', ' ']}, 'col_1': {'val_1': ''},
  45.                         'col_2': {'val_2': ''}, 'col_3': {'val_3': ''}, 'col_4': {'val_4': ''}, 'col_5': {'val_5': ''},
  46.                         'col_6': {'val_6': ''}, 'col_7': {'val_7': ''}, 'col_8': {'val_8': ''}, 'col_9': {'val_9': ''},
  47.                         'col_10': {'val_10': ''}, 'col_11': {'val_11': ''}, 'col_12': {'val_12': ''},
  48.                         'col_13': {'val_13': ''}, 'col_14': {'val_14': ''}, 'col_15': {'val_15': ''}},
  49.               'row_4': {'col_0': {'val_0': ['  1. Продукти от развойна дейност', ' ']}, 'col_1': {'val_1': []},
  50.                         'col_2': {'val_2': []}, 'col_3': {'val_3': []}, 'col_4': {'val_4': []}, 'col_5': {'val_5': '5'},
  51.                         'col_6': {'val_6': '6'}, 'col_7': {'val_7': '7'}, 'col_8': {'val_8': '8'},
  52.                         'col_9': {'val_9': '9'}, 'col_10': {'val_10': []}, 'col_11': {'val_11': []},
  53.                         'col_12': {'val_12': []}, 'col_13': {'val_13': []}, 'col_14': {'val_14': []},
  54.                         'col_15': {'val_15': []}},
  55.               'row_5': {'col_0': {'val_0': ['  2. Концесии, патенти, търговски\nмарки, програмни продукти и\nдруги подобни права и активи', ' ']},
  56.                         'col_1': {'val_1': []}, 'col_2': {'val_2': f'n'}, 'col_3': {'val_3': '3'},
  57.                         'col_4': {'val_4': '4'}, 'col_5': {'val_5': '5'}, 'col_6': {'val_6': '6'},
  58.                         'col_7': {'val_7': '7'}, 'col_8': {'val_8': []}, 'col_9': {'val_9': []},
  59.                         'col_10': {'val_10': []}, 'col_11': {'val_11': []}, 'col_12': {'val_12': []},
  60.                         'col_13': {'val_13': []}, 'col_14': {'val_14': '14'}, 'col_15': {'val_15': '15'}},
  61.               'row_6': {'col_0': {'val_0': ['  3. Търговска репутация', ' ']}, 'col_1': {'val_1': []},
  62.                         'col_2': {'val_2': []}, 'col_3': {'val_3': []}, 'col_4': {'val_4': []}, 'col_5': {'val_5': '5'},
  63.                         'col_6': {'val_6': '6'}, 'col_7': {'val_7': '7'}, 'col_8': {'val_8': '8'},
  64.                         'col_9': {'val_9': '9'}, 'col_10': {'val_10': '10'}, 'col_11': {'val_11': '11'},
  65.                         'col_12': {'val_12': '12'}, 'col_13': {'val_13': '13'}, 'col_14': {'val_14': '14'},
  66.                         'col_15': {'val_15': []}},
  67.               'row_7': {
  68.                   'col_0': {'val_0': ['  4. Предоставени аванси и нематериални\nактиви в процес на изграждане', ' ']},
  69.                   'col_1': {'val_1': []}, 'col_2': {'val_2': []}, 'col_3': {'val_3': '3'}, 'col_4': {'val_4': '4'},
  70.                   'col_5': {'val_5': 'x'}, 'col_6': {'val_6': ''}, 'col_7': {'val_7': '7'}, 'col_8': {'val_8': 'x'},
  71.                   'col_9': {'val_9': ''}, 'col_10': {'val_10': ''}, 'col_11': {'val_11': ''}, 'col_12': {'val_12': ''},
  72.                   'col_13': {'val_13': ''}, 'col_14': {'val_14': ''}, 'col_15': {'val_15': '15'}},
  73.               'row_8': {'col_0': {'val_0': ['      - в т.ч.: предоставени аванси', ' ']}, 'col_1': {'val_1': []},
  74.                         'col_2': {'val_2': []}, 'col_3': {'val_3': []}, 'col_4': {'val_4': []}, 'col_5': {'val_5': 'x'},
  75.                         'col_6': {'val_6': ''}, 'col_7': {'val_7': '7'}, 'col_8': {'val_8': 'x'},
  76.                         'col_9': {'val_9': ''}, 'col_10': {'val_10': ''}, 'col_11': {'val_11': ''},
  77.                         'col_12': {'val_12': ''}, 'col_13': {'val_13': ''}, 'col_14': {'val_14': ''},
  78.                         'col_15': {'val_15': '15'}},
  79.               'row_9': {'col_0': {'val_0': 'Общо за група I.'}, 'col_1': {'val_1': []}, 'col_2': {'val_2': []},
  80.                         'col_3': {'val_3': []}, 'col_4': {'val_4': []}, 'col_5': {'val_5': []}, 'col_6': {'val_6': '6'},
  81.                         'col_7': {'val_7': '7'}, 'col_8': {'val_8': '8'}, 'col_9': {'val_9': '9'},
  82.                         'col_10': {'val_10': '10'}, 'col_11': {'val_11': '11'}, 'col_12': {'val_12': '12'},
  83.                         'col_13': {'val_13': '13'}, 'col_14': {'val_14': '14'}, 'col_15': {'val_15': []}},
  84.               'row_10': {'col_0': {'val_0': ['II. Материални дълготрайни активи', ' ']}, 'col_1': {'val_1': ''},
  85.                          'col_2': {'val_2': ''}, 'col_3': {'val_3': ''}, 'col_4': {'val_4': ''}, 'col_5': {'val_5': ''},
  86.                          'col_6': {'val_6': ''}, 'col_7': {'val_7': ''}, 'col_8': {'val_8': ''}, 'col_9': {'val_9': ''},
  87.                          'col_10': {'val_10': ''}, 'col_11': {'val_11': ''}, 'col_12': {'val_12': ''},
  88.                          'col_13': {'val_13': ''}, 'col_14': {'val_14': ''}, 'col_15': {'val_15': ''}},
  89.               'row_11': {'col_0': {'val_0': ['  1. Земи и сгради, включително права в т.ч.:', ' ']},
  90.                          'col_1': {'val_1': f'n'}, 'col_2': {'val_2': f'n'}, 'col_3': {'val_3': []},
  91.                          'col_4': {'val_4': '4'}, 'col_5': {'val_5': '5'}, 'col_6': {'val_6': '6'},
  92.                          'col_7': {'val_7': '7'}, 'col_8': {'val_8': '8'}, 'col_9': {'val_9': '9'},
  93.                          'col_10': {'val_10': '10'}, 'col_11': {'val_11': '11'}, 'col_12': {'val_12': '12'},
  94.                          'col_13': {'val_13': '13'}, 'col_14': {'val_14': []}, 'col_15': {'val_15': '15'}},
  95.               'row_12': {'col_0': {'val_0': ['      - земи', ' ']}, 'col_1': {'val_1': []}, 'col_2': {'val_2': []},
  96.                          'col_3': {'val_3': []}, 'col_4': {'val_4': []}, 'col_5': {'val_5': []},
  97.                          'col_6': {'val_6': '6'}, 'col_7': {'val_7': '7'}, 'col_8': {'val_8': ' '},
  98.                          'col_9': {'val_9': ''}, 'col_10': {'val_10': ''}, 'col_11': {'val_11': ''},
  99.                          'col_12': {'val_12': ''}, 'col_13': {'val_13': ''}, 'col_14': {'val_14': ''},
  100.                          'col_15': {'val_15': '15'}},
  101.               'row_13': {'col_0': {'val_0': ['      - подобрения върху земите', ' ']}, 'col_1': {'val_1': []},
  102.                          'col_2': {'val_2': []}, 'col_3': {'val_3': []}, 'col_4': {'val_4': []},
  103.                          'col_5': {'val_5': '5'}, 'col_6': {'val_6': '6'}, 'col_7': {'val_7': '7'},
  104.                          'col_8': {'val_8': '8'}, 'col_9': {'val_9': '9'}, 'col_10': {'val_10': '10'},
  105.                          'col_11': {'val_11': '11'}, 'col_12': {'val_12': '12'}, 'col_13': {'val_13': '13'},
  106.                          'col_14': {'val_14': '14'}, 'col_15': {'val_15': '15'}},
  107.               'row_14': {'col_0': {'val_0': ['      - сгради', ' ']}, 'col_1': {'val_1': []}, 'col_2': {'val_2': []},
  108.                          'col_3': {'val_3': []}, 'col_4': {'val_4': '4'}, 'col_5': {'val_5': '5'},
  109.                          'col_6': {'val_6': '6'}, 'col_7': {'val_7': '7'}, 'col_8': {'val_8': '8'},
  110.                          'col_9': {'val_9': '9'}, 'col_10': {'val_10': '10'}, 'col_11': {'val_11': '11'},
  111.                          'col_12': {'val_12': '12'}, 'col_13': {'val_13': '13'}, 'col_14': {'val_14': '14'},
  112.                          'col_15': {'val_15': '15'}},
  113.               'row_15': {'col_0': {'val_0': ['  2. Машини, производствено оборудване\n и апаратура', ' ']},
  114.                          'col_1': {'val_1': []}, 'col_2': {'val_2': []}, 'col_3': {'val_3': []},
  115.                          'col_4': {'val_4': '4'}, 'col_5': {'val_5': '5'}, 'col_6': {'val_6': '6'},
  116.                          'col_7': {'val_7': '7'}, 'col_8': {'val_8': '8'}, 'col_9': {'val_9': '9'},
  117.                          'col_10': {'val_10': '10'}, 'col_11': {'val_11': '11'}, 'col_12': {'val_12': '12'},
  118.                          'col_13': {'val_13': '13'}, 'col_14': {'val_14': '14'}, 'col_15': {'val_15': '15'}},
  119.               'row_16': {'col_0': {'val_0': ['  3. Съоръжения и други', ' ']}, 'col_1': {'val_1': []},
  120.                          'col_2': {'val_2': []}, 'col_3': {'val_3': []}, 'col_4': {'val_4': '4'},
  121.                          'col_5': {'val_5': '5'}, 'col_6': {'val_6': '6'}, 'col_7': {'val_7': '7'},
  122.                          'col_8': {'val_8': '8'}, 'col_9': {'val_9': '9'}, 'col_10': {'val_10': '10'},
  123.                          'col_11': {'val_11': '11'}, 'col_12': {'val_12': '12'}, 'col_13': {'val_13': '13'},
  124.                          'col_14': {'val_14': '14'}, 'col_15': {'val_15': '15'}},
  125.               'row_17': {'col_0': {'val_0': ['      - в т.ч.: транспортни средства', ' ']}, 'col_1': {'val_1': []},
  126.                          'col_2': {'val_2': []}, 'col_3': {'val_3': []}, 'col_4': {'val_4': []},
  127.                          'col_5': {'val_5': '5'}, 'col_6': {'val_6': '6'}, 'col_7': {'val_7': '7'},
  128.                          'col_8': {'val_8': '8'}, 'col_9': {'val_9': '9'}, 'col_10': {'val_10': '10'},
  129.                          'col_11': {'val_11': '11'}, 'col_12': {'val_12': '12'}, 'col_13': {'val_13': '13'},
  130.                          'col_14': {'val_14': '14'}, 'col_15': {'val_15': '15'}},
  131.               'row_18': {'col_0': {
  132.                   'val_0': ['  4. Предоставени аванси и дълготрайни мате-\nриални активи в процес на изграждане', ' ']},
  133.                          'col_1': {'val_1': []}, 'col_2': {'val_2': []}, 'col_3': {'val_3': '3'},
  134.                          'col_4': {'val_4': '4'}, 'col_5': {'val_5': 'x'}, 'col_6': {'val_6': ''},
  135.                          'col_7': {'val_7': '7'}, 'col_8': {'val_8': 'x'}, 'col_9': {'val_9': ''},
  136.                          'col_10': {'val_10': ''}, 'col_11': {'val_11': ''}, 'col_12': {'val_12': ''},
  137.                          'col_13': {'val_13': ''}, 'col_14': {'val_14': ''}, 'col_15': {'val_15': '15'}},
  138.               'row_19': {'col_0': {'val_0': ['      - в т.ч.: предоставени аванси', ' ']}, 'col_1': {'val_1': []},
  139.                          'col_2': {'val_2': []}, 'col_3': {'val_3': []}, 'col_4': {'val_4': '4'},
  140.                          'col_5': {'val_5': 'x'}, 'col_6': {'val_6': ''}, 'col_7': {'val_7': []},
  141.                          'col_8': {'val_8': 'x'}, 'col_9': {'val_9': ''}, 'col_10': {'val_10': ''},
  142.                          'col_11': {'val_11': ''}, 'col_12': {'val_12': ''}, 'col_13': {'val_13': ''},
  143.                          'col_14': {'val_14': ''}, 'col_15': {'val_15': '15'}},
  144.               'row_20': {'col_0': {'val_0': ['Общо за група II.', ' ']}, 'col_1': {'val_1': []}, 'col_2': {'val_2': []},
  145.                          'col_3': {'val_3': []}, 'col_4': {'val_4': []}, 'col_5': {'val_5': []}, 'col_6': {'val_6': []},
  146.                          'col_7': {'val_7': []}, 'col_8': {'val_8': []}, 'col_9': {'val_9': []},
  147.                          'col_10': {'val_10': []}, 'col_11': {'val_11': []}, 'col_12': {'val_12': '12'},
  148.                          'col_13': {'val_13': '13'}, 'col_14': {'val_14': '14'}, 'col_15': {'val_15': '15'}},
  149.               'row_21': {'col_0': {'val_0': ['III. Дългосрочни финансови активи', ' ']}, 'col_1': {'val_1': ''},
  150.                          'col_2': {'val_2': ''}, 'col_3': {'val_3': ''}, 'col_4': {'val_4': ''}, 'col_5': {'val_5': ''},
  151.                          'col_6': {'val_6': ''}, 'col_7': {'val_7': ''}, 'col_8': {'val_8': ''}, 'col_9': {'val_9': ''},
  152.                          'col_10': {'val_10': ''}, 'col_11': {'val_11': ''}, 'col_12': {'val_12': ''},
  153.                          'col_13': {'val_13': ''}, 'col_14': {'val_14': ''}, 'col_15': {'val_15': ''}},
  154.               'row_22': {'col_0': {'val_0': ['  1. Акции и дялове в предприятия от група', ' ']},
  155.                          'col_1': {'val_1': []}, 'col_2': {'val_2': []}, 'col_3': {'val_3': []},
  156.                          'col_4': {'val_4': '4'}, 'col_5': {'val_5': []}, 'col_6': {'val_6': []},
  157.                          'col_7': {'val_7': []}, 'col_8': {'val_8': 'x'}, 'col_9': {'val_9': ''},
  158.                          'col_10': {'val_10': ''}, 'col_11': {'val_11': ''}, 'col_12': {'val_12': ''},
  159.                          'col_13': {'val_13': ''}, 'col_14': {'val_14': ''}, 'col_15': {'val_15': '15'}},
  160.               'row_23': {'col_0': {'val_0': ['  2. Предоставени заеми на предприятия\n от група', ' ']},
  161.                          'col_1': {'val_1': []}, 'col_2': {'val_2': []}, 'col_3': {'val_3': []},
  162.                          'col_4': {'val_4': '4'}, 'col_5': {'val_5': '5'}, 'col_6': {'val_6': []},
  163.                          'col_7': {'val_7': '7'}, 'col_8': {'val_8': 'x'}, 'col_9': {'val_9': ''},
  164.                          'col_10': {'val_10': ''}, 'col_11': {'val_11': ''}, 'col_12': {'val_12': ''},
  165.                          'col_13': {'val_13': ''}, 'col_14': {'val_14': ''}, 'col_15': {'val_15': '15'}},
  166.               'row_24': {'col_0': {'val_0': ['  3. Акции и дялове в асоциирани и\n смесени предприятия', ' ']},
  167.                          'col_1': {'val_1': []}, 'col_2': {'val_2': []}, 'col_3': {'val_3': []}, 'col_4': {'val_4': []},
  168.                          'col_5': {'val_5': []}, 'col_6': {'val_6': '6'}, 'col_7': {'val_7': '7'},
  169.                          'col_8': {'val_8': 'x'}, 'col_9': {'val_9': ''}, 'col_10': {'val_10': ''},
  170.                          'col_11': {'val_11': ''}, 'col_12': {'val_12': ''}, 'col_13': {'val_13': ''},
  171.                          'col_14': {'val_14': ''}, 'col_15': {'val_15': '15'}},
  172.               'row_25': {
  173.                   'col_0': {'val_0': ['  4. Предоставени заеми, свързани с\nасоциирани и смесени предприятия', ' ']},
  174.                   'col_1': {'val_1': []}, 'col_2': {'val_2': []}, 'col_3': {'val_3': []}, 'col_4': {'val_4': []},
  175.                   'col_5': {'val_5': []}, 'col_6': {'val_6': '6'}, 'col_7': {'val_7': '7'}, 'col_8': {'val_8': 'x'},
  176.                   'col_9': {'val_9': ''}, 'col_10': {'val_10': ''}, 'col_11': {'val_11': ''}, 'col_12': {'val_12': ''},
  177.                   'col_13': {'val_13': ''}, 'col_14': {'val_14': ''}, 'col_15': {'val_15': '15'}},
  178.               'row_26': {'col_0': {'val_0': ['  5. Дългосрочни инвестиции\n(инвестиционни имоти)', ' ']},
  179.                          'col_1': {'val_1': []}, 'col_2': {'val_2': []}, 'col_3': {'val_3': []}, 'col_4': {'val_4': []},
  180.                          'col_5': {'val_5': []}, 'col_6': {'val_6': '6'}, 'col_7': {'val_7': '7'},
  181.                          'col_8': {'val_8': '8'}, 'col_9': {'val_9': '9'}, 'col_10': {'val_10': '10'},
  182.                          'col_11': {'val_11': '11'}, 'col_12': {'val_12': '12'}, 'col_13': {'val_13': '13'},
  183.                          'col_14': {'val_14': '14'}, 'col_15': {'val_15': '15'}},
  184.               'row_27': {'col_0': {'val_0': ['  6. Други заеми', ' ']}, 'col_1': {'val_1': []}, 'col_2': {'val_2': []},
  185.                          'col_3': {'val_3': []}, 'col_4': {'val_4': []}, 'col_5': {'val_5': []}, 'col_6': {'val_6': []},
  186.                          'col_7': {'val_7': []}, 'col_8': {'val_8': 'x'}, 'col_9': {'val_9': ''},
  187.                          'col_10': {'val_10': ''}, 'col_11': {'val_11': ''}, 'col_12': {'val_12': ''},
  188.                          'col_13': {'val_13': ''}, 'col_14': {'val_14': ''}, 'col_15': {'val_15': '15'}},
  189.               'row_28': {'col_0': {'val_0': ['  7. Изкупени собствени акции', ' ']}, 'col_1': {'val_1': []},
  190.                          'col_2': {'val_2': []}, 'col_3': {'val_3': []}, 'col_4': {'val_4': []}, 'col_5': {'val_5': []},
  191.                          'col_6': {'val_6': []}, 'col_7': {'val_7': '7'}, 'col_8': {'val_8': 'x'},
  192.                          'col_9': {'val_9': ''}, 'col_10': {'val_10': ''}, 'col_11': {'val_11': ''},
  193.                          'col_12': {'val_12': ''}, 'col_13': {'val_13': ''}, 'col_14': {'val_14': ''},
  194.                          'col_15': {'val_15': '15'}},
  195.               'row_29': {'col_0': {'val_0': ['Общо за група III.', ' ']}, 'col_1': {'val_1': []},
  196.                          'col_2': {'val_2': []}, 'col_3': {'val_3': []}, 'col_4': {'val_4': []}, 'col_5': {'val_5': []},
  197.                          'col_6': {'val_6': []}, 'col_7': {'val_7': []}, 'col_8': {'val_8': '8'},
  198.                          'col_9': {'val_9': '9'}, 'col_10': {'val_10': '10'}, 'col_11': {'val_11': '11'},
  199.                          'col_12': {'val_12': '12'}, 'col_13': {'val_13': '13'}, 'col_14': {'val_14': '14'},
  200.                          'col_15': {'val_15': '15'}},
  201.               'row_30': {'col_0': {'val_0': ['IV. Отсрочени данъци', ' ']}, 'col_1': {'val_1': []},
  202.                          'col_2': {'val_2': []}, 'col_3': {'val_3': []}, 'col_4': {'val_4': '4'},
  203.                          'col_5': {'val_5': []}, 'col_6': {'val_6': []}, 'col_7': {'val_7': []},
  204.                          'col_8': {'val_8': 'x'}, 'col_9': {'val_9': ''}, 'col_10': {'val_10': ''},
  205.                          'col_11': {'val_11': ''}, 'col_12': {'val_12': ''}, 'col_13': {'val_13': ''},
  206.                          'col_14': {'val_14': ''}, 'col_15': {'val_15': '15'}},
  207.               'row_31': {'col_0': {'val_0': 'Общо нетекущи (дълготрайни) активи'}, 'col_1': {'val_1': []},
  208.                          'col_2': {'val_2': []}, 'col_3': {'val_3': []}, 'col_4': {'val_4': []}, 'col_5': {'val_5': []},
  209.                          'col_6': {'val_6': []}, 'col_7': {'val_7': []}, 'col_8': {'val_8': '8'},
  210.                          'col_9': {'val_9': '9'}, 'col_10': {'val_10': '10'}, 'col_11': {'val_11': '11'},
  211.                          'col_12': {'val_12': '12'}, 'col_13': {'val_13': '13'}, 'col_14': {'val_14': '14'},
  212.                          'col_15': {'val_15': []}},
  213.               }
  214.         self.round1000 = self.acc_rec_calculations.get_round1000()
  215.         self.exact = self.acc_rec_calculations.get_exact()
  216.         self.acc_rec_da = self.acc_rec_calculations.get_acc_rec_da()
  217.         self.prints = Cells()
  218.  
  219.         for r in range(4, 31 + 1):
  220.             for c in range(1, 15 + 1):
  221.                 row_key = f"row_{r}"
  222.                 col_key = f"col_{c}"
  223.                 val_key = f"val_{c}"
  224.                 val = self.round1000.getItem(r, c)  # val = None
  225.                 if r in [30]:
  226.                     pass
  227.                 if val is None:
  228.                     continue
  229.                 da_value = [val]
  230.  
  231.                 diff = self.get_acc_rec_diff(r, c)
  232.                 if diff: diff = abs(diff)
  233.                 if val == 0 and diff == 0:
  234.                     pass
  235.                 else:
  236.                     bar = 2
  237.                     if diff:
  238.                         bar += diff
  239.                     for extra_val in range(val - bar, val+bar+1):
  240.                         if extra_val < 0: continue  # Не искаме отрицателни
  241.                         if extra_val == val: continue # Самата val сме я добавили по-горе на първо място
  242.                         da_value.append(extra_val)
  243.                 self.da[row_key][col_key][val_key] = da_value
  244.         self.da["row_31"]["col_9"]["val_9"] = self.round1000.getNumber(31, 9)
  245.         self.da["row_31"]["col_15"]["val_15"] = self.round1000.getNumber(31, 15)
  246.  
  247.         self.round1000_sums_row_31 = {}  # Ще има по 1 стойност за всяка колона
  248.         for c in range(1, 15 + 1):
  249.             self.round1000_sums_row_31[c] = self.round1000.getNumber(9, c) + self.round1000.getNumber(20, c) + self.round1000.getNumber(29, c) + self.round1000.getNumber(30, c)
  250.         # Речник със разликите межди *:7 - *:14
  251.         self.round1000_sums_col_15 = {}  # Ще има по 1 стойност за всеки ред
  252.         for r in range(4, 31 + 1):
  253.             self.round1000_sums_col_15[r] = self.round1000.getNumber(r, 7) - self.round1000.getNumber(r, 14)
  254.  
  255.         self.change_color_submassive()
  256.  
  257.     def create_window(self):
  258.         self.my_win = tk.Tk()
  259.         self.my_win.geometry('1400x850+100+50')
  260.         self.my_win.title('Comboboxes')
  261.         self.my_win.configure(background='lightgrey')
  262.         butt3 = tk.Button(self.my_win, text="ПОПЪЛНИ", fg='green', command=self.get_da_print)
  263.         butt3.grid(row=40, column=10, pady=(20, 1))
  264.  
  265.         self.col_locks_bvars = {}
  266.         for c in [4, 7, 11, 14, 15]:
  267.             self.col_locks_bvars[c] = tk.BooleanVar(self.my_win, value=True)
  268.             self.check_butt_4 = tk.Checkbutton(self.my_win, variable=self.col_locks_bvars[c], text='ключ', width=6,
  269.                                     justify='left', anchor='w', command=lambda c=c: self.apply_locks_on_column(c))
  270.             self.check_butt_4.grid(row=40, column=c, pady=(20, 1))
  271.         # CheckButton for Exact
  272.         self.exact_bvars = {}
  273.         self.exact_pop_wins = {}
  274.         self.exact_checkbuttons = {}
  275.         for r in [4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22, 23, 24, 25, 26, 27, 28, 30, 31]:
  276.             self.exact_bvars[r] = tk.BooleanVar(self.my_win, value=False)
  277.             self.exact_checkbuttons[r] = tk.Checkbutton(self.my_win, variable=self.exact_bvars[r], width=0, height=0, font=("Times", 2), borderwidth=1,
  278.                                            justify='left', anchor='w', command = lambda r=r: self.on_change_exact(r))
  279.             self.exact_checkbuttons[r].grid(row=r, column=20, pady=(0, 0), padx=(1, 0))
  280.         self.init_locks()
  281.         self.create_table()
  282.         self.on_window_ready()
  283.  
  284.         self.my_win.mainloop()
  285.  
  286.     # CheckButton for Exact
  287.     def on_change_exact(self, row):
  288.         bvar = self.exact_bvars[row]
  289.         pop_win = None
  290.         if row in self.exact_pop_wins:
  291.             pop_win = self.exact_pop_wins[row]
  292.         if bvar.get():
  293.             # Искаме да отворим прозореца
  294.             if pop_win:
  295.                 # Вече има прозорец -- или го убиваме и отваряме наново, или го "викаме" да дойде отпред
  296.                 pop_win.destroy()
  297.             self.exact_pop_wins[row] = self.get_exact_pop_win(row)
  298.         else:
  299.             # Искаме да затворим прозореца
  300.             if pop_win:
  301.                 # Прозорец наистина има, затваряме го
  302.                 pop_win.destroy()
  303.  
  304.     def get_exact_pop_win(self, row):
  305.         pop_win = tk.Toplevel(self.my_win)
  306.         win_title = self.da[f"row_{row}"]["col_0"]["val_0"]
  307.         if isinstance(win_title, list):
  308.             win_title = win_title[0]
  309.         pop_win.title(win_title)
  310.         y_pos = row * 25
  311.         pop_win.geometry(f'+860+{y_pos}')
  312.         pop_win.attributes('-topmost', 'true')
  313.         captions = {
  314.             2: "Активи: +",
  315.             3: "-",
  316.             4: "салдо:",
  317.             9: "Амотизация: +",
  318.             10: "-",
  319.             11: "салдо",
  320.             15: "баланс:"}
  321.         items = []
  322.         for c in [2, 3, 4, 9, 10, 11, 15]:
  323.             exact = self.exact.getNumber(row, c)
  324.             exact1 = f"{exact:,.0f}".replace(',', ' ')
  325.             items.append(f"{captions[c]} {exact1}")
  326.         label_content = " ".join(items)
  327.         label = tk.Label(pop_win, text=label_content, font=('Times New Roman', 10), bg='yellow',
  328.                          anchor="w", fg='black', justify='center')
  329.         label.grid(row=0, column=0, padx=(1, 1), pady=(1, 1), sticky='nswe')
  330.         return pop_win
  331.  
  332.     def updateCellStatus(self, row, col, diff):
  333.         #self.diffs.setItem(row, col, diff)
  334.         old_bool = self.diffs1.getItem(row, col)
  335.         if old_bool == True:
  336.             pass
  337.         else:
  338.             if diff == 0:
  339.                 self.diffs1.setItem(row, col, False)
  340.             else:
  341.                 self.diffs1.setItem(row, col, True)
  342.         new_bool = self.diffs1.getItem(row, col)
  343.         # print('new_bool ', new_bool)
  344.         widget = self.widgets.getItem(row, col)
  345.         if widget:
  346.             if new_bool:
  347.                 widget.configure(bg='red')
  348.             else:
  349.                 widget.configure(bg='green')
  350.  
  351.     def create_widget(self, place_on, r, c, w, span_row, span_col, text, height, anc):
  352.         pos = tk.RIGHT
  353.         type_w = None
  354.         if r in [0, 1, 3, 9, 10, 20, 21, 29, 31]:
  355.             type_w = "label"
  356.             anc = tk.E
  357.         if (r in [3, 10, 21, 31] and c == 0):
  358.             anc = tk.W
  359.         if c == 0:
  360.             pos = tk.LEFT
  361.         if c == 1 or c == 4 or c == 7 or c == 8 or c == 11 or c == 14 or c == 15 or (r in [7, 8, 18, 19] and 5 <= c <= 6 ):
  362.             type_w = "label"
  363.             anc = tk.E
  364.         if r in [0, 2]:
  365.             pos = tk.CENTER
  366.             anc = tk.CENTER
  367.         if r in [7, 8, 12, 18, 19, 22, 23, 24, 25, 27, 28, 30] and 8 <= c <= 14:
  368.             type_w = 'label'
  369.         if r in [2] and c == 0:
  370.             type_w = 'label'
  371.         if r == 31 and c > 0:
  372.             anc = tk.E
  373.         if r in [31]:
  374.             pass
  375.         if type_w == "label":
  376.             if isinstance(text, list):
  377.                 if len(text) < 1:
  378.                     text_label = 0 # Подразбираща се стойност ако списъка е празн
  379.                 else:
  380.                     text_label = text[0] # Ще се замести с първия елемент, ако има поне един
  381.                 return self.create_label(place_on, r, c, span_row, span_col, height, text_label, anc)
  382.             return self.create_label(place_on, r, c, span_row, span_col, height, text, anc)
  383.         return self.create_combobox(place_on, r, c, w, span_row, span_col, text, j=pos)
  384.  
  385.     def create_label(self, place_on, row_x, col_y, span_row=1, span_col=1, height=3, text='', anc=tk.CENTER):
  386.         label_var = tk.StringVar(self.my_win, value=text)
  387.         label = tk.Label(place_on, text=text, font=('Times New Roman', 10, 'bold'), bg='white', height=height,
  388.                     anchor=anc, fg='black', justify='center', textvariable=label_var)
  389.         label.grid(row=row_x, column=col_y, padx=(1, 1), pady=(1, 1), sticky='nswe', rowspan=span_row, columnspan=span_col)
  390.         self.string_vars.setItem(row_x, col_y, label_var)
  391.         self.widgets.setItem(row_x, col_y, label)
  392.         return label
  393.  
  394.     def on_cell_change(self):
  395.         self.refresh_table()
  396.         self.check_sums()
  397.  
  398.     def on_lock_change(self):
  399.         self.refresh_table()
  400.         self.check_sums()
  401.  
  402.     def on_window_ready(self):
  403.         self.check_sums()
  404.  
  405.     def create_combobox(self, place_on, r, c, w, span_row, span_col, text, j=tk.RIGHT):
  406.         var = tk.StringVar(self.my_win)
  407.         self.string_vars.setItem(r, c, var)
  408.         if isinstance(text, list) and len(text) < 1:
  409.             text = [0]
  410.         widget = ttk.Combobox(place_on, values=text, textvariable=var, width=w, justify=j)
  411.         # Прави комбобокса да не реагира на колецето на мишката
  412.         widget.unbind_class("TCombobox", "<MouseWheel>") # Windows & OSX
  413.         widget.unbind_class("TCombobox", "<ButtonPress-4>") # Linux and other *nix systems:
  414.         widget.unbind_class("TCombobox", "<ButtonPress-5>") # Linux and other *nix systems:
  415.         widget.bind("<<ComboboxSelected>>", lambda e: self.on_cell_change())
  416.         widget.set(text[0])
  417.         self.widgets.setItem(r, c, widget)
  418.         widget.grid(row=r, column=c, padx=(1, 1), pady=(1, 1), sticky='nswe', rowspan=span_row, columnspan=span_col)
  419.         return widget
  420.  
  421.     def create_table(self):
  422.         row_n = 0
  423.         span_row = 1
  424.         span_col = 1
  425.         width_c = 6
  426.         height = 1
  427.         for row in self.da:  # Редове 'row_1'
  428.             col_n = 0
  429.             for column in self.da[row]:  # Колони
  430.                 for val in self.da[row][column]:     # val = val_1
  431.                     text = self.da[row][column][val]
  432.                     if text == '' or text is None:
  433.                         col_n += 1
  434.                         continue
  435.                     elif text == 'ПОКАЗАТЕЛИ' or text == 'Балансова\nстойност\nв края':
  436.                         span_row = 2
  437.                         height = 5
  438.                     elif text == 'Отчетна стойност\nна нетекущите активи' or text == 'Амортизации':
  439.                         span_col = 7
  440.                         height = 2
  441.                     elif (row == 'row_7' and column == 'col_8' and val == 'val_8') or (row == 'row_8' and
  442.                             column == 'col_8' and val == 'val_8') or (row == 'row_12' and column == 'col_8' and
  443.                             val == 'val_8') or (row == 'row_18' and column == 'col_8' and val == 'val_8') or\
  444.                             (row == 'row_19' and column == 'col_8' and val == 'val_8')\
  445.                             or (row == 'row_22' and column == 'col_8' and val == 'val_8')\
  446.                             or (row == 'row_23' and column == 'col_8' and val == 'val_8') or\
  447.                             (row == 'row_24' and column == 'col_8' and val == 'val_8') or (row == 'row_25' and
  448.                             column == 'col_8' and val == 'val_8') or (row == 'row_27' and column == 'col_8' and
  449.                             val == 'val_8') or (row == 'row_28' and column == 'col_8' and val == 'val_8') or\
  450.                             (row == 'row_30' and column == 'col_8' and val == 'val_8'):
  451.                         span_col = 7
  452.                     elif (row == 'row_7' and column == 'col_5' and val == 'val_5') or (row == 'row_8' and column == 'col_5' and val == 'val_5') or\
  453.                             (row == 'row_18' and column == 'col_5' and val == 'val_5') or (row == 'row_19' and column == 'col_5' and val == 'val_5'):
  454.                         span_col = 2
  455.                     if row == 'row_1':
  456.                         height = 3
  457.                     if row == 'row_3' or row == 'row_10' or row == 'row_21':
  458.                         span_col = 16
  459.                     v = 1
  460.  
  461.                     self.span_cols.setItem(row_n, col_n, span_col)
  462.                     self.heights.setItem(row_n, col_n, height)
  463.                     widget = self.create_widget(place_on=self.my_win, r=row_n, c=col_n, w=width_c, span_row=span_row, span_col=span_col, text=text, height=height, anc='center')
  464.                     height = 1
  465.                     col_n += 1
  466.                     span_col = 1
  467.                     span_row = 1
  468.                     v += 1
  469.             row_n += 1
  470.  
  471.     def refresh_table(self):
  472.         self.refresh_group1()
  473.         self.refresh_group2()
  474.         self.refresh_group3()
  475.         self.refresh_tax_row()
  476.         self.refresh_total_row()
  477.  
  478.     def refresh_group1(self):
  479.         col = 4
  480.         for r in range(4, 8+1):
  481.             svar = self.string_vars.getItem(r, col)
  482.             if svar and not self.locks.getItem(r, col):
  483.                 svar.set(self.get_string_var_number(r, 1) + self.get_string_var_number(r, 2) - self.get_string_var_number(r, 3))
  484.         col = 7
  485.         for r in range(4, 8+1):
  486.             svar = self.string_vars.getItem(r, col)
  487.             if svar and not self.locks.getItem(r, col):
  488.                 svar.set(self.get_string_var_number(r, 4) + self.get_string_var_number(r, 5) - self.get_string_var_number(r, 6))
  489.         col = 11
  490.         for r in range(4, 8+1):
  491.             svar = self.string_vars.getItem(r, col)
  492.             if svar and not self.locks.getItem(r, col):
  493.                 svar.set(self.get_string_var_number(r, 8) + self.get_string_var_number(r, 9) - self.get_string_var_number(r, 10))
  494.         col = 14
  495.         for r in range(4, 8+1):
  496.             svar = self.string_vars.getItem(r, col)
  497.             if svar and not self.locks.getItem(r, col):
  498.                 svar.set(self.get_string_var_number(r, 11) + self.get_string_var_number(r, 12) - self.get_string_var_number(r, 13))
  499.         col = 15
  500.         for r in range(4, 8+1):
  501.             svar = self.string_vars.getItem(r, col)
  502.             if svar and not self.locks.getItem(r, col):
  503.                 svar.set(self.get_string_var_number(r, 7) - self.get_string_var_number(r, 14))
  504.         row = 9
  505.         for c in range(2, 15+1):
  506.             svar = self.string_vars.getItem(row, c)
  507.             if svar is None: continue
  508.             tot = 0
  509.             for r in [4, 5, 6, 7]:
  510.                 tot += self.get_string_var_number(r, c)
  511.             if not self.locks.getItem(row, c):
  512.                 svar.set(tot)
  513.  
  514.     def refresh_group2(self):
  515.         col = 4
  516.         sub_rows = range(11, 19+1)
  517.         for r in sub_rows:
  518.             svar = self.string_vars.getItem(r, col)
  519.             if svar and not self.locks.getItem(r, col):
  520.                 svar.set(self.get_string_var_number(r, 1) + self.get_string_var_number(r, 2) - self.get_string_var_number(r, 3))
  521.         col = 7
  522.         for r in sub_rows:
  523.             svar = self.string_vars.getItem(r, col)
  524.             if svar and not self.locks.getItem(r, col):
  525.                 svar.set(self.get_string_var_number(r, 4) + self.get_string_var_number(r, 5) - self.get_string_var_number(r, 6))
  526.         col = 11
  527.         for r in sub_rows:
  528.             svar = self.string_vars.getItem(r, col)
  529.             if svar and not self.locks.getItem(r, col):
  530.                 svar.set(self.get_string_var_number(r, 8) + self.get_string_var_number(r, 9) - self.get_string_var_number(r, 10))
  531.         col = 14
  532.         for r in sub_rows:
  533.             svar = self.string_vars.getItem(r, col)
  534.             if svar and not self.locks.getItem(r, col):
  535.                 svar.set(self.get_string_var_number(r, 11) + self.get_string_var_number(r, 12) - self.get_string_var_number(r, 13))
  536.         col = 15
  537.         for r in sub_rows:
  538.             svar = self.string_vars.getItem(r, col)
  539.             if svar and not self.locks.getItem(r, col):
  540.                 res = self.get_string_var_number(r, 7) - self.get_string_var_number(r, 14)
  541.                 svar.set(self.get_string_var_number(r, 7) - self.get_string_var_number(r, 14))
  542.         row = 20
  543.         for c in range(2, 15+1):
  544.             svar = self.string_vars.getItem(row, c)
  545.             if svar is None: continue
  546.             tot = 0
  547.             for r in [11, 15, 16, 18]:
  548.                 tot += self.get_string_var_number(r, c)
  549.             if not self.locks.getItem(row, c):
  550.                 svar.set(tot)
  551.  
  552.     def refresh_group3(self):
  553.         col = 4
  554.         sub_rows = range(22, 28+1)
  555.         for r in sub_rows:
  556.             svar = self.string_vars.getItem(r, col)
  557.             if svar and not self.locks.getItem(r, col):
  558.                 svar.set(self.get_string_var_number(r, 1) + self.get_string_var_number(r, 2) - self.get_string_var_number(r, 3))
  559.         col = 7
  560.         for r in sub_rows:
  561.             svar = self.string_vars.getItem(r, col)
  562.             if svar and not self.locks.getItem(r, col):
  563.                 svar.set(self.get_string_var_number(r, 4) + self.get_string_var_number(r, 5) - self.get_string_var_number(r, 6))
  564.         col = 11
  565.         for r in sub_rows:
  566.             svar = self.string_vars.getItem(r, col)
  567.             if svar and not self.locks.getItem(r, col):
  568.                 svar.set(self.get_string_var_number(r, 8) + self.get_string_var_number(r, 9) - self.get_string_var_number(r, 10))
  569.         col = 14
  570.         for r in sub_rows:
  571.             svar = self.string_vars.getItem(r, col)
  572.             if svar and not self.locks.getItem(r, col):
  573.                 svar.set(self.get_string_var_number(r, 11) + self.get_string_var_number(r, 12) - self.get_string_var_number(r, 13))
  574.         col = 15
  575.         for r in sub_rows:
  576.             svar = self.string_vars.getItem(r, col)
  577.             if svar and not self.locks.getItem(r, col):
  578.                 res = self.get_string_var_number(r, 7) - self.get_string_var_number(r, 14)
  579.                 svar.set(self.get_string_var_number(r, 7) - self.get_string_var_number(r, 14))
  580.         row = 29
  581.         for c in range(2, 15+1):
  582.             svar = self.string_vars.getItem(row, c)
  583.             if self.locks.getItem(row, c): continue
  584.             if svar is None: continue
  585.             tot = 0
  586.             for r in range(22, 28+1):
  587.                 tot += self.get_string_var_number(r, c)
  588.             svar.set(tot)
  589.  
  590.     def refresh_tax_row(self):
  591.         col = 4
  592.         sub_rows = [30]
  593.         for r in sub_rows:
  594.             svar = self.string_vars.getItem(r, col)
  595.             if svar and not self.locks.getItem(r, col):
  596.                 svar.set(self.get_string_var_number(r, 1) + self.get_string_var_number(r, 2) - self.get_string_var_number(r, 3))
  597.  
  598.         col = 7
  599.         for r in sub_rows:
  600.             svar = self.string_vars.getItem(r, col)
  601.             if svar and not self.locks.getItem(r, col):
  602.                 svar.set(self.get_string_var_number(r, 4) + self.get_string_var_number(r, 5) - self.get_string_var_number(r, 6))
  603.  
  604.         col = 15
  605.         for r in sub_rows:
  606.             svar = self.string_vars.getItem(r, col)
  607.             if svar and not self.locks.getItem(r, col):
  608.                 res = self.get_string_var_number(r, 7) - self.get_string_var_number(r, 14)
  609.                 svar.set(self.get_string_var_number(r, 7) - self.get_string_var_number(r, 14))
  610.  
  611.     def refresh_total_row(self):
  612.         tot_row = 31
  613.         for c in range(2, 14+1):
  614.             if c == 9: continue
  615.             if c == 15: continue
  616.             svar = self.string_vars.getItem(tot_row, c)
  617.             if svar and not self.locks.getItem(tot_row, c):
  618.                 tot = self.get_string_var_number(9, c) + self.get_string_var_number(20, c) + self.get_string_var_number(29, c) + self.get_string_var_number(30, c)
  619.                 svar.set(tot)
  620.  
  621.     def reset_diffs(self):
  622.         #self.diffs = Cells()    # Разлика между
  623.         self.diffs1 = Cells()
  624.  
  625.     def check_sums(self):
  626.         self.reset_diffs()
  627.         self.check_Rx15() # Дали *:15 = *:7 - *:14
  628.         for c in range(1, 14+1):
  629.             self.check_subsums_rows_row_col([4, 5, 6, 7], 9, c)  # Група 1
  630.             self.check_subsums_rows_row_col([11, 15, 16, 18], 20, c)  # Група 2
  631.             self.check_subsums_rows_row_col([22, 23, 24, 25, 26, 27, 28], 29, c)  # Група 3
  632.         self.check_sums_col_4()
  633.         self.check_sums_col_7()
  634.         self.check_sums_col_11()
  635.         self.check_sums_col_14()
  636.         self.check_sums_row_31()
  637.         self.change_color_assets_vs_amort()
  638.         self.change_color_submassive()
  639.  
  640.     def change_color_submassive(self):
  641.         self.step = 'step'
  642.         wdgs = [ self.widgets.getItem(18, 3), self.widgets.getItem(19, 3)]
  643.         if self.get_string_var_number(19, 3) <= self.get_string_var_number(18, 3):
  644.             for wdg in wdgs:
  645.                 if wdg:
  646.                     for r in [18, 19]:
  647.                         self.error_cell.setItemErrors(r, 3, self.step, False)
  648.                         self.update_cell_color(r, 3)
  649.         else:
  650.             for wdg in wdgs:
  651.                 if wdg:
  652.                     for r in [18, 19]:
  653.                         self.error_cell.setItemErrors(r, 3, self.step, True)
  654.                         self.update_cell_color(r, 3)
  655.         self.step = 'step_1'
  656.         wdgs = [ self.widgets.getItem(7, 3), self.widgets.getItem(8, 3)]
  657.         if self.get_string_var_number(8, 3) <= self.get_string_var_number(7, 3):
  658.             for wdg in wdgs:
  659.                 if wdg:
  660.                     for r in [7, 8]:
  661.                         self.error_cell.setItemErrors(r, 3, self.step, False)
  662.                         self.update_cell_color(r, 3)
  663.         else:
  664.             for wdg in wdgs:
  665.                 if wdg:
  666.                     for r in [7, 8]:
  667.                         self.error_cell.setItemErrors(r, 3, self.step, True)
  668.                         self.update_cell_color(r, 3)
  669.         self.step = 'step_2'
  670.         wdgs = [ self.widgets.getItem(16, 3), self.widgets.getItem(17, 3)]
  671.         if self.get_string_var_number(17, 3) <= self.get_string_var_number(16, 3):
  672.             for wdg in wdgs:
  673.                 if wdg:
  674.                     for r in [16, 17]:
  675.                         self.error_cell.setItemErrors(r, 3, self.step, False)
  676.                         self.update_cell_color(r, 3)
  677.         else:
  678.             for wdg in wdgs:
  679.                 if wdg:
  680.                     for r in [16, 17]:
  681.                         self.error_cell.setItemErrors(r, 3, self.step, True)
  682.                         self.update_cell_color(r, 3)
  683.         self.step = 'step_3'
  684.         wdgs = [ self.widgets.getItem(16, 10), self.widgets.getItem(17, 10)]
  685.         if self.get_string_var_number(17, 10) <= self.get_string_var_number(16, 10):
  686.             for wdg in wdgs:
  687.                 if wdg:
  688.                     for r in [16, 17]:
  689.                         self.error_cell.setItemErrors(r, 10, self.step, False)
  690.                         self.update_cell_color(r, 10)
  691.         else:
  692.             for wdg in wdgs:
  693.                 if wdg:
  694.                     for r in [16, 17]:
  695.                         self.error_cell.setItemErrors(r, 10, self.step, True)
  696.                         self.update_cell_color(r, 10)
  697.         self.step = 'step_4'
  698.         wdgs = [ self.widgets.getItem(11, 3), self.widgets.getItem(12, 3), self.widgets.getItem(13, 3), self.widgets.getItem(14, 3)]
  699.         if self.get_string_var_number(12, 3) + self.get_string_var_number(13, 3) + self.get_string_var_number(14, 3) <= self.get_string_var_number(11, 3):
  700.             for wdg in wdgs:
  701.                 if wdg:
  702.                     for r in [11, 12, 13, 14]:
  703.                         self.error_cell.setItemErrors(r, 3, self.step, False)
  704.                         self.update_cell_color(r, 3)
  705.         else:
  706.             for wdg in wdgs:
  707.                 if wdg:
  708.                     for r in [11, 12, 13, 14]:
  709.                         self.error_cell.setItemErrors(r, 3, self.step, True)
  710.                         self.update_cell_color(r, 3)
  711.         self.step = 'step_5'
  712.         wdgs = [ self.widgets.getItem(11, 10), self.widgets.getItem(13, 10), self.widgets.getItem(14, 10)]
  713.         if self.get_string_var_number(13, 10) + self.get_string_var_number(14, 10) <= self.get_string_var_number(11, 10):
  714.             for wdg in wdgs:
  715.                 if wdg:
  716.                     for r in [11, 13, 14]:
  717.                         self.error_cell.setItemErrors(r, 10, self.step, False)
  718.                         self.update_cell_color(r, 10)
  719.         else:
  720.             for wdg in wdgs:
  721.                 if wdg:
  722.                     for r in [11, 13, 14]:
  723.                         self.error_cell.setItemErrors(r, 10, self.step, True)
  724.                         self.update_cell_color(r, 10)
  725.         self.step = 'step_6'
  726.         wdgs = [ self.widgets.getItem(11, 9), self.widgets.getItem(13, 9), self.widgets.getItem(14, 9)]
  727.         if self.get_string_var_number(13, 9) + self.get_string_var_number(14, 9) <= self.get_string_var_number(11, 9):
  728.             for wdg in wdgs:
  729.                 if wdg:
  730.                     for r in [11, 13, 14]:
  731.                         self.error_cell.setItemErrors(r, 9, self.step, False)
  732.                         self.update_cell_color(r, 9)
  733.         else:
  734.             for wdg in wdgs:
  735.                 if wdg:
  736.                     for r in [11, 13, 14]:
  737.                         self.error_cell.setItemErrors(r, 9, self.step, True)
  738.                         self.update_cell_color(r, 9)
  739.         self.step = 'step_7'
  740.         wdgs = [self.widgets.getItem(11, 2), self.widgets.getItem(12, 2), self.widgets.getItem(13, 2), self.widgets.getItem(14, 2)]
  741.         if self.get_string_var_number(13, 2) + self.get_string_var_number(14, 2) <= self.get_string_var_number(11, 2):
  742.             for wdg in wdgs:
  743.                 if wdg:
  744.                     for r in [11, 12, 13, 14]:
  745.                         self.error_cell.setItemErrors(r, 2, self.step, False)
  746.                         self.update_cell_color(r, 2)
  747.         else:
  748.             for wdg in wdgs:
  749.                 if wdg:
  750.                     for r in [11, 12, 13, 14]:
  751.                         self.error_cell.setItemErrors(r, 2, self.step, True)
  752.                         self.update_cell_color(r, 2)
  753.         self.step = 'step_8'
  754.         wdgs = [ self.widgets.getItem(16, 9), self.widgets.getItem(17, 9)]
  755.         if self.get_string_var_number(17, 9) <= self.get_string_var_number(16, 9):
  756.             for wdg in wdgs:
  757.                 if wdg:
  758.                     for r in [16, 17]:
  759.                         self.error_cell.setItemErrors(r, 9, self.step, False)
  760.                         self.update_cell_color(r, 9)
  761.         else:
  762.             for wdg in wdgs:
  763.                 if wdg:
  764.                     for r in [16, 17]:
  765.                         self.error_cell.setItemErrors(r, 9, self.step, True)
  766.                         self.update_cell_color(r, 9)
  767.         self.step = 'step_9'
  768.         wdgs = [ self.widgets.getItem(16, 2), self.widgets.getItem(17, 2)]
  769.         if self.get_string_var_number(17, 2) <= self.get_string_var_number(16, 2):
  770.             for wdg in wdgs:
  771.                 if wdg:
  772.                     for r in [16, 17]:
  773.                         self.error_cell.setItemErrors(r, 2, self.step, False)
  774.                         self.update_cell_color(r, 2)
  775.         else:
  776.             for wdg in wdgs:
  777.                 if wdg:
  778.                     for r in [16, 17]:
  779.                         self.error_cell.setItemErrors(r, 2, self.step, True)
  780.                         self.update_cell_color(r, 2)
  781.         self.step = 'step'
  782.         wdgs = [ self.widgets.getItem(18, 2), self.widgets.getItem(19, 2)]
  783.         if self.get_string_var_number(19, 2) <= self.get_string_var_number(18, 2):
  784.             for wdg in wdgs:
  785.                 if wdg:
  786.                     for r in [18, 19]:
  787.                         self.error_cell.setItemErrors(r, 2, self.step, False)
  788.                         self.update_cell_color(r, 2)
  789.         else:
  790.             for wdg in wdgs:
  791.                 if wdg:
  792.                     for r in [18, 19]:
  793.                         self.error_cell.setItemErrors(r, 2, self.step, True)
  794.                         self.update_cell_color(r, 2)
  795.         self.step = 'step_1'
  796.         wdgs = [ self.widgets.getItem(7, 2), self.widgets.getItem(8, 2)]
  797.         if self.get_string_var_number(8, 2) <= self.get_string_var_number(7, 2):
  798.             for wdg in wdgs:
  799.                 if wdg:
  800.                     for r in [7, 8]:
  801.                         self.error_cell.setItemErrors(r, 2, self.step, False)
  802.                         self.update_cell_color(r, 2)
  803.         else:
  804.             for wdg in wdgs:
  805.                 if wdg:
  806.                     for r in [7, 8]:
  807.                         self.error_cell.setItemErrors(r, 3, self.step, True)
  808.                         self.update_cell_color(r, 3)
  809.  
  810.     def change_color_assets_vs_amort(self):
  811.         self.step = 'step_1'
  812.         for r in [4, 5, 6, 11, 13, 14, 15, 16, 17, 26]:
  813.             wdgs = [self.widgets.getItem(r, 10), self.widgets.getItem(r, 3)]
  814.             if self.get_string_var_number(r, 10) <= self.get_string_var_number(r, 3):
  815.                 for wdg in wdgs:
  816.                     if wdg:
  817.                         for col in [3, 10]:
  818.                             self.error_cell.setItemErrors(r, col, self.step, False)
  819.                             self.update_cell_color(r, col)
  820.             else:
  821.                 for wdg in wdgs:
  822.                     if wdg:
  823.                         for col in [3, 10]:
  824.                             self.error_cell.setItemErrors(r, col, self.step, True)  # error_sels {16: {10: True, 3: True}, 17: {10: True, 3: True}}
  825.                             self.update_cell_color(r, col)
  826.  
  827.     def update_cell_color(self, r, c):
  828.         cells = self.error_cell.getCells()
  829.         is_error = 0
  830.         for step in cells[r][c]:
  831.             status = self.error_cell.getItemErrors(r, c, step)
  832.             if status:
  833.                 is_error += 1
  834.             widget = self.widgets.getItem(r, c)
  835.             if is_error > 0:
  836.                 if widget:
  837.                     widget.configure(foreground='red')
  838.             else:
  839.                 if widget:
  840.                     widget.configure(foreground='black')
  841.  
  842.     def try_to_lock_tax_row(self):
  843.         can_lock = True
  844.         r = 30
  845.         for c in [4, 7, 15]:
  846.             if self.diffs1.getItem(r, c):
  847.                 can_lock = False
  848.                 break
  849.         if can_lock:
  850.             r = 31
  851.             for c in [1, 2, 3, 4, 5, 6, 7, 15]:
  852.                 if self.diffs1.getItem(r, c):
  853.                     can_lock = False
  854.                     break
  855.         if can_lock:
  856.             r = 31
  857.             for c in range(1, 15 + 1):
  858.                 if self.diffs1.getItem(r, c):
  859.                     can_lock = False
  860.                     break
  861.         if can_lock:
  862.             r = 30
  863.             for c in range(1, 7+1):
  864.                 widget = self.widgets.getItem(r, c)
  865.                 if widget and isinstance(widget, ttk.Combobox):
  866.                     widget.config(state='disabled')
  867.  
  868.     def get_string_var_number(self, row, col):
  869.         svar = self.string_vars.getItem(row, col)
  870.         if svar is None:
  871.             return 0
  872.         svar_value_str = svar.get()
  873.         try:
  874.             return int(svar_value_str)
  875.         except:
  876.             return 0
  877.  
  878.     def check_sums_col_4(self):
  879.         col = 4
  880.         for r in range(4, 31+1):
  881.             svar_value = self.get_string_var_number(r, col)
  882.             tot = self.get_string_var_number(r, 1) + self.get_string_var_number(r, 2) - self.get_string_var_number(r, 3)
  883.             diff = svar_value - tot
  884.             self.updateCellStatus(r, col, diff)
  885.  
  886.     def check_sums_col_7(self):
  887.         col = 7
  888.         for r in range(4, 31+1):
  889.             svar_value = self.get_string_var_number(r, col)
  890.             tot = self.get_string_var_number(r, 4) + self.get_string_var_number(r, 5) - self.get_string_var_number(r, 6)
  891.             diff = svar_value - tot
  892.             self.updateCellStatus(r, col, diff)
  893.  
  894.     def check_sums_col_11(self):
  895.         col = 11
  896.         for r in range(4, 31+1):
  897.             svar_value = self.get_string_var_number(r, col)
  898.             tot = self.get_string_var_number(r, 8) + self.get_string_var_number(r, 9) - self.get_string_var_number(r, 10)
  899.             diff = svar_value - tot
  900.             self.updateCellStatus(r, col, diff)
  901.  
  902.     def check_sums_col_14(self):
  903.         col = 14
  904.         for r in range(4, 31+1):
  905.             svar_value = self.get_string_var_number(r, col)
  906.             tot = self.get_string_var_number(r, 11) + self.get_string_var_number(r, 12) - self.get_string_var_number(r, 13)
  907.             diff = svar_value - tot
  908.             self.updateCellStatus(r, col, diff)
  909.  
  910.     def check_sums_row_31(self):
  911.         tot_row = 31
  912.         for c in range(1, 15+1):
  913.             svar_value = self.get_string_var_number(31, c)
  914.             tot = self.get_string_var_number(9, c) + self.get_string_var_number(20, c) + self.get_string_var_number(29, c) + self.get_string_var_number(30, c)
  915.             self.updateCellStatus(tot_row, c, tot - svar_value)
  916.    # Проверка дали *:15 =?= *:7 - *:14
  917.     # Оцветява *15
  918.  
  919.     def check_Rx15(self):
  920.         tot_col = 15
  921.         for r in range(4, 31+1):
  922.             svar_value = self.get_string_var_number(r, 15)
  923.             tot = self.get_string_var_number(r, 7) - self.get_string_var_number(r, 14)
  924.             self.updateCellStatus(r, tot_col, tot - svar_value)
  925.  
  926. # Проверява дали tot_row*col e сума от sub_rows*col
  927. # Оцветява tot_row:col
  928.     def check_subsums_rows_row_col(self, sub_rows, tot_row, col):
  929.         tot = 0
  930.         for r in sub_rows:
  931.             svar = self.string_vars.getItem(r, col)
  932.             if svar is None: continue
  933.             svar_value_str = svar.get()
  934.             try:
  935.                 svar_value = int(svar_value_str)
  936.             except:
  937.                 continue
  938.             tot += svar_value
  939.         svar = self.string_vars.getItem(tot_row, col)
  940.         if svar:
  941.             val_RxC_str = svar.get()
  942.             val_RxC = int(val_RxC_str)
  943.             diff = val_RxC - tot
  944.             self.updateCellStatus(tot_row, col, diff)
  945.  
  946.     def apply_locks_on_column(self, col):
  947.         lock_state = self.col_locks_bvars[col].get()  # True/False
  948.         for r in range(4, 31+1):
  949.             self.locks.setItem(r, col, lock_state)
  950.         self.on_lock_change()
  951.  
  952.     def init_locks(self):
  953.         self.locks.setItem(31, 15, True)
  954.         self.locks.setItem(31, 9, True)
  955.         self.col_locks_bvars[4].set(True); self.apply_locks_on_column(4)
  956.         self.col_locks_bvars[7].set(True); self.apply_locks_on_column(7)
  957.         self.col_locks_bvars[11].set(True); self.apply_locks_on_column(11)
  958.         self.col_locks_bvars[14].set(True); self.apply_locks_on_column(14)
  959.         self.col_locks_bvars[15].set(True); self.apply_locks_on_column(15)
  960.  
  961.     def get_da_print(self):
  962.         # Проверка за грешки в крайните суми
  963.         for r in range(4, 32):
  964.             for c in range(1, 16):
  965.                 if self.diffs1.getItem(r, c):
  966.                     self.pop_up_errors()
  967.                     return
  968.         # Проверка за грешки в междинните суми
  969.         cells = self.error_cell.getCells()
  970.         for r in cells:
  971.             for c in cells[r]:
  972.                 for step in cells[r][c]:
  973.                     if self.error_cell.getItemErrors(r, c, step):
  974.                         self.pop_up_errors()
  975.                         return
  976.         for r in range(0, 31+1):
  977.             for c in range(0, 15+1):
  978.                 value = self.get_string_var_number(r, c)
  979.                 self.prints.setItem(r, c, value)
  980.         zero_rows = []
  981.         for r in range(0, 31+1):
  982.             row_is_zero = True
  983.             for c in range(0, 15+1):
  984.                 value = self.prints.getItem(r, c)
  985.                 if value != 0:
  986.                     row_is_zero = False
  987.                     break
  988.             if row_is_zero:
  989.                 zero_rows.append(r)
  990.         zero_cols = []
  991.         for c in range(0, 15+1):
  992.             col_is_zero = True
  993.             for r in range(4, 31 + 1):
  994.                 value = self.prints.getItem(r, c)
  995.                 if value != 0:
  996.                     col_is_zero = False
  997.                     break
  998.             if col_is_zero:
  999.                 zero_cols.append(c)
  1000.         remove_rows = []
  1001.         # Група 1
  1002.         group_title_row = 3
  1003.         group_rows = list(range(4, 9+1))
  1004.         group_zero_rows = set(group_rows).intersection(zero_rows)
  1005.         if len(group_zero_rows) == len(group_rows):
  1006.             remove_rows.append(group_title_row)
  1007.         remove_rows.extend(group_zero_rows)
  1008.         # Група 2
  1009.         group_title_row = 10
  1010.         group_rows = list(range(11, 20+1))
  1011.         group_zero_rows = set(group_rows).intersection(zero_rows)
  1012.         if len(group_zero_rows) == len(group_rows):
  1013.             remove_rows.append(group_title_row)
  1014.         remove_rows.extend(group_zero_rows)
  1015.         # Група 3
  1016.         group_title_row = 21
  1017.         group_rows = list(range(22, 29+1))
  1018.         group_zero_rows = set(group_rows).intersection(zero_rows)
  1019.         if len(group_zero_rows) == len(group_rows):
  1020.             remove_rows.append(group_title_row)
  1021.         remove_rows.extend(group_zero_rows)
  1022.         # Група 4 (данъци)
  1023.         if 30 in zero_rows:
  1024.             remove_rows.append(30)
  1025.         remove_cols = []
  1026.         # За да се ползва ф-ция intersection, трябва да се използва ф-ция SET.
  1027.         cols_allow_to_remove = [2, 3, 5, 6, 9, 10, 12, 13]
  1028.         section = set(cols_allow_to_remove).intersection(zero_cols)
  1029.         remove_cols.extend(section)
  1030.         if 5 in zero_cols and 6 in zero_cols:
  1031.             remove_cols.append(7)
  1032.         if 12 in zero_cols and 13 in zero_cols:
  1033.             remove_cols.append(14)
  1034.         da_print = copy.deepcopy(self.da)
  1035.         # --------------------------
  1036.         for r in range(0, 31+1):
  1037.             for c in range(0, 15+1):
  1038.                 if c in remove_cols:
  1039.                     del da_print[f"row_{r}"][f"col_{c}"]   # KeyError: 'col_5'
  1040.         for r in remove_rows:
  1041.             del da_print[f"row_{r}"]
  1042.         # В comboboxo-вете има листове, от които взимаме само 0-вата позиция
  1043.         for r in range(0, 31+1):
  1044.             for c in range(0, 15+1):
  1045.                 r_idx = f"row_{r}"; c_idx = f"col_{c}"; v_idx = f"val_{c}"
  1046.                 if r_idx in da_print and c_idx in da_print[r_idx]:
  1047.                     svar = self.string_vars.getItem(r, c)
  1048.                     if svar:
  1049.                         da_print[r_idx][c_idx][v_idx] = svar.get()
  1050.                     elif isinstance(da_print[r_idx][c_idx][v_idx], list):
  1051.                         # Заместваме списъка със стринга, който е първа стойност в списъка
  1052.                         da_print[r_idx][c_idx][v_idx] = da_print[r_idx][c_idx][v_idx][0]
  1053.  
  1054.         json_file_io = JsonFileIo(file_name=registry['da_print_combobox_test_file_name'])
  1055.         json_file_io.write_content(da_print)
  1056.  
  1057.         # da_print.clear()
  1058.  
  1059.         balance_assets_rec = {
  1060.             "na": {
  1061.                 "prd": {
  1062.                     "balans": da_print["row_4"]["col_15"]["val_15"],
  1063.                     "ns": int(da_print["row_4"]["col_1"]["val_1"]) - int(da_print["row_4"]["col_8"]["val_8"]),
  1064.                 }
  1065.             }
  1066.         }
  1067.         json_file_io = JsonFileIo(file_name=registry['balance_assets_rec_file_name'])
  1068.         json_file_io.write_content(balance_assets_rec)
  1069.         self.pdf_dna()
  1070.         quit()
  1071.  
  1072.     def pop_up_errors(self):
  1073.         error_message = tk.Toplevel(self.my_win, background='orange')
  1074.         error_message.geometry('400x130+600+300')
  1075.         error_message.wm_overrideredirect(True)
  1076.         error_message.attributes('-topmost', 'true')
  1077.         error_label = tk.Label(error_message, text='В ТАБЛИЦАТА СА ОТКРИТИ ГРЕШКИ !!!', background='yellow', foreground='red', font=('Timesbg', 12))
  1078.         error_label.place(relx=.5, rely=.4, anchor='center')
  1079.         error_button = tk.Button(error_message, text='ОК', command=error_message.destroy, justify='center', foreground='black', width=6)
  1080.         error_button.place(relx=0.5, rely=0.7, anchor='center')
  1081.  
  1082.     def get_acc_rec_diff(self, r, c):
  1083.         if c in [2, 3] and r == 4: return self.acc_rec_da["prd"]["assets_re"]["diff"]
  1084.         if c in [2, 3] and r == 5: return self.acc_rec_da["pp"]["assets_re"]["diff"]
  1085.         if c in [2, 3] and r == 6: return self.acc_rec_da["tr"]["assets_re"]["diff"]
  1086.         if c in [2, 3] and r == 7: return self.acc_rec_da["rpna"]["assets_re"]["diff"]
  1087.         if c in [2, 3] and r == 8: return self.acc_rec_da["adv"]["assets_re"]["diff"]
  1088.         if c in [2, 3] and r == 11: return self.acc_rec_da["pdr"]["assets_re"]["diff"]
  1089.         if c in [2, 3] and r == 12: return self.acc_rec_da["z"]["assets_re"]["diff"]
  1090.         if c in [2, 3] and r == 13: return self.acc_rec_da["pz"]["assets_re"]["diff"]
  1091.         if c in [2, 3] and r == 14: return self.acc_rec_da["s"]["assets_re"]["diff"]
  1092.         if c in [2, 3] and r == 15: return self.acc_rec_da["m"]["assets_re"]["diff"]
  1093.         if c in [2, 3] and r == 16: return self.acc_rec_da["sdr"]["assets_re"]["diff"]
  1094.         if c in [2, 3] and r == 17: return self.acc_rec_da["ts"]["assets_re"]["diff"]
  1095.         if c in [2, 3] and r == 18: return self.acc_rec_da["rpma"]["assets_re"]["diff"]
  1096.         if c in [2, 3] and r == 19: return self.acc_rec_da["advm"]["assets_re"]["diff"]
  1097.         if c in [2, 3] and r == 22: return self.acc_rec_da["adp"]["assets_re"]["diff"]
  1098.         if c in [2, 3] and r == 23: return self.acc_rec_da["pzp"]["assets_re"]["diff"]
  1099.         if c in [2, 3] and r == 24: return self.acc_rec_da["adas"]["assets_re"]["diff"]
  1100.         if c in [2, 3] and r == 25: return self.acc_rec_da["pzas"]["assets_re"]["diff"]
  1101.         if c in [2, 3] and r == 26: return self.acc_rec_da["di"]["assets_re"]["diff"]
  1102.         if c in [2, 3] and r == 27: return self.acc_rec_da["drz"]["assets_re"]["diff"]
  1103.         if c in [2, 3] and r == 28: return self.acc_rec_da["isa"]["assets_re"]["diff"]
  1104.         if c in [2, 3] and r == 30: return self.acc_rec_da["ltax"]["assets_re"]["diff"]
  1105.  
  1106.         if c in [9, 10] and r == 4: return self.acc_rec_da["prd"]["amort_re"]["diff"]
  1107.         if c in [9, 10] and r == 5: return self.acc_rec_da["pp"]["amort_re"]["diff"]
  1108.         if c in [9, 10] and r == 6: return self.acc_rec_da["tr"]["amort_re"]["diff"]
  1109.         if c in [9, 10] and r == 7: return self.acc_rec_da["rpna"]["amort_re"]["diff"]
  1110.         if c in [9, 10] and r == 8: return self.acc_rec_da["adv"]["amort_re"]["diff"]
  1111.         if c in [9, 10] and r == 11: return self.acc_rec_da["pdr"]["amort_re"]["diff"]
  1112.         if c in [9, 10] and r == 12: return self.acc_rec_da["z"]["amort_re"]["diff"]
  1113.         if c in [9, 10] and r == 13: return self.acc_rec_da["pz"]["amort_re"]["diff"]
  1114.         if c in [9, 10] and r == 14: return self.acc_rec_da["s"]["amort_re"]["diff"]
  1115.         if c in [9, 10] and r == 15: return self.acc_rec_da["m"]["amort_re"]["diff"]
  1116.         if c in [9, 10] and r == 16: return self.acc_rec_da["sdr"]["amort_re"]["diff"]
  1117.         if c in [9, 10] and r == 17: return self.acc_rec_da["ts"]["amort_re"]["diff"]
  1118.         if c in [9, 10] and r == 18: return self.acc_rec_da["rpma"]["amort_re"]["diff"]
  1119.         if c in [9, 10] and r == 19: return self.acc_rec_da["advm"]["amort_re"]["diff"]
  1120.         if c in [9, 10] and r == 22: return self.acc_rec_da["adp"]["amort_re"]["diff"]
  1121.         if c in [9, 10] and r == 23: return self.acc_rec_da["pzp"]["amort_re"]["diff"]
  1122.         if c in [9, 10] and r == 24: return self.acc_rec_da["adas"]["amort_re"]["diff"]
  1123.         if c in [9, 10] and r == 25: return self.acc_rec_da["pzas"]["amort_re"]["diff"]
  1124.         if c in [9, 10] and r == 26: return self.acc_rec_da["di"]["amort_re"]["diff"]
  1125.         if c in [9, 10] and r == 27: return self.acc_rec_da["drz"]["amort_re"]["diff"]
  1126.         if c in [9, 10] and r == 28: return self.acc_rec_da["isa"]["amort_re"]["diff"]
  1127.         if c in [9, 10] and r == 30: return self.acc_rec_da["ltax"]["amort_re"]["diff"]
  1128.  
  1129.         return 0
  1130.  
  1131.  
  1132. if __name__ == '__main__':
  1133.     da_win = DnaRounding()
  1134.     da_win.create_window()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement