Анализ и создание программного обеспечения электронного документооборота

Анализ организации и управления сбытом. Разработка и реализация автоматизированного рабочего места менеджера по сбыту, позволяющего контролировать наличие товара на складе, формировать и оформлять необходимые документы, быстро искать нужную информацию.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 01.10.2015
Размер файла 2,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

Введение

1. Техническое задание

1.1 Основание для разработки

1.2 Требования к программе

1.3 Требования к системе

2. Описание программы

2.1 Общие сведения

2.2 Типы данных и модели данных

2.3 Ограничения целостности

2.4 Операции

2.5 Основные процедуры используемые в программе

3. Руководство пользователя

3.1 Информационная модель и ее описание

3.2 Состав пакета программы

3.3 Выполнение программы

Заключение

Список использованной литературы

Введение

Исходя из современных требований, предъявляемых к качеству работы финансового звена предприятия, нельзя не отметить, что эффективная работа его всецело зависит от уровня оснащения информационными средствами на базе компьютерных систем автоматизированного учета основных фондов.

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

Разумеется, для раскрытия всех потенциальных возможностей, которые несет в себе использование баз данных, необходимо применять в работе комплекс программных и аппаратных средств максимально соответствующий поставленным задачам. Поэтому в настоящее время велика потребность предприятий в компьютерных программах, поддерживающих и согласующих работу управленческого и финансового звеньев предприятия, а также в информации о способах оптимального использования имеющегося у компании компьютерного оборудования.

Актуальность разработки заключается в следующем - рабочее место является первичным звеном производственного процесса в создании материальных ценностей. Систему организации рабочего места с полным правом считают показателем организованности всего предприятия, так как она характеризует качество и слаженность работы всех служб предприятия.

Исходя из всего вышесказанного целью работы является создание АРМ менеджера по продажам в магазине «Элита» с использование новых технических и программных средств сбора, обработки и передачи информации на основе предварительного анализа информационно-экономической среды и особенностей работы менеджера по продажам.

Для достижения этой цели решены следующие задачи:

- проанализирована организация и управление сбытом;

- разработано и реализовано автоматизированное рабочее место менеджера по сбыту, позволяющее решить следующие задачи:

- система контроля наличия товара на складе;

- формирование и оформление необходимых документов;

- сокращение документооборота в бумажной форме;

- устранение повторного ввода информации;

-сокращение поиска необходимой информации и времени, затрачиваемого на формирование отчетов.

Объектом исследования и проектирования в данной работе является создание проекта автоматизированных информационных систем.

Предметом исследования и проектирования в данной работе является исследование функций менеджера.

Методами исследования в данной работе являются: общий экономический анализ деятельности предприятия, маркетинговый анализ конкурентной среды, структурно-функциональный анализ деятельности предприятия, моделирование бизнес процессов по методологии IDEFO, метод проектирования инфологической модели, методы классификации и кодирования информационных объектов, методы выбора СУБД, алгоритмы расчётов решения предметных задач, создание структурной схемы использования комплекса программ, экономический анализ результатов экономической эффективности проектов по критериям оценки эффективности ИТ - затрат.

При проектировании АРМ менеджера используется СУБД FoxRpo и язык программирования (классический язык запросов) SOL, интерфейс «оконный».

В качестве методологической базы автор работы использует методологическую литературу по менеджменту, экономике, маркетингу, экономическому анализу, по информационным системам, технологиям, информатике, имитационному моделированию, проектированию информационных систем, которая указана в списке использованных источников.

Дипломная работа состоит из введения, двух разделов, заключения и списка используемой литературы.

автоматизированный рабочий место менеджер

1. Техническое задание

1.1 Основание для разработки

Основанием для разработки данного дипломного проекта явился заказ магазина «Элита». В настоящее время все больше предприятий и организаций, как частного, так и государственного типа автоматизируют работу бухгалтерии с помощью персонального компьютера, который может хранить и обрабатывать большие объемы информации.

Предприятие, которое является моим заказчиком, имеет в своем арсенале такую технику, а также стандартный пакет программ, Microsoft Office, 1C-бухгалтерия, но не имеет, к сожалению, комплексной программы учета продукции, сырья и денежных средств, а так же складского учета с формированием соответствующей документации и отчетов. Должности программиста на этом предприятии нет, поэтому создавать какие-либо программные продукты именно под их требования некому.

1C-бухгалтерия имеет стандартный набор для бухгалтерского учета, но не имеет возможностей расчета количества сырья по заданной калькуляции.

Еще одна причина, по которой заказ был сделан именно мне, это не имение столь больших средств на заказ и приобретение необходимого специфического программного продукта у фирм, занимающихся программированием.

Для того чтоб раскрыть тему дипломного проекта наиболее подробно, были рассмотрены теоретические основы организации рабочих мест на предприятии.

Рабочее место является частью производственно-технологической структуры предприятия. Рационализация рабочего места обусловлена необходимостью обеспечения работоспособности и производительности труда, использования его творческого потенциала.

Как сказано в Трудовом Кодексе Республики Казахстан, что рабочее место - место постоянного или временного нахождения работника при выполнении им трудовых обязанностей в процессе трудовой деятельности [1].

Рабочее место - это часть производственного пространства или зона трудовых действий, оснащенная необходимыми средствами труда, на котором выполняется порученная функция (задание, работа) исполнителем или группой исполнителей.

Рабочее место -- часть производственного пространства цеха или отдела, оснащенная средствами труда для выполнения элементов производственного процесса одним или группой сотрудников [2, с. 134]

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

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

Организация рабочего места заключается в его соответствующем оснащении и планировании, исходя из особенностей труда, и содержит три общих элемента: оснащение, планировку, обслуживание.

Под оснащением рабочего места понимается обеспечение его всеми необходимыми средствами, при помощи которых можно создать работнику условия для эффективного выполнения установленного производственного задания.

Оснащение зависит от специализации рабочего места. На универсальном рабочем месте имеется широкий перечень оснастки, на специализированном - менее широкий перечень оснастки, на специальном - узкий.

Средства оснащения рабочих мест могут быть постоянными, то есть всегда находящимися на рабочем месте, и временными, используемыми лишь для выполнения отдельных видов работ. [3, с. 229]

Выделяют следующие виды оснащения рабочего места:

Основное технологическое оборудование: станки, агрегаты, автоматические линии;

Вспомогательное оборудование: стенды, средства транспортировки, подъемники;

Технологическая оснастка: приспособления, инструмент, техническая документация;

