Преобразование Строки в Дату (форматы W3C и GNU)

Публикация № 70017

Разработка - Математика и алгоритмы

35
Сталкнулся уже не в первый раз с проблемой преобрабования строки в дату.
К сожалению аналогов strtotime для 1С не нашлось.
Написал ручками по документации к форматам.
Функция преобразует дату форматов  
  1. Submitted to W3C 15 September 1997 http://www.w3.org/TR/NOTE-datetime  
  2. GNU формат   http://www.gnu.org/software/tar/manual/html_node/Date-input-formats.html#SEC119
  в дату 1С.
GNU поддерживается не полностью:
  - микросекунды не могут отделять ",", а только "."
  - зоны только GMT UTC Z
  - не поддерживаются форматы в описании  7.6, 7.7, 7.8, 7.9

Проверил много вариантов исходного формата даты, но не все.
Тестируйте, будем дорабатывать.

В файлах можно скачать в виде обработки.

//////////////////////////////////////////////////////////////////////////////////
//  Функция преобразует дату форматов
//  1. Submitted to W3C 15 September 1997 http://www.w3.org/TR/NOTE-datetime
//  2. GNU формат   http://www.gnu.org/software/tar/manual/html_node/Date-input-formats.html#SEC119
//  в дату 1С
// GNU поддерживается не полностью:
//  - микросекунды не могут отделять ",", а только "."
//  - зоны только GMT UTC Z
//  - не поддерживаются форматы в описании  7.6, 7.7, 7.8, 7.9
// Автор: В.Косилов
Функция AnyDateStrToDate(Знач СтрокаДаты)
   
//  The formats are as follows. Exactly the components shown here must be present, with exactly this punctuation.
    //Note that the "T" appears literally in the string, to indicate the beginning of the time element, as specified in ISO 8601.
    //   Year:
    //    YYYY (eg 1997)
    //   Year and month:
    //    YYYY-MM (eg 1997-07)
    //   Complete date:
    //    YYYY-MM-DD (eg 1997-07-16)
    //   Complete date plus hours and minutes:
    //    YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
    //   Complete date plus hours, minutes and seconds:
    //    YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
    //   Complete date plus hours, minutes, seconds and a decimal fraction of a
    //second
    //    YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)
   
если СтрДлина(СтрокаДаты) = 4 и ПроверкаЧисло(СтрокаДаты)<>неопределено  тогда
       
//   Year:
        //    YYYY (eg 1997)
       
возврат Дата(СтрокаДаты,1,1);
    иначеесли
СтрДлина(СтрокаДаты) = 7 и ПроверкаЧисло(СтрЗаменить(СтрокаДаты,"-",""))<>неопределено и
       
ПроверкаЧисло(Лев(СтрокаДаты,4))<>неопределено тогда
       
//   Year and month:
        //    YYYY-MM (eg 1997-07)
       
СтрокаДаты = СтрЗаменить(СтрокаДаты,"-","");
       
СтрокаДаты=СтрокаДаты+"01";
        возврат
Дата(СтрокаДаты);
    иначеесли
СтрДлина(СтрокаДаты) = 8 и ПроверкаЧисло(СтрокаДаты)<>неопределено тогда
       
// YYYYMMDD
       
возврат Дата(СтрокаДаты);
    иначеесли
СтрДлина(СтрокаДаты) = 10 и ПроверкаЧисло(СтрЗаменить(СтрокаДаты,"-",""))<>неопределено и
       
ПроверкаЧисло(лев(СтрокаДаты,4))<>неопределено и ПроверкаЧисло(Сред(СтрокаДаты,6,2))<>неопределено и
       
ПроверкаЧисло(Сред(СтрокаДаты,9,2))<>неопределено тогда
       
//   Complete date:
        //    YYYY-MM-DD (eg 1997-07-16)
       
СтрокаДаты = СтрЗаменить(СтрокаДаты,"-","");
        возврат
Дата(СтрокаДаты);
    иначеесли
СтрДлина(СтрокаДаты) > 10 и ПроверкаЧисло(СтрЗаменить(Лев(СтрокаДаты,10),"-",""))<>неопределено   // первая часть предположительно дата
           
и (Сред(СтрокаДаты,11,1)="T") // Разделитель даты и времени на своем месте
           
и (Найти(СтрокаДаты,"Z")>0 или Найти(СтрокаДаты,"+")>0 или Найти(СтрокаДаты,"-")>0) // присутствует TZD
           
тогда
           
//   Complete date plus hours and minutes:
            //    YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
            //   Complete date plus hours, minutes and seconds:
            //    YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
            //   Complete date plus hours, minutes, seconds and a decimal fraction of a
            //second
            //    YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)
            // Выделим Дату в формат YYYYMMDD
           
ТолькоДата = СтрЗаменить(Лев(СтрокаДаты,10),"-","");
           
// Выделим Время в форматы hh:mm или hh:mm:ss или hh:mm:ss.s
           
СимвZ = Найти(Сред(СтрокаДаты,12,20),"Z");
           
СимвПлюс = Найти(Сред(СтрокаДаты,12,20),"+");
           
СимвМинус = Найти(Сред(СтрокаДаты,12,20),"-");
           
ДлинаВремени = ?(СимвZ>0,СимвZ, ?(СимвПлюс>0, СимвПлюс, СимвМинус))-1;
           
ТолькоВремя Сред(СтрокаДаты,12, ДлинаВремени);
           
Часы = Лев(ТолькоВремя,2);
           
Минуты = Сред(ТолькоВремя,4,2);
           
Секунды = Сред(ТолькоВремя,7,2);

           
// Дыделим добавку часового пояса
           
если СимвZ>0 тогда
               
ДобавкаЧасов = 0;
               
ДобавкаМинут = 0;
            иначеесли
СимвПлюс>0 тогда
               
ДобавкаЧасов = ПроверкаЧисло(Сред(СтрокаДаты,СимвПлюс+12,2));
               
ДобавкаМинут = ПроверкаЧисло(Сред(СтрокаДаты,СимвПлюс+15,2));
            иначе
               
ДобавкаЧасов = -ПроверкаЧисло(Сред(СтрокаДаты,СимвМинус+12,2));
               
ДобавкаМинут = -ПроверкаЧисло(Сред(СтрокаДаты,СимвМинус+15,2));
            конецесли;

           
ДатаЗнч = Дата(ТолькоДата+Часы+Минуты+Секунды);
           
ДатаЗнч = ДатаЗнч + (ДобавкаМинут*60 + ДобавкаЧасов*60*60);
            возврат
ДатаЗнч;

        иначе
           
// Пробуем формат GNU
            // Сначала разобъем на блоки по пробелу
           
МассивБлоков = новый Массив;
           
ИщемНачало = истина;
           
ТекБлок = "";
           
СтрокаДаты = нрег(СтрокаДаты);
            Для
