Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Можно ли зафиксировать момент до и после открытия любой формы в системе 1С
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Gigi
Всем привет!
Вопрос темы не из сильно важных но все таки хотел тут получить инфу. по указанной теме
Поэтому сразу же перейду к сути вопроса. И если возникнет вопрос для чего это нужно то скидываю код теста.
И думаю будет понятно для чего и зачем.... без лишних объяснений. Для которых и нет времени.
Конечно указанные строки кода нужно было укоротить и так скинуть, но не захотел возиться... поэтому скинул как пару дней назад накодил... на скорую руку. Так что не обессудьте.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
//=======================    
ДатаСтарт=ТекущаяДата();
//-----------------------    
    //ИмяПоцедуры();
//-----------------------
ДатаФиниш=ТекущаяДата();
//=======================
Промежуток=FxSub_РаботаCдатами.ПромежутокВремени(ДатаСтарт,ДатаФиниш,Истина,"Секунда,Милисекунда");
Сообщить("Время открытия в мили-секундах: "+Промежуток);
КонецПроцедуры


необходимо зарегистрироваться для просмотра ссылки

//############ ОБЩИЙ МОДУЛЬ ##################################################

//Промежуток=FxSub_РаботаCдатами.ПромежутокВремени(ДатаСтарт,ДатаФиниш,Истина,"ЗначениеВозврата");
Функция ПромежутокВремени(ДатаСтарт,ДатаФиниш,Милисекунда,ЗначениеВозврата) Экспорт
//===============================
СтартГод = Год(ДатаСтарт);
СтартМесяц = Месяц(ДатаСтарт);
СтартДень = День(ДатаСтарт);
СтартЧас = Час(ДатаСтарт);
СтартМинута = Минута(ДатаСтарт);
СтартСекунда = Секунда(ДатаСтарт);
СтартМилисекунда=ТекущаяМиллисекундаДаты(ДатаСтарт);
СтартСекундаМилисекунда=Число(Строка(СтартСекунда)+","+СтартМилисекунда);
//-------------------------------
ФинишГод = Год(ДатаФиниш);
ФинишМесяц = Месяц(ДатаФиниш);
ФинишДень = День(ДатаФиниш);
ФинишЧас = Час(ДатаФиниш);
ФинишМинута = Минута(ДатаФиниш);
ФинишСекунда = Секунда(ДатаФиниш);
ФинишМилисекунда=ТекущаяМиллисекундаДаты(ДатаФиниш);
ФинишСекундаМилисекунда=Число(Строка(ФинишСекунда)+","+ФинишМилисекунда);
//===============================
ПРОМЕЖУТОК_Год=ФинишГод-СтартГод;
ПРОМЕЖУТОК_Месяц=ФинишМесяц-СтартМесяц;
ПРОМЕЖУТОК_День=ФинишДень-СтартДень;
ПРОМЕЖУТОК_Час=ФинишЧас-СтартЧас;
ПРОМЕЖУТОК_Минута=ФинишМинута-СтартМинута;
ПРОМЕЖУТОК_Секунда=ФинишСекунда-СтартСекунда;
ПРОМЕЖУТОК_Милисекунда=ФинишМилисекунда-СтартМилисекунда;
ПРОМЕЖУТОК_СекундаМилисекунда=ФинишСекундаМилисекунда-СтартСекундаМилисекунда;
Если ПРОМЕЖУТОК_СекундаМилисекунда<10 Тогда ПРОМЕЖУТОК_СекундаМилисекунда="0"+ПРОМЕЖУТОК_СекундаМилисекунда; КонецЕсли;
//===============================
            СТАРТ_Данные="СТАРТ:"+Символы.ПС+
            "Год - "+СтартГод+Символы.ПС+
            "Месяц - "+СтартМесяц+Символы.ПС+
            "День - "+СтартДень+Символы.ПС+
            "Час - "+СтартЧас+Символы.ПС+
            "Минута - "+СтартМинута+Символы.ПС+
            "Секунда - "+СтартСекунда+Символы.ПС+
            "Милисекунда - "+СтартМилисекунда+Символы.ПС+
            "Секунда,Милисекунда - "+СтартСекундаМилисекунда+Символы.ПС+
            "===================";
    //---------------------------
            ФИНИШ_Данные="ФИНИШ:"+Символы.ПС+
            "Год - "+ФинишГод+Символы.ПС+
            "Месяц - "+ФинишМесяц+Символы.ПС+
            "День - "+ФинишДень+Символы.ПС+
            "Час - "+ФинишЧас+Символы.ПС+
            "Минута - "+ФинишМинута+Символы.ПС+
            "Секунда - "+ФинишСекунда+Символы.ПС+
            "Милисекунда - "+ФинишМилисекунда+Символы.ПС+
            "Секунда,Милисекунда - "+ФинишСекундаМилисекунда+Символы.ПС+
            "===================";
    //---------------------------
            ПРОМЕЖУТОК="ПРОМЕЖУТОК:"+Символы.ПС+
            "Год - "+ПРОМЕЖУТОК_Год+Символы.ПС+
            "Месяц - "+ПРОМЕЖУТОК_Месяц+Символы.ПС+
            "День - "+ПРОМЕЖУТОК_День+Символы.ПС+
            "Час - "+ПРОМЕЖУТОК_Час+Символы.ПС+
            "Минута - "+ПРОМЕЖУТОК_Минута+Символы.ПС+
            "Секунда - "+ПРОМЕЖУТОК_Секунда+Символы.ПС+
            "Милисекунда - "+ПРОМЕЖУТОК_Милисекунда+Символы.ПС+
            "Секунда,Милисекунда - "+ПРОМЕЖУТОК_СекундаМилисекунда+Символы.ПС+
            "===================";    
    //---------------------------    
            //Сообщить(СТАРТ_Данные);
            //Сообщить(ФИНИШ_Данные);
            //Сообщить(ПРОМЕЖУТОК);
