Skip to Content

Odoo 19: відкриті позиції в порталі клієнта зі звітною датою та експортом у PDF – модуль portal_open_items

5 листопада 2026 | Odoo 19 Community | Власна розробка
5 листопада 2026 р. від
Odoo 19: відкриті позиції в порталі клієнта зі звітною датою та експортом у PDF – модуль portal_open_items

Модуль Odoo 19 portal_open_items: список відкритих позицій у порталі клієнта зі звітною датою та експортом у PDF

«Скільки ж ми ще залишаємося вам винні?» Таке запитання регулярно виникає в кожній клієнтській базі, здебільшого перед кінцем кварталу, перед аудитом річної звітності або коли бухгалтерія клієнта готує платежі. Хто не відповідає на нього самостійно, отримує його електронною поштою чи телефоном, а хтось має експортувати з бухгалтерії список відкритих позицій (OP-список) і надіслати його. В Odoo 19 Community це не відбувається саме собою: портал клієнта показує окремі рахунки, але не список відкритих позицій усього підприємства, а тим паче станом на довільно вибрану дату.

Для цього ми написали модуль «Відкриті позиції в порталі клієнта» (portal_open_items) для Odoo 19. Клієнти з увімкненим доступом бачать у порталі список усіх відкритих рахунків, кредитових нот і ще не зіставлених платежів свого підприємства, можуть вибрати звітну дату, завантажити список у форматі PDF і одразу бачать, яка в них платіжна дисципліна. Модуль є вільним програмним забезпеченням за ліцензією AGPL-3 і розміщений на GitHub:

github.com/Alex0176/odoo-portal-open-items

Модуль ми встановили 5 листопада 2026 року у нашій робочій системі. Опція там за замовчуванням вимкнена і встановлюється лише за домовленістю з окремими клієнтами. Отже, досвід експлуатації ще короткий; ми тестували модуль тринадцятьма автоматичними тестами та тестовою базою даних із прикладами клієнтів. Хто переймає модуль, має прочитати розділи про розрахунок звітної дати, про платіжну дисципліну та про обмеження .

Проблема: OP-список на першу вимогу

Список відкритих позицій показує, які рахунки клієнта ще не оплачені, яка їх частина прострочена та яке сальдо. Для постачальника це інструмент планування ліквідності та претензійної роботи. Для клієнта це основа для планування платежів, звірки рахунків із власною бухгалтерією та з’ясування питань без відкриття кожного рахунку окремо. Типові приводи:

  • Квартальне та річне закриття: бухгалтерія клієнта хоче знати, які зобов’язання існували станом на 31.12. Це звітна дата в минулому.
  • Звірка: клієнт вважає, що оплатив рахунок, а ми бачимо його ще відкритим. Спільний список із датою, строком оплати та сумою з’ясовує це швидше, ніж ланцюжок листів.
  • Платіжні цикли: хто щотижня або щомісяця готує платежі, потребує всіх відкритих рахунків постачальника одним поглядом, із простроченими нагорі.
  • Кілька контактних осіб: у компанії один замовляє, інший платить. Відкриті позиції належать компанії, а не окремій особі.

Досі ми складали такі списки вручну з бухгалтерії та надсилали поштою. Це забирає час і зрештою є миттєвим знімком, який застаріває вже наступного дня. Краще мати список, який клієнт сам будь-коли відкриває в порталі, завжди з актуальним станом.

Огляд рішення

Модуль доповнює портал клієнта Odoo сторінкою Відкриті позиції та плиткою на сторінці Мій обліковий запис. Функціональні можливості:

  • Опція для кожного контакту: «Показувати список відкритих позицій у порталі». Лише коли її встановлено, користувач порталу бачить плитку та сторінку. За замовчуванням вона вимкнена.
  • Усе підприємство: список містить відкриті позиції всіх контактів компанії, а не лише користувача, який увійшов у систему.
  • Звітна дата: клієнт обирає дату і бачить, що було відкритим у цей день.
  • Експорт у PDF: список у форматі PDF у макеті вашої компанії, із фірмовим бланком, сальдо та сумою прострочених позицій.
  • Платіжна дисципліна: частка рахунків, оплачених вчасно, з невеликим запізненням і пізно, найдовше відкритий рахунок та оцінка добра або погана, у порталі та в PDF.
  • Прострочені позиції виділені кольором і показують кількість днів після дати строку оплати.
  • Кредитові ноти та авансові залишки наводяться в списку з від’ємною сумою і зменшують сальдо.
  • Посилання: кожен рахунок у списку веде до перегляду рахунку в порталі.
  • Багатомовність: інтерфейс і PDF відповідають мові користувача, німецький переклад додається.