НомерСимволаСтроки=1 по СтрДлина(СтрокаДаты) цикл
               
ТекСимвол Сред(СтрокаДаты,НомерСимволаСтроки,1);
                если Не (
ТекСимвол=" " или ТекСимвол=",") тогда
                   
ТекБлок = ТекБлок + ТекСимвол;
                   
ИщемНачало = ложь;
                    продолжить;
                иначеесли
ИщемНачало тогда
                    продолжить;
                иначе
                   
МассивБлоков.Добавить(ТекБлок);
                   
ТекБлок = "";
                   
ИщемНачало = истина;
                конецесли;
            конеццикла;
            если Не
ИщемНачало тогда
               
МассивБлоков.Добавить(ТекБлок);
            конецесли;
           
// Теперь МассивБлоков содержит блоки строки даты

            // Добавим литералы днейнедели и месяце (можно добавлять еще языки)
           
Мес = новый Соответствие;
           
Мес.Вставить("jan",1);
           
Мес.Вставить("feb",2);
           
Мес.Вставить("mar",3);
           
Мес.Вставить("apr",4);
           
Мес.Вставить("may",5);
           
Мес.Вставить("jun",6);
           
Мес.Вставить("jul",7);
           
Мес.Вставить("aug",8);
           
Мес.Вставить("sep",9);
           
Мес.Вставить("sept",9);
           
Мес.Вставить("oct",10);
           
Мес.Вставить("nov",11);
           
Мес.Вставить("dec",12);

           
Мес.Вставить("jan.",1);
           
Мес.Вставить("feb.",2);
           
Мес.Вставить("mar.",3);
           
Мес.Вставить("apr.",4);
           
Мес.Вставить("may.",5);
           
Мес.Вставить("jun.",6);
           
Мес.Вставить("jul.",7);
           
Мес.Вставить("aug.",8);
           
Мес.Вставить("sep.",9);
           
Мес.Вставить("sept.",9);
           
Мес.Вставить("oct.",10);
           
Мес.Вставить("nov.",11);
           
Мес.Вставить("dec.",12);

           
Мес.Вставить("january",1);
           
Мес.Вставить("february",2);
           
Мес.Вставить("febr",2);
           
Мес.Вставить("march",3);
           
Мес.Вставить("april",4);
           
Мес.Вставить("may",5);
           
Мес.Вставить("june",6);
           
Мес.Вставить("july",7);
           
Мес.Вставить("august",8);
           
Мес.Вставить("september",9);
           
Мес.Вставить("sept",9);
           
Мес.Вставить("october",10);
           
Мес.Вставить("november",11);
           
Мес.Вставить("december",12);

           
Мес.Вставить("январь",1);
           
Мес.Вставить("февраль",2);
           
Мес.Вставить("март",3);
           
Мес.Вставить("апрель",4);
           
Мес.Вставить("май",5);
           
Мес.Вставить("июнь",6);
           
Мес.Вставить("июль",7);
           
Мес.Вставить("август",8);
           
Мес.Вставить("сентябрь",9);
           
Мес.Вставить("октябрь",10);
           
Мес.Вставить("ноябрь",11);
           
Мес.Вставить("декабрь",12);

           
Мес.Вставить("янв",1);
           
Мес.Вставить("фев",2);
           
Мес.Вставить("мар",3);
           
Мес.Вставить("апр",4);
           
Мес.Вставить("май",5);
           
Мес.Вставить("июн",6);
           
Мес.Вставить("июл",7);
           
Мес.Вставить("авг",8);
           
Мес.Вставить("сен",9);
           
Мес.Вставить("окт",10);
           
Мес.Вставить("ноя",11);
           
Мес.Вставить("дек",12);

           
Мес.Вставить("янв.",1);
           
Мес.Вставить("фев.",2);
           
Мес.Вставить("мар.",3);
           
Мес.Вставить("апр.",4);
           
Мес.Вставить("май.",5);
           
Мес.Вставить("июн.",6);
           
Мес.Вставить("июл.",7);
           
Мес.Вставить("авг.",8);
           
Мес.Вставить("сен.",9);
           
Мес.Вставить("окт.",10);
           
Мес.Вставить("ноя.",11);
           
Мес.Вставить("дек.",12);


           
ДНед = новый Массив;
           
ДНед.Добавить("monday");
           
ДНед.Добавить("tuesday");
           
ДНед.Добавить("wednesday");
           
ДНед.Добавить("thursday");
           
ДНед.Добавить("friday");
           
ДНед.Добавить("saturday");
           
ДНед.Добавить("sunday");
           
ДНед.Добавить("mon");
           
ДНед.Добавить("tue");
           
ДНед.Добавить("wed");
           
ДНед.Добавить("thu");
           
ДНед.Добавить("fri");
           
ДНед.Добавить("sat");
           
ДНед.Добавить("sun");


           
ДНед.Добавить("понедельник");
           
ДНед.Добавить("вторник");
           
ДНед.Добавить("среда");
           
ДНед.Добавить("четверг");
           
ДНед.Добавить("пятница");
           
ДНед.Добавить("суббота");
           
ДНед.Добавить("воскресенье");
           
ДНед.Добавить("пн");
           
ДНед.Добавить("вт");
           
ДНед.Добавить("ср");
           
ДНед.Добавить("чт");
           
ДНед.Добавить("пт");
           
ДНед.Добавить("сб");
           
ДНед.Добавить("вс");

           
// Текущие данные
           
День = неопределено;
           
Месяц = неопределено;
           
Год = неопределено;
           
Часов = неопределено;
           
Минут = неопределено;
           
Секунд = неопределено;

           
ЗнакДобавки = 1;
           
ДобавкаЧасов = неопределено;
           
ДобавкаМинут = неопределено;
           
ЧасовойПояс = неопределено;

           
БлокВремени = неопределено;

           
БлокВремениСЧасовымПоясом = неопределено;
           
БлокДатыСРазделителем = неопределено;

           
ЧислаХ = новый массив; // для неопределенных числовых значений

           
Для каждого Блок из МассивБлоков цикл
                если
Найти(Блок,":")>0 и Найти(Блок,"+")=0 и Найти(Блок,"-")=0 тогда
                   
// Это блок времени (исключили часовой пояс вида +hh:mm и -hh:mm)
                    // 20:02:00.000000
                    // 20:02
                    // 8:02pm
                   
БлокВремени = Блок;
                иначеесли
ДНед.Найти(Блок)<>неопределено тогда
                   
// Это блок дня недели - просто опускаем (его необходимо исключить, чтобы не мешал)
                    //продолжить;
               
иначеесли isset(Мес[Блок]) тогда
                   
// Нашли месяц
                   
Месяц = Мес[Блок];
                   
// продолжить;
               
иначеесли Найти(Блок, "gmt")>0 или Найти(Блок, "z")>0 или Найти(Блок, "utc")>0 тогда
                   
