1C рдореЗрдВ рдХреНрдпрд╛ рд░рдЬрд┐рд╕реНрдЯрд░ OOP рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рджрд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ

рдЫрд╡рд┐

1 рд╕реА рдореЗрдВ, рд░рдЬрд┐рд╕реНрдЯрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреНрд░рдореБрдЦ рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВред рдЗрд╕ рд╢рдмреНрдж рдХрд╛ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рдордХрдХреНрд╖ рд╣реИ - рдмрд╣реАрдЦрд╛рддрд╛ред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд▓реЗрдЦрд╛рдВрдХрди рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╕рдордп рдХреЗ рд╕рд╛рде, рдЗрд╕рдХрд╛ рддрд░реНрдХ рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд▓рдЧрд╛ред

1 рд╕реА рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╣рд╛рдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдПрд▓рдПрд╕рдлреНрдпреВрдЬрди рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдореЗрдВ рд╣реА рдРрд╕реА рдХреЛрдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИ ред рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд, рдмрд╣реБрд░реВрдкрддрд╛ рдФрд░ рдПрдХрддреНрд░реАрдХрд░рдг рд╣реИ, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдПрдХ рд╕рдорд╛рди рд░рдЬрд┐рд╕реНрдЯрд░ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗред

рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╖рдп рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ (рдпрд╛ рдЖрдпрд╛рдо) рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

1C рдореЗрдВ 4 рдкреНрд░рдХрд╛рд░ рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИрдВ:

  1. рд▓реЗрдЦрд╛ рд░рдЬрд┐рд╕реНрдЯрд░
  2. рдмрд┐рд▓рд┐рдВрдЧ рд░рдЬрд┐рд╕реНрдЯрд░
  3. рдмрдЪрдд рд░рдЬрд┐рд╕реНрдЯрд░
  4. рд╕реВрдЪрдирд╛ рд░рдЬрд┐рд╕реНрдЯрд░

рдкрд╣рд▓реЗ рджреЛ рдЕрддреНрдпрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд▓реЗрдЦрд╛рдВрдХрди рдФрд░ рдкреЗрд░реЛрд▓ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ lsFusion рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдордВрдЪ рд╣реИ, рдореИрдВ рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдкрд┐рдЫрд▓реЗ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдмрдЪрдд рд░рдЬрд┐рд╕реНрдЯрд░


рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рдХреБрдЫ рд╕рд╛рд░ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдк рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдЯреЙрдХ рдореЗрдВ рдХрд┐рд╕реА рдЙрддреНрдкрд╛рдж рдХреЗ рд╕рдВрддреБрд▓рди рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рд░ SkuLedger рд╡рд░реНрдЧ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
CLASS ABSTRACT SkuLedger '   ';

, ( ).

Sku () Stock () . :
sku 'SKU' = ABSTRACT Sku (SkuLedger);
stock '' = ABSTRACT Stock (SkuLedger);

, :
dateTime '/' = ABSTRACT DATETIME (SkuLedger);

, , , 1 . , .
quantity '-' = ABSTRACT NUMERIC[14,2] (SkuLedger);

:
balance (Stock st, Sku sk) '' = GROUP SUM quantity(SkuLedger l) IF stock(l) = st AND sku(l) = sk;

, . , . , MATERIALIZED. , , 1.

, :
CONSTRAINT balance(Stock st, Sku sk) < 0 
    MESSAGE '       ';

, , . , , . , , 1 , , 1 .

, , :
balance (Stock st, Sku sk, INTEGER year) = 
    GROUP SUM quantity(SkuLedger l) IF stock(l) = st AND sku(l) = sk AND extractYear(dateTime(l)) = year MATERIALIZED;

. , , .

, :
balance '  ' (Stock st, Sku sk, DATETIME dt) = 
    GROUP SUM quantity(SkuLedger l) IF stock(l) = st AND sku(l) = sk AND dateTime(l) <= dt;

