рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ

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

рдореИрдВрдиреЗ рдХрдИ рдкреНрд░рд╕рд┐рджреНрдз рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрд╛ , рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡реЗ рднрд╛рд░реА рд╣реИрдВ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рд▓рд╛рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреБрдЫ рдЪреМрдЦрдЯреЗ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рдмрдВрдзрдХ рдХреА рдирдЬрд╝рд░ рдХреЛ рдЦреБрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЙрдиреНрд╣реЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдереАрдВред

рдореИрдВ рд╢реБрджреНрдз рдХреЛрд╖реЗрд░-рд╣рд▓рд╛рд▓-рд░реВрдврд╝рд┐рд╡рд╛рджреА TSQL рдкрд░ рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рд╕рдордп-рд╕рдордп рдкрд░, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд░реНрд╖реЛрдВ рддрдХ рдореБрдЦреНрдп рд╡рд┐рдХрд╛рд╕ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрдХрд░, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЖрдкрдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ (рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА 3.5 рдПрдордмреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛)ред

рдореЗрд░реА рдмреБрдирд┐рдпрд╛рджреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╕рд░рд▓ рдереАрдВ - рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рдЗрд╢рд╛рд░реЛрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдХреЗрд╡рд▓ рдХрдЯреНрдЯрд░: sqlcmd рдпрд╛ MSSMSред

рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рдм рдХреБрдЫ рд╡рд╛рдкрд╕ рд▓реБрдврд╝рдХрд╛ рд╣реБрдЖ рд╣реИред

рдХреЗрд╡рд▓ рдПрдХ рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ - рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЦрд╛рд▓реА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ), рдЕрдиреНрдпрдерд╛ рдЖрдк рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рд╕реЗ рдердХ рдЬрд╛рддреЗ рд╣реИрдВред

рдореБрдЦреНрдп рдХрд╛рд░реНрдп рддрд░реНрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдФрд░ рддрд░реНрдХ рдХреА рдЕрдЦрдВрдбрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реАрд░реНрд╖рдХ рд░рдЦреЗ:

SET QUOTED_IDENTIFIER ON GO PRINT '-------------------------------- CLR Unit tests for Habr Logic ---------------------------------' IF 0 < ( SELECT count(*) FROM device) begin RAISERROR ('FAILED: database must be empty for this unit test', 16, -1 ) end GO 

рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ-рджреЛ рд╕реНрдХреНрд░реАрди рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рди рдмрдирд╛рдПрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрдЯрд┐рд▓ рд▓реЙрдЬрд┐рдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ 3 рдореБрдЦреНрдп рднрд╛рдЧ рд╣реИрдВ:

 BEGIN TRAN TestClr2 declare @test_name sysname = (select TOP 1 name from sys.dm_tran_active_transactions WHERE transaction_type = 1 ORDER BY transaction_begin_time DESC) + ' [fn_calculate_dev_status] record for device has wrong range' BEGIN TRY SET NOCOUNT ON; -- 1. prepare data for unit test insert into device (mli, oxygen, stamp ) values ('111', 5.55, getdate() ) -- 2. execute unit test -- SELECT dbo.fn_calculate_dev_status( 111, 0.1, 1.2) declare @result int = ( SELECT dbo.fn_calculate_dev_status( '111', 0.1, 1.2) ) END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState , @test_name AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage END CATCH -- 3. result verification IF @result <> 0 RAISERROR ('FAILED: %s no data for device should be presented %d ', 16, -1, @test_name, @result ) ELSE print 'PASSED ' + @test_name ROLLBACK TRAN TestClr2 GO 

- 1. рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░реЗрдВ

рдпрд╣рд╛рдВ рд╣рдо рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рднрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдЕрд╕реНрдерд╛рдпреА рдЪрд░ рдпрд╛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХреЛрдб рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

- 2. рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ

рдпрд╣рд╛рдВ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓, рдпрд╛ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдпрд╛ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди, рдЕрдЧрд░ рд╣рдо рдЯреНрд░рд┐рдЧрд░ рддрд░реНрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред

- 3. рдкрд░рд┐рдгрд╛рдо рд╕рддреНрдпрд╛рдкрди

рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреИрд╕реЗ рдмрджрд▓ рдЧрдИ рд╣реИ, рдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред

рдпрджрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд░рд┐рдХреЙрд░реНрдб рджреЗрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВред

рдПрдХрддреНрд░ рдФрд░ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдорд╛рдирдХ рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдпрджрд┐ рдмрд╛рдХреА рд╕рднреА рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдВред

рдУрд░реЗрдХрд▓ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ - рдореИрдВ рд▓реЗрдЦрди рдФрд░ рдЙрд╕ рд░реВрдк рдореЗрдВ рдФрд░ рдЙрд╕реА рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддрд╛ рдерд╛, рдмрд▓реНрдХрд┐ рдереЛрдбрд╝рд╛ рдЕрдиреБрднрд╡ рд╕реЗ - рд╣рдордиреЗ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рдж рдХреЗ рд▓рд┐рдП рдУрд░реЗрдХрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред

рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 CREATE OR REPLACE PROCEDURE UnitTest9_TRG_JOBLOGDETAIL AS v_message VARCHAR2(255) := 'UnitTest9_TRG_JOBLOGDETAIL: INSERT joblogdetail]- joblogdetail_result not Failed and joblogdetail_endtime is null '; v_maxdate date := '2014/01/01'; v_cnt NUMBER := 0; BEGIN savepoint my_savepoint; <b>-- 1. prepare data for unit test</b> insert into device ( dev_datecreated, dev_create_user, dev_ipaddress, dev_serialnumber , dev_productid, dev_manufacturer, dev_model, dev_id, dev_status, dev_functions) values (sysdate, 'Joe', '1.127.0.1', 'GSN-6238-N34', 'PRTF-452', 'Pinter Company', 'CM6003', 1, 1, 1 ); insert into joblog (JOBLOG_ID, joblog_starttime, joblog_progress) values (11, sysdate, 1); insert into joblog_template (JOBLOG_TEMPLATE_ID, joblog_id, joblog_templatename, joblog_templatetype) values (111, 11, N'joblog_template_test', 1); <b>-- 2. execute unit test</b> insert into joblogdetail ( JOBLOGDETAIL_ID, joblog_template_id, joblogdetail_function, joblogdetail_functiondetail, joblogdetail_result, joblogdetail_dev_id, joblogdetail_starttime, joblogdetail_endtime) values ( 1111, 111, 1, 1, 40, 1, v_maxdate, v_maxdate); <b>-- 3. result verification</b> SELECT count(dev_id) INTO v_cnt FROM device where dev_last_comm_time = v_maxdate; IF 1 <> v_cnt THEN DBMS_OUTPUT.PUT_LINE( 'FAILED: ' || v_message || ': Should not be update dev_last_comm_time: ' || TO_CHAR(v_maxdate)); ELSE DBMS_OUTPUT.PUT_LINE( 'PASSED: ' || v_message ); END IF; rollback to my_savepoint; END; / 

рдЕрдВрдд рдореЗрдВ рдПрдХ рд╣реА рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЖрдкрдХреЛ рдмрдирд╛рдП рдЧрдП рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд▓реАрдирдЕрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

 commit; / set serveroutput on; SET FEEDBACK OFF; spool C:\dist\test.spl; exec UnitTest_empty_database; exec UnitTest3297_TRGBFR_UDEVICE(1); exec UnitTest5_TRG_BF_UDEVICE; exec UnitTest_3062a; ... spool off; / DROP PROCEDURE UnitTest_3062; DROP PROCEDURE UnitTest_BIRDIESEC_3344; DROP PROCEDURE UnitTest_empty_database; ... SET FEEDBACK ON; commit; 

рдмрд╕ рдЗрддрдирд╛ рд╣реАред

рдлрд┐рд░ рдЖрдк рдмрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рдХрд╛рд░ рдХреА рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ: рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░, рдлрд╝рдВрдХреНрд╢рди, рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐рдпрд╛рдБ, рд░рд┐рдкреЛрд░реНрдЯ, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреА рдмрдбрд╝реА рдФрд░ рд╡рд┐рд╢реЗрд╖ рд╡рд╕реНрддреБрдПрдВ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред

рд▓рдЧрднрдЧ рд╕рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдпрд╣ рдХрд╣рд╛ рдФрд░ рдХрд╣рд╛ - рдореБрдЭреЗ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдкрд░реАрдХреНрд╖рдХреЛрдВ рдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╢рдмреНрдж рд╕реЗ рддрд░реНрдХ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдЙрдирд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рддреЛ рд╡реЗ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рддрдВрддреНрд░рд┐рдХрд╛рдУрдВ, рдкреНрд░рддрд┐рд╖реНрдард╛ рдФрд░ рдзрди рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдореЗрд░рд┐рдХрд╛ -> рдХрдирд╛рдбрд╛ -> рдУрдВрдЯрд╛рд░рд┐рдпреЛ -> рд╡реЙрдЯрд░рд▓реВ, рдПрд╢рд┐рдпрд╛ -> рдЬрд╛рдкрд╛рди -> рдЯреЛрдХреНрдпреЛ -> рдЗрдмреАрдирд╛ рдЬреИрд╕реЗ рднреМрдЧреЛрд▓рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рддрд╛рд░реНрдХрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдкреЗрдбрд╝ рд╣реИрдВ, рдЬреЛ рдХрд┐ рднреМрдЧреЛрд▓рд┐рдХ рдХрд╛рд░реНрдпрд╛рд▓рдпреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рдЧреЗрдВрдж рд╣реИред

рдРрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдореЗрдВ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд┐рдпрдо рд╣реЛрддреЗ рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рдирд┐рдпрдо рдпрд╛ рдЬрдирд░реЗрдЯрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддрд╛ рд╣реИред

рдирддреАрдЬрддрди, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдирд┐рд░реНрджреЗрд╢ рд╕рднреА рдХреЛ рдзреНрд╡рд╕реНрдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрди рд▓реЛрдЧреЛрдВ рдиреЗ рднреА рдЬреЛ рдЗрд╕ рддрд░реНрдХ рдХреА рдЪрд░реНрдЪрд╛ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВред

рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдкрдЪрд╛рд╕ рд╕реЗ рдЕрдзрд┐рдХ рдЪрд░рдг - рд╕рдм рдХреБрдЫ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИред

рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдпрд╛ рддрд░реНрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдиреБрдЕрд▓ рд╕рддреНрдпрд╛рдкрди рдХреА рдПрдХ рдШрдбрд╝реА рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред
рдбреЗрде рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рд╕рдорд╛рди рд╣реИред

рдЬрдм рдореИрдВрдиреЗ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рддрд░реНрдХ рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛, рддреЛ рд╕рдм рдХреБрдЫ рд░реЗрд╢рдо рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХрд┐рд╕реА рднреА рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдореЗрд░рд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдпрд╛, рдЧрдбрд╝рдЧрдбрд╝рд╛рд╣рдЯ рдФрд░ рдмрд┐рдЬрд▓реА рдЧрд┐рд░рд╛рдирд╛ (рдЕрдкрдиреЗ рдХреБрдЯрд┐рд▓ рд╣рд╛рдереЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦреБрдж рдХреЛ рд╕реЛрдЪрдирд╛) рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреБрдХреНрдд рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдХрд░ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреБрдЫ рдорд┐рдирдЯ рдФрд░ рд╣рд░ рдХреЛрдИ рд╕рдВрддреБрд╖реНрдЯ рд╣реИред рдореЗрд░реА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреЛрдИ рднреА рдШрд╛рддрдХ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдореБрдЭреЗ рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рдЖрд▓рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдХрдВрдЯреАрдиреНрдпреВрдЕрд╕ рдСрдЯреЛрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдмреИрдЪреЛрдВ рдФрд░ рдЕрдЬрдЧрд░ рд╕реЗ рджрд▓рд┐рдпрд╛ рд▓рд┐рдЦрд╛ред

рдореИрдВ рдЖрдкрдХреЛ рд▓рдЧрднрдЧ рдПрдХ рджрд░реНрдЬрди рднрд╛рд╖рд╛рдУрдВ рдФрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рджреИрдирд┐рдХ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рдмреАрдЪ рдЖрдкрдХреЛ рдХреВрджрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рдЪрд╛рдЯрдиреЗ рдФрд░ рдЗрд╕реЗ рдПрдХ рдкреЗрд╢реЗрд╡рд░ рд▓реБрдХ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреА рдПрдХ рднрдпрд╛рд╡рд╣ рдХрдореА рд╣реИред