// Нашли блок часового пояса для варианто UTC, UTC+hhmm, UTC-hh:mm
                   
ЧасовойПояс = Блок;
                иначеесли
Лев(Блок,1) = "-" или Лев(Блок,1) = "+" и
                   
ПроверкаЧисло(СтрЗаменить(Блок,":","")<>неопределено) тогда
                   
// Это должен быть только часовой пояс  вида +hhmm, -hhmm, +hh:mm, -hh:mm
                   
ЧасовойПояс = "" + ЧасовойПояс + Блок;
                иначеесли
Найти(Блок,":")>0 и (Найти(Блок, "-")>0 или Найти(Блок, "+")>0) тогда
                   
// Это время вместе с добавкой вида 20:02-0500 # In EST (U.S. Eastern Standard Time).
                   
БлокВремениСЧасовымПоясом = Блок;
                    если
Найти(БлокВремениСЧасовымПоясом,"-") тогда
                       
ЗнакДобавки = -1;
                    конецесли;
                   
МассивВремениИДобавки = split("+-",БлокВремениСЧасовымПоясом);
                   
БлокВремени = МассивВремениИДобавки[0];
                   
ЧасовойПояс = "" + ?(ЗнакДобавки>0,"+","-")+МассивВремениИДобавки[1];

                иначеесли (
Найти(Блок,"-")>0 и ПроверкаЧисло(СтрЗаменить(Блок,"-",""))<>неопределено)
                    или (
Найти(Блок,"/")>0 и ПроверкаЧисло(СтрЗаменить(Блок,"/",""))<>неопределено)
                    или (
Найти(Блок,"\")>0 и ПроверкаЧисло(СтрЗаменить(Блок,"\",""))<>неопределено)
                    или (
Найти(Блок,".")>0 и ПроверкаЧисло(СтрЗаменить(Блок,".",""))<>неопределено) тогда
                   
// Это дата формата
                    //                  1972-09-24     # ISO 8601.
                    //72-9-24        # Assume 19xx for 69 through 99,
                    //             # 20xx for 00 through 68.
                    //72-09-24       # Leading zeros are ignored.
                    //9/24/72        # Common U.S. writing.
                    // 01.05.02  -  тоже возможно проверить
                    // 9/24 - без года - день в конце, но с разделителем


                   
БлокДатыСРазделителем = Блок;
                иначеесли
ПроверкаЧисло(Блок)<>неопределено тогда
                   
// остались день месц год - день должен быть первым при этом
                    // если месяц числовой то порядок следования год-месяц-день или месяц-день
                    // а если прописью то допустимы
                    // day month year
                    // day month
                    // month day year
                    // day-month-year
                    //
                    //Or, omitting the year:
                    //  month day
                    // С этим разберемся потом
                   
ЧислаХ.Добавить(Число(Блок));
                иначеесли (
Найти(Блок,"-")>0)
                    или (
Найти(Блок,"/")>0)
                    или (
Найти(Блок,"\")>0)
                    или (
Найти(Блок,".")>0)  тогда
                   
// может такое  24-sep-72 24/sep/72 24\sep\72 24.sep.72
                   
БлокДатыСРазделителем = Блок;
                конецесли;
            КонецЦикла;
           
// Теперь можно смотреть что есть.

            // Сначала дата
           
если БлокДатыСРазделителем<>неопределено тогда
                если (
Найти(Блок,"/")>0 и ПроверкаЧисло(СтрЗаменить(Блок,"/",""))<>неопределено) тогда
                   
// Амеркианский стандарт 9/24/72        # Common U.S. writing.

                   
МассивДаты = split("/.\", БлокДатыСРазделителем);
                   
КвоЭл = МассивДаты.Количество();
                    если
КвоЭл>2 тогда
                       
Год = МассивДаты[2];
                       
Месяц = МассивДаты[0];
                       
День = МассивДаты[1];
                    иначе
                       
Год = Год(ТекущаяДата());
                       
Месяц = МассивДаты[0];
                       
День = МассивДаты[1];
                    конецесли;
                иначе
               
МассивДаты = split("-.", БлокДатыСРазделителем);
                если
МассивДаты.Количество()>2 тогда
                   
// Дата с годом
                   
если ПроверкаЧисло(МассивДаты[1])=неопределено тогда
                       
//месяц прописью -формат день-месц-год
                       
Месяц=Мес[МассивДаты[1]];
                       
Год = МассивДаты[2];
                       
День = МассивДаты[0];
                    иначе
                       
// месяц числом - формат год-месяц-день
                       
Год = МассивДаты[0];
                       
Месяц = МассивДаты[1];
                       
День = МассивДаты[2];
                    конецесли;
                иначе
                   
// Дата без года
                   
если isset(Мес[МассивДаты[1]]) тогда
                       
// месяц прописью на втором месте - на первом день
                       
Месяц = Мес[МассивДаты[1]];
                       
День = МассивДаты[0];
                       
Год = Год(ТекущаяДата());
                    иначеесли
isset(Мес[МассивДаты[0]])  тогда
                       
Месяц = Мес[МассивДаты[0]];
                       
День = МассивДаты[1];
                       
Год = Год(ТекущаяДата());
                    иначе
// месяц числом без года
                       
Год = Год(ТекущаяДата());
                       
Месяц = МассивДаты[0];
                       
День = МассивДаты[1];
                    КонецЕсли;
                конецесли;
             конецесли;
            иначеесли
Месяц<>Неопределено тогда
               
// Месяц прописью - ищем день и год в ЧислаХ
               
День = ЧислаХ[0];
                если
ЧислаХ.Количество()>1 тогда
                   
Год = ЧислаХ[1];
                иначе
                   
Год = Год(ТекущаяДата());
                конецесли;
            иначе
// День месяц и годв числаХ
               
КвоЧисел ЧислаХ.Количество();
                если
КвоЧисел>2 тогда
                   
// Год месяц день - хотя такого недолжно быть
                   
Год = ЧислаХ[0];
                   
Месяц = ЧислаХ[1];
                   
День = ЧислаХ[2];
                иначеесли
КвоЧисел>1 тогда
                   
// Год опущен Месяц - день
                   
Год = Год(ТекущаяДата());
                   
Месяц = ЧислаХ[0];
                   
День = ЧислаХ[1];
                иначеесли
КвоЧисел>0 тогда
                   
// Опущен год и месяц - тоже не должно быть
                   
День = ЧислаХ[0];
                   
Год = Год(ТекущаяДата());
                   
Месяц = Месяц(ТекущаяДата());
                иначе
                   
// Опущена вся дата
                   
День = День(ТекущаяДата());
                   
Год = Год(ТекущаяДата());
                   
Месяц = Месяц(ТекущаяДата());
                конецесли;
            КонецЕсли;

           
// Теперь время
           
если БлокВремени<>Неопределено тогда
               
БлокВремени = СтрЗаменить(БлокВремени, "z", "");
               
БлокВремени = СтрЗаменить(БлокВремени, "gmt", "");
               
БлокВремени = СтрЗаменить(БлокВремени, "utc", "");

               
МассивВремени = split(":",БлокВремени,3);
               
КвоЭлементов = МассивВремени.Количество();
                если
КвоЭлементов>2 тогда
                   
// часы минуты секунды
                   
Часов = МассивВремени[0];
                   
СекТекст = Сред(МассивВремени[2],3,4);
                    если
Найти(СекТекст,"am")>0 или Найти(СекТекст,"a.m.")>0 тогда
                       
Часов = ?(Число(Часов)=12, 0, Число(Часов));
                    иначеесли
Найти(СекТекст,"pm")>0 или Найти(СекТекст,"p.m.")>0 тогда
                       
Часов = ?(Число(Часов)=12, 12, Число(Часов)+12);
                    конецесли;
                       
Минут = МассивВремени[1];
                       
Секунд = Лев(МассивВремени[2],2);

                иначеесли
КвоЭлементов>1 тогда
                   
Часов МассивВремени[0];
                   
СекТекст = Сред(МассивВремени[1],3,4);
                    если
Найти(СекТекст,"am")>0 или Найти(СекТекст,"a.m.")>0 тогда
                       
Часов = ?(Число(Часов)=12, 0, Число(Часов));
                    иначеесли
Найти(СекТекст,"pm")>0 или Найти(СекТекст,"p.m.")>0 тогда
                       
Часов = ?(Число(Часов)=12, 12, Число(Часов)+12);
                    конецесли;
                   
Минут = Лев(МассивВремени[1],2);
                   
Секунд = 0;
                иначе
                   
// только часы - не может быть, но пробуем
                   
Часов = МассивВремени[0];
                   
Минут = 0;
                   
Секунд = 0;
                конецесли;
            иначе
               
// время опущено - ставим 0
               
Часов = 0;
               
Минут = 0;
               
Секунд = 0;

            конецесли;

           
// Теперь часовой пояс
           
ЧасовойПояс = СтрЗаменить(ЧасовойПояс,"gmt","");
           
ЧасовойПояс = СтрЗаменить(ЧасовойПояс,"utc","");
           
ЧасовойПояс = СтрЗаменить(ЧасовойПояс,"z","");
           
ЧасовойПояс = СтрЗаменить(ЧасовойПояс,":","");
            Если
СтрДлина(ЧасовойПояс)<5 тогда
               
// неизвестный формат пояса
               
ДобавкаЧасов = 0;
               
ДобавкаМинут = 0;
            иначе
                если
Лев(ЧасовойПояс,1)="+" тогда
                   
ЗнакДобавки = 1;
                иначеесли
Лев(ЧасовойПояс,1)="-" тогда
                   
ЗнакДобавки = -1;
                иначе
                   
// неверный формат добавки
                   
ДобавкаЧасов = 0;
                   
ДобавкаМинут = 0;
                конецесли;
               
ДобавкаЧасов = Число(Сред(ЧасовойПояс,2,2))*ЗнакДобавки;
               
ДобавкаМинут = Число(Сред(ЧасовойПояс,4,2))*ЗнакДобавки;
            конецесли;

            если
Число(год)<=68 тогда
               
Год = Число(Год) + 2000;
            иначеесли
Число(год)<100 тогда
               
Год = Число(Год) + 1900;
            конецесли;
           
ДатаЗнч = Дата(Год,Месяц,День,Часов,Минут,Секунд);
           
ДатаЗнч = ДатаЗнч + (ДобавкаМинут*60 + ДобавкаЧасов*60*60);
            возврат
ДатаЗнч;

   
//where:
    //   YYYY = four-digit year
    //   MM   = two-digit month (01=January, etc.)
    //   DD   = two-digit day of month (01 through 31)
    //   hh   = two digits of hour (00 through 23) (am/pm NOT allowed)
    //   mm   = two digits of minute (00 through 59)
    //   ss   = two digits of second (00 through 59)
    //   s    = one or more digits representing a decimal fraction of a second
    //   TZD  = time zone designator (Z or +hh:mm or -hh:mm)

    //This profile does not specify how many digits may be used to represent the decimal fraction of a second. An adopting standard that permits fractions of a second must specify both the minimum number of digits (a number greater than or equal to one) and the maximum number of digits (the maximum may be stated to be "unlimited").

    //This profile defines two ways of handling time zone offsets:
    //Times are expressed in UTC (Coordinated Universal Time), with a special UTC designator ("Z").
    //Times are expressed in local time, together with a time zone offset in hours and minutes. A time zone offset of "+hh:mm" indicates that the date/time uses a local time zone which is "hh" hours and "mm" minutes ahead of UTC. A time zone offset of "-hh:mm" indicates that the date/time uses a local time zone which is "hh" hours and "mm" minutes behind UTC.

    //A standard referencing this profile should permit one or both of these ways of handling time zone offsets.
конецесли;
 возврат неопределено;
КонецФункции

//////////////////////////////////////////////////////////////////////////////////////
// Функция разбивает строку по разделителям, лимит определяет максимальное количество слов
// аналог split в PHP
Функция split(СимволыРазделители, строка, лимит = неопределено) экспорт

НоваяСтрока = Строка;
МассивСлов = новый Массив;
ИщемНачало = истина;
ТекСлово = "";

Для
НомерСимволаСтроки=1 по СтрДлина(Строка) цикл
   
ТекСимвол Сред(Строка,НомерСимволаСтроки,1);
    если
Найти(СимволыРазделители, ТекСимвол)=тогда
       
ТекСлово = ТекСлово + ТекСимвол;
       
ИщемНачало = ложь;
        продолжить;
    иначеесли
ИщемНачало тогда
       
МассивСлов.Добавить("");
        если
МассивСлов.Количество()=лимит тогда
            возврат
МассивСлов;
        конецесли;
        продолжить;
    иначе
       
МассивСлов.Добавить(ТекСлово);
        если
МассивСлов.Количество()=лимит тогда
            возврат
МассивСлов;
        конецесли;
       
ТекСлово = "";
       
ИщемНачало = истина;
    конецесли;
конеццикла;
если Не
ИщемНачало тогда
   
МассивСлов.Добавить(ТекСлово);
конецесли;
возврат
МассивСлов;
конецфункции

Функция
isset(Парам)
    возврат ?(
Парам=неопределено, ложь,истина);
конецфункции

Функция
ПроверкаЧисло(Чс)
    попытка
       
Ло = Число(Чс);
    исключение
        возврат неопределено;
    конецпопытки;
    возврат
Ло;
КонецФункции

35

Скачать файлы

Наименование Файл Версия Размер
Преобразование (конвертация) строки в дату - внешняя обработка epf
.epf 11,86Kb
01.11.14
93
.epf 11,86Kb 93 Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. anton.fly7 146 10.05.10 11:26 Сейчас в теме
очень радует наличие коментариев
никогда не могу заставить себя писать их )) только когда сильно долго переписываю код...
2. BigB 178 11.05.10 15:00 Сейчас в теме
Функция ПроверкаЧисло вызывается приличное число раз, а в ней конструкция Попытка/Исключение. Можно же и без этой конструкции обойтись. Посмотри в сторону вот такой вот команды XMLЗначение(Тип("Число"),ПредполагаемоеЧисло). Вот тут я писал парсер JSONа без единой Попытки/Исключения http://www.infostart.ru/public/61194/
3. kosilov 256 11.05.10 15:31 Сейчас в теме
На (2). Возможно и обойтись, но что Вас смущает в конструкции Попытка-исключение
Замедление скорости она вызывать не должна (если корректно реализована на уровне С++). А вот XMLЗначение скорее всего будет работать медленнее (но я не уверен).
В общем-то оптимизировать под скорость, надо и возможности есть. Возможно позже оптимизирую.
4. BigB 178 12.05.10 07:12 Сейчас в теме
(3) Попытка-исключение пожалуй самая медленная конструкция!
5. kosilov 256 12.05.10 15:15 Сейчас в теме
(4) Провел тесты
Код теста 1:
Процедура КнопкаВыполнитьНажатие(Кнопка)
	Метка =  ТекущаяДата();
	а=0;
	Кво=0;
	Пока ТекущаяДата()-Метка<10 цикл
		ПроверкаЧисло("10");
		Кво=кво+1;
	КонецЦикла;
    ПроверкаЧисло = Кво;
	Кво = 0;
	Метка =  ТекущаяДата();
	Кво=0;
	Пока ТекущаяДата()-Метка<10 цикл
	XMLЗначение(Тип("Число"),"10");
	Кво=кво+1;
	КонецЦикла;
    XMLЗначение = Кво;
	
КонецПроцедуры
Показать


Код теста 2:
Процедура КнопкаВыполнитьНажатие(Кнопка)
	Метка =  ТекущаяДата();
	а=0;
	Кво=0;
	Пока ТекущаяДата()-Метка<10 цикл
		ПроверкаЧисло("ц");
		Кво=кво+1;
	КонецЦикла;
    ПроверкаЧисло = Кво;
	Кво = 0;
	Метка =  ТекущаяДата();
	Кво=0;
	Пока ТекущаяДата()-Метка<10 цикл
	XMLЗначение(Тип("Число"),"10");
	Кво=кво+1;
	КонецЦикла;
    XMLЗначение = Кво;
	
КонецПроцедуры
Показать


Результат:

В тесте 1 XMLЗначение работает в 2 раза быстрее
В тесте 2 XMLЗначение работает в 3 раза быстрее (здесь и возникает исключение)

Но: XMLЗначение(Тип("Число"),"ц") - выдает ошибкувремени выполнения, соответственно без исключения всё равно не обойтись.

А в следующем коде:
Процедура КнопкаВыполнитьНажатие(Кнопка)
	Метка =  ТекущаяДата();
	а=0;
	Кво=0;
	Пока ТекущаяДата()-Метка<10 цикл
		ПроверкаЧисло("ц");
		Кво=кво+1;
	КонецЦикла;
    ПроверкаЧисло = Кво;
	Кво = 0;
	Метка =  ТекущаяДата();
	Кво=0;
	Пока ТекущаяДата()-Метка<10 цикл
		попытка
		XMLЗначение(Тип("Число"),"ц");
		исключение
		КонецПопытки;
	Кво=кво+1;
	КонецЦикла;
    XMLЗначение = Кво;
	
КонецПроцедуры
Показать

Блок XMLЗначение работает медленнее.

Впрочем при скоростях 4-8 тысяч исключений в секунду (на моей не самой быстрой машине) это вообще не существенно.
6. BoBaH4eC 17.09.10 16:04 Сейчас в теме
Нужно было преобразовать строку вида "September 16" в дату. Преобразовало без проблем и без всяких корректировок кода. Даже удивился. Очень люблю, когда разработка универсальна. Вообщем спасибо +++++
7. vugluscr1991 12 23.01.11 01:12 Сейчас в теме
Добавил в код
иначеесли Блок = "г." тогда
и
января, февраля ....
Все работает отлично. Дата, конечно, может и в не правильном формате,
но поставщики в прайсах в форматах не секут.
8. axelerleo 286 06.07.15 12:10 Сейчас в теме
Маленькое дополнение.
Попался мне нестандартный формат даты "15th Jun., 2015"
Пришлось немножко допилить ваш механизм - если блок начинается с цифр, а дальше идут не цифры, отсекаем только цифры. Получилось так:

RegExp = Новый COMОбъект("VBScript.RegExp");// создаем объект для работы с регулярными выражениями
	RegExp.MultiLine = Истина;  // истина — текст многострочный, ложь — одна строка
	RegExp.Global = Истина;     // истина — поиск по всей строке, ложь — до первого совпадения
	RegExp.IgnoreCase = Истина; // истина — игнорировать регистр строки при поиске
	
    RegExp.Pattern =  "^(\d+)\D+";
	
	ТекБлок = RegExp.Replace(ТекБлок,"$1");
9. bds22 14 10.11.15 09:10 Сейчас в теме
строку (присланную ЕГАИС) 2015-11-10T07:24:16.6163226
преобразовал неправильно
если я не ошибаюсь, из-за того, что не указано + или - для часового пояса
Оставьте свое сообщение

См. также

Рекомендательный сервис на основе коллаборативной фильтрации на 1С. Расширение формы подбора для УТ 11.4 29

Инструменты и обработки Программист Расширение (cfe) v8 ERP2 УТ11 КА2 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия УУ Абонемент ($m) Оптовая торговля Розничная торговля Практика программирования Математика и алгоритмы

В данной разработке реализован механизм рекомендаций товаров по принципу схожести товаров в корзине на основе алгоритма Item-to-Item от Amazon. Разобран алгоритм с демо базой и сделано расширение для УТ11.4 которое добавляет в форму подбора таблицу рекомендаций. Протестировано на 8.3.13.1865 на Управление торговлей, редакция 11 (11.4.8.63)

3 стартмани

25.09.2019    1685    5    informa1555    21       

Конвейер проверки качества кода 116

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Windows Абонемент ($m) Инструментарий разработчика Практика программирования Математика и алгоритмы Разработка

Jenkinsfile для выполнения проверки качества кода. Собирает информацию с АПК, EDT и BSL-LS. Сопоставляет ошибки с гит-репозиторием, выгруженным ГитКонвертором. Отправляет в Сонар.

3 стартмани

04.09.2019    4599    10    Stepa86    35       

Еще раз о рабочих днях. Быстрый способ расчета в запросах 4

Статья Программист Архив с данными v8 Абонемент ($m) Практика программирования Математика и алгоритмы Разработка

В статье рассмотрен механизм учета производственных графиков и рабочих дней. Предложен простой и быстрый алгоритм решения типичных задач: добавление рабочих дней к дате и нахождение разницы между датами в рабочих днях. Все вычисления производятся исключительно запросом, т.е. решение пригодно для СКД и динамических списков.

1 стартмани

20.06.2019    1636    Alxby    3       

Функциональное программирование в 1С 6

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования Математика и алгоритмы Разработка

Статья о функциональном программировании в 1С. Добавляем новые возможности. Пример передачи функций в качестве аргумента.

1 стартмани

28.03.2019    5458    alexey.kutya    26       

Иерархия библиотек. Автоматическое обновление или как отказаться от переопределяемых модулей 10

Статья Программист Архив с данными v8 Абонемент ($m) Практика программирования Математика и алгоритмы Разработка

В статье рассмотрен один из вариантов библиотечного подхода к разработке, позволяющий организовать иерархический вызов библиотечных процедур и упростить автоматическую сборку готового продукта из нескольких библиотек. Предлагаемый подход может служить одним из элементов CI/CD при разработке ПО на платформе 1С.

1 стартмани

04.03.2019    2505    Alxby    4       

Жизненный цикл управляемой формы. Шпаргалка разработчика 233

Статья Программист Архив с данными v8::УФ 1cv8.cf Абонемент ($m) Практика программирования Математика и алгоритмы

Прочитав когда-то давно книжку "Разработка управляемых форм", составил для себя такую схемку-напоминалку для обращения в процессе разработки. С тех пор не раз выручала и избавляла от необходимости лезть в гуглы.

1 стартмани

29.06.2018    21096    51    stas_ganiev    22       

Принципы ООП в 1С на примере реализации pattern Decorator 18

Статья Программист Архив с данными v8 1cv8.cf Абонемент ($m) Математика и алгоритмы

В данной статье будет рассмотрен пример реализации GoF паттерна проектирования decorator в среде разработки 1С. Основная цель данного шаблона, это возможность динамического расширения функциональности базового класса. Сразу оговорюсь, т.к. в 1С нет ООП, это будет не чистый пример реализации данного шаблона, однако свою задачу данный пример будет решать.

1 стартмани

21.06.2018    7740    4    lazarenko    6       

Строим "фасады" в 1С 60

Статья Программист Конфигурация (md, cf) v8 Россия Абонемент ($m) Практика программирования Математика и алгоритмы

Как реализовать функционал, чтобы не было “мучительно больно” при расширении требований.

1 стартмани

04.05.2018    14370    3    ktb    41       

Нечеткое сравнение строк. Метод Джаро-Винклера на 1С 127

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8::УФ 1cv8.cf Абонемент ($m) Математика и алгоритмы

Схожесть строк. Метод Джаро-Винклера. В обработке реализован алгоритм нечеткого сравнения строк.

3 стартмани

20.04.2018    14065    65    Serg1701    19       

"Взлом" теста "1С:Профессионал" методом машинного обучения 83

Статья Программист Внешний отчет (ert,erf) v8 1cv8.cf Абонемент ($m) Практика программирования Математика и алгоритмы

Нейронные сети – не единственная модель, реализующая принципы машинного обучения. Есть еще байесовская модель, которая математически строже и определеннее, поскольку построена на надежном фундаменте теории вероятностей. Применению байесовского вывода к решению интересной теоретической задачи и посвящена данная статья. Слово "взлом" в заголовке использовано для привлечения внимания. Речь идет исключительно о математическом методе, показанном на примере знакомой всем задачи. 

12.03.2018    15049    88    ildarovich    18       

Случайность, совпадение, закономерность. Генератор случайных чисел 6

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Практика программирования Математика и алгоритмы Игры

Объект ГенераторСлучайныхЧисел удобно выдает случайные числа в заданном интервале значений. Исследование особенностей, рассуждения на тему случайных чисел, практика применения. Увлекательно в игровой форме можно исследовать работу генератора случайных чисел.

1 стартмани

20.01.2018    15521    2    Ликреонский    58       

Github и 1С. Пошаговая инструкция на конкретном примере 218

Статья Программист Архив с данными v8 Абонемент ($m) Математика и алгоритмы

Статья для тех, у кого есть неудержимое желание программировать и хочется доработать какую-то конфигурацию (или проект на 1С), выложенный на Github, но останавливают незнакомые слова Git, Github, Fork, Commit, Pull request, Merge, Issue.

1 стартмани

26.10.2017    34146    5    BlizD    51       

Многопоточность. Универсальный «Менеджер потоков» (фреймворк) с отслеживанием зависимости объектов 175

Статья Программист Архив с данными v8 1cv8.cf Россия Абонемент ($m) Практика программирования Математика и алгоритмы Универсальные функции Производительность и оптимизация (HighLoad)

Восстановление партий, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

26.05.2017    38246    166    DarkAn    86       

Планы обмена. Скрестить ужа с ежом ... миссия выполнима =) 16

Статья Программист Архив с данными v8 Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Небольшое исследование возможности улучшить работу планов обмена 1С средствами SQL Server: view and triggers. Результаты имеют больше теоретическое, чем практическое значение. Однако тем, кто ищет нестандартные решения, статья может понравиться =)

1 стартмани

10.01.2017    10553    3    zhichkin    4       

Многопоточная выгрузка одного сообщения обмена 15

Инструменты и обработки Программист Архив с данными v8 Абонемент ($m) Практика программирования Математика и алгоритмы Перенос данных из 1C8 в 1C8

Публикация описывает, как можно распараллелить выгрузку одного сообщения обмена.

1 стартмани

05.12.2016    11888    2    zhichkin    24       

1С+Классы. Версия-0 52

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Windows Абонемент ($m) Разработка внешних компонент Математика и алгоритмы

Разработано ООП-расширение языка 1С, включающее (но не ограничивающееся): Классы как абстрактные типы данных с элементами «переменная», «свойство», «функция», «процедура»; Интерфейсы как абстрактные классы без элементов состояния («переменная») и без привязки к реализации методов (свойств, процедур, функций) при определении; Имплементация (реализация) интерфейсов классами; - одиночное открытое наследование; Области видимости «внутренняя» (private), «экспорт» (public), «защищенная» (protected); Статические элементы классов (общие для всех экземпляров класса); Замещение (переопределение реализации) методов при наследовании – «виртуальные методы, свойства»; Сокрытие (затенение) обычных (не замещаемых) элементов при наследовании; Перегрузка процедур и функций по количеству и типам данных аргументов; Конструкторы класса; Деструктор класса; Слабые ссылки; Делегаты.

1 стартмани

28.10.2016    16367    14    IntelInside    68       

Генетический алгоритм для решения простой задачки 5

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Математика и алгоритмы

Генетический алгоритм в решении задачи: Необходимо расставить правильно (по другому) скобки, чтобы получилось 850 (1 + 2) (3 + 4) (5 + 6) (7 + 8) (9 + 10) (11 + 12) (13 + 14) + 15

1 стартмани

26.09.2016    7573    4    eugeniezheludkov    4       

Объектные блокировки 25

Инструменты и обработки Программист Конфигурация (md, cf) v8 Россия Абонемент ($m) Практика программирования Математика и алгоритмы

При работе с объектными данными (справочники, документы, планы счетов и т.д.) система «1С:Предприятие» обеспечивает два вида объектных блокировок: пессимистическую и оптимистическую. Они позволяют выполнять целостные изменения объектов при одновременной работе нескольких пользователей.

1 стартмани

17.08.2016    21618    7    Ranis1286    5       

Использование методов глобального контекста в системе компоновки данных или недокументированные возможности СКД 160

Инструменты и обработки Программист Внешний отчет (ert,erf) v8::УФ v8::СКД 1cv8.cf Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Прочитал на форуме, что СтрРазделить() и ТекущаяДата() работают в языке выражений системы компоновки данных. Почитал справку, там ничего не нашёл, поэтому не поверил. Посмотрел на практике – и правда работает… В данной статье попытался привести весь перечень методов, работающих в СКД, но не описанных в документации.

1 стартмани

05.08.2016    30326    27    klinval    39       

Еще один способ расчета остатков на каждый день в запросе 127

Инструменты и обработки Программист Внешний отчет (ert,erf) v8 Абонемент ($m) Математика и алгоритмы Практика программирования

Предлагается новый способ расчета остатков на каждый день (час, минуту, секунду) в запросе. Способ не требует предварительного формирования таблицы дат и также подходит для расчета курсов валют, цен номенклатуры и других периодических сведений на каждую дату периода. На больших объемах данных предлагаемый способ может превосходить по быстродействию ранее известные методы из-за линейной (в лучшем случае) зависимости трудоемкости от длины периода.

1 стартмани

24.04.2016    28367    46    ildarovich    21       

Пример рекурсивной выгрузки иерархической структуры в XDTO 21

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Математика и алгоритмы Внешние источники данных WEB

Решил реализовать иерархию в пакете XDTO и выгрузить ее рекурсивно. Задача оказалась нетривиальной, хотя и весьма простой. Изысканиями решил поделиться с народом, чтобы не пропадало народное добро.

1 стартмани

26.02.2016    29160    14    starik-2005    3       

Нелинейная многомерная оптимизация - это просто. Часть 3. Имитация отжига 39

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Инструментарий разработчика Математика и алгоритмы Универсальные функции

Метод имитации отжига для поиска оптимального решения. И, как обычно, универсальная функция поиска этого самого решения.

1 стартмани

13.10.2015    14794    22    dusha0020    5       

Пример сериализации объектов в 1С 8.3 и их восстановления из сериализованных данных 5

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Россия Windows Абонемент ($m) Математика и алгоритмы Обмен через XML Перенос данных из 1C8 в 1C8

Простейшая обработка, демонстрирующая принципы сериализации выбранного Объекта 1С (Справочника, Документа и еще некоторых), с возможностью восстановления Объекта из сериализованного значения.

1 стартмани

05.07.2015    22288    78    katkov_a    29       

Степень сходства двух наименований справочника 13

Статья Программист Нет файла v7.7 v8 Windows Абонемент ($m) Математика и алгоритмы

Статья посвящена исследованию следующего вопроса: необходимо сравнить 2 наименования справочников с целью вычисления их степени сходства. По задумке, степень сходства должна выражаться в процентах.

1 стартмани

25.02.2015    17430    etmarket    32       

Написание простой обработки через тестирование 65

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Математика и алгоритмы Практика программирования

Раньше я считал, что в 1С невозможно юнит-тестирование (ведь тут нет вездесущих объектов, привычных классов и и. т.). Иногда на Инфостарте появлялись специализированные обработки, но часто они скорее отпугивали от темы тестирования, чем привлекали к ней. Потом я узнал про xUnitFor1C. Оказалось, что тестирование в 1С в общем не так уж и сложно, даже в сравнении с другими языками. В данной статье я расскажу о своем первом опыте.

1 стартмани

24.02.2015    23374    16    Alien_job    40       

Парсинг сайта без использования встроенного браузера для начинающих 115

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Практика программирования Математика и алгоритмы WEB

Данная статья показывает пример парсинга одного конкретного сайта со своей структурой, на основе которого можно понять суть, методы и без особых проблем парсить другие сайты. Здесь описано: подключение к серверу, сохранение html-страницы на диск, загрузка и цикличный обход ее структуры, рекурсивный парсинг, загрузка картинок по ссылке на диск.

1 стартмани

20.11.2014    34380    176    angernaughts    34       

Куайн (Программа, выводящая свой исходный код на экран) 1

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Обработка позволяет насладится реализацией этой интересной, и совершенно бесполезной с практической точки зрения задачей.

1 стартмани

25.08.2014    7907    atridis    7       

Определение кратчайших путей, критических путей одним запросом 104

Инструменты и обработки Программист Внешний отчет (ert,erf) v8 1cv8.cf Абонемент ($m) Математика и алгоритмы

Еще два примера применения алгоритма каскадного матричного умножения, впервые описанного в статье «Транзитивное замыкание запросом» http://infostart.ru/public/158512/

1 стартмани

07.04.2014    33775    58    ildarovich    31       

Пророк в своем отечестве или Читаем XML с помощью XDTO 188

Инструменты и обработки Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Математика и алгоритмы

Проходи, садись поудобнее и приготовься внимать мне. Сейчас я предскажу твое будущее… В этом пакете я описываю схему XML… Вы можете видеть, что код очень прост, и никакого преобразования элементов прочитанного XML не требуется…

1 стартмани

29.01.2014    39702    86    majmyl    53       

Полная методичка к курсу "Программирование 8.2" 203

Инструменты и обработки Программист Сборник задач v8 1cv8.cf Абонемент ($m) Математика и алгоритмы

580 страниц знаний! Публикую методичку, а точнее стенограмму курса по подготовке программистов 8.2.

10 стартмани

09.01.2014    47761    1366    GROOVY    100       

Включаем звук в 1С. Доступно и всерьез. 52

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Математика и алгоритмы Универсальные функции

Как сделать воспроизведение звука в 1С без внешних компонентов? Решаем средствами интернета. Для тонкого, толстого и web-клиента.

1 стартмани

30.12.2013    72951    257    sikuda    27       

Методический материал. Работа с запросами 42

Инструменты и обработки Программист Курс v8 Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Краткое методическое пособие для изучения запросов в 1С

1 стартмани

23.12.2013    16013    283    rayastar    27       

Определитель матрицы 12

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Представлена программная реализация вычисления определителя матрицы посредством языка запросов 1С. Даны два метода: 1) прямой, на основе определения 2) метод Гаусса, приведение к диагональному виду с вычислением произведения диагональных элементов. В обновленной версии в случае целочисленных элементов для метода Гаусса проводится полная факторизация всех чисел, участвующих в вычислениях.