Портал клієнта в Odoo 19 з плиткою «Відкриті позиції» поруч із замовленнями та рахунками

Плитка з’являється на початковій сторінці Мій обліковий запис поруч із замовленнями та рахунками. Хто не має опції, її не бачить.

Дозвіл для кожного контакту: опція

OP-список показує комерційні дані всієї компанії. Тому модуль відкриває його не для всіх користувачів порталу, а лише там, де ви цього прямо бажаєте. У формі контакту на вкладці Вебсайт є прапорець «Показувати список відкритих позицій у порталі». Він видимий для користувачів із правами на рахунки (група account.group_account_invoice) і діє для цього одного контакту.

Форма контакту Odoo з опцією «Показувати список відкритих позицій у порталі»

Це відповідає практиці: у компанії список мають бачити керівництво або бухгалтерія, а співробітник, який лише переглядає заявки, — ні. Опція стосується контакту, але відображені позиції належать усьому підприємству. Тому встановлюйте опцію для особи, яка має мати огляд усієї компанії.

Список у порталі клієнта

Клік на плитку відкриває /my/open-items. Сторінка показує назву компанії, вибір звітної дати та таблицю з відкритими позиціями:

Список відкритих позицій у порталі клієнта Odoo з простроченими рахунками, кредитовою нотою, сальдо та сумою прострочених позицій

СтовпецьВміст
ДокументНомер документа рахунку або кредитової ноти з посиланням на перегляд рахунку в порталі; нижче — референс, якщо він є
ДатаДата рахунку або дата проведення
Строк оплатиДата строку оплати; для прострочених позицій нижче червоним — «прострочено на n днів»
СумаПервісна сума позиції
ВідкритоЩе не сплачена сума (після часткових оплат)

Під таблицею наведені сальдо, тобто сума всіх відкритих залишків, і сума прострочених позицій. Прострочені рядки виділені кольоровим тлом, щоб їх було одразу видно під час побіжного перегляду. Кредитові ноти та платежі, ще не зіставлені з рахунком, відображаються з від’ємним знаком і зменшують сальдо; примітка під таблицею пояснює це клієнту. Якщо ваше підприємство веде облік у кількох валютах, сальдо наводиться окремо для кожної валюти.

Відкриті позиції станом на звітну дату

Над датою стоїть «Відкриті позиції станом на звітну дату», поруч — поле дати та кнопка Показати. Зі звітною датою в минулому список показує, що в цей день ще не було оплачено. Це саме той аналіз, який потрібен для закриття періоду, аудитів і звірок: «Які зобов’язання ми мали перед цим постачальником станом на 31.12.?»

Відкриті позиції станом на звітну дату 02.11.2026 у порталі клієнта Odoo

Як обчислюється звітна дата

Для кожної позиції діє правило: відкрито станом на звітну дату = сума рахунку мінус усі платежі, зіставлені до звітної дати включно. Позиція потрапляє до списку, якщо на звітну дату вона вже була проведена і мала тоді непогашений залишок. Отже, рахунок від 7 вересня на 1.250,50 €, який 20 жовтня частково оплачено 500,00 €, а 5 листопада погашено залишком, за звітної дати 2 листопада стоїть у списку з 750,50 €, а за звітної дати 5 листопада його в списку вже немає.

Часова шкала: рахунок, часткова оплата, звітна дата і оплата залишку та розрахунок відкритої суми станом на звітну дату

Прострочення також оцінюється станом на звітну дату: позиція є простроченою, якщо дата її строку оплати передує звітній даті, а залишок додатний. Кількість днів після строку оплати рахується до звітної дати, а не до сьогодні. Звітна дата в майбутньому обробляється як сьогодні, так само як порожня або недійсна дата в адресному рядку. Тож список не може створити хибне враження прогнозу.

Що тут означає «дата платежу»

