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

Ситуация: Есть база данных, в которой ведётся учёт документов и расчётов с различными фирмами.
Работа ведётся с разными фирмами, поэтому оплата бывает и по счетам без счёт-фактур, и по счёт-фактурам без счетов.

Вопрос: как вести учёт счетов и счёт-фактур, что бы они были разными документами, но платёж вязался через счёт к счёт-фактуре и через счёт-фактуру к счёту автоматически.

Кажется несколько путано написал... но постараюсь сориентировать по вопросам.

Заранее спасибо !
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37425410
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть вариант сделать в одной таблице разделение по типу и связь внутри таблицы на додительский документ. Потом при выборке первичными будут считаться документы с пустым родителем, но затрудняюсь предсказать насколько это затруднит аналитические выборки в будущем
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37425440
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Вопрос: как вести учёт счетов и счёт-фактур, что бы они были разными документами, но платёж вязался через счёт к счёт-фактуре и через счёт-фактуру к счёту автоматически.
не ставьте их в соответствие, тк идея не ахти
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37425444
fowork,

попробуйте перевернуть:
есть платеж, в атрибутах которого указана ссылка на документ.
т.е. выборка будет не через клиент->счет-фактура->платеж,
а через клиент->платеж->ISNULL(счет-фактура, счет)
связка клиент->счет-фактура сохранится
у "платеж" видимо еще будет дочерняя "фактические транзакции оплат"
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37425561
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прилагаю схему фрагмента базы

сейчас в интерфейсе можно смотреть и счета (счёт-фактуры) по платежам и платежы по счетам (счёт-фактурам)
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37425599
fowork,

схема в которой захочется разбираться, как минимум, не имеет пересекающихся связей.
или эти пересечения минимизированы, сделаны аккуратненько, и никого не запутывают.
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37425757
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Схему делал на скорую руку и пересечения там, потомучто вязки делал от полей, а не от какого-нибудь края таблицы.
Догически в устройстве таблиц пересечений не нашёл (если я правильно это понимаю), максимум есть ссылка из bank_payment в RS, потомучто в платеже участвует 2 фирмы, плательщик и получатель.
Если сильно напрягает, но могу перерисовать, но только вечером
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37426545
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37427425
Elena Kuzmicheva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fowork, я не сильна в проблемной среде до конца, но опираясь на озвученую задачу делала бы для таблицы "Счетов" и "Счетов-фактур" общий ключ.
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37427689
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fowork,

разбейте задачу на подзадачи:
1. Имеет смысл объединение таблиц Счет и Счет-фактура в одну или это создаст больше проблем, чем решит? Но проблему организации связей это не решит в любом случае.
2. Что все-таки первично - счет или счет-фактура? Имхо все-таки счет (хотя я могу ошибаться), т.е. имеет смысл Счет-Фактуру привязывать к Счету, но сделать эту связь необязательной (NULLABLE). Либо можно создать отдельную таблицу связей между ними.
3. Если создана таблица связей Счет-Счет-фактура, то проблема, считайте, уже решена:в платеже ставите ссылку на запись в этой таблице и через нее вытаскиваете счета.
Если нет - тогда создаете в платеже 2 отдельных необязательных связи и накладываете условие проверки, что указаны связанные счета. Либо триггерами поддерживаете валидность этих полей.
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37427757
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а разве одна платежка не может оплачивать несколько счетов или счет не мб оплачен несколькими платежками?
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37427800
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут давеча в другом форуме так и не сумели убедить упертого ТС (другого) что в РЕАЛЬНОЙ жизни плановые платежи, счета и т.п. и фактические поступления на счет, платежки ВСЕГДА М:М.
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37428599
Elena Kuzmicheva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист-ЛюбительТут давеча в другом форуме так и не сумели убедить упертого ТС (другого) что в РЕАЛЬНОЙ жизни плановые платежи, счета и т.п. и фактические поступления на счет, платежки ВСЕГДА М:М.
подтверждаю, на моей практике доказано н-цать раз
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37428726
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to iljy:
очень рад последовательному подходу

1. этот вопрос возникает если воспользоваться вариантом, который я предложил вначале. Вообще пока я ближе к нему.
объединить имеет смысл только для уменьшения количества таблиц, других практических плюсов я не вижу, если подскажите буду благодарен (в сторону скорости выборок не смотрел).
Сейчас эта таблица (BILL) существует для отслеживания наличия документа и связывания фирм и оплат. Если организовать связь типа parent внутри таблицы, то на сейчас задача решится. Вопрос как оно может отразиться в будущем (если в ту же таблицу отправятся товарные накладные например)

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

Так же бывает, когда есть только счёт без счёт-фактуры, тогда учёт расходов надо вести по счёту.
Таким образом мне кажется, что нет смысла делать опорным один вид документа, т.к. операции, в которых опора идёт не на основной документ придётся отслеживать вручную. Думую лучше сделать гибкую привязку типа опорный/не опорный (флажок), а для того, чтобы не заводить отдельное поле можно совместить его с полем связи между счётом и счёт-фактурой при реализации связи внутри одной таблицы (типа parent) (документ который не ссылается на другой является опорным)