1 стартмани

28.11.2013    10764    6    zaxarovsky    8       

Квадратный корень в запросе 1С 51

Инструменты и обработки Программист Архив с данными v8 Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Язык запросов 1С не позволяет вычислить квадратный корень 1С. Квадратный корень может пригодиться при вычислении среднеквадратического отклонения или геометрических вычислениях.

1 стартмани

24.10.2013    24018    10    Elisy    53       

Агрегатное суммирование строк в запросе – сложно, но не невозможно 105

Статья Программист Нет файла v8 Абонемент ($m) Математика и алгоритмы

Описывается метод соединения строк из одной колонки таблицы в единую результирующую строку в запросе на языке 1С. Метод сложный и по сравнению с внезапросной техникой представляет больше спортивный, чем практический интерес.

1 стартмани

09.09.2013    67792    59    ildarovich    53       

Задачи о 5 и 9 ферзях 5

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 Windows Абонемент ($m) Математика и алгоритмы

Задача о ферзях-часовых. На шахматной доске надо расставить 5 ферзей, чтобы они держали под боем все клетки доски. Задача В. Франгена, расставить на шахматной доске 10 “белых” и 9 “чёрных” ферзей так, чтобы ни один из них не находился под ударом противника

1 стартмани

31.08.2013    17308    1    scientes    5       

