
„Колко всъщност още ни дължите?“ Този въпрос редовно възниква при всяка клиентска база, най-често малко преди края на тримесечието, преди одита на годишния отчет или когато счетоводството на клиента подготвя плащания. Който не отговори сам, получава въпроса по имейл или телефон, а някой трябва да експортира от счетоводството и да изпрати списък с открити позиции (ОП списък). С Odoo 19 Community това не става от само себе си: клиентският портал показва отделните фактури, но не и списък с откритите позиции на цялата фирма, още по-малко към свободно избран ден.
За целта написахме модула Открити позиции в клиентския портал (portal_open_items) за Odoo 19. Клиентите с активиран достъп виждат в портала списък на всички открити фактури, кредитни известия и все още неразпределени плащания на своята фирма, могат да изберат отчетна дата, да изтеглят списъка като PDF и с един поглед виждат каква е тяхната платежна дисциплина. Модулът е свободен софтуер под лиценза AGPL-3 и се намира в GitHub:
github.com/Alex0176/odoo-portal-open-items
Инсталирахме модула на 5 ноември 2026 г. в нашата продуктивна система. Опцията там е по подразбиране изключена и се задава само след уговорка с отделни клиенти. Опитът от експлоатацията все още е кратък; тествахме с тринадесет автоматични теста и тестова база данни с примерни клиенти. Който въведе модула, трябва да прочете разделите за изчисляването към избрана дата, за платежната дисциплина и за ограниченията прочетете.
Съдържание на публикацията
- Проблемът: справка за непогасените позиции при всяко запитване
- Решението накратко
- Достъп за всеки контакт поотделно: опцията
- Справката в клиентския портал
- Непогасени позиции към избрана дата
- Експортиране в PDF
- Платежна дисциплина: оценка с един поглед
- Кой какво може да вижда? Моделът за достъп
- Техническа реализация
- Тестове
- Инсталиране и настройка
- Ограничения и бележки
- Често задавани въпроси
- Съдействие от Biricon IT Services
Проблемът: справка за непогасените позиции при всяко запитване
Списъкът с открити позиции показва кои фактури на клиента още не са платени, кои от тях са просрочени и колко е салдото. За доставчика той е средство за планиране на ликвидността и за напомняне за плащане. За клиента той е основа да планира плащанията, да съпостави фактурите със собственото си счетоводство и да изясни въпроси, без да отваря всяка фактура поотделно. Типични поводи:
- Тримесечно и годишно приключване: Счетоводството на клиента иска да знае какви задължения са съществували към 31.12. Това е дата в миналото.
- Сверяване: Клиентът смята, че е платил дадена фактура, а при нас тя все още е непогасена. Обща справка с дата, падеж и сума изяснява въпроса по-бързо от поредица имейли.
- Подготовка на плащания: Всеки, който подготвя плащания всяка седмица или всеки месец, трябва да вижда на едно място всички неплатени фактури към даден доставчик, с просрочените най-отгоре.
- Няколко лица за контакт: В една фирма един прави поръчките, а друг плаща. Непогасените позиции са на фирмата, а не на отделен човек.
Досега извличахме тези справки ръчно от счетоводството и ги изпращахме по имейл. Това отнема време, а накрая получаваме моментна снимка, която още на следващия ден е остаряла. По-доброто решение е справка, която клиентът може да отвори сам в портала по всяко време и която винаги е актуална.
Решението накратко
Модулът добавя към клиентския портал на Odoo страница Непогасени позиции и плочка в Моят профил. Функционалностите включват:
- Опция за всеки контакт поотделно: „Показване на справката за непогасени позиции в портала“. Потребителят на портала вижда плочката и страницата само ако опцията е включена. По подразбиране тя е изключена.
- Цялата фирма: Справката съдържа непогасените позиции на всички контакти на фирмата, а не само тези на влезлия потребител.
- Дата на справката: Клиентът избира дата и вижда кои позиции са били непогасени към нея.
- Експортиране в PDF: Справката като PDF с фирменото оформление, бланка, салдо и обща сума на просрочените позиции.
- Платежна дисциплина: дял на фактурите, платени навреме, с малко закъснение и късно, най-дълго откритата фактура и оценка добра или лоша, в портала и в PDF.
- Просрочените позиции са маркирани с цвят и показват броя дни след падежа.
- Кредитните известия и сумите в полза на клиента се показват в справката с отрицателна стойност и намаляват салдото.
- Връзки: Всяка фактура в справката води към прегледа ѝ в портала.
- Многоезичност: Интерфейсът и PDF документът използват езика на потребителя; включен е превод на немски.

