Помощь в учёбе, очень быстро...
Работаем вместе до победы

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

РефератПомощь в написанииУзнать стоимостьмоей работы

Подзапрос формирования промежуточного хранилища остатка на начало. Нулевые значения указывать обязательно, так как они используются в. IIF (ThisForm.Optiongroup1.Value#0,' and ' + IIF (ThisForm.Optiongroup1.Value=1,'a.день = .T.','a.день = .F.'), ''). Filter1 = IIF (ThisForm.Optiongroup1.Value#0, IIF (ThisForm.Optiongroup1.Value=1,'a.день=.T.','a.день=.F.'), '') +; Filter1 = IIF… Читать ещё >

Основные процедуры используемые в программе (реферат, курсовая, диплом, контрольная)

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

Ниже приведен фрагмент программного кода события «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 Остаток_на_начало,

  • 0.0000 as приход, 0.0000 as расход,
  • 0.0000 as остаток_на_конец;

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

UNION ;

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

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

  • 0.0000 as приход, 0.0000 as расход,
  • 0.0000 as остаток_на_конец;

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

UNION ;

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

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

  • 0.0000 as приход, 0.0000 as расход,
  • 0.0000 as остаток_на_конец;

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

UNION ;

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

  • 0.0000 as приход, 0.0000 as расход,
  • 0.0000 as остаток_на_конец;

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

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

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

  • 0.0000 as приход, 0.0000 as расход,
  • 0.0000 as остаток_на_конец;

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

UNION ;

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

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

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

UNION ;

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

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

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

UNION ;

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

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

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

UNION ;

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

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

FROM &TableName2 a WHERE &filter42 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

Показать весь текст
Заполнить форму текущей работой