Визначальною є дата, коли рахунок і платіж в Odoo були зіставлені між собою (більша з двох дат проведення), а не дата рахунку. Це звичайний випадок: платіж проводиться в день надходження коштів і зіставляється з рахунком. Хто зіставляє платежі лише через кілька днів, бачить рахунок відкритим відповідно довше. Розділ обмеження розглядає це докладніше.

Експорт у PDF

Через Завантажити PDF модуль формує список як PDF-файл для вибраної звітної дати. Кнопка Друк відкриває той самий список у діалозі друку браузера. PDF використовує макет документів вашої компанії в Odoo (логотип, адреса, колонтитул із налаштувань) і європейський формат паперу:

PDF «Відкриті позиції станом на звітну дату» із фірмовим бланком, таблицею, сальдо та сумою прострочених позицій

  • Заголовок зі звітною датою: «Відкриті позиції станом на звітну дату 02.11.2026», навіть якщо звітною датою є сьогодні. Якщо відкритих позицій немає, там стоїть «Відкритих позицій немає.»
  • Адреса клієнта в адресному полі фірмового макета, щоб список і в роздрукованому вигляді відповідав суті справи.
  • Прострочені позиції надруковані жирним, щоб вони впадали в очі і за чорно-білого друку.
  • Сальдо та сума прострочених позицій наприкінці таблиці, за кількох валют — окремо для кожної валюти.
  • Ім’я файлу з назвою компанії та датою, наприклад Open_items_Muster_Handels_GmbH_2026-11-02.pdf.

Платіжна дисципліна: оцінка з першого погляду

Починаючи з версії 19.0.1.1.0 над таблицею наведено короткий аналіз того, наскільки вчасно підприємство оплачує свої рахунки. Той самий аналіз з’являється і в PDF. Так клієнт сам бачить, на якому він рівні, а вам не потрібно окремо йому це пояснювати.

Сторінка відкритих позицій у порталі клієнта Odoo з аналізом платіжної дисципліни зеленим, помаранчевим і червоним кольорами та оцінкою погана

  • Зелений: «47 % оплачено в межах строку оплати.» Йдеться про рахунки, оплачені в день настання строку або раніше.
  • Помаранчевий: «29 % оплачено протягом тижня після закінчення строку оплати.» Це платежі через один–сім днів після настання строку.
  • Червоний: «24 % оплачено пізніше, у середньому через 39 днів (через 25 днів після закінчення строку оплати).» Перше число рахується від дати рахунку, число в дужках — від настання строку. Рядок з’являється лише тоді, коли такі рахунки є.
  • «Рахунки відкриті до 60 днів.» Це вік найстарішого рахунку, який на звітну дату ще залишається відкритим, рахуючи від дати рахунку.

Під цим стоїть оцінка платіжної дисципліни: добра або погана, а внизу сторінки, у PDF — наприкінці сторінки, примітка «Клієнтів із поганою платіжною дисципліною переводять на передоплату.» PDF показує ті самі рядки в макеті з фірмовим бланком:

PDF Відкриті позиції станом на звітну дату 05.10.2026 з платіжною дисципліною, оцінкою добра та приміткою про передоплату

Що враховується

  • Оцінюються рахунки, виставлені клієнтові, які проведені. Кредитові ноти та чернетки не враховуються. У разі оплати частинами кожна частина враховується окремо.
  • Період: рахунки за останні дванадцять місяців та всі рахунки, які ще відкриті, навіть якщо вони старші.
  • День оплати — це дата останнього зіставлення з платежем, так само, як і для звітної дати.
  • Відкриті рахунки: Якщо рахунок на звітну дату прострочений, він враховується так, наче його оплатили на звітну дату, тобто помаранчевим або червоним. Відкритий рахунок, строк оплати якого ще не настав, не оцінюється.
  • Зі звітною датою в минулому діє стан цього дня: платежі після звітної дати ще не враховуються.
  • Якщо оцінювати нічого, там стоїть «Немає рахунків за останні 12 місяців для оцінки.» і оцінки немає.

Коли платіжна дисципліна «добра»?

Оцінка добра, якщо щонайменше 70 % рахунків зелені або помаранчеві (оплачені вчасно або із запізненням не більш ніж на тиждень) і жоден відкритий рахунок не прострочений понад 30 днів. Інакше вона погана. Порогові значення (7 днів, 70 %, 30 днів, 12 місяців) містяться як константи на початку models/res_partner.py і їх можна там змінити.