//===============================
    Если ПРОМЕЖУТОК_Год=0 Тогда ПРОМЕЖУТОК_Год=Год('00010101') КонецЕсли;
    Если ПРОМЕЖУТОК_Месяц=0 Тогда ПРОМЕЖУТОК_Месяц=Месяц('00010101') КонецЕсли;
    Если ПРОМЕЖУТОК_День=0 Тогда ПРОМЕЖУТОК_День=День('00010101') КонецЕсли;
    Если ПРОМЕЖУТОК_Час=0 Тогда ПРОМЕЖУТОК_Час=Час('00010101') КонецЕсли;
    Если ПРОМЕЖУТОК_Минута=0 Тогда ПРОМЕЖУТОК_Минута=Минута('00010101') КонецЕсли;
    Если ПРОМЕЖУТОК_Секунда=0 Тогда ПРОМЕЖУТОК_Секунда=Секунда('00010101') КонецЕсли;
//--------------------------------
    //Если ПРОМЕЖУТОК_Год<10 Тогда ПРОМЕЖУТОК_Год="0"+Строка(ПРОМЕЖУТОК_Год) КонецЕсли;
    //Если ПРОМЕЖУТОК_Месяц<10 Тогда ПРОМЕЖУТОК_Месяц="0"+Строка(ПРОМЕЖУТОК_Месяц) КонецЕсли;
    //Если ПРОМЕЖУТОК_День<10 Тогда ПРОМЕЖУТОК_День="0"+Строка(ПРОМЕЖУТОК_День) КонецЕсли;
    //Если ПРОМЕЖУТОК_Час<10 Тогда ПРОМЕЖУТОК_Час="0"+Строка(ПРОМЕЖУТОК_Час) КонецЕсли;
    //Если ПРОМЕЖУТОК_Минута<10 Тогда ПРОМЕЖУТОК_Минута="0"+Строка(ПРОМЕЖУТОК_Минута) КонецЕсли;
    //Если ПРОМЕЖУТОК_Секунда<10 Тогда ПРОМЕЖУТОК_Секунда="0"+Строка(ПРОМЕЖУТОК_Секунда) КонецЕсли;