АЦРК: Многовариантный автоматический запрет редактирования (для конфигурации УТ 10.3) 9

Статья Системный администратор Программист Бухгалтер Пользователь Нет файла v8 УТ10 Закрытие периода Абонемент ($m) Математика и алгоритмы Администрирование данных 1С

В этой статье описывается усовершенствованная технология автоматической установки даты запрета редактирования Во-первых, можно определить несколько стратегий запрета редактирования с разными параметрами. Например, запрет в днях, запрет доступа в предыдущие месяцы кварталы и т.п., с указанием отступа от текущей даты. То есть для некоторых пользователей (рядовых менеджеров) при входе в базе будет устанавливаться запрет по вчерашний день, для других (старших менеджеров) на 5 дней назад, для третьих (администраторов базы или руководителей отдела) - запрет предыдущего месяца с отступом в 10 дней.. Во-вторых, запрет будет устанавливаться для ВСЕХ без исключения пользователей базы данных. Для самых привилегированных это будет максимальная глубина, но запрет будет установлен. Управление этой системой осуществляется через механизм дополнительных прав пользователей. При необходимости пользователь с полными правами может открыть для себя закрытый период, но только на текущий сеанс работы.

1 стартмани

22.07.2013    18950    26    acrk    9       

Демо связи веб сервисов 1С и php 26