Организационная оснастка: средства для размещения и хранения инструмента и приспособлений, производственная тара, производственная мебель, средства для размещения документации, средства сигнализации и связи, освещения, средства по уходу за оборудованием, средства техники безопасности, предметы производственного интерьера.

Для управленческого персонала определены такие виды средств управленческого труда:

средства составления, обработки и оформления документов;

средства хранения и группировки документов;

средства выполнения вычислительных операций;

средства обеспечения оперативной связи;

специальная служебная мебель.

В Республике Казахстан разработаны и утверждены санитарные правила и нормы, в которых излагается ряд эргономических и санитарно-гигиенических требований к оснащению рабочих мест и методические рекомендации.

Планировка - рациональное размещение рабочих мест на пpoизводственной площади и целесообразное пространственное размещение в горизонтальной и вертикальной плоскости в пределах рабочего места всех элементов оснащения, необходимых для выполнения производственного задания.

Основные задачи планировки рабочих мест (всех ее видов) следующие:

создать удобные и безопасные условия труда;

наиболее эффективно использовать производственные площади;

улучшить использование рабочего времени исполнителей за счет устранения излишних движений, хождений и т.п. [3, с. 234]

Различают внешнюю и внутреннюю планировку рабочего места.

Внешняя планировка рабочего места заключается в установлении его местоположения по отношению к смежным рабочим местам в подразделении, к рабочему месту руководителя (бригадира, мастера, начальника отдела и т.д.), к проходам, переходам, проездам, подъездам. Проектирование внешней планировки целесообразно проводить сразу для всех рабочих мест, входящих в подразделение. В качестве исходных данных для такой планировки служит производственная площадь, отведенная для расположения персонала подразделения. [4, с. 116]

Задачи внешнего планирования:

экономное использование производственных площадей;

рациональная взаимосвязь между рабочими местами;

сокращение расстояний переходов и транспортировки;

изоляция рабочих мест с вредными условиями труда;

обеспечение безопасности труда.

Внутренняя планировка рабочего места означает размещение на его площади всех предметов оснащения, их рациональную компоновку по отношению друг к другу и к работнику. При внутренней планировке решаются следующие задачи:

обеспечение наименьших затрат рабочего времени на выполнение работ, которые закреплены за рабочим местом;

минимизация физиологических усилий и нервно-психической напряженности работника;

удобство выполнения работы и обслуживания оборудования;

хороший обзор в активной рабочей зоне всех частей оборудования, приборов, механизмов;

оптимизация маршрутов передвижения работника по рабочему месту;

рационализация рабочей позы (рабочего положения) работника;

создание благоприятных условий труда;

безопасность труда. [4, с. 117-118]

Обслуживание - это составная часть производственного процесса, направленная на обеспечение бесперебойного и эффективного функционирования рабочего места.

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

Объектами обслуживания являются все элементы рабочего места:

средства труда;

предметы труда;

субъекты труда (работники). [3, с. 237]

1.2 Требования к программе

При заказе программного обеспечения бухгалтер магазина «Элита» выдвинула следующие требования:

разработка простого и удобного пользовательского интерфейса связанного с легкостью и удобством обработки, редактирования и хранения данных для пользователя мало знакомого с оргтехникой и программным обеспечением;

возможность учета полного движения продукции, начиная с конкретного заказа организациями и до момента поступления ее в продажу;

возможность полного учета сырья, как входящего в состав создаваемой продукции, так и отдельно реализуемого согласно разработанной и внедренной извне базы данных калькуляции;

возможность складского учета продукции и сырья;

возможность хранения и модификации данных по заказу продукции сторонними организациями;

возможность ведения учета денежных средств проходимых через кассу предприятия;

возможность учета фактических и теоретических остатков в цехах;

вывод отчетной документации согласно установленным стандартам предприятия.

Использование ЭВМ при реализации данного проекта даст возможность решить ряд очень существенных задач:

- Изменения в функциях подразделения, связанных с входной и выходной информацией, формированием и выдачей информации. А также связанных с оформлением различного рода документов.

- Источниками поступления информации являются: автоматизированное рабочее место бухгалтера, начальника производства, внешние источники электронного и бумажного типов. Периодичность поступления информации не зависит напрямую от пользователя, т.к. происходит в режиме on-line.

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

- В краткой характеристике результатов можно описать основные: формирование и оформление предварительного заказа, договора поставки товара, счета-фактуры, товарной накладной, прайс-листа, реестра свободных цен, графика закупки упаковки. Все эти документы выдаются в печатном виде. Также реестр свободных цен, список товарных накладных, счетов-фактур, электронной документации на продукцию отображают визуальную информацию, которая помогает принимать те или иные решения при продаже того или иного товара.

- Периодичность решения задачи зависит от ее типа. Задачи формирования некоторых документов происходит автоматически.

Так как в магазине «Элита» отсутствует единая база данных, содержащая все необходимые данные для менеджера отдела сбыта, это приводит к значительным временным затратам на поиск необходимой информации.

Так же значительную долю времени занимает заполнение бланков необходимых документов в текстовом редакторе MS Word.

В магазине «Элита» сначала разрабатывается технология изготовления конкретного изделия и подбираются все необходимые материалы. После этого, экономистом рассчитывается:

- себестоимость изделия с учетом сумм материальных затрат,

- стоимости сырья и расходных материалов,

- сумм заработной платы,

- затрат на электроэнергию,

- амортизацию оборудования.

На основании расчета себестоимости всех изделий формируется реестр цен: базовой, оптовой, розничной. И эти цены указываются при оформлении тех или иных документов. Также фигурируют сведения о клиентах.

Поэтому объединение необходимых данных в единую базу данных, а также возможность создания и печати необходимых документов и отчетов на основе этих данных существенно сократит временные ресурсы менеджеров отдела сбыта [5].

Технологический процесс выглядит следующим образом Рисунок 1.

Рисунок 1. Схема технологического процесса

1.3 Требования к системе

Техническое обеспечение представляет комплекс технических средств, предназначенных для обработки данных в информационных системах. В состав комплекса входят ЭВМ, осуществляющие:

- обработку экономической информации,

- средства подготовки данных на машинных носителях,

- средства сбора и регистрации информации,

- средства передачи данных по каналам связи,

- средства накопления и хранения данных и выдачи результатной информации,

- вспомогательное оборудование и организационная техника.