//===============================
ПРОМЕЖУТОК_Дата = Дата(ПРОМЕЖУТОК_Год,ПРОМЕЖУТОК_Месяц,ПРОМЕЖУТОК_День,ПРОМЕЖУТОК_Час,ПРОМЕЖУТОК_Минута,ПРОМЕЖУТОК_Секунда);
ПРОМЕЖУТОК_ГодМесДень=Формат(ПРОМЕЖУТОК_Дата,"ДЛФ=Д");
ПРОМЕЖУТОК_ЧасМинСек=Формат(ПРОМЕЖУТОК_Дата,"ДЛФ=В");
//===============================
Если ПРОМЕЖУТОК_Дата='00010101' Тогда
    ПРОМЕЖУТОК_ГодМесДень="00.00.0000";
    ПРОМЕЖУТОК_ЧасМинСек="0:00:00";
    ПРОМЕЖУТОК_ЧасМинСекМилисек="0:00:"+ПРОМЕЖУТОК_СекундаМилисекунда;     
Иначе
        Если ПРОМЕЖУТОК_ГодМесДень="" или ПРОМЕЖУТОК_ГодМесДень="01.01.0001" Тогда
            ПРОМЕЖУТОК_ГодМесДень="00.00.0000";    
        КонецЕсли;
        Если ПРОМЕЖУТОК_ЧасМинСек="" Тогда
            ПРОМЕЖУТОК_ЧасМинСек="0:00:00";
            ПРОМЕЖУТОК_ЧасМинСекМилисек="0:00:"+ПРОМЕЖУТОК_СекундаМилисекунда;
        Иначе
            НомерСивола=Найти(ПРОМЕЖУТОК_ЧасМинСек,":")+3;
            ТекстДоСек=Лев(ПРОМЕЖУТОК_ЧасМинСек,НомерСивола);
            //ТекстСек=Fx_Текст.Парсер(ПРОМЕЖУТОК_ЧасМинСек,":",3);
            ПРОМЕЖУТОК_ЧасМинСекМилисек=ТекстДоСек+ПРОМЕЖУТОК_СекундаМилисекунда;
        КонецЕсли;
КонецЕсли;
//===============================
Если ПРОМЕЖУТОК_ЧасМинСек<>"0:00:00" и ПРОМЕЖУТОК_ГодМесДень="00.00.0000" Тогда
    Если Милисекунда=Истина Тогда
        ПРОМЕЖУТОК_Время=ПРОМЕЖУТОК_ЧасМинСекМилисек;
    Иначе
        ПРОМЕЖУТОК_Время=ПРОМЕЖУТОК_ЧасМинСек;
    КонецЕсли;    
ИначеЕсли ПРОМЕЖУТОК_ЧасМинСек="0:00:00" и ПРОМЕЖУТОК_ГодМесДень<>"00.00.0000" Тогда
    ПРОМЕЖУТОК_Время=ПРОМЕЖУТОК_ГодМесДень;
Иначе    
    Если Милисекунда=Истина Тогда
        ПРОМЕЖУТОК_Время=ПРОМЕЖУТОК_ЧасМинСекМилисек+" / "+ПРОМЕЖУТОК_ГодМесДень;
    Иначе
        ПРОМЕЖУТОК_Время=ПРОМЕЖУТОК_ЧасМинСек+" / "+ПРОМЕЖУТОК_ГодМесДень;
    КонецЕсли;    
КонецЕсли;
//===============================
    Если ЗначениеВозврата="Секунда,Милисекунда" Тогда
        ПРОМЕЖУТОК_Время=ПРОМЕЖУТОК_СекундаМилисекунда;
    ИначеЕсли ЗначениеВозврата="Милисекунда" Тогда
        ПРОМЕЖУТОК_Время=ПРОМЕЖУТОК_Милисекунда;
    ИначеЕсли ЗначениеВозврата="Секунда" Тогда
        ПРОМЕЖУТОК_Время=ПРОМЕЖУТОК_Секунда
    ИначеЕсли ЗначениеВозврата="Минута" Тогда
        ПРОМЕЖУТОК_Время=ПРОМЕЖУТОК_Минута
    ИначеЕсли ЗначениеВозврата="Час" Тогда
        ПРОМЕЖУТОК_Время=ПРОМЕЖУТОК_Час    
    ИначеЕсли ЗначениеВозврата="День" Тогда
        ПРОМЕЖУТОК_Время=ПРОМЕЖУТОК_День        
    ИначеЕсли ЗначениеВозврата="Месяц" Тогда
        ПРОМЕЖУТОК_Время=ПРОМЕЖУТОК_Месяц        
    ИначеЕсли ЗначениеВозврата="Год" Тогда
        ПРОМЕЖУТОК_Время=ПРОМЕЖУТОК_Год            
    Иначе
        // гууу ....надоело ...и т.д.
    КонецЕсли;