Статья Программист Нет файла v8 1cv8.cf Абонемент ($m) Практика программирования Математика и алгоритмы WEB

Демонстрация обращения к веб сервису 1С из php. Пример простейший, уровня hello world. Дана одна страница и информационная база 1С с одним справочником и одним веб сервисом. Веб сервис выдаёт содержимое справочника по запросу странички.

1 стартмани

19.07.2013    29533    153    Трактор    20       

Разработка многоязычной системы 31

Статья Программист Нет файла v8 Абонемент ($m) Математика и алгоритмы

В статье затронуты некоторые аспекты многоязычности системы с точки зрения их технической реализации

1 стартмани

20.06.2013    18810    55    YOr!k    54       

Передача аргумента, полученного по ComConnector, на сервер 4

Статья Программист Нет файла v8 Абонемент ($m) Математика и алгоритмы

С точки зрения инкапсуляции, данные, переданные по COMConnector, следует обрабатывать в базе-приемнике. И тут возникает проблема, малопонятная для новичка из-за сложностей в отладке модуля внешнего соединения. Аргументы попросту не передаются в серверные модули.

1 стартмани

20.03.2013    5069    7    asved.ru    3       

Расчет SHA-1 хеша средствами 1С. Битовые операции в 1С или урок двоичной математики 61

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Россия Абонемент ($m) Практика программирования Математика и алгоритмы