На стадии проектирования автоматизированного рабочего места необходимо четко формировать требования к параметрам технических средств обработки и выдачи информации, набору комплектующих модулей, сетевым интерфейсам, эргономическим параметрам устройств. Это обуславливается тем, что возможности разрабатываемого автоматизированного рабочего места в большей степени зависят от базовых характеристик ЭВМ[6]. К требованиям, предъявляемым к пользовательскому интерфейсу системы, предназначенной для решения комплекса задач, можно отнести:

- необходимость обеспечения работы неподготовленного пользователя, а также его работы в большом объеме информации,

- необходимость интенсивного ввода данных.

Техническое обеспечение автоматического рабочего места должно гарантировать надежность технических средств, организацию удобных для пользователя режимов работы, способность оперативно обрабатывать данные. Т.к. автоматическое рабочее место является индивидуальным пользовательским средством, оно должно обеспечивать высокие эргономические свойства и комфортность обслуживания.

Требования по техническому обеспечению отображены в Таблице 1.

Таблица 1 - Требования по техническому обеспечению

Наименование

Минимальные требования

Рекомендуемые требования

Процессор

Pentium III - 900

Pentium IV

Оперативная память

512 Mb

2048 Mb

Флоппи дисковод

3.5 "

3.5 "

Жесткий диск

120 Gb

500 Gb

Модем

56 Kb

ADLS

Сетевая карта

100 Mb

1 Gb

Монитор

Разрешение 800х600

Разрешение 1024х768

Принтер

Струйный

Лазерный

Персональный компьютер, с достаточным объемом оперативной памяти, наличие дисковых накопителей HDD и FDD для хранения БД, документов и их архивных копий, сетевую плату или модем для доступа к Internet, монитор, принтер для печати.

При составлении заказа руководствовались требованиями к системе исходя из собственных возможностей, т.е. возможностями компьютеров находящихся в наличии на данном предприятии:

возможность работы программы на IBM PC - совместимом компьютере;

возможность работы программного пакета в операционных системах Windows 2000 и Windows 7;

разработка программы сравнительно небольшого объема, что было обосновано небольшим объемом жестких дисков, входящих в состав комплектации компьютеров имеющихся в наличии предприятия;

возможность распечатки отчетов и другой необходимой специфичной документации.

2. Описание программы

2.1 Общие сведения

Разработка данной дипломной работы была начата с определения целей и задач. Основным направлением на начальном этапе явилось определение среды разработки программного обеспечения. После глубокого анализа все предпочтения были отданы системе управления базами данных СУБД Visual FoxPro 7.0.

Visual FoxPro состоит из отдельных компонентов, которые используются для хранения информации, ее отображения и редактирования. В Visual FoxPro вся информация хранится в базе данных, которая состоит из таблиц, отношений между таблицами, индексов, триггеров и хранимых процедур. Каждая таблица имеет уникальное имя и хранится в отдельном файле, наименование которого совпадает с именем таблицы. Созданный файл имеет расширение DBF [8].

Каждая создаваемая таблица может иметь связанные с ней индексы, используемые для упорядочения данных и быстрого поиска необходимых записей, причем каждая таблица может иметь несколько индексов. Для хранения значений полей типа Memo и General применяются отдельные файлы. Memo-поля таблиц содержат текстовую информацию, а поля типа General используются, как правило, для хранения двоичной информации и данных других приложений, работающих в среде Windows. В Visual FoxPro реализованы триггеры, которые позволяют централизованно обрабатывать события, возникающие при любых изменениях в базе данных. Можно также создавать хранимые процедуры, которые являются частью базы данных и могут использоваться при описании таблиц, для проверки введенных данных, определения значения по умолчанию и т. п.

Чрезвычайно удобным и полезным средством доступа к базе данных являются представления данных. Представления данных позволяют объединять данные таблиц и отображать их в более удобном виде. Мы можем выбрать только интересующие нас поля таблиц, объединить несколько полей в одно поле, вычислить итоговые значения и задать новые имена полей таблицы. Как правило, количество представлений в базе данных намного превосходит количество таблиц. По мере эксплуатации базы данных их количество непрерывно растет. Во многих информационных системах доступ к данным, включая просмотр, добавление и редактирование, осуществляется только с помощью представлений данных. Данный подход позволяет осуществить гибкое управление доступом к информации. При использовании представлений для выборки данных в формах, отчетах, при создании запросов и в программах применяются те же правила, что и для таблиц. Редактирование данных, включенных в представление, возможно только при определенных условиях. Например, в том случае, если оно создано на основе только одной таблицы.

Для отображения и редактирования данных используются формы, отчеты, запросы и программы. При создании форм, отчетов и запросов применяются конструкторы. Поэтому эти компоненты часто называют конструкторскими объектами. Формы и отчеты являются составными объектами, т. к. они состоят из более мелких объектов (таких как поля, кнопки, диаграммы, рамки, OLE - компоненты и т. п.), которые называются объектами интерфейса [9].

Формы используются для просмотра или ввода данных в таблицы. Данные можно вводить непосредственно в таблицы, но использование формы является более быстрым и более эффективным способом ввода. Форма содержит некоторые или все поля таблиц, в которые вводится информация. Для создания форм можно использовать мастер создания форм или конструктор форм. Мастер форм содержит целый ряд шаблонов, которые определяют соотношение между помещаемыми в форму таблицами, вид отображения данных и порядок размещения полей. Для создания сложных форм применяется конструктор форм.

Отчеты используются для просмотра и вывода на печать содержащейся в базе данных информации. Примерами отчетов являются прайс-лист товаров, список покупателей, оборотная складская ведомость. Как правило, отчеты создаются в том случае, если информацию необходимо передавать кому-либо в печатном виде. Для создания отчетов в Visual FoxPro, как и для форм, используются мастер и конструктор отчетов. С помощью мастера отчетов можно быстро создать собственный отчет на основе имеющихся шаблонов. Применение конструктора отчетов позволяет создавать отчеты произвольной сложности, включая многоуровневую группировку данных и размещение вычисляемых полей.

Запросы являются средством выборки данных из одной или нескольких таблиц. В Visual FoxPro для создания запроса может быть использован как конструктор запросов, так и специализированный язык Structured Query Language (SQL). Результаты выполнения запроса могут отображаться в форме, выводиться в виде отчетов и диаграмм или сохраняться в указанной таблице.

Программы, написанные на языке Visual FoxPro, являются объектно-ориентированными. С помощью них обрабатывают события в форме, создают объекты, осуществляют различные вычисления, управляют базой данных. Для удобства работы можно объединить программы в библиотеки.

