Skip to content

Текст обработки загрузки курсов валют

js

// Загрузка информации о курсах валют производится с сайта ЦБ РФ

// Информация поступает в виде XML файла, в котором указана дата и курс на эту дату.

// В запросе информации необходимо указать период и код валюты

// Коды валюты - R01235 для USD, R01239 для EUR

// Будем запрашивать курсы за последние 7 дней. Сначала для USD, а затем для EUR

Соединение = СокетСоединить( "www.cbr.ru", 80, true );

СокетПередать( Соединение, "GET /scripts/XML_dynamic.asp?date_req1=" + DTOC( ДОБАВИТЬДНИ( ДАТАВРЕМЯ( ), - 7 ), 4 ) + "&date_req2=" + DTOC( ДАТАВРЕМЯ( ), 4 ) + "&VAL_NM_RQ=R01235 HTTP/1.1" + CHR( 13 ) + CHR( 10 ) + "Host: www.cbr.ru" + CHR( 13 ) + CHR( 10 ) + CHR( 13 ) + CHR( 10 ) );

Ответ = СокетПолучить( Соединение, CHR( 13 ) + CHR( 10 ) + CHR( 13 ) + CHR( 10 ));

IF ( AT( Ответ, 'Content-Length:' ) > 0 )

{

    Длина = VAL( SUBSTR( Ответ, AT( Ответ, 'Content-Length:' ) + 15 ));

    Ответ = СокетПолучить( Соединение, Длина);

}

ELSE

{

    КОДРЕЗУЛЬТАТА = false;

    ОПИСАНИЕРЕЗУЛЬТАТА = "Ошибка чтения файла с сайта ЦБ РФ. " + _ERRORDESCRIPTION;

    RETURN false;

}

СокетЗакрыть( Соединение );

ИмяФайла = УникальноеИмя( );

Файл = ФайлСоздать( ИмяФайла );

ФайлЗаписать( Файл, Ответ );

ФайлЗакрыть( Файл );

