powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как связать счета и счёт-фактруы
15 сообщений из 40, страница 2 из 2
Как связать счета и счёт-фактруы
    #37429867
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to iljy

1. Не был с этим знаком с теоретической стороны. Теперь обязательно ознакомлюсь, спасибо вам огромное! :)
2. Не очень понимаю, что значит "ссылочная целостность" в данном контексте. Поясните пожалуйста, если не сложно.
Указывать ссылки на опорный документ и основной документ (в bill) планировал при заведении новых записей.
3. Пока в планах реализовать в интерфейсе привязку нескольких счетов (bill) к одной записи в платежах (bank_payment), для неё как раз и нужно будет вынести отдельную таблицу вязки платёж-счёт (bank_payment_link), как вы и говорили. Но т.к. проект развивается при непосредственной эксплуатации, то не могу внести изменения в базу без поддержки в интерфейсе.
Но пока оставлю вязку счетов и счёт-фактур в нутри одной таблицы (bill), может при дальнейшем развитии возникнет смысл вынести связи между ними в отдельную таблицу, но пока мне это кажется не "рентабельным"
4.Номенклатура есть. Она вяжется через отдельную таблицу ссылок. Считаю это обоснованным, т.к. на одн счёт может быть несколько счетов фактур с разной номенклатурой. Хотя сейчас размышляю над тем, как это можно преобразовать, чтобы избегать повторных записей при совпадении номенклатуры для разных документов по одной сделке.

Как я понял пока есть 2 позиции: вязка счетов и счёт-фактур внутри одной таблицы (моя) и вязка их через внешнюю таблицу (iljy)
Если у кого есть ещё мысли, прошу высказываться.
Пока буду развивать это хозяйство в обозначенном мной направлении...

Всем огромное спасибо за участие!
Особая благодарность iljy! Спасибо!
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37429895
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
foworkto iljy

1. Не был с этим знаком с теоретической стороны. Теперь обязательно ознакомлюсь, спасибо вам огромное! :)

Не за что Нормальные формы знать надо обязательно, хотя бы до 3й.

fowork2. Не очень понимаю, что значит "ссылочная целостность" в данном контексте. Поясните пожалуйста, если не сложно.
Указывать ссылки на опорный документ и основной документ (в bill) планировал при заведении новых записей.

Ссылочная целостность - это корректность связей между объектами. У вас в таком виде ВК не гарантирует, что связываются не 2 счета, а именно счет и счет-фактура. Нужны будут дополнительные телодвижения, типа CHECK CONSTRAINT или триггеров. Можно конечно положиться полностью на клиента, но это выстрел себе в ногу. Ошибка в работе программы, которая обнаружиться к моменту сдачи годового отчета - и вы будете полбазы перелопачивать ручками.
fowork3. Пока в планах реализовать в интерфейсе привязку нескольких счетов (bill) к одной записи в платежах (bank_payment), для неё как раз и нужно будет вынести отдельную таблицу вязки платёж-счёт (bank_payment_link), как вы и говорили. Но т.к. проект развивается при непосредственной эксплуатации, то не могу внести изменения в базу без поддержки в интерфейсе.
Но пока оставлю вязку счетов и счёт-фактур в нутри одной таблицы (bill), может при дальнейшем развитии возникнет смысл вынести связи между ними в отдельную таблицу, но пока мне это кажется не "рентабельным"
Вам виднее. Но выборки у вас в таком виде усложняются. Напишите например запрос, который вытащит все платежки с номерами счетов и счетов фактур, которые есть. Я не говорю, что его нельзя написать, нет, но он будет явно сложнее, чем просто соединение 3х или 4х таблиц. Придумайте еще несколько наиболее актуальных запросов и попробуйте их написать.

fowork4.Номенклатура есть. Она вяжется через отдельную таблицу ссылок. Считаю это обоснованным, т.к. на одн счёт может быть несколько счетов фактур с разной номенклатурой. Хотя сейчас размышляю над тем, как это можно преобразовать, чтобы избегать повторных записей при совпадении номенклатуры для разных документов по одной сделке.