Для создания форм в Visual FoxPro можно использовать не только базовые классы, но и создавать собственные. Например, можно определить класс форм, в котором задан определенный цвет фона и стандартный набор кнопок для управления данными. Чтобы стандартизировать разработку, полезно иметь один или несколько пользовательских классов для каждого базового класса. Классы, созданные в Visual FoxPro, хранятся в библиотеках классов.

Для объединения компонентов создаваемого приложения используется проект, в который включаются все перечисленные выше компоненты. Использование проекта упрощает разработку приложения и его сопровождение.

В Visual FoxPro имеется возможность сохранять параметры основного окна Visual FoxPro, настройки таблиц, параметры диалоговых окон и панели инструментов с помощью файла параметров настройки.

Каждый компонент хранится в отдельном файле, причем имена файлов, содержащих основные компоненты, задаются самостоятельно, а наименования файлов, содержащих объекты, связанные с таблицей, совпадают с именем таблицы. В зависимости от типа содержащегося в нем объекта Visual FoxPro автоматически присваивает каждому файлу расширение, которое помогает в идентификации объекта. Список расширений файлов приведена в таблице 2.

Таблица 2 - Расширения имен файлов объектов Visual FoxPro

Наименование объекта

Расширения

Проект

PRJ, FPC, CAT, PJX, PJT

База данных

DBC

Таблица Visual FoxPro

DBF

Составной индексный файл

CDX

Memo-поле и поле типа General

FRT

Форма

SCT, SCX

Запрос

QPR

Отчет

FRM, FRX

Почтовая наклейка

LBL, LBX

Меню

MNT, MNX

Библиотека класса

VCX

Программа, библиотека программ, текст меню, текст запроса

PRG, FXP, MPR, QPR

Рисунок

BMP, JPG, GIF, ICO, DIB, CUR, ANI

Звукозапись

WAV

2.2 Типы данных и модели данных

Центральным понятием языка программирования является понятие типа данных. Введение этого понятия в программирование обусловлено восприятие человеком действительности. Человек привык классифицировать объекты, объединять в одну группу объекты со сходными признаками и применять к ним одни и те же способы обработки [10].

“Тип данных определяет множество значений посредством множества операций”.

Тип данных - это определение объектов, их инвариантных свойств (ограничений) и операций, допустимых над ними.

В языках программирования выделяют три категории типов данных: стандартные, структурные и абстрактные (произвольные, определяемые пользователем). Понятие типов данных, развиваемое в языках программирования, непосредственно используется в моделировании данных.

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

Модель данных можно охарактеризовать как совокупность категорий типов данных. Типы данных, соответствующие этим категориям, используются для представления атрибутов, типов сущностей и связей реального мира. Категория определяется посредством других, базовых для нее категорий типов данных.

Однако, между этими областями (языками программирования и моделями данных) существует ряд различий. В языках программирования акцент ставится на средствах спецификации алгоритмов, а не на данных. В этом основное отличие их от моделей данных. В моделировании данных проектирование структур данных не обусловлено точным знанием алгоритмов, которые будут применяться. Принцип независимости данных предполагает возможность их использования многими программами. Необходима гибкая связь между программами, оперирующими данными, и описанием данных.

Модели данных и языки программирования различаются и по мощности контроля типов, который в моделях данных значительны сильней. Так как модели данных должны обеспечивать совместное использование данных, необходима поддержка множественности "взглядов" программ на одни и те же данные.

Кроме того, в моделировании данных акцент делается на определении таких категорий типов данных, которые могли бы использоваться во многих ситуациях общего характера.

Концепция типов данных полезна в моделировании данных с точки зрения получения абстракций и установления соотношений и связей между данными [11].

Основным компонентом системы базы данных, как показывает ее архитектура, является модель данных (концептуальная модель). Множество структур данных, поддерживаемых в концептуальной модели, определяет набор операций в языке манипулирования данными. Значит, основной вопрос: какую форму должны иметь модель данных и связанный с ней язык данных. Системы баз данных классифицируются в соответствии с выбранной моделью данных.

Широкое распространение получили три типа моделей данных: иерархические модели, сетевая модель данных РГБД КОДАСИЛ и реляционные модели данных. Эти типы образуют некоторое "базовое" множество. Каждый из типов определяет соответствующую систему управления базами данных (СУБД).

Кроме того, с этими моделями принято сравнивать большинство других моделей данных. В иерархических моделях и сетевой модели данных РГБД КОДАСИЛ прослеживается связь с файловыми системами. Реляционная модель данных основывается на теоретических результатах в большей степени, чем на практическом опыте.

Реляционная модель данных базируется на отношениях и их представлении таблицами. Реляционная модель данных впервые была предложена Коддом. Единственным средством структуризации данных в реляционной модели является отношение. Отношения обладают всеми свойствами множеств. Важнейшее свойство языков данных реляционной модели - возможность определять новые отношения, основываясь на существующих отношениях и используя реляционную алгебру или реляционное исчисление.

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

Иерархическая модель данных представляется упорядоченным деревом. Дерево называется упорядоченным, если относительный порядок поддеревьев значим, т.е. важно относительное расположение вершин. Кроме того, дуги, соответствующие функциональным связям, всегда направлены от корня к листьям дерева. Такая структурная диаграмма называется иерархическим деревом определения данных [12].

2.3 Ограничения целостности

Отношение отображают таблицей, каждая строка которой подставляет кортеж, количество столбцов таблицы равно степени отнoшeния, а число строк - его мощности. Из того факта, что отношение есть множество, следует, что никакие два кортежа не совпадают и что упорядоченность кортежей несущественна. Это ограничение приводит к понятию ключа отношения.

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

Каждое отношение имеет, по крайней мере, один ключ (состоящий из всех атрибутов). Это следует из того, что дублирование строк не допускается. Отношение может иметь и несколько ключей, называемых возможными ключами. Для того чтобы исключить тривиальные ключи, необходимо, чтобы ключ обладал следующими двумя свойствами:

1) однозначность идентификации (значение ключа однозначно идентифицирует кортеж отношения);

2) неизбыточность (никакое подмножество атрибутов ключа не обладает свойством С1).

Один из возможных ключей выбирается в качестве первичного ключа отношения. Первичный ключ не разрешается обновлять. Кроме того, первичный ключ не может принимать значения "не опредeлeнo".

Второе свойство множеств, присущее отношениям, состоит в том, что порядок строк в таблице несущественен [13].