, . . , (MATERIALIZED), :
balance '  ' (Stock st, Sku sk, DATETIME dt) =
   currentBalance(sk, st) (-) (GROUP SUM quantity(SkuLedger l) IF stock(l) = st AND sku(l) = sk AND dateTime(l) > dt);

, , dateTime :
INDEX dateTime(SkuLedger l);

, .

, . :
CLASS Receipt '  ';
dateTime '/' = DATA DATETIME (Receipt);
stock '' = DATA Stock (Receipt);

CLASS ReceiptDetail '   ';
receipt '' = DATA Receipt (ReceiptDetail) NONULL DELETE;

sku 'SKU' = DATA SKU (ReceiptDetail);

quantity '-' = DATA NUMERIC[14,2] (ReceiptDetail);
price '' = DATA NUMERIC[14,2] (ReceiptDetail);

, . ReceiptDetail SkuLedger:
EXTEND CLASS ReceiptDetail : SkuLedger;

, , :
dateTime(ReceiptDetail d) += dateTime(receipt(d));

stock(ReceiptDetail d) += stock(receipt(d));

sku(ReceiptDetail d) += sku(d);
quantity(ReceiptDetail d) += quantity(d);

, .

, :

CLASS Transfer '    ';
posted '' = DATA BOOLEAN (Transfer);
dateTime '/' = DATA DATETIME (Transfer);

fromStock ' ()' = DATA Stock (Transfer);
toStock ' ()' = DATA Stock (Transfer);

CLASS TransferDetail '   ';
transfer '' = DATA Transfer (TransferDetail) NONULL DELETE;

sku 'SKU' = DATA SKU (TransferDetail);

quantity '-' = DATA NUMERIC[14,2] (TransferDetail);
price '' = DATA NUMERIC[14,2] (TransferDetail);

, . () , . , :
EXTEND CLASS TransferDetail : SkuLedger;

dateTime(TransferDetail d) += dateTime(transfer(d));

stock(TransferDetail d) += fromStock(transfer(d));

sku(TransferDetail d) += sku(d);
quantity(TransferDetail d) += -quantity(d);

, , .

, , , TransferSkuLedger, SkuLedger:
CLASS TransferSkuLedger '   ()' : SkuLedger;
transferSkuLedger = AGGR TransferSkuLedger WHERE stockTo(transfer(TransferDetail transferDetail));

AGGR , , , TransferSkuLedger, . .
:
dateTime(TransferSkuLedger d) += dateTime(transfer(transferDetail(d)));

stock(TransferSkuLedger d) += toStock(transfer(transferDetail(d)));

sku(TransferSkuLedger d) += sku(transferDetail(d));
quantity(TransferSkuLedger d) += quantity(transferDetail(d));

, , .

, 1 , :
, . , .

, , . , . , .


, , .

. :
CLASS ABSTRACT PriceLedger '   ';

dateTime '/' = ABSTRACT DATETIME (PriceLedger);

sku 'SKU' = ABSTRACT SKU (PriceLedger);
stock '' = ABSTRACT Stock (PriceLedger);

price '' = ABSTRACT NUMERIC[14,2] (PriceLedger);

:
price '' (Stock st, Sku sk, DATETIME dt) = 
    GROUP LAST price(PriceLedger l)
          ORDER dateTime(l), l
          WHERE dateTime(l) <= dt
          BY stock(l), sku(l);

, , . , , :
INDEX stock(PriceLedger l), sku(l), dateTime(l), l;

, , 1, lsFusion . , .

, :
EXTEND CLASS ReceiptDetail : PriceLedger;

dateTime(ReceiptDetail d) += dateTime(receipt(d));

stock(ReceiptDetail d) += stock(receipt(d));

sku(ReceiptDetail d) += sku(d);
price(ReceiptDetail d) += price(d);


1 , ( ). , 1 . , , , , (), .

lsFusion , . , , .

Source: https://habr.com/ru/post/hi465221/


All Articles