ДобавитьКонтекст( "SET FMTONLY ON

SELECT GETDATE() AS date, CONVERT( float, 0 ) AS nominal,

CONVERT( float, 0 ) AS value SET FMTONLY OFF", "Курсы" );

Загрузить( "Курсы", "XML", ИмяФайла, "Record" );

// Если в справочнике валют указано, что используется обратный курс,

// то надо записывать обратный курс

ОбратныйКурс = ЗАПРОС( "SELECT f_rev FROM sprcur WHERE code = 'USD'" );

ВыбратьКонтекст( "Курсы" );

ПерейтиВНачало( "Курсы" );

WHILE ( !КонецКонтекста( "Курсы" ) )

{

    IF ( Курсы.Value <> 0 )

    {

        ЗАПРОС( "DELETE FROM sprrate

        WHERE DATEDIFF( day, date, '" + Курсы.date + "' ) = 0 AND code = 'USD'" );

        ЗАПРОС( "INSERT INTO sprrate ( code, date, rate )

        VALUES ( 'USD', '" + Курсы.date + "', " +

        STR( ЕСЛИ( ОбратныйКурс, 1 / Курсы.Value, Курсы.Value ), 20, 8 ) + ")" );

    }

    SKIP( );

}

УдалитьКонтекст( "Курсы" );

ФайлУдалить( ИмяФайла );

// Полностью аналогично для евро

Соединение = СокетСоединить( "www.cbr.ru", 80, true );

СокетПередать( Соединение, "GET /scripts/XML_dynamic.asp?date_req1=" + DTOC( ДОБАВИТЬДНИ( ДАТАВРЕМЯ( ), - 7 ), 4 ) + "&date_req2=" + DTOC( ДАТАВРЕМЯ( ), 4 ) + "&VAL_NM_RQ=R01239 HTTP/1.1" + CHR( 13 ) + CHR( 10 ) + "Host: www.cbr.ru" + CHR( 13 ) + CHR( 10 ) + CHR( 13 ) + CHR( 10 ) );

Ответ = СокетПолучить( Соединение, CHR( 13 ) + CHR( 10 ) + CHR( 13 ) + CHR( 10 ));

IF ( AT( Ответ, 'Content-Length:' ) > 0 )

{

    Длина = VAL( SUBSTR( Ответ, AT( Ответ, 'Content-Length:' ) + 15 ));

    Ответ = СокетПолучить( Соединение, Длина);

}

ELSE

{

    КОДРЕЗУЛЬТАТА = false;

    ОПИСАНИЕРЕЗУЛЬТАТА = "Ошибка чтения файла с сайта ЦБ РФ. " + _ERRORDESCRIPTION;

    RETURN false;

}

СокетЗакрыть( Соединение );

ИмяФайла = УникальноеИмя( );

Файл = ФайлСоздать( ИмяФайла );

ФайлЗаписать( Файл, Ответ );

ФайлЗакрыть( Файл );

ДобавитьКонтекст( "SET FMTONLY ON

SELECT GETDATE() AS date, CONVERT( float, 0 ) AS nominal,

CONVERT( float, 0 ) AS value SET FMTONLY OFF", "Курсы" );

Загрузить( "Курсы", "XML", ИмяФайла, "Record" );

// Если в справочнике валют указано, что используется обратный курс,

// то надо записывать обратный курс

ОбратныйКурс = ЗАПРОС( "SELECT f_rev FROM sprcur WHERE code = 'EUR'" );

ВыбратьКонтекст( "Курсы" );

ПерейтиВНачало( "Курсы" );

WHILE ( !КонецКонтекста( "Курсы" ) )

{

    IF ( Курсы.Value <> 0 )

    {

        ЗАПРОС( "DELETE FROM sprrate

        WHERE DATEDIFF( day, date, '" + Курсы.date + "' ) = 0 AND code = 'EUR'" );

        ЗАПРОС( "INSERT INTO sprrate ( code, date, rate )

        VALUES ( 'EUR', '" + Курсы.date + "', " +

        STR( ЕСЛИ( ОбратныйКурс, 1 / Курсы.Value, Курсы.Value ), 20, 8 ) + ")" );

    }

    SKIP( );

}

УдалитьКонтекст( "Курсы" );

ФайлУдалить( ИмяФайла );

Скрипт автоматического создания документа Выпуск и комплектация при записи Документа кассовой смены

js
// Данный скрипт предназначен для использования в точке зрения

// в проверке документа кассовой смены перед записью.

// Загружаем реквизиты документа

ДобавитьКонтекст( "SELECT ndok, date, firm, rs, sklad, cur, cur_rate, branch, identity_column

FROM spr008

WHERE identity_column= " + @ИДДокумента, "Документ" );

ОсновнойУчет = ЗАПРОС( "SELECT dbo.fn_getdefaultaccount ( '" + _ТОЧКАЗРЕНИЯ + "' )" );

// Если у документа есть выписанные на основании документы

// выпуска и комплектации, то ничего не делаем

IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM crosslink

WHERE code = '008' AND ic= " + @ИДДокумента + " AND

cr_code = '009') THEN 1 ELSE 0 END " ) == 1 )

RETURN true;

ИмяТаблицыПродукции = "#" + УникальноеИмя( );

//------- Создаем таблицу для сбора необходимой информации

ЗАПРОС( "CREATE TABLE " + ИмяТаблицыПродукции + "

(nn char(10), nnname char(250), kolp float, incena float, cena float, ed char(15),

kodn char(2), koef_e float, koef_c float, sklad char( 3 ) ) " );

СистемноеСообщение( "Пожалуйста, подождите. " +

"Идет проверка документа на наличие производимой продукции." );

ДобавитьКонтекст( "SELECT nn, nnname, SUM( kolp ) AS kolp, ed, kodn, koef_e, koef_c

FROM spec008

WHERE ic= " + @ИДДокумента + "

GROUP BY nn, nnname, ed, kodn, koef_e, koef_c ", "Спецификация" );

ВыбратьКонтекст( "Спецификация" );

ИтогоСумма = 0.00;

WHILE ( !КонецКонтекста( "Спецификация" ) )

{

    //------- Если в карточке товара не стоит галочка Формировать автоматически - пропускаем

    IF ( ЗАПРОС( "SELECT f_make FROM sprnn WHERE nn= '" + Спецификация.nn + "' " ) )

    {

        //------- Проверяем наличие необходимого количества уже собранного на складе

        ДобавитьКонтекст( "EXECUTE sp_calcsklad '" + Спецификация.nn + "', '" +

        TTOC( Документ.date ) + "', '" + Документ.sklad + "', '" +

        ОсновнойУчет + "'", "ОстатокНаДату" );

        ДобавитьКонтекст( "EXECUTE sp_calcsklad '" + Спецификация.nn + "', '', '" +

        Документ.sklad + "', '" + ОсновнойУчет + "'", "ТекущийОстаток" );

        // Если не хватает остатка, то добавляем строку в таблицу

        IF ( ROUND( Спецификация.kolp - ОстатокНаДату.kolp, 3 ) > 0 OR

        ROUND( Спецификация.kolp - ТекущийОстаток.kolp, 3 ) > 0 )

        {

            Количество = MAX( ROUND( Спецификация.kolp - ОстатокНаДату.kolp, 3 ),

            ROUND( Спецификация.kolp - ТекущийОстаток.kolp, 3 ) );

            Склад = ЗАПРОС( "SELECT sklad_ingredients FROM sprres_g

            WHERE code= (SELECT group_ FROM sprres

            WHERE code= '" + Спецификация.nn + "')" );

            ЗАПРОС( "INSERT INTO " + ИмяТаблицыПродукции + "

            ( nn, nnname, kolp, cena, incena, ed, kodn, koef_e, koef_c, sklad )

            VALUES ( '" + STDF( Спецификация.nn ) + "', '" +

            STDF( Спецификация.nnname ) + "', " +

            STR( Количество, 20, 8 ) + ", " +

            STR( ОстатокНаДату.cena, 20, 8 ) + ", " +

            STR( ОстатокНаДату.cena, 20, 8 ) + ", '" +

            STDF( Спецификация.ed ) + "', '" +

            STDF( Спецификация.kodn ) + "', " +

            STR( Спецификация.koef_e, 20, 8 ) + ", " +

            STR( Спецификация.koef_c, 20, 8 ) + ", '" + Склад + "' ) " );

            ИтогоСумма += ( Спецификация.kolp - ОстатокНаДату.kolp) *

            ОстатокНаДату.cena;

        }

        УдалитьКонтекст( "ОстатокНаДату" );

        УдалитьКонтекст( "ТекущийОстаток" );

    }

    Пропустить( 1, "Спецификация" );

}

УдалитьКонтекст( "Спецификация" );

//------ Начинаем транзакцию для записи документа Выпуск и комплектация

ЗАПРОС( "BEGIN TRANSACTION" );

//------ Создаем документ Выпуск и комплектация

//------ Код Выпускаи комплектации- 009

// Формируем список учетов для нового документа

СписокУчетов = "";

ДобавитьКонтекст( "SELECT account_ FROM specviewpoints_def

WHERE code= '" + _ТОЧКАЗРЕНИЯ + "' AND objtype= 'DOC' AND

objcode= '009' AND t_concept = ''", "МоделиУчета");

WHILE ( !КонецКонтекста( "МоделиУчета" ) )

{

    СписокУчетов += МоделиУчета.account_;

    Пропустить( 1, "МоделиУчета" );

}

УдалитьКонтекст( "МоделиУчета" );


СписокУчетов = ALLTRIM( СписокУчетов );

ДобавитьКонтекст( "EXECUTE sp_insertdoc '009', '', '" + Документ.date + "', '', '" +

Документ.firm + "', '', 'RUB', '', '" + СписокУчетов + "', '" +

_ТОЧКАЗРЕНИЯ + "', 0, '" + ОсновнойУчет + "'", "ident" );


ДобавитьКонтекст(

    "UPDATE spr009 SET

    f_make = 1,

    sklad = '" + Документ.sklad + "',

    sklad_d = '" + Документ.sklad + "',

    summa = " + STR( ИтогоСумма, 20, 8 ) + ",

    firm = '" + Документ.firm + "',

    rs = '" + Документ.rs + "',

    branch = '" + Документ.branch + "',

    cur = '" + Документ.cur + "',

    cur_rate= " + STR( Документ.cur_rate, 16, 8 ) + ",

    taccess = '', caccess='',

    note = 'По документу кассовой смены № " +

    ALLTRIM( Документ.ndok ) + " от " + DTOC( Документ.date ) + "'

    WHERE identity_column= " + ident.ident, "Пустой" );

УдалитьКонтекст( "Пустой" );


ДобавитьКонтекст(

    "INSERT INTO spec009 ( ic, nn, spec_ic, ed, kolp, nnname, incena, cena, summa,

    kodn, koef_e, koef_c, f_make, sklad )

    SELECT " + ident.ident + ", nn, 0, ed, kolp, nnname, incena, cena, kolp * cena,

    kodn, koef_e, koef_c, 1, sklad

    FROM " + ИмяТаблицыПродукции, "Пустой" );

УдалитьКонтекст( "Пустой" );


//-------- Вызываем процедуру формирования состава продукции

ЗАПРОС("EXECUTE sp_recalc009 " + ident.ident );


// Добавляем связь на основании

ДобавитьКонтекст(

"INSERT INTO crosslink (code, ic, ndok, date, cr_code, cr_ic, cr_ndok, cr_date, cr_type )

VALUES ( '008'," + Документ.identity_column + ", '" + Документ.ndok + "', '" +

TTOC( Документ.date ) + "', '009'," + ident.ident + ", '" + ident.ndok + "', '" +

TTOC( ident.date ) + "', '0' )", "Пустой" );

УдалитьКонтекст( "Пустой" );


ЗАПРОС("IF @@TRANCOUNT > 0 COMMIT TRANSACTION");

СистемноеСообщение( );

УдалитьКонтекст( "Документ" );

//------ Вызываем созданный документ на редактирование

ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕ_ПРОСМОТРДОКУМЕНТА, "009", ident.ident );

УдалитьКонтекст( "ident" );

// Возвращаем ИСТИНУ, т.к. необходимо произвести запись до конца

RETURN true;

Скрипт автоматического создания документа Выписка из банка, на основании отмеченных в журнале платежных поручений

js

// Скрипт создает документ Выписка из банка на основании

// платежных поручений, отмеченных в журнале документов

// Скрипт предназначен для использования в качестве дополнительной команды в пункте

// меню на правой кнопке мыши в журнале платежных поручений

СписокУчетов = "001 002";

ДатаДокумента = ДАТАВРЕМЯ( );

НомерДокумента = "";

ФирмаДокумента = "0000001";

АвторДокумента = "";

ВалютаДокумента = "RUB";

_ТОЧКАЗРЕНИЯ = "0000000001";

КодДенежногоКармана = "001";

РасчетныйСчет = "12345678909876543210";


ИДБанковскойВыписки = ЗАПРОС( "EXECUTE sp_insertdoc '012', '', '" + ДатаДокумента + "',

'" + НомерДокумента + "', '" + ФирмаДокумента + "',

'" + АвторДокумента + "', '" + ВалютаДокумента + "', '',

'" + СписокУчетов + "', '" + _ТОЧКАЗРЕНИЯ + "', 0, '001'", "ident" );


ЗАПРОС( "UPDATE spr012 SET

    kassakod = '" + КодДенежногоКармана + "',

    firm = '" + ФирмаДокумента + "',

    rs = '" + РасчетныйСчет + "',

    summa = (SELECT SUM( sumin - sumout )

    FROM spec012 WHERE ic= " + ИДБанковскойВыписки + "),

    sumin = (SELECT SUM( sumin - sumout )

    FROM spec012 WHERE ic= " + ИДБанковскойВыписки + "),

    sumout = (SELECT SUM( sumin - sumout )

    FROM spec012 WHERE ic= " + ИДБанковскойВыписки + "),

    cur = 'RUB',

    cur_rate = 1,

    note = 'Документ создан автоматически на основании '+

    'отмеченных платежных поручений',

    author = SUSER_SNAME( ),

    branch = (SELECT branch FROM sprkskod

    WHERE code = '" + КодДенежногоКармана + "' )

    WHERE identity_column = " + ИДБанковскойВыписки );

    ДобавитьКонтекст( "INSERT INTO spec012 ( ic, client, contract, code_s, ic_s, ndok_s, date_s,

    note_s, sumout, branch )

    SELECT " + ИДБанковскойВыписки + ", spr.client, spr.contract, spr.code,

    spr.ic, spr.ndok, spr.date, spr.note, spr.summa, spr.branch

    FROM spr000 spr

    INNER JOIN " + _ИМЯТАБЛИЦЫ + " temp ON temp.code = spr.code AND

    temp.ic = spr.ic", "СписокСтрок");

УдалитьКонтекст("СписокСтрок");

ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕ_ПРОСМОТРДОКУМЕНТА, "012", ИДБанковскойВыписки );