пятница, 31 июля 2015 г.

Знакомство с технологическим журналом 1С


Не так давно открыл для себя нечто новое, оказывается есть технологический журнал (ТЖ). Что это за зверь такой и для чего он нужен попытаюсь ответить в этой статье.

Как говорить сама 1С Технологический журнал системы 1С:Предприятие 8 может использоваться для анализа технологических проблем работы системы и анализа аварийных завершений. Он регистрирует информацию от всех приложений системы 1С:Предприятие 8, работающих на данном компьютере. Из этого определения сразу становится очевидность полезности этого инструмента, из него мы можем узнать например:

  • при выполнении какого кода «падают» рабочие процессы сервера
  • какие запросы работают медленно и откуда они вызываются
  • Посмотреть были ли взаимоблокировки или блокировки по таймауту
  • и  многое другое.   

Что же собой представляет ТЖ? А представляет собой ТЖ совокупность текстовых файлов, хранящихся в указанном каталоге. 
Файлы эти можно разделить на 2 группы 

  • файлы дампа
  • файлы логов

Логи – это файлы с расширением log, где информация хранится в текстовом виде. 
Дампы – это файл с расширением mdmp, который содержит в себе содержимое оперативной памяти процесса на момент «падения» .  


Идем дальше. А в каком каталоге хранятся файлы ТЖ?. 
По умолчанию   ТЖ создается в каталоге:
 %USERPROFILE%\Local Settings\Application Data\1C\1Cv82\ 
Если используется Windows Vista и выше, то будет использоваться каталог: %LOCALAPPDATA%\1C\1Cv82\
Для 8.3 вместо каталога 1Cv82 используется 1Cv8.  

Но этот каталог можно изменить. Об этом чуть ниже.

Как включить ТЖ?
По умолчанию технологический журнал включен, и настроен на сохранение минимальных дампов. С помощью специального файла мы можем настроить ТЖ. А именно можем изменить каталоги ТЖ, указать какие события должны регистрироваться в ТЖ и тд.
Я говорю о файле настроек ТЖ logcfg.xml 
Этот файл должен находится в каталоге conf в папке с установленной 1с, например
«D:\Program Files\1Cv8\conf» 
Рассмотрим пример файла настроек для полного ТЖ.
config xmlns="http://v8.1c.ru/v8/tech-log">
    <log location="C:\Program Files\1cv82\logs" history="24">
        <event>
            <ne property="Name" value=""/>
        </event>
        <property name="all">
        </property>
    </log>
</config>

Этот конфигурационный файл определяет вывод в технологический журнал всех событий вместе со всеми свойствами. Журнал будет сохраняться в течение недели (24 часа). Однако объем выводимой информации при этом будет очень большим.
Целесообразней настроить ТЖ только на интересующие нас события, например мы хотим посмотреть есть были ли в системе ошибки и долгие операции (>10 секунд)

<config xmlns="http://v8.1c.ru/v8/tech-log">
    <log location="C:\Program Files\1cv82\logs" history="168">
        <event>
            <eq property="Name" value="PROC"/>
        </event>
        <event>
            <eq property="Name" value="SCOM"/>
        </event>
        <event>
            <eq property="Name" value="CONN"/>
        </event>
        <event>
            <eq property="Name" value="EXCP"/>
        </event>
        <event>
            <eq property="Name" value="ADMIN"/>
        </event>
        <event>
            <eq property="Name" value="QERR"/>
        </event>
        <event>
            <gt property="Duration" value="100000"/>
        </event>
        <property name="all">
        </property>
    </log>
</config>




Самые распространенные события ТЖ:
EXCP – исключительные ситуации приложений системы «1С:Предприятие», которые штатно не обрабатываются и могут послужить причиной̆ аварийного завершения серверного процесса или подсоединенного к нему клиентского процесса. 
EXCPCNTX – события, которые начались, но не закончились в момент возникновения нештатной̆ ситуации. 
DBMSSQL – исполнение операторов SQL СУБД Microsoft SQL Server. Для каждой СУБД используется свое событие (BPOSTGRS, DBORACLE, DB2, DBV8DBENG – файловый вариант) 
ADMIN – действия администратора кластера в консоли кластеров. 
PROC – события, относящиеся к процессу целиком и влияющие на дальнейшую работоспособность процесса. Например: старт, завершение, аварийное завершение и т. п. 
CALL – входящий удалённый вызов (удалённый вызов на стороне приемника вызова). Например, если вы из клиента вызываете функцию на сервере, то в ТЖ на сервере будет записано событие CALL.
SCALL – исходящий удалённый вызов (исходящий вызов на стороне источника вызова). Например, если вы из клиента вызываете функцию на сервере, то в ТЖ на клиенте будет записано событие SCALL.
SESN – действия, относящиеся к сеансу работы. Например: начало сеанса, окончание сеанса.  
TDEADLOCK – обнаружена взаимоблокировка в управляемом режиме блокировок.
TTIMEOUT – ошибка по таймауту на управляемых блокировках.
TLOCK – установка транзакционной блокировки в управляемом режиме блокировок.   