3. Мне кажется, что может быть ситуация когда для одной счёт-фактуры будет несколько счетов (аванс + остатки), так и для одного счёта может быть несколько счёт-фактур (забираем товар несколькими партиями). В такой если будет отдельная таблица для связи счетов и счёт-фактур, на которую будут ссылаться платежи, то нужно будет делать отдельную таблицу для вязки платёж-документ. Мне кажется что из них потом будет не очень удобно выбирать данные для аналитики (большие запросы с многими таблицами)
Поправьте меня пожалуйста, если я ошибаюсь, или есть вариант при котором такой способ будет работать замечательно, а предложенный мной упадёт.

Создавать в платеже больше одной связи с опорным документом считаю не дальновидным. Если потом добавлять другие типы документов, то их нужно будет на прямую вводить во всех платежах (а в моём случае только сделать ссылку на основной опорный документ) и будет расти количество полей в платеже (+ товарная накладная и может что ещё)

Большое Вам спасибо!
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37428760
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да и потом когда приходов\расходов и платежей по ним много нет особого восторга и желания у пользователей дробить платежку на части и указывать что из 50 р 5 сюда 15 сюда 20 предоплата, а оставшиеся 10 переплата и надо сделать возврат, те в мелких расчетах не важно по большому счету за что мы\нам должны 5 р и в рамках годового договора с частыми не крупными поставками\расчетами тоже, - акт сверки и общее сальдо есть и норм, при желании увидеть в отчете по деб\кред задолженности для рук всеже за что можно привязываться к датам по принципу первое пришло первое оплачено, но вот когда договор на поставку 'мелкоштучной' но дорогой продукции или целевые\текущие авансы под конкретные объекты то тут да нужна связка точнее детализация расчетов в рамках договора - орг\дог
как я глянул бухгалтерам вообще не важно что за что им общее сальдо по орг нужно, точнее так хотят вести учет - с минимальными телодвижениями, но если ГД за опу возьмет и спросит, тогда чтобы им все было видно в программе под разными углами\детализациями\группировками
вот меня тоже от недостатка опыта и знаний терзают смутные сомнения как тут быть и как сделать )
я больше склоняюсь к идее указывать при 'приход\расход', оплаты в рамках какого договора происходит движение и возможность перекидки\взаимозачетов между договорами
хотя в принципе это тоже самое как и у автора ток я не понял ваших связей\определений документов - договор, счет-договор, счет, счет-фактура
зы пойти на обед что-ли? )))
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37428800
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fowork,

1. Про уменьшение количества таблиц ничего больше добавить не могу - информации мало. Только, учитывая, что связь счет-счет-фактура фактически N-N (вроде как вы с этим согласились), ссылку на "опорный документ" использовать все равно не удастся, нужна таблица связей.
2. А вы уверены, что одна платежка не может в таком разе закрывать несколько счетов-фактур/счетов? Может тут тоже таблицу связей придется использовать?
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37428819
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fowork,
> Создавать в платеже больше одной связи с опорным документом считаю не дальновидным. Если потом добавлять другие типы документов, то их нужно будет на прямую вводить во всех платежах (а в моём случае только сделать ссылку на основной опорный документ) и будет расти количество полей в платеже (+ товарная накладная и может что ещё)

количество полей и должно расти главное чтобы они росли вниз, а не вправо, для этого и для развития дальнозоркости
можно сделать
documet (id, id_paret, doc_type, number, data, ...)
и потом сколько нужно таблиц\связок_таблиц для разных документов
да и платежка ведь должна иметь вить по идее
тбл_шапка (id, ...)
табличная_часть (id, id_шапка, вот сюда и можно пристроить id_document)
тогда при росте кол документов все норм будет, наверное )))
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37428911
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас подготовлю наглядную схемку и уточню правильно ли я Вас понимаю и заодно поясню, что сам имелл в виду
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37429451
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как я представляю связь внутри таблицы счетов (BILL) и вязки к ним платежей (bank_payment)
Сразу оговорюсь, что при оплате одним платежом нескольких счетов-фактур сейчас делаются несколько записей в платежах (bank_payment) с параметрами этого платежа (номер, дата, получатель ... ), но разными суммами и опорными документами.
Тоесть платёжка разбивается на проводки по опорным документам и чтобы получить данные по платёжке целиком, а не по платежу по счёту нужно выбрать конкретную платёжку (номер документа, или другие уникальные данные)
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37429454
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как мне кажется, предлагает сделать iljy
Поправьте меня если я ошибаюсь
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37429529
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fowork,

эммм.... ну вообще про номенклатуру речи не было. А раз уж она появилась - зачем вы пытаетесь запихать ее в таблицы счетов???? И потом, вы так и не ответили - платеж собствено к чему привязан? Допустим если у вас 2 счета сч1 и сч2, два счета-фактуры сф1 (закрывающий половину сч1 и половину сч2) и сф2 (закрывающий вторую половину сч1 и сч2), и один платеж на общую сумму- как вы это будете хранить?
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37429662
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
то iljy