Плочката се показва на началната страница Моят профил до поръчките и фактурите. Потребителите, за които опцията не е активирана, не я виждат.
Достъп за всеки контакт поотделно: опцията
Справката за непогасените позиции показва търговски данни за цяла фирма. Затова модулът не я предоставя на всички потребители на портала, а само на тези, за които изрично сте разрешили достъп. Във формуляра на контакта, под Уебсайт, се намира квадратчето „Показване на справката за непогасени позиции в портала“. То се вижда от потребители с права за фактуриране (група account.group_account_invoice) и важи само за конкретния контакт.

Това отговаря на реалната практика: в една фирма ръководството или счетоводството трябва да вижда справката, но не и служител, който само преглежда заявки за поддръжка. Опцията важи за контакта, а показаните позиции са на цялата фирма. Затова я включете за човека, който трябва да има поглед върху състоянието на фирмата.
Справката в клиентския портал
Щракването върху плочката отваря /my/open-items. Страницата показва името на фирмата, поле за избор на дата на справката и таблицата с непогасените позиции:

| Колона | Съдържание |
|---|---|
| Документ | Номер на фактурата или кредитното известие с връзка към прегледа на фактурата в портала; под него е референцията, ако има такава |
| Дата | Дата на фактурата или дата на осчетоводяване |
| Падеж | Дата на падежа; при просрочени позиции отдолу се показва „n дни просрочие“ в червено |
| Сума | Първоначална сума на позицията |
| Непогасено | Оставаща непогасена сума (след частичните плащания) |
Под таблицата са показани салдото, тоест сборът на всички непогасени суми, и общата сума на просрочените позиции. Редовете с просрочени позиции са с цветен фон, за да се забелязват веднага при бегъл преглед. Кредитните известия и плащанията, които още не са отнесени към фактура, се показват с отрицателен знак и намаляват салдото; бележка под таблицата обяснява това на клиента. Ако фирмата ви работи с няколко валути, салдото се показва поотделно за всяка валута.
Непогасени позиции към избрана дата
Над датата пише „Непогасени позиции към избрана дата“, а до него има поле за дата и бутон Показване. При избор на дата в миналото справката показва какво все още не е било платено към този ден. Точно такава справка е необходима при приключване, одити и сверяване: „Какви задължения сме имали към този доставчик към 31.12.?“

Как се изчисляват сумите към избраната дата
За всяка позиция важи: Открито към отчетната дата = сума на фактурата минус всички плащания, които са били съгласувани до и включително отчетната дата. Една позиция попада в списъка, ако в отчетната дата вече е била осчетоводена и там все още е имала остатък. Фактура от 7 септември на стойност 1.250,50 €, частично платена на 20 октомври с 500,00 € и погасена с остатъка на 5 ноември, фигурира при отчетна дата 2 ноември в списъка със 750,50 €, а при отчетна дата 5 ноември вече изобщо не фигурира.