Важливо: модуль нікого не переводить на передоплату. Примітка в колонтитулі — це фіксований текст, який показує клієнтам із поганою оцінкою, що з цього може випливати. Чи й коли ви ухвалите таке рішення, залежить лише від вас. Якщо речення вам не підходить, змініть його в обох шаблонах (сторінка порталу та звіт) або в перекладі.

Хто що може бачити? Модель доступу

Відкриті позиції — чутливі дані, тому для нас доступ був важливішим за будь-яку додаткову функцію. Модель свідомо проста:

Модель доступу: контакт з опцією, без опції, контакт іншої компанії, адреса PDF і співробітник

  • Лише з установленою опцією. Без позначки на контакті немає плитки, а звернення до /my/open-items перенаправляє на Мій обліковий запис.
  • Завжди власна компанія. Компанія визначається за користувачем, який увійшов у систему, а не за параметром в адресі. Через адресний рядок неможливо запросити чужу компанію.
  • Та сама перевірка для PDF. Odoo принципово надає PDF-звіти також через загальну адресу. Тому модуль ще раз перевіряє доступ у самому звіті: PDF отримують лише користувачі з правом на бухгалтерію або користувачі порталу з установленою опцією для власної компанії, усі інші — помилку доступу.
  • Лише проведені позиції. Чернетки та скасовані документи ніколи не відображаються.
  • Лише власні облікові контури: враховуються лише проводки підприємств, до яких користувач має доступ.

Технічна реалізація

Модуль залежить лише від account і portal, тобто від компонентів Odoo Community. Він додає до контакту єдине поле, а решта — контролер, клас звіту та шаблони.

СкладоваПризначення
Поле portal_open_items у res.partnerБулева опція «Показувати список відкритих позицій у порталі», не копіюється, за замовчуванням вимкнена.
_open_items_data()Шукає проведені, ще не зіставлені рядки дебіторської заборгованості підприємства і для кожного рядка обчислює залишок, прострочення та кількість днів. Повертає рядки, підсумки за валютами та звітну дату.
_payment_morale()Оцінює рахунки за останні дванадцять місяців та всі відкриті рахунки станом на звітну дату: частки оплачених вчасно, із запізненням до семи днів і пізніше, середню тривалість, найдовше відкритий рахунок та оцінку добра або погана.
_open_items_residual()Залишок рядка на звітну дату: сума мінус усі часткові зіставлення з датою до звітної дати, у валюті рахунку.
Контролер /my/open-itemsПоказує сторінку, обробляє звітну дату (порожня, недійсна або в майбутньому = сьогодні) і без опції перенаправляє на Мій обліковий запис.
Контролер /my/open-items/pdfФормує PDF із тією самою звітною датою і віддає його з ім’ям файлу.
Звіт report_open_itemsШаблон QWeb у макеті компанії (web.external_layout) із власною перевіркою повноважень.
Шаблони порталуПлитка на Мій обліковий запис, навігаційний ланцюжок, сторінка з формою дати та таблицею.
Форма контактуОпція в розділі Вебсайт, видима лише для групи account.group_account_invoice.
ПерекладНімецький (de.po) та шаблон (.pot) додаються.

Відкриті позиції зчитуються з рядків проводок, а не з рахунків. Це важливо: лише так у списку з’являються також кредитові ноти та ще не зіставлені платежі, і лише так можна відтворити стан на попередній день за зіставленнями (account.partial.reconcile). Запит виконується для всієї компанії (commercial_partner_id) з підвищеними правами, а перевірка того, чи може користувач їх бачити, виконується перед ним.

Тести

Модуль постачається з тринадцятьма автоматичними тестами, які в нас проходять успішно:

  • доступ лише з установленою опцією, інакше перенаправлення на Мій обліковий запис,
  • список містить позиції всієї компанії, але ніколи не іншої,
  • опція діє для кожного контакту, а не для всіх користувачів компанії,
  • кредитові ноти відображаються в списку з від’ємною сумою і зменшують сальдо,
  • звітна дата: пізніше оплачений рахунок до цього стоїть у списку, після — ні,
  • сторінка з майбутньою та з недійсною датою,
  • адреса PDF повертає PDF-файл,
  • звіт у форматі HTML і перевірка доступу у звіті,
  • відкрита сума станом на звітну дату після часткових оплат до та після звітної дати,
  • платіжна дисципліна: поділ на вчасно, із запізненням до тижня і пізніше, із середніми значеннями, також для звітної дати в минулому,
  • платіжна дисципліна з відкритими рахунками та оцінка добра або погана,
  • платіжна дисципліна без рахунків і ніколи з даними іншої компанії,
  • платіжна дисципліна на сторінці порталу та в PDF.