Большинство конкретных реляционных моделей данных предусматривает средства спецификации явных ограничений целостности, накладываемых на отношения. Например, для атрибута можно задать домен сравнимости, применяемый для указания осмысленности сравнения значений.

2.4 Операции

Одним из важных моментов определения операций является обеспечение достаточной простоты их усвоения пользователем. Важнейшее свойство языков данных реляционной модели - возможность определять новые отношения, базируясь на существующих отношениях и используя реляционную алгебру, или реляционное исчисление, или отображение [14].

Реляционные языки данных могут быть разделены на три класса. К первому классу относятся языки, базирующиеся на реляционном исчислении (язык QUEL в СУБД INGRESS и язык ALPHA). Эти языки предусматривают использование кванторов. Второй класс составляют дисплей-ориентированные языки. Применяя их, можно сформулировать запрос путем указания соответствующих элементов отображения, выведенного на экран дисплея, или наполнения пустых граф (язык Query by Example - QBE). К третьему классу принадлежат языки, ориентированные на отображения. Таким языком является SQL (Structured Query Language), ранее известный как SEQUEL. Язык SQL поддерживается многими реляционными системами, а также и системой FOXPRO. Языки реляционной алгебры используются теоретически, но не реализованы ни в одной реляционной системе.

2.5 Основные процедуры используемые в программе

Перевод сырья

Ниже приведен фрагмент программного кода события «Click» кнопки «Передать». Практически вся процедура реализована SQL

* Подтверждение передачи сырья

IF MESSAGEBOX("Вы действительно хотите передать " + ;

ALLTRIM(ThisForm.List1.Value) + " из " + ThisForm.Combo1.Value+" в "+ ;

ThisForm.Combo2.Value + " ?", 4+32+256, "Передача сырья") = 6

* списываем передаваемое сырье в расход источника

INSERT INTO (table1)(дата, сырье, кол_во, принял);

VALUES (ThisForm.Text1.Value, ALLTRIM(ThisForm.List1.Value), ;

ThisForm.Text2.Value, "Перевод")

* списываем передаваемое сырье в приход приемника

INSERT INTO (table2)(дата, сырье, кол_во, принял) ;

VALUES (ThisForm.Text1.Value, ALLTRIM(ThisForm.List1.Value), ;

ThisForm.Text2.Value, "Перевод")

MESSAGEBOX("Передача завершена",64, "Передача сырья", 1)

ENDIF

Свод сырья по цеху

При реализации фильтров используются SQL запросы и динамические фильтры. Ниже приведен фрагмент исходного кода загружаемого при инициализации (событие Init) формы «Пекарня»:

ThisForm.Label18.Caption = mes_svod

ThisForm.Label19.Caption = 'рабочий период: ' + DTOC(date1)+' - '+DTOC(date2)

* формирование промежуточного хранилища остатка на начало

* нулевые значения указывать обязательно, так как они используются в

* последующих подзапросах

* подзапрос формирования промежуточного хранилища остатка на начало

SELECT a.сырье, sum(a.кол_во) as Остаток_на_начало,

000000000000.0000 as приход, 000000000000.0000 as расход,

000000000000.0000 as остаток_на_конец ;

FROM &TableName1 a WHERE &filter1 GROUP BY a.сырье ;

UNION ;

* подзапрос формирования прихода

SELECT a.сырье, -sum(a.кол_во) as Остаток_на_начало,

000000000000.0000 as приход, 000000000000.0000 as расход,

000000000000.0000 as остаток_на_конец ;

FROM &TableName2 a WHERE &filter1 GROUP BY a.сырье ;

UNION ;

* подзапрос формирования остатка на начало

SELECT a.сырье, sum(a.кол_во) as Остаток_на_начало,

000000000000.0000 as приход, 000000000000.0000 as расход,

000000000000.0000 as остаток_на_конец ;

FROM &TableName1 a WHERE &filter2 GROUP BY a.сырье ;

UNION ;

SELECT a.сырье, -sum(a.кол_во) as Остаток_на_начало,

000000000000.0000 as приход, 000000000000.0000 as расход,

000000000000.0000 as остаток_на_конец ;

FROM &TableName2 a WHERE &filter2 GROUP BY a.сырье INTO CURSOR query1

Таким образом было сформировано промежуточное хранилище формирования остатка на начало. Далее приводится пример использования промежуточного хранилища при формировании запроса остатка на начало с использованием динамических фильтров, что, несомненно, усложняет синтаксис выборки, но облегчает и ускоряет процесс вывода результата.

SELECT a.сырье, sum(a.Остаток_на_начало) as Остаток_на_начало,

000000000000.0000 as приход, 000000000000.0000 as расход,

000000000000.0000 as остаток_на_конец ;

FROM query1 a GROUP BY a.сырье ;&& остаток на начало

UNION ;

SELECT a.сырье, 000000000000.0000, sum(a.кол_во) as приход,

000000000000.0000 as расход, 000000000000.0000 as остаток_на_конец;

FROM &TableName1 a WHERE &filter3_1 GROUP BY a.сырье ;&& приход

UNION ;

SELECT a.сырье, 000000000000.0000, sum(a.кол_во) as приход,

000000000000.0000 as расход, 000000000000.0000 as остаток_на_конец;

FROM &TableName1 a WHERE &filter4_1 GROUP BY a.сырье ;&& приход

UNION ;

SELECT a.сырье, 000000000000.0000, 000000000000.0000 as приход,

sum(a.кол_во) as расход, 000000000000.0000 as остаток_на_конец ;

FROM &TableName2 a WHERE &filter3_2 GROUP BY a.сырье ;&& расход

UNION ;

SELECT a.сырье, 000000000000.0000, 000000000000.0000 as приход,

sum(a.кол_во) as расход, 000000000000.0000 as остаток_на_конец ;

FROM &TableName2 a WHERE &filter4_2 GROUP BY a.сырье

INTO CURSOR query1&& расход

Итак в промежуточном хранилище набора данных остатка на начало сформированы приходная и расходная части выборки. Далее формируется набор данных остатка на конец.

* остаток_на_конец

SELECT a.сырье, sum(a.Остаток_на_начало) as Остаток_на_начало,

sum(a.приход) as приход, sum(a.расход) as расход,

sum(a.Остаток_на_начало)+sum(a.приход)-sum(a.расход) as остаток_на_конец;

FROM query1 a GROUP BY a.сырье INTO CURSOR свод

ThisForm.Pageframe1.свод.Grid1.RecordSource = [свод]

