Разработка алгоритмов
Автор Administrator   
15.03.2009 г.

             5.2.3. Разработка алгоритмов и технологии решения задачи
3.2.3.1. Словесное описание алгоритма.
При поступлении документов, содержащих сведения о поставках, произ-водится ввод этих сведений в базу данных, где они хранятся вплоть до по-ступления в архив. При этом проверяется соответствие данных по ассорти-менту, количеству и цене указанных в счетах-фактурах и товарно-транспортных накладных данным, содержащимся в договоре. Оплата поста-вок производится при формировании платежного поручения требования (ППТр).
Выделим следующие состояния заказов:
1. Из всех документов по заказу имеется только договор (а также счет-фактура, если заказ по предоплате). Товарно-транспортная наклад-ная отсутствует – груз еще не поступил, оплата не произведена – ППТр не сформировано.
2. Заказ без предоплаты. Имеется договор и товарно-транспортная на-кладная (ТТН), те есть, груз доставлен, поставщик свои обязатель-ства выполнил. Товар не оплачен.
3. Полностью выполненный заказ – товар получен и оплачен. Имеются соответствующие ТТН и ППТр.
4. Заказ по полной предоплате. Имеется договор, получен счет-фактура, сформировано платежное поручение требования на оплату. Товар еще не поступил.
5. То же самое, но товар получен, имеется ТТН. Полностью выполнен-ный договор.
6. Состав документов тот же, но заказ был произведен по частичной предоплате, то есть, имеется всего одно ППТр на ту долю оплаты, которая указана в договоре. Имеется ТТН.
7. Полностью оплаченный заказ по частичной предоплате. Одному до-говору может соответствовать более одного ППТр.

Сроки выполнения пунктов договора контролируются при помощи даты составления договора, планируемой даты поставки (по договору), крайнего срока оплаты (по договору), фактической даты поставки (по ТТН) и фактиче-ской даты оплаты (по ППТр). В зависимости от этого договор может полу-чать атрибут «просрочен».
3.2.3.2. Схемы реализации задачи в базе данных
O ТЕХНОЛОГИЧЕСКАЯ СХЕМА ВВОДА ИНФОРМАЦИИ И РЕШЕНИЯ ЗАДАЧИ.
Для решения этой задачи необходимо осуществить ввод и накопление оперативно-учетной информации. Это производится при помощи докумен-тов: договор, счет-фактура, товарно-транспортная накладная и платежное по-ручение требования. Справочная информация о товарно-материальных цен-ностях и поставщиках должна быть ранее загружена в базу данных. Техноло-гическая схема показана на Схеме 10 Приложения 1.
O БЛОК-СХЕМА РЕШЕНИЯ

Задача контроля состояния договоров и платежных документов должна предоставлять пользователю в структурированном и обработанном виде ту информацию, которая необходима ему для анализа существующего положе-ния. Поэтому разобьем эту задачу на 11 подзадач:
1. вывод договоров, заключенных по предоплате (А1)
2. вывод договоров, заключенных без предоплаты (А2)
3. вывод исполненных договоров (А3)
4. вывод договоров, просроченных по доставке (А4)
5. вывод договоров, просроченных по оплате (А5)
6. вывод договоров с несоответствиями в ассортименте, количестве и цене ТМЦ, указанных в документах (А6)
7. вывод договоров, по которым еще не прошла поставка и не завершена оплата (А7)
8. вывод договоров, товар по которым отгружен, но оплата не произво-дилась либо завершена не полностью (А8)
9. вывод договоров, товар по которым оплачен, но не отгружен (А9)
10. вывод всех договоров (А10)
11. вывод договора с заданным номером (А11)
Необходимо отобрать те договора, по которым имеются товарно-транспортные накладные (ТТН). Условиям отбора удовлетворяют те догово-ра,  для которых нет платежного поручения требования (ППТр) или имеется разность между суммой к оплате из ТТН и суммой оплаты из всех ППТр. Эти данные расположены в таблице ТТN. Данная подзадача может быть разбита на несколько этапов-модулей.
Модуль А8.1. Здесь производится выбор из таблицы TTN тех записей, которым не удовлетворяет ни одна из записей таблицы PTR.
Полученная таблица Tab 1 имеет следующие поля: CD (из TTN), CTTN (из TTN).

Модуль А8.2. Посчитаем суммы оплат по каждому договору, каждому наименованию таблицы TTN. Получим таблицу Tab 2 со следующей струк-турой:
CD (TTN)
CTMZ (STTN)
SUMTTN = KOLTTN (STTN)*CENTTN (STTN)

Модуль А8.3. Посчитаем итоговые суммы оплат в накладных по каждо-му договору.
Полученная таблица Tab 3 имеет следующую структуру:
CD (Tab 2)
SUMTTNI = Summa (SUMTTN (Tab 2))

Модуль А8.4. Для тех договоров, к которым есть ТТН, аналогично по-считаем суммы оплат по каждому изделию, но уже по ППТр.
Полученная таблица Tab 4 будет иметь следующую структуру:
CD (TTN)
CPTR (SPTR)
CTMZ (SPTR)
SUMPTR = KOLPTR (SPTR)*CENPTR (SPTR)

Модуль А8.5. Сгруппируем полученные результаты по CPTR и получим таблицу Tab 5 со следующей структурой:
CPTR (SPTR)
CD (PTR)
SUMPTRS = Summa (SUMPTR (Tab 4))

Модуль А8.6. Если ППТр было сформировано по счету-фактуре, то
  SUMPTRI = SUMPTRS (Tab 5) * PREDOPL (DOG)/100
  Если по ТТН, то
  SUMPTRI = SUMTTNI - SUMPTRS (Tab 5) * PREDOPL (DOG)/100
Получим таблицу Tab 6, которая показывает, сколько было оплачено по каждому ППТр. Структура:
CPTR (Tab 5)
CD (Tab 5)
SUMPTRI

Модуль А8.7. Однако, у нас одному договору может соответствовать не только одно ППТр. Поэтому необходимо суммировать значения SUMPTRI, сгруппировав таблицу Tab 6 по договорам.
Полученная таблица Tab 7 имеет следующие поля: CD (Tab 6) и SUMPTRII. Эта сумма показывает фактическую оплату по данному договору.

Модуль А8.8. Используем теперь данные таблиц Tab 3 и Tab 7. Выбира-ем те записи, где SUMPTRII меньше SUMTTNI.
Таb 8 – это таблица со списком договоров, по которым имеется частич-ная оплата.

Модуль А8.9. В этом модуле происходит объединение записей таблиц Tab 1 и Tab 8.
Структура таблицы Tab 9:
СD (CD(Tab1) + CD(Tab8))
DOLG = SUMTTNI (Tab 3) или SUMTTNI (Tab3) – SUMPTRII (Tab8)