Помощь в написании студенческих работ
Антистрессовый сервис

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

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

Как видно из программного кода максимальная оптимизация достигается за счет выражения UNION в SQL запросах. Данное выражение позволяет объединить несколько запросов в один, чем достигается максимальная скорость обработки данных. Свод сырья по цеху При реализации фильтров используются SQL запросы и динамические фильтры. Ниже приведен фрагмент исходного кода загружаемого при инициализации (событие… Читать ещё >

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

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

  • *!*ThisForm.Grid1.RecordSource = [SELECT продукция, sum (кол_во) as Количество, ед_изм, цех, принял ;
  • *!*FROM изготовлено a WHERE &filter1 GROUP BY продукция, принял INTO CURSOR заказ_query]

GO TOP IN заказ_quer…

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

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

Select sklad_р

Set Order To 1 && TITLE

Set Filter To sklad_р.дата >= date1 AND sklad_р.дата <= date2 AND реал = .t.

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

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

kol = 0

SCAN

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

SELECT sklad_р

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

DO WHILE FOUND ()

kol = kol + sklad_р.quantity

CONTINUE

ENDDO

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

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

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

kol = 0

ENDSCAN

  • * Расчитали согласно калькуляции реализованную продукцию и отправили в отчет
  • * 4 шаг
  • * Расчет «Остатка на конец»

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

SCAN

* количество

REPLACE количественный. остат_кол WITH количественный. ост_кол + количественный. пр_кол — количественный. рас_кол — количественный. реал_кол

* сумма

REPLACE количественный. остат_сум WITH количественный. ост_сум + количественный. пр_сум — количественный. рас_сум — количественный. реал_сум

ENDSCAN

  • *Рассчитали
  • * Фильтруем нулевые значения
  • *SET FILTER TO количественный. ост_кол 0 OR количественный. пр_кол 0 OR количественный. рас_кол 0
  • *SET FILTER TO количественный. остат_кол 0

CALCULATE sum (количественный.ост_кол) TO ThisForm.TxtОстКол.Value

CALCULATE sum (количественный.ост_сум) TO ThisForm.TxtОстСумма.Value

CALCULATE sum (количественный.пр_кол) TO ThisForm.TxtПрКол.Value

CALCULATE sum (количественный.пр_сум) TO ThisForm.TxtПрСумма.Value

CALCULATE sum (количественный.рас_кол) TO ThisForm.TxtРасКол.Value

CALCULATE sum (количественный.рас_сум) TO ThisForm.TxtРасСумма.Value

CALCULATE sum (количественный.реал_кол) TO ThisForm.TxtРеалКол.Value

CALCULATE sum (количественный.реал_сум) TO ThisForm.TxtРеалСумма.Value

CALCULATE sum (количественный.остат_кол) TO ThisForm.TxtОстатКол.Value

CALCULATE sum (количественный.остат_сум) TO ThisForm.TxtОстатСумма.Value

SET ORDER TO наим

GO TOP IN количественный

ThisForm.Refresh

WAIT CLEAR

Ниже приведена процедура вычисления сличительного расчета.

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

ThisForm.Label18.Caption = 'СЛИЧИТЕЛЬНАЯ ведомость ' + otv_fio + ' за период с '+ DTOC (date1) + ' по ' + DTOC (date2)

mReport = 'Сличительная'

SELECT kalk

SCAN

REPLACE kalk. кол_во WITH 0.0000

REPLACE kalk. сумма WITH 0.0000

ENDSCAN

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

SELECT table2

SCAN

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

ENDSCAN

  • * Сформировали
  • * Действия по шагам
  • * 1 шаг Расчет остатка по отчету
  • * 2 шаг Расчет фактического сырья на складе по ревизии
  • * 3 шаг
  • * 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 * 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

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

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

  • * Рассчитали
  • * Здесь расчет реализованной продукции за указ. период согласно калькуляции

SELECT sklad_р

SET ORDER TO 1 && TITLE

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

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

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

kol = 0

SCAN

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

SELECT sklad_р

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

DO WHILE FOUND ()

kol = kol + sklad_р.quantity

CONTINUE

ENDDO

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

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

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

kol = 0

ENDSCAN

  • * Расчитали согласно кальк. реализованную продукцию и отправили в отчет
  • * Расчет ОСТАТКА НА КОНЕЦ

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

SCAN

* количество

REPLACE количественный. остат_кол WITH количественный. ост_кол + количественный. пр_кол — количественный. рас_кол — количественный. реал_кол

* сумма

Replace количественный. остат_сум WITH количественный. ост_сум + количественный. пр_сум — количественный. рас_сум — количественный. реал_сум

ENDSCAN

  • * Рассчитали остаток по отчету
  • * Переносим остаток по отчету из количественного в сличительную ведомость

SCAN

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

ENDSCAN

* 2 шаг Расчет фактического сырья на складе по ревизии

SELECT ревизия

SET FILTER TO ревизия. дата >= date1 AND ревизия. дата <= date2 AND ревизия. прод = .F.

SELECT сличительная

kol = 0.0000

kol_r = 0.0000

SCAN

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

SELECT ревизия

LOCATE FOR ALLTRIM (ревизия.наим) == ALLTRIM (сличительная.наим)

DO WHILE FOUND ()

kol = kol + ревизия. кол_во

CONTINUE

ENDDO

SELECT сличительная

&& Заносим в отчет

Replace сличительная. фсыр_кол WITH kol && В отчет кол-во

&& В отчет сумму прихода

Replace сличительная. фсыр_сум WITH kol * сличительная. цена

kol = 0.0000

kol_r = 0.0000

ENDSCAN

  • * Рассчитали
  • * 3 шаг * Расчет излишков и недостачи

SELECT сличительная

SCAN

IF сличительная. остат_кол — сличительная. фсыр_кол < 0

REPLACE сличительная. излиш_кол WITH сличительная. фсыр_кол — сличительная. остат_кол

REPLACE сличительная. излиш_сум WITH (сличительная.фсыр_кол — сличительная. остат_кол) * сличительная. цена

ENDIF

IF сличительная. остат_кол — сличительная. фсыр_кол > 0

REPLACE сличительная. недост_кол WITH сличительная. остат_кол — сличительная. фсыр_кол

REPLACE сличительная. недост_сум WITH (сличительная.остат_кол — сличительная. фсыр_кол) * сличительная. цена

ENDIF

ENDSCAN

* расчет по столбцам

CALCULATE sum (сличительная.остат_кол) TO ThisForm.TxtОстКол.Value

CALCULATE sum (сличительная.остат_сум) TO ThisForm.TxtОстСумма.Value

CALCULATE sum (сличительная.фсыр_кол) TO ThisForm.TxtРасКол.Value

CALCULATE sum (сличительная.фсыр_сум) TO ThisForm.TxtРасСумма.Value

CALCULATE sum (сличительная.недост_кол) TO ThisForm.TxtРеалКол.Value

CALCULATE sum (сличительная.недост_сум) TO ThisForm.TxtРеалСумма.Value

CALCULATE sum (сличительная.излиш_кол) TO ThisForm.TxtОстатКол.Value

CALCULATE sum (сличительная.излиш_сум) TO ThisForm.TxtОстатСумма.Value

GO TOP IN количественный

SELECT сличительная

SET ORDER TO наим

GO TOP

ThisForm.Refresh

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