>как оно может отразиться в будущем (если в ту же таблицу отправятся товарные накладные например) (мой пост в 12:11, конец п.1)

> один платеж на общую сумму- как вы это будете хранить?

в таком случае в платежах (bank_payment) будет 2 записи: 1 ссылается на счёт-фактуру1 и 2 ссылается на счёт-фактуру2, но обе записи имеют данные одной платёжки (номер, дату, отправитель, получатель и т.д.)

> Допустим если у вас 2 счета сч1 и сч2, два счета-фактуры сф1 (закрывающий половину сч1 и половину сч2) и сф2 (закрывающий > вторую половину сч1 и сч2)

Честно говоря затрудняюсь предствить, как это можно корректно хранить...
Попытался представить случай, когда такое может быть: нам выставили счёт на аванс 30%,потом мы забираем товар 50%, потом счёт на доплату 70%, и мы забираем оставшийся товар 50% ... гм, но тогда будет 2 платежа, каждый на свой счёт. Учёт товара пойдёт по счетам. А отслеживать расходы приобретённых материало придётся по другим прзнакам (договор или объект)

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

>как оно может отразиться в будущем (если в ту же таблицу отправятся товарные накладные например) (мой пост в 12:11, конец п.1)

> один платеж на общую сумму- как вы это будете хранить?

в таком случае в платежах (bank_payment) будет 2 записи: 1 ссылается на счёт-фактуру1 и 2 ссылается на счёт-фактуру2, но обе записи имеют данные одной платёжки (номер, дату, отправитель, получатель и т.д.)
А если платежей тоже 2, и первый гасит часть суммы из сф1, а второй - остаток сф1 и всю сумму сф2?
Не делайте так. Вы повеситесь, а потом ваше бренное дело закоптят на медленном огне и распнут на дверях в назидание преемникам. Сделайте еще одну таблицу связей, или вообще откажитесь от привязки платежей к счетам и анализируйте сальдо на дату.

fowork
> Допустим если у вас 2 счета сч1 и сч2, два счета-фактуры сф1 (закрывающий половину сч1 и половину сч2) и сф2 (закрывающий > вторую половину сч1 и сч2)

Честно говоря затрудняюсь предствить, как это можно корректно хранить...
Попытался представить случай, когда такое может быть: нам выставили счёт на аванс 30%,потом мы забираем товар 50%, потом счёт на доплату 70%, и мы забираем оставшийся товар 50% ... гм, но тогда будет 2 платежа, каждый на свой счёт.
Вот вам пример: в разное время выставлялись 2 независымых счета, затем по этим счетам одним платежем быть выплачен аванс 30%, затем логист поехал и забрал то, что было в наличии, получив сф1, через неделю курьер привез остаток и сф2, после чего был платеж оставшихся 70%. Может такое быть? Если может - тогда отказывайтесь от привязки платежей к счетам, привызывайте их к контрагентам, а счета и счета-фактуры связывайте через номенклатуру. Если нет - тогда сформулируйте требования и ограничения предметной области, иначе итераций будет очень много.
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37429800
fowork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iljyА если платежей тоже 2, и первый гасит часть суммы из сф1, а второй - остаток сф1 и всю сумму сф2?
Допустим счёт-фактура на 20 000 р., а счёт-фактура 2 на 30 000 р.

В таком случае в платежах (bank_payment) будет 3 записи:
№ платёжкиДатасуммаопорный документ101.01.201110 000 р.счёт-фактура 1205.02.201110 000 р.счёт-фактура 1205.02.201130 000 р.счёт-фактура 2

iljyВот вам пример: в разное время выставлялись 2 независымых счета, затем по этим счетам одним платежем быть выплачен аванс 30%, затем логист поехал и забрал то, что было в наличии, получив сф1, через неделю курьер привез остаток и сф2, после чего был платеж оставшихся 70%.
В таком случае:
№ платёжкиДатасуммаопорный документ101.01.201130% от счёт 1 счёт 1101.01.201130% от счёт 2 счёт 2207.01.201170% от счёт 1 счёт 1207.01.201170% от счёт 2 счёт2

А таблица счетов будет выглядеть следующим образом:
№ документа дата тип документа основной документ101.01.2011 счёт 201.01.2011 счёт 107.01.2011 счёт-фактура счёт 1207.01.2011 счёт-фактура счёт 2
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #37429816
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fowork,

1. bank_payment в таком виде не удовлетворяет 3НФ. Насколько это серьезно для вас - решайте сами.
2. Ссылочную целостность можно будет контроллировать только триггерами.
3. Подумайте над тем, какие выборки вам придется делать из таблиц и насколько это будет удобно.
4. У вас еще где-то должна быть номенклатура - как вы ее планируете вписать в эту схему?
...
Рейтинг: 0 / 0
Как связать счета и счёт-фактруы
    #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
40 сообщений из 40, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как связать счета и счёт-фактруы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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