Крім того, ми пройшли сторінку у браузері в тестовій базі даних із прикладами клієнтів, зображення в цій статті походять звідти. Усі імена, номери документів і суми на них цілком вигадані.

Встановлення та налаштування

git clone https://github.com/Alex0176/odoo-portal-open-items.git
ln -s /pfad/odoo-portal-open-items/portal_open_items /pfad/addons/
odoo-bin -c odoo.conf -d <datenbank> -i portal_open_items --stop-after-init

Залежності — account і portal. Після встановлення службу Odoo потрібно перезапустити, оскільки модуль містить код Python. Хто експлуатує робочу систему, спершу встановлює модуль на копії бази даних. Потім:

  1. відкрийте контакт, який має бачити список (особа з доступом до порталу),
  2. у формі встановіть прапорець Показувати список відкритих позицій у порталі і збережіть,
  3. увійдіть у портал як цей користувач або перевірте разом із клієнтом: плитку, список, звітну дату та PDF.

Перед наданням доступу перевірте налаштування відправника та макета вашої компанії, адже PDF бере логотип, адресу та колонтитул із макета документів. Сам модуль не надсилає електронних листів і не створює сповіщень.

Обмеження та примітки

  • Поточний стан проведених документів. Звітна дата розраховується на основі проводок у тому вигляді, в якому вони зараз є в системі. Якщо після звітної дати рахунок скасували або повернули до чернетки, список його не показує. Це не незмінний знімок «у тому вигляді, в якому його тоді надрукували».
  • Платежі враховуються з дня зіставлення. Якщо платіж зіставляють лише через кілька днів після надходження рахунку, до того часу рахунок стоїть у списку як відкритий. Хто хоче точних аналізів на звітну дату, має зіставляти платежі своєчасно. Звірка банківських виписок з рахунками в Odoo Community не передбачена; для цього ми використовуємо наш модуль Bank-Statement-Matcher.
  • Платіжна дисципліна настільки добра, наскільки добре ваше зіставлення. Враховується, коли платіж було зіставлено з рахунком. Платежі, які довго не зіставляли, змушують клієнта виглядати гірше, ніж він є. Перевірте оцінку у своїх клієнтів, перш ніж робити з неї якісь висновки.
  • Оцінка видима для клієнта. Хто має опцію, бачить і результат, і примітку про передоплату. При цьому модуль нічого не змінює в умовах оплати.
  • Лише дебіторська заборгованість. Модуль показує, що клієнт винен вам, а не ваші зобов’язання перед клієнтом.
  • Жодних рівнів нагадувань і посилання на оплату в списку. Клієнт може відкрити зі списку рахунок і оплатити його там, якщо це інакше дозволяє ваш портал.
  • PDF і багатопроцесний режим. Для формування PDF-звітів Odoo всередині звертається до власної вебадреси. Якщо ваша система працює лише з одним робочим процесом, це може блокуватися. Це стосується всіх PDF-звітів у порталі, а не лише цього модуля. Після встановлення один раз перевірте кнопку PDF у реальних умовах.
  • Протестовано лише на Odoo 19.0 Community. Для інших версій ми його не перевіряли.
  • Не замінює претензійну роботу та виписку з рахунку. Список не замінює ні бухгалтерської виписки з рахунку, ні ваших процесів нагадування про оплату, він лише робить стан прозорим.

Поширені запитання

Що таке список відкритих позицій (OP-список)?

Перелік усіх рахунків, які ще не оплачені або оплачені не повністю, із датою рахунку, строком оплати та відкритою сумою. Його також називають «відкриті рахунки», «рахунок клієнта» або «оборотно-сальдова відомість», хоча оборотно-сальдова відомість у вужчому розумінні означає сальдо всіх рахунків.