Я думаю у вас очень быстро возникнет, например, такая задача: проверить, вся ли номенклатура по счету получена. Или полностью ли счет оплачен (учитывая, что часть платежей может быть привязана к счетам, а часть - к счетам фактурам). И кстати:
foworkiljyВот вам пример: в разное время выставлялись 2 независымых счета, затем по этим счетам одним платежем быть выплачен аванс 30%, затем логист поехал и забрал то, что было в наличии (а в наличии могли быть позиции из разных счетов!), получив сф1, через неделю курьер привез остаток и сф2, после чего был платеж оставшихся 70%.
.....
А таблица счетов будет выглядеть следующим образом:
№ документа дата тип документа основной документ101.01.2011 счёт 201.01.2011 счёт 107.01.2011 счёт-фактура счёт 1207.01.2011 счёт-фактура счёт 2
Почему так? По сф1 была получена часть товара, выписанная в счете1, и часть , выписанная в счете2. По сф2 - остаток по обоим счетам. На основании чего вы привязали сф1 к счету1?
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37429926
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iljyПочему так? По сф1 была получена часть товара, выписанная в счете1, и часть, выписанная в счете2. По сф2 - остаток по обоим счетам. На основании чего вы привязали сф1 к счету1?

Привязал так, потомучто при платеже как подтверждающий сумму документ (для бухгалтерии) был счёт, следовательно для платежа он является опорным документом.
А вот что с счёт-фактурами делать? Мда... Боюсь, что если часть товара из 2 счетов была при получении вписана в одну счёт-фактуру и накладную (хотя в бухгалтерской накладной указывается счёт, на основании которого она оформлена), то это могло быть сделано только в рамках одного договора, по которому и будет производиться взаиморасчёт.

А как будет выглядеть вязка для этого случая при внешней таблице ссылок?
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37429941
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iljyНапишите например запрос, который вытащит все платежки с номерами счетов и счетов фактур, которые есть.

select bp.c_number, b.c_number, b.i_type, iif(b.id_parent is NULL, 1,0) ib_main_doc
from bank_payment bp
left join bill b on b.id=bp.id_bill


Извините, пишу без проверки...
Вроде должен выдать типа такого:
№ платежа номер документа основания тип док основания основной опорный документ11СЧ111СФ022СФ122СЧ031СЧ132СФ0
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37429943
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to iljy

Если не очень затруднит, напишите пожалуйста пример запроса для аналогичной ситуации для вашей конструкции базы
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37429974
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fowork,

не-а, не выдаст он так - с какого перепугу одно соединение по внешнему ключу даст вам 2 строки для каждой платежки? У вас должно быть что-то типа
Код: plaintext
1.
2.
3.
4.
select bp.c_number, b.c_number, b.i_type, iif(b.id_parent is NULL,  1 , 0 ) ib_main_doc
from bank_payment bp
       left join bill b_b on b_b.id=bp.id_bill
       left join bill b on b.id in (bp.id_bill, b_b.id_parent)
При наличии таблицы связей bill_contract(idLink, id_bill, id_contract) будет похоже
Код: plaintext
1.
2.
3.
4.
select bp.c_number, b.c_number, b.i_type, iif(b.id_parent is NULL,  1 , 0 ) ib_main_doc
from bank_payment bp
       left join bill_contract b_b on b_b.idLink=bp.idLink
       left join bill b on b.id in (b_b.id_contract, b_b.id_bill)
А если попробовать горизонтальную выдачу, типа
НомерПлатежки ДатаПлатежки НомерСчета ДатаСчета НомерСчетаФактуры ДатаСчетыФактуры
,тогда в вашем варианте будет как-то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select bp.c_number, bp.c_date,
               iif(b1.i_type = 'СЧ', b1.c_number, b2.c_number),
               iif(b1.i_type = 'СЧ', b1.c_date, b2.c_date),
               iif(b1.i_type = 'СФ', b1.c_number, b2.c_number),
               iif(b1.i_type = 'СФ', b1.c_date, b2.c_date),
from bank_payment bp
       left join bill b1 on b1.id = bp.id_bill
       left join bill b2 on b2.id = b1.id_parent
а в моем - так:
Код: plaintext
1.
2.
3.
4.
5.
select bp.c_number, bp.c_date, b1.c_number, b1.c_date, b2.c_date, b2.c_number
from bank_payment bp
       left join bill_contract b_b on b_b.idLink=bp.idLink
       left join bill b1 on b1.id = b_b.id_contract
       left join bill b2 on b2.id = b_b.id_bill
В приципе близко по сложности. Но в вашем варианте практически нет контроля целостности, о чем я уже писал: ваша база допускает связь счет-счет, либо счет-счет-фактура-счет и т.д.
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37430204
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, прошу прощения, вчера уже в полубессознательном состоянии писла.