Расчет хеша SHA-1 без использования каких-либо внешних компонет - возможно ли это в 1Cv8? Оказывается вполне возможно!

1 стартмани

13.03.2013    27140    138    Антон Ширяев    40       

Автоформатирование кода 54

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Сервисные утилиты Обработки Чистка базы Справки Производительность и оптимизация (HighLoad) Инструментарий разработчика Практика программирования Универсальные обработки Решение задач на 1С:Специалист Математика и алгоритмы Администрирование данных 1С Разработка Тестирование и исправление Стартеры 1С

Как часто приходится работать в режиме аврала, когда на оформление кода не хватает времени? И как лениво порой бывает, возвращаться к уже рабочему коду, что бы отформатировать его и привести в порядок. Данная обработка позволяет автоматически форматировать текст кода, в соответствии с настройками пользователя. Это позволит привести ваш код, как уже написанный так и будущий к единому оформлению.

1 стартмани

19.12.2012    35400    179    Sibars    57       

Анализ цикломатической сложности кода 95

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Инструментарий разработчика Разработка внешних компонент Математика и алгоритмы

Инструмент для контроля сложности написанного кода для 1С8. Пригодится разработчикам, которые заботяться о качестве своего продукта, простоте его тестирования и дальнейшей поддержке.

1 стартмани