ThisForm.Pageframe1.свод.Init

Как видно из программного кода максимальная оптимизация достигается за счет выражения UNION в SQL запросах. Данное выражение позволяет объединить несколько запросов в один, чем достигается максимальная скорость обработки данных.

Расчет остатков

Ниже приводится фрагмент программного кода расчета остатков в форме расположенного в событии «init» формы.

* Подготовка таблиц для остатка

SELECT table2&& сырья

SET FILTER TO

SCAN

replace table2.количество WITH 0

ENDSCAN

SELECT продукция&& продукции

SET FILTER TO

SCAN

replace продукция.кол_во WITH 0

ENDSCAN

* расчет остатка сырья

SELECT table2

SCAN

kol_pr = 0

kol_ras = 0

* приход сырья

SET FILTER TO sklad.title = ALLTRIM(table2.сырье) IN sklad

GO TOP IN sklad

DO WHILE !EOF('sklad') && Просматривается вся таблица

kol_pr = kol_pr + sklad.quantity

SKIP IN sklad

ENDDO

* расход сырья

SET FILTER TO sklad_р.title = ALLT(table2.сырье) IN sklad_р

GO TOP IN sklad_р

DO WHILE !EOF('sklad_р')

kol_ras = kol_ras + sklad_р.quantity

SKIP IN sklad_р

ENDDO

* остаток сырья

Replace table2.количество WITH kol_pr - kol_ras

ENDSCAN

SET FILTER TO table2.количество <> 0

GO TOP

* РАСЧЕТ ОСТАТКА ПРОДУКЦИИ

SELECT продукция

SCAN

kol_pr = 0

kol_ras = 0

* приход продукции

SET FILTER TO sklad.title = продукция.продукция IN sklad

GO TOP IN sklad

DO WHILE !EOF('sklad') && Просматривается вся таблица

kol_pr = kol_pr + sklad.quantity

SKIP IN sklad

ENDDO

* расход продукции

SET FILTER TO sklad_р.title = продукция.продукция IN sklad_р

GO TOP IN sklad_р

DO WHILE !EOF('sklad_р') && Просматривается вся таблица

kol_ras = kol_ras + sklad_р.quantity

SKIP IN sklad_р

ENDDO

* остаток продукции

Replace продукция.кол_во WITH kol_pr - kol_ras

ENDSCAN

GO TOP

SET FILTER TO продукция.кол_во <> 0

ThisForm.Refresh

Списание сырья со склада в цех

Ниже приведена процедура разноски по цехам магазина.

DO CASE

CASE ALLTRIM(ThisForm.Combo2.Value)='Пекарня'

INSERT INTO pek_pr_сырье (дата, день, сырье, кол_во, ед_изм, принял);

VALUES (sklad_р.дата, sklad_р.день, sklad_р.title,

sklad_р.quantity, sklad_р.edenizm, sklad_р.принял)

CASE ALLTRIM(ThisForm.Combo2.Value)='Полуфабрикаты'

INSERT INTO пол_пр_сырье(дата, день, сырье, кол_во, ед_изм, принял);

VALUES (sklad_р.дата, sklad_р.день, sklad_р.title,

sklad_р.quantity, sklad_р.edenizm, sklad_р.принял)

CASE ALLTRIM(ThisForm.Combo2.Value)='Кондитерские изд. (торты)'

INSERT INTO kon_tort_pr_сырье(дата, день, сырье, кол_во, ед_изм,принял);

VALUES (sklad_р.дата, sklad_р.день, sklad_р.title,

sklad_р.quantity, sklad_р.edenizm, sklad_р.принял)

CASE ALLTRIM(ThisForm.Combo2.Value)='Кондитерские изд. (штучно)'

INSERT INTO kon_шт_pr_сырье(дата, день, сырье, кол_во, ед_изм, принял);

VALUES (sklad_р.дата, sklad_р.день, sklad_р.title,

sklad_р.quantity, sklad_р.edenizm, sklad_р.принял)

ENDCASE

Формирование фильтров

Ниже приведена процедура формирования фильтров в форме изготовленной продукции. В данной процедуре используются динамические фильтры встраиваемые в SQL-запрос. Данная связка максимально увеличивает скорость обработки записей, тем более что их в базах очень много. В результате действие этой процедуры практически незаметно для пользователя.

LPARAMETERS CallObject, ObjectCount

DO CASE

*** Combo1, Combo2, Optiongroup1

CASE CallObject = 'Combo1' OR CallObject = 'Combo2'

report_title = UPPER(ThisForm.Combo1.Value) + IIF(!EMPTY(ThisForm.Combo2.Value)," ("+ALLTRIM(ThisForm.Combo2.Value)+")", "")

ThisForm.Label18.Caption = [ИЗГОТОВЛЕННАЯ ПРОДУКЦИЯ ( ] + ThisForm.Combo1.Value + [ ] + ALLTRIM(ThisForm.Combo2.Value) + [ )]

filter1 = 'BETWEEN(a.дата, date1, date2) and цех = ThisForm.Combo1.Value and принял = ThisForm.Combo2.Value' + ;