Просрочието също се определя към избраната дата: една позиция е просрочена, ако падежът ѝ е преди тази дата и остатъкът е положителен. Дните просрочие се броят до датата на справката, а не до днес. При дата в бъдещето се използва днешната дата; същото важи при празна или невалидна дата в адресната лента. Така справката не създава погрешно впечатление, че показва прогноза.
Какво означава „дата на плащането“ тук
Определяща е датата, към която фактурата и плащането са обвързани в Odoo (по-късната от двете дати на осчетоводяване), а не датата на фактурата. Обичайно плащането се осчетоводява в деня на получаването му и се отнася към фактурата. Ако плащанията се отнасят към фактурите едва след няколко дни, фактурата съответно се вижда като непогасена по-дълго. Разделът ограниченията разглежда това по-подробно.
Експортиране в PDF
Чрез Изтегляне на PDF модулът създава справката като PDF файл към избраната дата. Бутонът Печат отваря същата справка в диалоговия прозорец за печат на браузъра. PDF документът използва оформлението за документи на фирмата ви в Odoo (лого, адрес и долен колонтитул от настройките) и европейския формат на хартията:

- Заглавие с дата на справката: „Непогасени позиции към 02.11.2026 г.“, дори когато избраната дата е днешната. Ако няма непогасени позиции, се показва „Няма непогасени позиции.“
- Адрес на клиента в адресното поле на фирменото оформление, за да е списъкът уместен и когато е разпечатан.
- Просрочените позиции са с получер шрифт, за да се открояват и при черно-бял печат.
- Салдото и общата сума на просрочените позиции са в края на таблицата, а при няколко валути — поотделно за всяка валута.
- Име на файла с фирмата и датата, например
Open_items_Muster_Handels_GmbH_2026-11-02.pdf.
Платежна дисциплина: оценка с един поглед
От версия 19.0.1.1.0 над таблицата има кратък анализ на това колко навреме фирмата плаща фактурите си. Същият анализ се появява и в PDF. Така клиентът сам вижда къде се намира, а Вие не е нужно да му го обяснявате отделно.

- Зелено: „47 % са платени в рамките на срока за плащане.“ Имат се предвид фактури, платени на падежа или по-рано.
- Оранжево: „29 % са платени през седмицата след изтичане на срока за плащане.“ Това са плащания от един до седем дни след падежа.
- Червено: „24 % са платени по-късно, средно след 39 дни (25 дни след изтичане на срока за плащане).“ Първото число се брои от датата на фактурата, числото в скобите от падежа. Редът се появява само ако има такива фактури.
- „Фактурите са открити до 60 дни.“ Това е възрастта на най-старата фактура, която към отчетната дата още е открита, считано от датата на фактурата.
Отдолу е оценката на платежната дисциплина: добра или лоша, а в края на страницата, в PDF в края на страницата, е бележката „Клиенти с лоша платежна дисциплина се прехвърлят на предплащане.“ PDF показва същите редове в оформление с бланка:

Какво се брои
- Оценяват се фактурите към клиента, които са осчетоводени. Кредитните известия и чернови не се броят. При плащане на вноски всяка вноска се брои поотделно.
- Период: фактурите от последните дванадесет месеца и всички фактури, които още са открити, дори да са по-стари.
- Денят на плащане е датата на последното съгласуване с плащане, както при отчетната дата.
- Открити фактури: Ако една фактура е просрочена към отчетната дата, тя се брои така, сякаш е платена на отчетната дата, т.е. оранжева или червена. Открита фактура, която още не е с настъпил падеж, не се оценява.
- При отчетна дата в миналото важи състоянието към този ден: плащанията след отчетната дата още не се броят.
- Ако няма какво да се оценява, там пише „Няма фактури от последните 12 месеца за оценяване.“ и няма оценка.
Кога платежната дисциплина е „добра“?
Оценката е добра, ако поне 70 % от фактурите са зелени или оранжеви (навреме или най-много със седмица закъснение) и няма открита фактура, просрочена повече от 30 дни. Иначе е лоша. Праговете (7 дни, 70 %, 30 дни, 12 месеца) са константи в началото на models/res_partner.py и могат да се променят там.
Важно: модулът не прехвърля никого на предплащане. Бележката в долния колонтитул е фиксиран текст, който показва на клиентите с лоша оценка какво може да последва. Дали и кога ще вземете такова решение, остава Ваша работа. Ако изречението не Ви устройва, променете го в двата шаблона (страницата на портала и отчета) или в превода.
Кой какво може да вижда? Моделът за достъп
Непогасените позиции са чувствителни данни, затова контролът на достъпа беше по-важен за нас от всяка допълнителна функция. Моделът е умишлено опростен:

- Само при включена опция. Ако квадратчето при контакта не е отметнато, няма плочка, а отварянето на
/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 код. Ако работите с продукционна система, първо инсталирайте модула върху копие на базата данни. След това:
- отворете контакта, който трябва да вижда списъка (лице с достъп до портала),
- във формуляра поставете отметка в Показване на списъка на непогасените позиции в портала и запазете,
- влезте в портала като този потребител или проверете заедно с клиента: плочката, списъка, датата на справката и PDF файла.
Преди да предоставите достъп, проверете настройките за подателя и оформлението на фирмата си, тъй като PDF файлът използва логото, адреса и долния колонтитул от оформлението на документите. Самият модул не изпраща имейли и не създава известия.
Ограничения и бележки
- Текущото състояние на осчетоводените документи. Изчислението към избраната дата се основава на счетоводните записи в сегашния им вид в системата. Ако след тази дата фактура е била анулирана или върната в чернова, тя няма да се показва в списъка. Това не е неизменна моментна снимка „както е била отпечатана тогава“.
- Плащанията се отчитат от датата на изравняването. Ако плащане бъде отнесено към фактура дни след получаването му, дотогава фактурата се показва като непогасена в списъка. За точни справки към определена дата плащанията трябва да се разпределят своевременно. Odoo Community не включва съпоставяне на банкови операции с фактури; за тази цел използваме нашия модул Bank-Statement-Matcher.
- Платежната дисциплина е толкова добра, колкото е Вашето съгласуване. Брои се кога едно плащане е било разпределено към фактура. Плащания, които дълго не са били съгласувани, карат клиента да изглежда по-зле, отколкото е. Проверете оценката при Вашите клиенти, преди да правите изводи от нея.
- Оценката е видима за клиента. Който има опцията, вижда и резултата, и бележката за предплащането. Модулът не променя при това нищо в условията за плащане.
- Само вземания. Модулът показва какво ви дължи клиентът, а не вашите задължения към него.
- Без нива на напомняне и без връзка за плащане в списъка. Клиентът може да отвори фактура от списъка и да я плати там според обичайните възможности на портала ви.
- PDF и работа с няколко процеса. За да генерира PDF отчети, Odoo вътрешно прави заявка към собствения си уеб адрес. Ако системата ви работи само с един работен процес, това може да доведе до блокиране. Това важи за всички PDF отчети в портала, не само за този модул. След инсталирането проверете бутона за PDF в реални условия.
- Тестван само с Odoo 19.0 Community. Не сме го проверявали с други версии.
- Не заменя напомнянията за плащане и извлечението по сметка. Списъкът не заменя нито счетоводното извлечение по сметка, нито процедурите ви за напомняне за плащане, а само показва ясно текущото състояние.
Често задавани въпроси
Какво е списък с открити позиции (ОП списък)?
Списък на всички фактури, които все още не са платени или са платени частично, с дата на фактурата, падеж и непогасена сума. Нарича се още „неплатени фактури“, „клиентска сметка“ или „списък на салдата“, макар че в тесния смисъл списъкът на салдата обхваща салдата по всички сметки.
Защо порталът на Odoo не предлага по подразбиране списък на непогасените позиции?
Порталът показва поръчките, фактурите и плащанията поотделно, със статус и филтри. Доколкото установихме, общ списък за фирмата със салдо и справка към определена дата не са включени в 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). Всички имена, номера на документи и суми в илюстрациите са измислени.