13.12.2012    21373    199    Spitfire    30       

Подсистема допроведения документов 0

Инструменты и обработки Программист Конфигурация (md, cf) v8 БП2.0 УТ10 УПП1 Россия Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Подсистема допроведения документов предназначена для формирования движений документов по произвольным регистрам при помощи внешних подключаемых обработок.

1 стартмани

01.10.2012    12428    30    SergAn    40       

Основы тестирования доработок 79

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Россия Абонемент ($m) Математика и алгоритмы

Попытался 1С консультантам-новичкам объяснить принципы тестирования доработок, принимаемых у программистов 1С. И описать частые ошибки в самих доработках, и какие действия нужны для обнаружения этих ошибок (без погружения в код).

1 стартмани

20.08.2012    23680    107    1СERP    17       

Конспект лекций по курсу «Автоматизированные информационные системы» 31

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Россия Абонемент ($m) Математика и алгоритмы

Конспект лекций по курсу «Автоматизированные информационные системы» составлен на основании требования Государственного образовательного стандарта среднего профессионального образовании к содержанию и уровню подготовки выпускника по специальности 230103 «Автоматизированные системы обработки информации и управления». В конспекте есть общие сведения о методике 1С:Профкейс. Конспект лекций разработал: канд. техн. наук, доцент Космачев С.Н.

1 стартмани

07.06.2012    21377    183    ksnik    19