IIF(ThisForm.Optiongroup1.Value#0, IIF(ThisForm.Optiongroup1.Value=1,' and день=.T.',' and день=.F.'), '')

* IIF(ThisForm.Optiongroup1.Value#0,' and ' + IIF(ThisForm.Optiongroup1.Value=1,'a.день = .T.','a.день = .F.'), '')

SELECT * FROM изготовлено a WHERE a.дата = date1 AND a.день = .F. and &filter1 ;

UNION ALL ;

SELECT * FROM изготовлено a WHERE a.дата >= date1+1 AND a.дата <= date2-1 and &filter1 ;

UNION ALL ;

SELECT * FROM изготовлено a WHERE a.дата = date2 AND a.день = .T. and &filter1 INTO CURSOR заказ_query1

SELECT заказ_query1

ThisForm.Grid1.RecordSource = [SELECT продукция, sum(кол_во) as Количество, ед_изм, цех, принял ;

FROM заказ_query1 GROUP BY продукция, принял INTO CURSOR заказ_query]

*** Optiongroup1, Combo1

CASE CallObject = 'Optiongroup1'

mDay = IIF(ThisForm.Optiongroup1.Value=1,'день','ночь')

ThisForm.Label19.Caption = mDay

filter1 = 'BETWEEN(a.дата, date1, date2) and ' + IIF(ThisForm.Optiongroup1.Value=1,'день = .T.','день = .F.') + ;

' and цех = ThisForm.Combo1.Value and принял = ThisForm.Combo2.Value'

SELECT * FROM изготовлено a WHERE a.дата = date1 AND a.день = .F. and &filter1 ;

UNION ALL ;

SELECT * FROM изготовлено a WHERE a.дата >= date1+1 AND a.дата <= date2-1 and &filter1 ;

UNION ALL ;

SELECT * FROM изготовлено a WHERE a.дата = date2 AND a.день = .T. and &filter1 INTO CURSOR заказ_query1

SELECT заказ_query1

ThisForm.Grid1.RecordSource = [SELECT продукция, sum(кол_во) as Количество, ед_изм, цех, принял ;

FROM заказ_query1 GROUP BY продукция, принял INTO CURSOR заказ_query]

*** Период, Optiongroup1, Combo1

CASE CallObject = 'Command5'

report_title = UPPER(ALLTRIM(ThisForm.Combo1.Value))

ThisForm.Label18.Caption = [ИЗГОТОВЛЕННАЯ ПРОДУКЦИЯ] + IIF(!EMPTY(ThisForm.Combo1.Value),' ( '+ThisForm.Combo1.Value+' )','')

*filter1 = IIF(ThisForm.Optiongroup1.Value#0, IIF(ThisForm.Optiongroup1.Value=1,'a.день=.T.','a.день=.F.'), '') +;

* 'a.цех = ThisForm.Combo1.Value'

filter1 = IIF(ThisForm.Optiongroup1.Value#0, IIF(ThisForm.Optiongroup1.Value=1,'a.день=.T.','a.день=.F.'), '') +;

IIF(!EMPTY(ThisForm.Combo1.Value),'and a.цех = ThisForm.Combo1.Value','')

SELECT * FROM изготовлено a WHERE a.дата = date1 AND a.день = .F. and &filter1 ;

UNION ALL ;

SELECT * FROM изготовлено a WHERE a.дата >= date1+1 AND a.дата <= date2-1 and &filter1 ;

UNION ALL ;

SELECT * FROM изготовлено a WHERE a.дата = date2 AND a.день = .T. and &filter1 INTO CURSOR заказ_query1

SELECT заказ_query1

ThisForm.Grid1.RecordSource = [SELECT продукция, sum(кол_во) as Количество, ед_изм, цех, принял ;

FROM заказ_query1 GROUP BY продукция, принял INTO CURSOR заказ_query]

ENDCASE

*!*ThisForm.Grid1.RecordSource = [SELECT продукция, sum(кол_во) as Количество, ед_изм, цех, принял ;

*!*FROM изготовлено a WHERE &filter1 GROUP BY продукция, принял INTO CURSOR заказ_query]

GO TOP IN заказ_query

ThisForm.Refresh

ThisForm.Grid1.SetFocus

Ниже приведена процедура используемая в наряд-заказе.

mTime = TIME()

* Если не забыли указать сотрудника принявшего заказ и выбрана смена (ДЕНЬ-НОЧЬ)

IF !EMPTY(ThisForm.Combo3.Value) AND ThisForm.Optiongroup1.Value # 0

* Продукция в приход на пекарню

INSERT INTO изготовлено(дата,день,время,цех,продукция,кол_во,ед_изм,принял);

VALUES

(date1,IIF(ThisForm.Optiongroup1.Value=1,.T.,.F.),mTime,AliasName,ALLTRIM(продукция.продукция),ThisForm.Text1.Value,;

IIF(SEEK(ALLTRIM(продукция.продукция),'продукция','продукция'),продукция.ед_изм,''), сотрудники.fio)

* Продукция в приход на склад

INSERT INTO sklad(дата,time,пост,title,edenizm,quantity,edenizm,прод);

VALUES (date1,mTime,AliasName,&TableName2..продукция,&TableName2..ед_изм,&TableName2..кол_во,;

IIF(SEEK(ALLTRIM(&TableName2..продукция),'продукция','продукция'),продукция.ед_изм,''), .T.)

* Разноска на приход в пекарню

SELECT svod1

SCAN

INSERT INTO &TableName4(дата,день,время,продукция,id,сырье,кол_во,ед_изм,принял);

VALUES (date1,IIF(ThisForm.Optiongroup1.Value=1,.T.,.F.),mTime,продукция.продукция,svod1.N,svod1.сырье,svod1.количество,;

IIF(SEEK(ALLTRIM(svod1.сырье),'table2','сырье'),table2.ед_изм,''),;

сотрудники.fio)

ENDSCAN

This.Enabled = .F.

ThisForm.Text1.Enabled = .F.

ELSE

MESSAGEBOX([Не указан сотрудник принявший заказ или смена],0+64,[Внимание!])

* Блокировка кнопок

This.Enabled = .T.

ThisForm.Text1.Enabled = .T.

ENDIF

GO TOP

ThisForm.Optiongroup1.InteractiveChange

ThisForm.Refresh

ThisForm.Combo4.SetFocus

Процедура формирования карточки наряд-заказа.

SELECT a.цех, a.продукция, a.кол_во, a.Ед_изм, b.сырье, b.кол_во, b.ед_изм FROM изготовлено a, pek_ras_сырье b WHERE a.дата = date1 AND b.дата = date1 AND a.цех = ALLTRIM(ThisForm.Combo1.Value) INTO CURSOR наряд_заказ_печ READWRITE

SELECT наряд_заказ_печ

INDEX ON продукция TAG продукция

INDEX ON сырье TAG сырье

DELETE ALL

** Сырье с разбивкой на цеха

SELECT &TableName4

SET ORDER TO сырье

SET FILTER TO дата = date1

SCAN

IF SEEK(ALLTRIM(&TableName4..сырье),'наряд_заказ_печ','сырье')

REPLACE наряд_заказ_печ.кол_во_b WITH наряд_заказ_печ.кол_во_b + &TableName4..кол_во

ELSE

INSERT INTO наряд_заказ_печ(цех, сырье, кол_во_b, ед_изм_b);

VALUES (AliasName, &TableName4..сырье, &TableName4..кол_во, &TableName4..ед_изм)

ENDIF

ENDSCAN

* Продукция

SELECT изготовлено

SET ORDER TO ПРОДУКЦИЯ

SET FILTER TO дата = date1 AND цех = ALLTRIM(ThisForm.Combo1.Value)

GO TOP IN наряд_заказ_печ

SCAN

IF SEEK(ALLTRIM(изготовлено.продукция),'наряд_заказ_печ','продукция')

REPLACE наряд_заказ_печ.кол_во_a WITH наряд_заказ_печ.кол_во_a + изготовлено.кол_во

ELSE

SELECT наряд_заказ_печ

SCAN

IF EMPTY(наряд_заказ_печ.продукция) AND наряд_заказ_печ.цех = изготовлено.цех AND !EOF()

REPLACE наряд_заказ_печ.цех WITH изготовлено.цех

REPLACE наряд_заказ_печ.продукция WITH изготовлено.продукция

REPLACE наряд_заказ_печ.кол_во_a WITH изготовлено.кол_во

REPLACE наряд_заказ_печ.ед_изм_a WITH изготовлено.ед_изм

EXIT

ENDIF

ENDSCAN

IF EOF()

INSERT INTO наряд_заказ_печ(цех, продукция, кол_во_a, ед_изм_a);

VALUES (изготовлено.цех, изготовлено.продукция, изготовлено.кол_во, изготовлено.ед_изм)

ENDIF

ENDIF

ENDSCAN

SELECT наряд_заказ_печ

SET ORDER TO 0

REPORT FORM nar_zakaz_kartochka PREVIEW

Процедура добавления фактических остатков в цех магазина.

PUBLIC mday, medit

mday = .F.

medit=.f.

* Меню

DEFINE POPUP shortcut SHORTCUT RELATIVE FROM MROW(),MCOL()

DEFINE BAR 1 OF shortcut PROMPT "День"

DEFINE BAR 2 OF shortcut PROMPT "Ночь"

ON SELECTION BAR 1 OF shortcut mday = .T.

ON SELECTION BAR 2 OF shortcut mday = .F.

ACTIVATE POPUP shortcut

* Через переменные

ThisForm.Pageframe1.Ост_фак.Container1.Visible = .T.

* Деактивация кнопок добавления и удаления фактического остатка

ThisForm.Command5.Enabled = .F.

ThisForm.Command6.Enabled = .F.

ThisForm.Refresh

ThisForm.Pageframe1.Ост_фак.Container1.Text1.Value = DATE()

ThisForm.Pageframe1.Ост_фак.Container1.Combo1.Value = ''

ThisForm.Pageframe1.Ост_фак.Container1.Text2.Value = 0

ThisForm.Pageframe1.Ост_фак.Container1.Text3.Value = ''

ThisForm.Pageframe1.Ост_фак.Container1.SetFocus

Процедура вычисления количественного расчета.

SET CURSOR OFF

WAIT [Идут вычисления]+CHR(13)+[Пожалуйста подождите] WINDOW NOWAIT

ThisForm.Label18.Caption = 'КОЛИЧЕСТВЕННЫЙ отчет ' + otv_fio + ' за период с '+ DTOC(date1) + ' по ' + DTOC(date2)

mReport = 'Количественный'

SELECT kalk

SCAN

REPLACE kalk.кол_во WITH 0

REPLACE kalk.сумма WITH 0

ENDSCAN

* Формируем список сырья и цен

SELECT table2

SCAN

INSERT INTO количественный(наим, цена) VALUES (table2.сырье, table2.цена)

ENDSCAN

* Сформировали

* Действия по шагам

* 1 шаг Расчет остатка на начало

* 2 шаг Расчет прихода и расхода

* 3 шаг Расчет реализ. продукции за указ. период согласно калькуляции

* 4 шаг Расчет «Остатка на конец»

* 1 шаг

* Расчет остатка на начало

SELECT количественный

SET FILTER TO IN количественный

kol = 0

kol_r = 0

SCAN

* Приход на начало периода

SELECT sklad

SET FILTER TO sklad.дата < date1&& IN sklad

LOCATE FOR sklad.title = ALLTRIM(количественный.наим)

DO WHILE FOUND()

kol = kol + sklad.quantity

CONTINUE

ENDDO

* Расход на начало периода

SELECT sklad_р

SELECT * FROM sklad_р WHERE sklad_р.дата <= date1-1 ;

UNION ALL ;

SELECT all * FROM sklad_р WHERE sklad_р.дата = date1 AND день = .T. INTO CURSOR расход_со_склада

SELECT расход_со_склада

LOCATE FOR расход_со_склада.title = ALLTRIM(количественный.наим)

DO WHILE FOUND()

kol_r = kol_r + расход_со_склада.quantity

CONTINUE

ENDDO

* Остаток на начало периода

SELECT количественный&& Заносим в отчет

Replace количественный.ост_кол WITH kol - kol_r&& остаток,

Replace количественный.ост_сум WITH (kol - kol_r)* количественный.цена&& сумму

kol = 0

kol_r = 0

ENDSCAN

* Рассчитали

* 2 шаг

* Расчет прихода и расхода

SELECT количественный

kol = 0

kol_r = 0

SCAN

* Приход на склад сырья за указанный период

SELECT sklad

SET FILTER TO sklad.дата >= date1 AND sklad.дата <= date2

LOCATE FOR sklad.title = ALLTRIM(количественный.наим)

DO WHILE FOUND()

kol = kol + sklad.quantity

CONTINUE

ENDDO

SELECT количественный&& Заносим в отчет

Replace количественный.пр_кол WITH kol&& В отчет кол-во

Replace количественный.пр_сум WITH kol * количественный.цена&& В отчет сумму прихода

* Расход со склада сырья за указанный период

SELECT sklad_р

*SET FILTER TO sklad_р.дата >= date1 AND sklad_р.дата <= date2 AND sklad_р.реал = .f.

SELECT * FROM sklad_р WHERE sklad_р.дата = date1 AND день = .F. AND реал = .F. ;

UNION ALL ;

SELECT * FROM sklad_р WHERE sklad_р.дата >= date1+1 AND sklad_р.дата <= date2-1 AND реал = .F. ;

UNION ALL ;

SELECT * FROM sklad_р WHERE sklad_р.дата = date2 AND день = .T. AND реал = .F. INTO CURSOR расход_со_склада

SELECT расход_со_склада

LOCATE FOR расход_со_склада.title = ALLTRIM(количественный.наим)

DO WHILE FOUND()

kol_r = kol_r + расход_со_склада.quantity

CONTINUE

ENDDO

SELECT количественный

Replace количественный.рас_кол WITH kol_r&& В отчет кол-во

Replace количественный.рас_сум WITH kol_r * количественный.цена&& В отчет сумму расхода

kol = 0

kol_r = 0

ENDSCAN

* Рассчитали


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.