С помощью настроек ТЖ можно отфильтровать практически любые  интересующие нас события. 
Допустим хотим видеть в ТЖ только ошибки и информацию о запросах к таблице AccRg105, которые длились более 3 секунд. Тогда logcfg должен выглядеть следующим образом.   

Между двумя работает логическое ИЛИ, т.е. при возникновении любого из событий оно будет записано в ТЖ. 
Внутри одного работает логическое И , т.е. данное событие будет записано только в том случае, если будут выполнены все условия внутри одного . 
При такой настройке событие EXCP будет записываться всегда, а событие DBMSSQL только в том случае, если в любом месте текста запроса содержится строка «AccRg105» и при этом запрос выполнялся дольше 3 секунд. Фильтр на длительность события, надо ставить в десятитысячных долях секунды независимо от версии платформы. В данном примере мы используем несколько условий: eq, gt и like. 
Можно использовать следующие условия:

  • eq – равно; 
  • ne – не равно;
  • gt – больше;
  • ge – больше или равно; 
  • lt – меньше; 
  • le – меньше или равно;
  • like – соответствие маске.  

В окончании добавлю еще пару примечаний:
Платформа раз в минуту считывает данные из файла настроек, поэтому не стоит горячится и сразу проверять файлы, только спокойствие все будет через минуточку)
Если Вы не собираетесь посылать в фирму 1с данные дампов, то не зачем их и хранить, в файле настроек не указывайте строку dump location.
Если Вы собираетесь хранить файлы ТЖ в каталоге отличном от каталога по умолчанию, то лучше предварительно создайте его сами.

В тестовой базе я  умышленно создал превышение таймаута на блокировке,
На примере этого файла можете посмотреть как выглядит лог файл









Не работает отладка на сервере


В этой заметке я опишу как в 2 шага решить  вопрос отладки серверных процедур. Дело в том, что после того как мы (или админы) установили требуемое ПО на сервере, часто "на радостях" спешим развернуть базу и в процессе работы, и только обнаружив что отладчик не останавливается в точке останова исправляем ситуацию.
Делается это очень просто:

  1. Запускаем regedit  и добавляем ключ -debug  в ветке HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\1C:Enterprise 8.2 Server Agent\ для параметра ImagePath. 
Например было:

"C:\Program Files (x86)\1cv8\8.3.6.2076\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files (x86)\1cv8\srvinfo"

 стало:
"C:\Program Files (x86)\1cv8\8.3.6.2076\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug  -d "C:\Program Files (x86)\1cv8\srvinfo".

ВАЖНО: Не проморгайте один момент: перед -debug должен быть пробел, иначе можете проверить что будет)

2) Перезапускаем службу 1C:Enterprise 8.2 Server Agent

четверг, 30 июля 2015 г.

Особенности и недостатки временных таблиц


Наткнулся на познавательную статью .
Не поверил на слово автору и провел эксперименты с запросом.
Результаты следующие:

Без индексирования
 С индексированием
Серверная база
1.956
3.735
Файловая база
1.846
7.223

Отсюда вывод нужно индексы применять осознанно, а не лепить по принципу чем больше тем лучше)
Также интересно было узнать где хранятся ВТ.
Учту что желательно уничтожать ВТ методом МВТ.Закрыть().

Приглашаю  всех в группу в контакте



воскресенье, 19 июля 2015 г.

Получение сертификата 1с профессионал по программе Управление торговлей.

В пятницу 17.07.15 разжился еще одним сертификатом).
Срок подготовки 2 недели. Подготовка попала на интересное время, в которое фирма 1с потребовала закрыть онлайн тесты для подготовки к экзаменам. Где-то неделю тренировался на сайте http://manualus.ru, тесты на котором на моих глазах были прикрыты, перешел на сайт  http://1-exam.ru/ но удалось там потеститься всего 1-2 дня, опять же тесты на моих глазах в одночасье пропали. Пришлось переходить на сайт http://dist.edu.1c.ru/. Там большой минус в бесплатной версии не указываются правильные и неправильные ответы, зато через несколько дней мне даже выдали справку)
http://dist.edu.1c.ru/1CEduWeb/free_registration/sertificat.jsp?SertID=6299805481
и порекомендовали сдать на профессионала, что я и сам собирался сделать.


1с и Sql Error converting data type varchar to numeric

Столкнулся с данным сообщением при заполнении таблицы SQL данными из 1с.
В 1с колонка имеет тип "Число", в SQL естественно тоже, но при добавлении новой строки SQL понимает что число из 1С это Varchar и пытается преобразовать в число.
Нашел следующее решение:
С помощью функции преобразовать число к такому виду, которое SQL смогла бы преобразовать в число.

Функция ФорматироватьЧисло(Параметр)
Параметр1 = СтрЗаменить(Параметр,",",".");
Параметр2 = СтрЗаменить(Параметр1,Символы.НПП,"");
Возврат Параметр2;
КонецФункции