1C рд╕реЗ рд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡

1C рд╕реЗ рд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛
1 рд╕реА рдкрд░ рдЕрдЧрд▓реА рдмреА 2 рдмреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди: рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ 8.2 рдПрдХреАрдХрд░рдг рдЪрд░рдг, 1 рд╕реА рд╕реЗ рд╡реЗрдм рдкрд░ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреИрджрд╛ рд╣реБрдИред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, SFTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рд╕рдВрдЪрд╛рд░рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдмрд┐рдирд╛ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред
рдПрдХреАрдХреГрдд рднрд╛рд╖рд╛ 1 рд╕реА рдореЗрдВ: рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ 8.2 рдореЗрдВ рдПрд╕рдПрдлрдЯреАрдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреВрд▓ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдереАред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ 1C рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдЗрдВрдЯрд░рдиреЗрдЯ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░, WinSCP рдЬреИрд╕реА рдлреНрд░реАрд╡реЗрдпрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рд╕рдлрд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрдорд┐рдд 1C рднрд╛рд╖рд╛ рд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдЪрд▓рд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

1C рд╕реЗ WinCSP рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:

 = (34)+()+"\"+ "WinSCP.com"+(34)+"/script="+(34)+()+(34)+"\script.txt "+"/parameter "+(34)++(34)+" "+ (34)++(34)+" "+(34) +  + (34) + " " + (34) +  + (34); 


рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдиреБрдХрд╕рд╛рди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд 1 рд╕реА рднрд╛рд╖рд╛ рд╕реЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдХрдореА рд╣реИред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, 1C: Enterprise 8.2 рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд╣рд░реА DLL рдШрдЯрдХ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред

рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо 1 рд╕реА: рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рдмрд╛рд╣рд░реА рдШрдЯрдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдореВрд▓ рдПрдкреАрдЖрдИ рдФрд░ COMред рдкрд╕рдВрдж рдореВрд▓ рдирд┐рд╡рд╛рд╕реА API рдкрд░ рдЧрд┐рд░ рдЧрдИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрдХрдиреАрдХ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдШрдЯрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ 1C рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдмрд╛рд╣рд░реА рдШрдЯрдХреЛрдВ рдФрд░ рдУрдкрди рд╕реЛрд░реНрд╕ C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ ITS рдбрд┐рд╕реНрдХ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, SftpExtension.dll рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЧрдИ рдереА (рдЖрдк рдпрд╣рд╛рдВ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ )ред

рдПрдХ DLL рдШрдЯрдХ рдмрдирд╛рдирд╛

1. SFTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдШрдЯрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рджреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
- libssh http://www.libssh2.org/ (рдбрд╛рдЙрдирд▓реЛрдб "git рдХреНрд▓реЛрди git: //git.libssh2.org/libssh2.git")
- Opensl http://www.openssl.org/ ( рдпрд╣рд╛рдВ рд╕реЗ рдЦреБрд▓рддрд╛ рд╣реИ -slc-1.0.1c.tar.gz рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ )
рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

2. рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рд╡рд╕реНрддреБ рдХреЛ рд╕рд╛рд░ рд╡рд░реНрдЧ IcomponentBase рдФрд░ IlanguageInterface рд╕реЗ рд╡рд╛рд░рд┐рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд░реВрд╕реА рдореЗрдВ 1 рд╕реА рд╕реЗ рд╕реА ++ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛:
рдЖрдк рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 static wchar_t *g_MethodNames[] = { L"SendFile",L"StartSession", L"EndSession", L"IsSessionStart",L"SetSshHost",L"SetSshLogin",L"SetSshPass",L"SetSftpPath",L"SetLocalPath"}; static wchar_t *g_MethodNamesRu[] = { L"",L"",L"",L"", L"",L"",L"", L"",L""}; const WCHAR_T* SftpExtension::GetMethodName(const long lMethodNum, const long lMethodAlias) { if (lMethodNum >= eMethLast) return NULL; wchar_t *wsCurrentName = NULL; WCHAR_T *wsMethodName = NULL; int iActualSize = 0; switch(lMethodAlias) { case 0: // First language wsCurrentName = g_MethodNames[lMethodNum]; break; case 1: // Second language wsCurrentName = g_MethodNamesRu[lMethodNum]; break; default: return 0; } iActualSize = wcslen(wsCurrentName)+1; if (m_iMemory && wsCurrentName) { if(m_iMemory->AllocMemory((void**)&wsMethodName, iActualSize * sizeof(WCHAR_T))) ::convToShortWchar(&wsMethodName, wsCurrentName, iActualSize); } return wsMethodName; } 


3. рдШрдЯрдХ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, IcomponentBase рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ CallAsFunc рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред 1C рдШрдЯрдХ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ, рдпрд╣ C ++ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╡рд┐рдзрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 bool SftpExtension::CallAsFunc(const long lMethodNum, tVariant* pvarRetValue,tVariant* paParams, const long lSizeArray){ switch(lMethodNum){ case eMethSendFile: { if (!lSizeArray || !paParams) return false; this->local_path = toChar(paParams); WriteToServer(status, this->local_path); // pvarRetValue->pstrVal = status; //status pvarRetValue->strLen = strlen(pvarRetValue->pstrVal); TV_VT(pvarRetValue) = VTYPE_PSTR; ret = true; break; } } return ret; } 


4. рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, 1C рд╕реЗ, 4 рд╡рд┐рдзрд┐рдпрд╛рдБ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ рдЬреЛ DLL рдШрдЯрдХ рдореЗрдВ C ++ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред

1C (рд╡рд┐рдзрд┐рдпрд╛рдБ)рд╕реА ++ рддрд░реАрдХреЗ
рдкреНрд░рд╛рд░рдВрдн рд╕рддреНрд░ ()
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдорд╛рдкрджрдВрдбреЛрдВ (рдореЗрдЬрдмрд╛рди, рд▓реЙрдЧрд┐рди рдЧреБрдЪреНрдЫрд╛, рдкрд╛рд╕рд╡рд░реНрдб - рдпрд╛ rsa рдХреБрдВрдЬрд┐рдпреЛрдВ, рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдкрде) рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, StartSession рдлрд╝рдВрдХреНрд╢рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреБрдгреЛрдВ рд╕реЗ рдШрд┐рд░рд╛ рд╣реБрдЖ рд╣реИ: рд╣реЛрд╕реНрдЯ, рд▓реЙрдЧрд┐рди, рдкрд╛рд╕рд╡рд░реНрдб, рд░рд┐рдореЛрдЯ рдкрде
StartSSHSession (рд╕реНрдерд┐рддрд┐, рдпрд╣- ssh_host, рдпрд╣-> ssh_login, рдпрд╣-> ssh_pass);
StartSftpSession (рд╕реНрдерд┐рддрд┐, рдпрд╣- sftp_path)
рдлрд╝рд╛рдЗрд▓ рднреЗрдЬреЗрдВ ("рдХреНрд▓рд╛рдЗрдВрдЯ рдорд╢реАрди рдкрд░ рдкрде рдФрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо")
WriteToServer (const char * & status, const char * loclfile)
рдпрджрд┐ рд╕рддреНрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ ()isSessionStart ()
рдЕрдВрдд рд╕рддреНрд░ ()endSession () - SFTP рд╕рддреНрд░ рдФрд░ SSH рд╕рддреНрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ


5. рд╕реА ++ рдореЗрдВ, рдЖрдкрдХреЛ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдорд╛рдкрджрдВрдбреЛрдВ (рдкрдврд╝рдиреЗ / рд▓рд┐рдЦрдиреЗ) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдВ, IsPropReadable рдФрд░ IsPropWritable, рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред

 bool SftpExtension::IsPropReadable(const long lPropNum) { switch(lPropNum) { case ePropSshHost: return true; default: return false; } return false;} 


рдЧреБрдг 1C рдФрд░ C ++ рдХреЗ рд╕рдВрдмрдВрдзреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛
1C (рдЧреБрдг)рд╕реА ++ рдЧреБрдг
рдореЗрдЬрд╝рдмрд╛рдиssh_host
рд▓реЙрдЧ рдЗрдиssh_login
рдкрд╛рд╕рд╡рд░реНрдбssh_pass
рджреВрд░ рдХрд╛ рд░рд╛рд╕реНрддрд╛Sftp_path


рддреИрдпрд╛рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ ред

рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд 1C рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ

1. рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд 1C рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдирдХ рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рд╣рд░реА рдШрдЯрдХ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВ рдФрд░ рдмрдирд╛рдПрдВред

 ("C:\SftpExtension\SftpExtension.dll","",.Native);  = ("AddIn..SftpExtension"); 


2. рдШрдЯрдХ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ 4 рдЧреБрдг рднрд░реЗрдВ рд╣реЛрд╕реНрдЯ, рд▓реЙрдЧрд┐рди, рдкрд╛рд╕рд╡рд░реНрдб, рд░рд┐рдореЛрдЯ рдкрдеред
 . = "192.168.0.1"; . = "root"; . = "123"; . = "/var/www/company/data/www/import/data.xml"; 


3. рдХрдиреЗрдХреНрд╢рди рд╕рддреНрд░ рдЦреЛрд▓реЗрдВ
 .(); 


4. рдлрд╝рд╛рдЗрд▓ рднреЗрдЬреЗрдВ
 .("C:\data.xml"); 


5. рд╣рдо рдирд┐рдореНрди рдлрд╝рд╛рдЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ, рдпрд╣ рдЬрд╛рдВрдЪрддреЗ рд╣реБрдП рдХрд┐ рдХреНрдпрд╛ рдХрдиреЗрдХреНрд╢рди рд╕рддреНрд░ рдЦреБрд▓рд╛ рд╣реИред
  .()  .("C:\data2.xml");  .(); .("C:\data2.xml"); ; 


6. рдлрд╛рдЗрд▓реЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рд╕рддреНрд░ рдмрдВрдж рдХрд░реЗрдВ
 .(); 


рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, C: \ data2.xml рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ /var/www/company/data/www/import/data.xml рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреА рдЧрдИ рдереАред


рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛
рд╕рдВрджрд░реНрдн:
рдШрдЯрдХ рдирд┐рд░реНрдорд╛рдг рдореИрдиреБрдЕрд▓
SFTP рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп:


рдирд┐рд╖реНрдХрд░реНрд╖: рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдкрдХреЛ 1C: рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ 8.2 рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕реБрд░рдХреНрд╖рд┐рдд SFTP рдкрд░ рдмрдбрд╝рд╛ рдЖрдХрд╛рд░ред рд╕рд╛рде рд╣реА, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ 1C рд╕реЗ рдмрд╛рд╣рд░реА рдШрдЯрдХ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ 1C рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ред

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


All Articles