рдореИрдВ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдкрд░ рд╕рдмрдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдкрд╛рд╡рд░рд╢реЗрд▓ - рд╣рдорд╛рд░реА рд╕реНрдХрд┐рдкреНрд╕ рдЕрднреА рднреА рдЗрдзрд░-рдЙрдзрд░ рдЪрд▓рддреА рд╣реИрдВред

рдореИрдВ рдкрд╛рдпрдерди рдореЗрдВ рд╕рднреА рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХреБрдЫ sql (XML- рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рдЕрдВрджрд░ cte) рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рди рдХреЗрд╡рд▓ рдЕрдЬрдЧрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ, рдмрд▓реНрдХрд┐ .NET рдореЗрдВ рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ sqlcmd рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдХреАред

рдХреЛрдб рдпрд╣рд╛рдБ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ 2 рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: smtppart.py рдФрд░ config.ini - SMTP рд╕рд░реНрд╡рд░ рдирд╛рдо, рдкреЛрд░реНрдЯ рдФрд░ рдИрдореЗрд▓ рдЬрд╣рд╛рдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╣рд▓реЗ svn рд╕реЗ рдирд╡реАрдирддрдо рдЕрдкрдбреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ (рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ - рдЧрд┐рдЯ, рдкрд░реНрдлреЛрд░реНрд╕, ... рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ)ред

рдлрд┐рд░ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЖрдзрд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдПрдХ рд╕рд╛рдл рдЖрдзрд╛рд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЖрдзрд╛рд░ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

80 рдПрдордмреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ 3.5 рдПрдордмреА рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдирд╛ (рдпреЛрдЬрдирд╛ рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рдХрдВрдкрдиреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╣реЛ рдЪреБрдХрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛) рд▓рдЧрднрдЧ 15 рдорд┐рдирдЯ рдореЗрдВ рдореЗрд░реА рдорд╢реАрди рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдВрддрд┐рдо рд╡рдЪрди рд╕реЗ рдкрд╣рд▓реЗ рд╕рд┐рд░реНрдл рдПрдХ рдХрдк рдХреЙрдлреА рдкреАрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред

рдпрджрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдереАрдВ, рддреЛ рддреНрд░реБрдЯрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдИрдореЗрд▓ рдкрд░ рднреЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗред

рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрдирд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ: readme.txt

рдкреНрд░рддреНрдпреЗрдХ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ config.ini рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдб рд╣реИрд╢ (рдпрд╣ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рдПрдЧрд╛) рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдХреЛрдб рдмрджрд▓ рдЬрд╛рдиреЗ рдкрд░ рднреА рд╕рдВрджреЗрд╢ рдЖрдПрдЧрд╛ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЯреВрдЯрд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдореИрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдмрд┐рдирд╛ рдЬрд╛рдВрдЪреЗ рджреЗрдЦ рд╕рдХреВрдВ рдореЗрд░реА рдкреВрд░реНрд╡ рднрд╛рдЧреАрджрд╛рд░реАред



рдСрдЯреЛрд░рди.рдмреИрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓реЙрдиреНрдЪ рдХреЛ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдШрд░ рдЫреЛрдбрд╝рдиреЗ рдХреЗ 1-2 рджрд┐рди рдмрд╛рдж рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдВрдбреЛрдЬ рдЯрд╛рд╕реНрдХ рд╢реЗрдбреНрдпреВрд▓рд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЕрдЧрд░ рд╢рд╛рдо рдХреЛ рдХреБрдЫ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ - рддреЛ рдЖрдк рдЯреАрд╡реА рдХреЗ рд╕рд╛рдордиреЗ рдЬреЛ рд╣реБрдЖ рдЙрд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕реЗрдЯ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдФрд░ рд╕реБрдЦрдж рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрдард┐рди рдФрд░ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╕реМрднрд╛рдЧреНрдп, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рд╕рд▓рд╛рд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░реЗрдЧреАред

рдореБрдЭреЗ рд╕рд▓рд╛рд╣ рд▓реЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдХрд╣реАрдВ рдкрд░ рдХреБрдЫ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреЛ рдХрдВрдШреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рдЦреНрддреА рд╕реЗ рдиреНрдпрд╛рдп рди рдХрд░реЗрдВред

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


All Articles