//===============================
//Сообщить(ПРОМЕЖУТОК_Время);
Возврат ПРОМЕЖУТОК_Время;
//===============================
КонецФункции

//Миллисекунды=FxSub_РаботаCдатами.ТекущаяМиллисекундаДаты(знДата);
Функция ТекущаяМиллисекундаДаты(знДата) Экспорт
MSScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl");
MSScriptControl.Language = "javascript";
Миллисекунды = MSScriptControl.eval("new Date().getMilliseconds(0)");
ДатаГодМесяцДеньЧасМинСекМилсек=Формат(знДата,"ДФ='dd.MM.yyyy hh:mm:ss'")+","+Миллисекунды;  //Сообщить(ДатаГодМесяцДеньЧасМинСекМилсек);
Возврат Миллисекунды;
КонецФункции


И к сказанному добавлю то что зафиксировать момент до и после открытия формы нужно для замера времени в течении которой она открывается.
Так как проблема в том что недавно заметил что форма при открытии тормозит из-за нескольких динамических списков в ней.
Вот и сижу и устраняю эту проблему. А для ее устранения очень удобно было бы замерить время открытия формы.
И в 21 веке не путем секундомера в руках smile.gifsmile.gif ))))), а опять таки возможностями хваленной системы 1С ))))) ... Переложив задачу опять на саму машину.
Вот собственно вся суть вопроса!
Если кто даст инфу как можно это сделать ..
Буду признателен!
Vidocq05
Gigi @ Сегодня, 12:41 необходимо зарегистрироваться для просмотра ссылки ,
В 1С есть Замер производительности
Gigi
Vidocq05 @ Сегодня, 12:56 необходимо зарегистрироваться для просмотра ссылки ,
Цитата(Vidocq05 @ 29.05.19, 12:56) необходимо зарегистрироваться для просмотра ссылки
В 1С есть Замер производительности

Гуууу ... не знал ... честно говорю ... если бы знал то не тратил бы время ...
Просто в 1С много чего нет. К чему уже давно привык .....
К тому, что постоянно приходиться самому добавлять то что не хватает. И тратить на это время.
Если в этом было бы круче то, программист вообще забыл бы об общем модуле. И он был бы почти не нужен.
А вместо этого много чего приходилось создавать в общем модуле. "Где уже просто места не хватает" .... Аж гигантский список общих модулей.... И без этого был бы караул.
Так что настолько привык к тому, что постоянно нужно самому, что в данном случае и вовсе не копал по указанной теме в 1С есть такая возможность или нет. А просто решил опять сам ..
Но оказывается есть такая возможность ... что удивляет ))))) выходит зря тратил пусть не большое но время. Но ладно... хрен с ним.
Ладно! Понял!
Спасибо!
volodya1122
Gigi @ Вчера, 14:24 необходимо зарегистрироваться для просмотра ссылки ,

Есть еще стандартная 1Совкая функция ТекущаяУниверсальнаяДатаВМиллисекундах()

Ей удобно пользоваться когда нужно в реальных условиях проверить время виполнения
Gigi
Цитата(volodya1122 @ 30.05.19, 16:43) необходимо зарегистрироваться для просмотра ссылки
Есть еще стандартная 1Совкая функция ТекущаяУниверсальнаяДатаВМиллисекундах()