Чому портал Odoo не показує OP-список із коробки?

Портал показує замовлення, рахунки та платежі окремо, зі статусом і фільтрами. Загальний список підприємства із сальдо та аналіз на звітну дату не входять до обсягу Community, наскільки ми бачили. Саме для цього призначений модуль.

Чи бачать список усі користувачі порталу компанії?

Ні. Лише контакти з установленою опцією. Проте показаний список охоплює всю компанію, а не лише рахунки цього одного контакту.

Чи можу я вибрати звітну дату з минулого, наприклад 31.12. попереднього року?

Так, будь-яку дату до сьогодні. Список тоді показує позиції, які в цей день були проведені та ще не оплачені. Зверніть увагу на примітки щодо розрахунку: визначальним є день зіставлення платежу.

Чи підтримується звітна дата в майбутньому?

Ні. Майбутні дати обробляються як сьогодні, щоб список не показував стан, якого ще не існує.

Чи з’являються в списку кредитові ноти та аванси?

Так. Кредитові ноти та платежі, ще не зіставлені з рахунком, відображаються в списку з від’ємною сумою і зменшують сальдо. Примітка під таблицею пояснює це клієнту.

Як визначаються прострочені позиції?

Позиція є простроченою, якщо дата її строку оплати передує звітній даті і ще залишається додатний залишок. Кількість днів після строку оплати рахується до звітної дати.

Чи є PDF також іншими мовами?

Так, інтерфейс і PDF відповідають мові користувача. У комплекті є німецький переклад; для інших мов достатньо файлу .po або перекладу через інтерфейс Odoo.

Чи може клієнт побачити список іншої компанії, якщо змінить адресу?

Ні. Компанія завжди визначається за користувачем, який увійшов у систему. Адреса містить лише звітну дату. Також PDF-адреса звітів Odoo ще раз перевіряється в самому звіті.

Як обчислюється платіжна дисципліна?

З проведених рахунків клієнтів за останні дванадцять місяців та всіх відкритих рахунків. Для кожного рахунку враховується, через скільки днів після настання строку його оплатили: щонайпізніше в день настання строку (зелений), до семи днів після нього (помаранчевий) або пізніше (червоний). Оцінка добра, якщо щонайменше 70 % зелених або помаранчевих і немає жодного відкритого рахунку, простроченого понад 30 днів. Подробиці наведено в розділі про платіжну дисципліну.

Чи переводить модуль клієнтів із поганою платіжною дисципліною на передоплату?

Ні. Він лише показує оцінку та примітку. Умови оплати, передоплата та блокування залишаються вашим рішенням і вашим процесом в Odoo.

Чи надсилає модуль електронні листи або нагадування?

Ні. Він лише надає сторінку та PDF. Він не створює повідомлень, сповіщень чи дій.

Чи працює модуль з Odoo Enterprise?

Він залежить лише від account і portal, які є в обох редакціях. Ми тестували його лише на редакції Community Odoo 19.

Під якою ліцензією поширюється модуль?

Під AGPL-3. Ви можете використовувати, змінювати та поширювати його, дотримуючись умов ліцензії. Про помилки та пропозиції щодо покращень ми будемо вдячні, якщо ви повідомите їх як Issue в репозиторії GitHub .

Підтримка від Biricon IT Services

Ми супроводжуємо інсталяції Odoo для малих і середніх підприємств: від впровадження через доопрацювання та міграції до поточної експлуатації. Якщо ви хочете надати своїм клієнтам у порталі відкриті позиції, рахунки та заявки, розширити бухгалтерію в Odoo Community або безпечно перенести модуль у вашу робочу інстанцію, ми охоче допоможемо. Інші власні розробки: Архівування компанії разом із користувачами порталу, Реєстр підприємств і перевірка адрес для австрійських клієнтів, Номери документів із префікса, року та лічильника та Набори продуктів у пропозиції як розділ.

Зв’язатися з нами

Станом на 6 листопада 2026 року. Версія модуля 19.0.1.1.1. Зміни з моменту першої версії від 5 листопада: платіжна дисципліна (19.0.1.1.0) та виправлення відкритої суми станом на звітну дату після часткових оплат (19.0.1.1.1). Усі імена, номери документів і суми на ілюстраціях цілком вигадані.