Запрос должен быть такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select bp.c_number, b.c_name, b.i_type, iif(b.id_bill is NULL,  1 , 0 ) ib_main_doc
from bank_payment bp 
left join bill b on b.id=bp.id_bill and b.id_bill is NULL
union
select bp.c_number, b.c_name, b.i_type, iif(b.id_bill is NULL,  1 , 0 ) ib_main_doc
from bank_payment bp
left join bill b on b.id_bill=bp.id_bill

Этот уже проверял :)
Может можно ещё оптимизировать...
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37430210
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iljy
Код: plaintext
1.
2.
3.
select bp.c_number, b.c_number, b.i_type, iif(b.id_parent is NULL,  1 , 0 ) ib_main_doc
from bank_payment bp
       left join bill b_b on b_b.id=bp.id_bill
       left join bill b on b.id in (bp.id_bill, b_b.id_parent)


Вроде Ваш вариант оптимальней, чем мой через union :)
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37430543
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ещё и так

Код: plaintext
1.
2.
select bp.c_number, b.c_number, b.i_type, iif(b.id_parent is NULL,  1 , 0 ) ib_main_doc
from bank_payment bp
       left join bill b on b.id_parent=bp.id_bill or b.id=bp.id_bill
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37430572
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
foworkМожно ещё и так

Код: plaintext
1.
2.
select bp.c_number, b.c_number, b.i_type, iif(b.id_parent is NULL,  1 , 0 ) ib_main_doc
from bank_payment bp
       left join bill b on b.id_parent=bp.id_bill or b.id=bp.id_bill

Можно, но ваш запрос подразумевает, что платежка всегда привязана к опорному документу, а схема базы этого никак не гарантирует.
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37430606
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая идея и была. Если нужно выбрать ещё и неоплаченные счета, то запрос конечтно будет другой
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37431037
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
foworkТакая идея и была. Если нужно выбрать ещё и неоплаченные счета, то запрос конечтно будет другой
Я не про то. Если на момент оплаты были оба счета, то схема базы вам не гарантирует, что платеж будет привязан к опорному документу (а опорным у вас может быть любой). Схема базы вам вообще мало что гарантирует, вот в чем проблема. А про проверки на клиенте я вам уже писал.
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37431229
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В связи с этим у меня появляется ещё один вопрос, не знаю на сколько он к этой теме, но в контексте обсуждения думую можно затронуть...
Глобально он звучит так: Как определить, какую часть нагрузки возложить на интерфейс, а какую на структуру бызы, так чтобы база не потеряла гибкости, а интерфейс небыл перегружен проверками.

А локально могу сказать: Сейчас проверка вязки платежа к опорному документу осуществляется интерфейсом. Тоесть если есть основной опорный документ (id_parent is NULL), то пользователю в выпадающем списке показывается он, а если нет, то в выпадающем списке показываются все документы.
Определение основного документа возложенно на пользователя при внесении записей в счета (bill)
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37431469
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
foworkВ связи с этим у меня появляется ещё один вопрос, не знаю на сколько он к этой теме, но в контексте обсуждения думую можно затронуть...
Глобально он звучит так: Как определить, какую часть нагрузки возложить на интерфейс, а какую на структуру бызы, так чтобы база не потеряла гибкости, а интерфейс небыл перегружен проверками.

А локально могу сказать: Сейчас проверка вязки платежа к опорному документу осуществляется интерфейсом. Тоесть если есть основной опорный документ (id_parent is NULL), то пользователю в выпадающем списке показывается он, а если нет, то в выпадающем списке показываются все документы.
Определение основного документа возложенно на пользователя при внесении записей в счета (bill)
Тут базовое направление очень простое - чем больше проверок целостности задекларировано в базе - тем лучше. Во-первых - это инкапсуляция, иначе будете где-то что-то дополнять в интерфейсе, забудете проверить - и опаньки. Во-вторых - это может помочь оптимизатору с генерацией планов. В третьих - это обезопасит базу от некорректного изменения мимо вашего клиента (да-да, это тоже может оказаться проблемой, в том числе вы сами можете править данные запросами напрямую и что-то упустить). Это так, навскидку.
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37431476
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iljyТут базовое направление очень простое - чем больше проверок целостности задекларировано в
базе - тем лучше.

Я бы даже сказал больше: всё, что можно ограничить в базе, надо ограничить в базе. Всё,
что можно ограничить в приложении - надо ограничивать в приложении. Даже если эти проверки
будут дублироваться.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
15 сообщений из 40, страница 2 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как связать счета и счёт-фактруы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]