Да точно ...
необходимо зарегистрироваться для просмотра ссылки
Цитата
ТекущаяУниверсальнаяДатаВМиллисекундах (CurrentUniversalDateInMilliseconds)
Синтаксис:
ТекущаяУниверсальнаяДатаВМиллисекундах()
Возвращаемое значение:
Тип: Число.
Описание:
Получает текущую универсальную дату в миллисекундах (в UTC, начиная с 01.01.0001 00:00:00).
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер), интеграция.

Гууу... знание сила... не знание просто муки.
Еще "javascript" применил ... изврат просто.
Пусть не долго но возился ... тогда как оказывается, есть такая функция... выходит зря ...
Теперь уже удаляю функцию из общего модуля.. она уже не нужна.
И побольше бы таких функций в 1С ... И так до такой степени, что бы общий модуль и вовсе опустел. Когда вообще забуду о том, что общий модуль вообще есть..
А на данном этапе релиза системы 1С, об этом говорить не приходиться... и до этого пока еще очень далеко.
И это не смотря на гигантское количество разных встроенных функций системы. Которыми она просто напичкана. В чем, признаюсь, конечно же нужно отдать должное разработчикам.
Так что не смотря на это, мне все равно МАЛО )) ...
необходимо зарегистрироваться для просмотра ссылки

//Текст=Fx_Текст.Парсер(Текст,Символ,НомерПовтора);
Функция Парсер(Текст,Символ,НомерПовтора) Экспорт
//=================================================================
КоличПовтСимвола = СтрЧислоВхождений(Текст, Символ);
НомСимвПовтора = (НомерПовтораСимвола(Текст, Символ, НомерПовтора))*1;
//=================================================================
If КоличПовтСимвола = 0 Then
strPart = Текст;
ИначеЕсли КоличПовтСимвола = НомерПовтора Then
strPart = Сред(Текст, НомСимвПовтора+1);
ИначеЕсли КоличПовтСимвола > НомерПовтора Then
strТекст = Сред(Текст, НомСимвПовтора+1);
СимволNext = Найти(strТекст, Символ);
strPart = Сред(Текст, НомСимвПовтора+1, СимволNext - 1);
Else
НомСимКонечногоПовтора = НомерПовтораСимвола(Текст, Символ, КоличПовтСимвола);
strPart = Сред(Текст, НомСимКонечногоПовтора + 1);
EndIf;
Возврат strPart;
КонецФункции

Функция НомерПовтораСимвола(Текст,Символ,НомерПовтора) Экспорт
КолРазделителя=СтрЧислоВхождений(Текст, Символ);
ТекстДлина=СтрДлина(Текст);
Count = 0;
CountSymb = 0;
SymbNum = 0;
//---------------------------
Для i = 1 по ТекстДлина Цикл
Count = Count + 1;
char = Сред(Текст, i, 1);
    If char = Символ Then
    CountSymb = CountSymb + 1;
    If CountSymb = НомерПовтора Then SymbNum = Count EndIf;
    EndIf;
КонецЦикла;
//---------------------------
Возврат SymbNum;
КонецФункции


Дааа ... найбанальнейшая суть вопроса. Как говорится одна из самых избитых ... перебитых тем в программировании.... и так аж до банальщины.
Знаете что это такое уважаемые?
Это ПАРСЕР, ПАРСЕР )))) понимаете?
Может Вы "не знаете", что такое "парсить" в программировании?... Имею ввиду не парусить на волнах, а парсить ... понимаете )))))
А то, разработчики наверно были "НЕ В КУРСЕ" что без подобных функций программирование, не программирование а черт знает что.
И таких вещей которых нет в системе в готовом виде, куча....
Именно поэтому, как говорил в Общем модуле уже "Нет места". Все пишу пишу ... и изобретаю велосипеды. Вот чем занимаюсь ... какой то ерундой.
Хотя, конечно может слишком многое требую ... опережая время, которое пока не наступило.
Ладно! Это так ... решил поделиться соображениями.
Спасибо всем за отклики ... просто мгновенные ... чем и нравиться этот сайт... за полезную инфу.
Ладно! Пока!
pablo
А еще в 1с (как и в других языках) есть библиотеки сторонних функций, которые подключаются в конфигурацию в виде набора общих модулей.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.