Продвинутый курс. Домашнее задание №2
Эта запись посвящена второму потоку продвинутого курса.
Второе задание по 0-му блоку продвинутого курса.
Для выполнения рекомендуется изучить следующие главы 0-го курса.
Глава 6. Технологический журнал.
Глава 7. Конфигурации в ИБ.
Глава 8. Поставка и поддержка конфигурации.
Глава 9. Обновление и модификация конфигураций.
Глава 10. Регламентные операции с ИБ.
Глава 11. Конфигурационные файлы.
Глава 12. Отладка прикладных решений.
Глава 13. Директивы компиляции, инструкции препроцессору и общие модули.
Глава 14. Показатели производительности.
Глава 15. Групповая разработка конфигурации.
Задание выполнил. По старинке, делал через журнал регистрации, LogUI очень удивило.
После инсталляции Windows сообщила, что программа установлена неправильно, на самом деле все файлы шаблонов успешно инсталлировались. С хранилищем вопросов не было.
>После инсталляции Windows сообщила, что программа установлена неправильно
Так Win 7 будет говорить при установке любой типовой конфигурации.
1. Как и все курсанты мыслил в сторону ТЖ, но просмотрев решение был немало удивлен.
2 и 3 без вопросов.
Задание выполнил.
1. Как и все, использовал технологический журнал. Текст logcfg.xml:
<?xml version=”1.0″?>
<config xmlns=”http://v8.1c.ru/v8/tech-log”>
<log history=”24″ location=”C:\Program Files\1cv82\8.2.13.199\bin\logs”>
<event>
<eq property=”name” value=”sdbl”/>
<eq property=”func” value=”transaction”/>
</event>
<property name=”all”/>
</log>
</config>
Отбор по пользователю с наименованием, набранным в кириллице, не сработал. Не сработал и отбор по контексту. В форме обработки реквизитами сделал наименование пользователя и название формы, по которым нужно делать фильтр. Дальше выводил в окно сообщений количество обращений к форме.
2. Создал дистрибутив каркасной конфигурации, как описано в видеокурсе. Раньше с комплектом установки не работал, было интересно.
3. Создал новую БД из шаблона, поработал с хранилищем конфигураций. В принципе, очень подробно текущая работа с хранилищем была описана в видеоуроках.
Задание выполнил:
1. Стандартно, как у всех:
<log location=”c:\v82\logs8″ history=”1″>
<event>
<eq property=”name” value=”sdbl”/>
<eq property=”func” value=”begintransaction”/>
<eq property=”usr” value=”администратор”/>
</event>
<property name=”all”/>
</log>
Пользовалься обработкой с ИТС.
Пункты 2 и 3 не вызвали затруднений.
Задание сделал
1) В первом задании воспользовался обработкой настройи технологического журнала. Поставил одну галку на dbv8dbeng/all, и там же правой кнопкой – Условие на событие. И два условия: Действия = Начало транзакции, и Имя пользователя ИБ равно Администратор. 80% времени убил на то, чтоб понять, что отбор по контексту хрен сделаешь, так что по идее, дальнейший отбор по контексту надо делать непосредственно в отчете. Но мне его лень писать сейчас:)
2) ну сделал файл поставки, загрузил его, и из него комплект
3) сделал по ходу просмотра материала:)
Задание выполнила.
1. При открытии формы в ТЖ регистрируется множество всяких событий. Событий SESN меньше всего. А с контекстом Система.ПолучитьФорму : Документ.РеализацияТоваровИУслуг.Форма.ФормаДокумента всего одно. Поэтому регистрирую именно его. Условие по контексту установить не получилось, по пользователю тоже. Поэтому в лог-файл вывожу все события SESN.
Полученные файлы обрабатываю внешней обработкой, реквизитами которой являются ДатаНачала и ДатаОкончания, пользователь и название интересующей формы.
Обрабатываю только те лог-файлы, которые попадают в выбранный интервал.
Из этих файлов построчно извлекаю информацию и проверяю на совпадение с фильтрами в обработке. Подсчитываю количество совпадений.
2. Ввела свойства Поставщик и Версия для конфигурации, создала комплект поставки.
3. Создала Хранилище, пользователей хранилища. Попробовала одновременную работу с хранилищем под несколькими пользователями, посмотрела, как это регистрируется в истории хранилища.
Задание выполнил.
1. Для решения задачи использовал технологический журнал.
В конфигурационном файле задал отбор по событию sdbl (запрос к базе данных.) и свойствам usr (имя пользователя ИБ) и func (действия):
<?xml version=”1.0″ encoding=”UTF-8″?>
<config xmlns=”http://v8.1c.ru/v8/tech-log”>
<dump create=”false”/>
<log location=”D:\logs\” history=”168″>
<event>
<eq property=”name” value=”sdbl”/>
<eq property=”usr” value=”Иванов”/>
<eq property=”func” value=”begintransaction”/>
</event>
<property name=”all”/>
</log>
</config>
Для создания конфигурационного файл использовал обработку НастройкаТехнологическогоЖурнала.epf с диска ИТС.
Проблем с написанием имени пользователя в кириллице не было. Релиз платформы 8.2.13.205.
При выполнении пунктов задания 2 и 3 проблем не возникло.
Задание выполнила частично.
1)Отбор по пользователю работает только, если написать имя латинскими буквами.
Отбор по контексту также не отработал.
<event>
<eq property=”Name” value=”DBV8DBEng”/>
<eq property=”Func” value=”beginTransaction”/>
<eq property=”Usr” value=”Ivanov”/>
</event>
<property>
<eq property=”Name” value=”DBV8DBEng”/>
</property>
<property>
<eq property=”Name” value=”DBV8DBEng”/>
</property>
<property>
<eq property=”Name” value=”DBV8DBEng”/>
</property>
2) Создание установочного дистрибутива после просмотра видео проблем не вызвало.
3) С групповой разработкой работала раньше, вопросов не возникло.
1.ДЗ сделал через ТЖ. В начала долго не мог заставить нормально работать запись в ТЖ, проблема решилась удалив строки <?xml version=”1.0″?> из logcfg.xml. Так же не сработал отбор по пользователю и по контексту, решил не тратить время и парсить в обработке, которая читает ТЖ. Сделал 2 отбора в ТЖ
<ne property=”name” value=””/>
<eq property=”func” value=”begintransaction”/>
2. Поставку сделал на базе которая выкладывалась в первом ДЗ.
3. Проделал. Работал и раньше
Задание выполнил, по пунктам:
1.Если нельзя менять конфигурацию, то остаётся использовать только тех. журнал
вот такая настройка файла работы тех. журнала выдаёт всё что интересует, но и много лишнего:
<config xmlns=”http://v8.1c.ru/v8/tech-log”>
<log location=”C:\Program Files\1cv82\logs” history=”168″>
<event>
<eq property=”Name” value=”SDBL”/>
<eq property=”Func” value=”BeginTransaction”/>
</event>
<property name=”all”>
</property>
</log>
</config>
к сожалению не отрабатывает такая настройка как
<config xmlns=”http://v8.1c.ru/v8/tech-log”>
<log location=”C:\Program Files\1cv82\logs” history=”168″>
<event>
<eq property=”Name” value=”SDBL”/>
<eq property=”Func” value=”BeginTransaction”/>
<eq property=”Context” value=”Система.ПолучитьФорму : Документ.ПоступлениеТоваровИУслуг.Форма.ФормаДокумента”/>
</event>
<property name=”all”>
</property>
</log>
</config>
тогда-бы отбиралась только та форма, которая интересует но уже можно или вручную посчитать или писать разборщик текстовых файлов (насколько понял написание разборщика в ДЗ не входит).
2.По созданию дистрибутива: создал поставку из конфигуратора через конфигурация -> поставка конфигурации -> комплект поставки
запустил сетап когда он отработал – при создании новой базы появились 2 новых шаблона (моя поставка и моя поставка+демо).
в целом когда знаешь как делается – значительно проще чем на 7.7 делать установочный пакет….
3.Отработка работы с сетевым хранилищем: всё нормально, но для работы с хранилищем на 1 комп пришлось создавать новых пользователей и логиниться под ними (иначе не пускает в хранилище под другими пользователями хранилища).
кстати, нужно попробовать к Context применить like – ну вдруг получится… вечером попробую
К сожалению с like тоже не получилось, да и ненадо!
в корневом каталоге подкатлогов логфайлов выполняем:
grep ‘Система.ПолучитьФорму : Документ.ПоступлениеТоваровИУслуг.Форма.ФормаДокумента’ -r >count.txt
Порты грепа давно уже есть везде (а где нет можно самому из исходников откомпилить), получаем файл каждая строка которого – открытие искомой формы count.txt
что-бы посчитать сколько раз это сделал именно Иванов И.И.
открываем этот файл в мультиэдите (me count.txt) и делаем глобальный реплэйс ну пусть “Иванов И.И.” на “ИВАНОВ И.И.” и смотрим сколько таких замен выполнит мультиэдит.
Тулзы старые но простые в использовании и до сих пор полезные!
Хорошее решение!
Задание выполнил.
1) Долго ковырялся с конфигом ТЖ. Хотелось помимо фильтра по свойствам “DBV8DBEng” и “Usr” также фильтровать по “Context”, но безуспешно.
Не прошел фокус и с указанием значения фильтра свойства “Usr” по Пользователю кирилицей.
Т.е. конструкция вида <event> <eq property =”Usr” value=”Петров”/> </event> отказалась работать.
Если написать латиницей value=”Petrov” – то все ок. Но я решил пойти по другому пути. А именно: в настройках ТЖ оставил только фильтрацию
по свойству “DBMSSQL”. Остальное уже парсит обработка по передаваемым параметрам (имя пользователя, название документа, форма).
Так мне кажется выглядит более универсально. Единственно, пока до конца не ясно, какое влияние интенсивное логирование оказывает на производительность системы.
2) Установочный дистр создал без проблем, после просмотра видео все более-менее понятно. Но хотелось бы эту тему разобрать более подробно,
например настройка одновременной поддержки от двух поставщиков. Проблема весьма актуальна: допустим мы дорабатываем
клиенту типовую конфигурацию не набегами, а системно, и в связи с этим хотелось бы поставить конфигурацию к себе на поддержку, но не снимая ее при этом
с типовой поддержки от 1С. Тут возможно несколько вариантов (горизонтальная/вертикальная поддержка), и в каждом свои нюансы. Думаю услышать развернутый ответ
на эту тему было бы интересно многим.
3) С инструментарием групповой разработки приходилось работать довольно плотно, так что тут no problems.
>Единственно, пока до конца не ясно, какое влияние интенсивное логирование оказывает на производительность системы.
Влияние конечно есть, нельзя сказать, что оно сильно большое.
Но все же ТЖ без явной необходимости включать не следует.
Второй вопрос записал на проработку.
ДЗ выполнено.
По первой части, создал файл logcfg.xml, каталог для хранения логов ТЖ. Долго не мог понять, как правильно создавать файл разметки, явно пробовал решения ниже (метод научного тыка :)), которые привели коллеги, но они почему то не работали. Мой вариант (для файловой версии, т.к. дома клиент-серверного варианта нет) такой:
<config xmlns=”http://v8.1c.ru/v8/tech-log”>
<log location=”F:\temp\1Clogs\11″ history=”1″>
<event>
<eq property=”Name” value=”DBV8DBEng”/>
<eq property=”func” value=”beginTransaction”/>
</event>
<property name=”usr”>
<eq property=”Name” value=”DBV8Eng”/>
</property>
<property name=”func”>
<eq property=”Name” value=”DBV8Eng”/>
</property>
<property name=”context”>
<eq property=”Name” value=”DBV8Eng”/>
</property>
</log>
</config>
В формирующемся логе остаются только события начала транзакции по всем пользователям и контекстам.
Далее написал обработку, которая в указанном каталоге обрабатывает все логи построчно и проверяет каждую строку на вхождение “Система.ПолучитьФорму : Документ.РеализацияТоваровИУслуг.Форма.ФормаДокумента” и на совпадении ФИО пользователя с заданными значениями.
Почему то, если я задавал имена свойств (например, для usr) русскими буквами, файлы ТЖ не создавались вообще. При просмотре xml файла в эксплорере вываливалась ошибка – начиная с первого символа кириллицы. Но стоило заменить “Иванова И.И.” на “Admin”, добавив фильтр
<eq property=”usr” value=”Admin”/>
лог создавался успешно.
По второму и третьему пункту вопросов не возникло, буквально недавно была необходимость и создавал хранилище.
При выполнении первого задания разбил его на два этапа. Первый этап, настройка фильтрации технологического журнала, таким образом, чтобы в журнал при открытии формы документа попадала ровно одна строка. Второй этап, создание внешней обработки читающей данные файла журнала и подсчитывающей количество строк содержащей информацию о нужной форме документа и имени пользователя. Все эксперименты проводил на файловой базе, поскольку MS SQL у меня не установлен. Для определения нужных фильтров в конфигурационном файле, сначала включил логирование всех событий и, просмотрев файл, определил, что лучшими кандидатами для фильтрации являются строки вида:
43:58.90620,SDBL,2,process=1cv8c,Usr=Бухгалтер,Trans=1,Func=BeginTransaction,Context=Система.ПолучитьФорму : Документ.РеализацияТоваровИУслуг.Форма.ФормаДокумента
или вида
43:58.9064-1,DBV8DBEng,2,process=1cv8c,Usr=Бухгалтер,Trans=1,Func=beginTransaction,Context=Система.ПолучитьФорму : Документ.РеализацияТоваровИУслуг.Форма.ФормаДокумента
Подозреваю, что вторая будет работать только, для файлового варианта ИБ, поэтом выбрал первый вариант и настроил файл конфигурации следующим образом:
<config xmlns=”http://v8.1c.ru/v8/tech-log”>
<log location=”C:\TMP\logs” history=”24″>
<event>
<eq property=”Name” value=”SDBL”/>
<eq property=”Func” value=”beginTransaction”/>
</event>
<property name=”Usr”>
</property>
<property name=”context”>
</property>
</log>
</config>
Все попытки наложить дополнительные фильтры по имени пользователя, например:
<eq property=”Usr” value=”Бухгалтер”/>
или на содержимое контекста закончились неудачей. Журнал переставал вестись, а при открытии файла конфигурации в браузере получал сообщение об ошибке вида:
В текстовом комментарии обнаружен недопустимый знак. Ошибка при обработке ресурса ”file:///C:/Program Files/1cv82/conf/log…
<eq property=”Usr” value=”
При этом пробовал сохранять файл как в Windows(1251), так и в DOS (866) кодировке, результат не изменялся. Поэтому сделал вывод, что система плохо воспринимает русский текст в конф. файле и фильтрацию по имени пользователя и содержимому контекста выполнял на втором этапе во внешней обработке при подсчете количества строк.
Со 2 пунктом сложностей не возникло, единственно, что перед созданием комплекта поставки заполнил свойства Поставщик (spec8.ru) и версия (1.0.0.0), соблюдая авторские права :).
Сложностей с 3 пунктом не возникло.
Задание выполнил.
1.По заданию изменять конфигурацию нельзя, но можно воспользоваться технологическим журналом. Создал файл logcfg.xml. Посмотрел создаваемые журналы как файловой, так и клиент-серверной (MS-SQL) информационных баз.
В результате наложил следующие фильтры:
<log history=”24″ location=”e:\1cv8logs”>
<event>
<eq property=”name” value=”dbmssql”/>
<eq property=”sql” value=”BEGIN TRANSACTION”/>
<eq property=”Usr” value=”Иванов И.И.”/>
</event>
<event>
<eq property=”name” value=”dbmssql”/>
<eq property=”sql” value=”BEGIN TRANSACTION”/>
<eq property=”Usr” value=”Петров П.П.”/>
</event> – для MSSQL
<event>
<eq property=”name” value=”DBV8DBEng”/>
<eq property=”func” value=”begintransaction”/>
<eq property=”Usr” value=”Иванов И.И.”/>
</event>
<event>
<eq property=”name” value=”DBV8DBEng”/>
<eq property=”func” value=”begintransaction”/>
<eq property=”Usr” value=”Петров П.П.”/>
</event> – для файловой ИБ.
Настроить фильтр по контексту не удалось, ни eq, ни like property=”Context”… почему-то не срабатывают.
Поэтому пришлось делать внешнюю обработку, в которую по команде загружается файл(ы) тех.журнала в текстовый документ.
Далее в построчном поиске проверяется, что
Если Найти(ТекСтрока,ТекПользователь)>0 И (Найти(ТекСтрока,”Система.ПолучитьФорму : Документ.РеализацияТоваровИУслуг.Форма.ФормаДокумента”)>0) Тогда КоличествоОбращений для ТекПользователь увеличивается на 1. Результат вводится в виде ТЗ.
2-3. Здесь все понятно и сложностей не возникло.
Задание выполнил! Т.к. по тз вносить изменения в базу нельзя, то решено было анализировать технологический журнал. Вначале в конфигурационном файле были включена регистрация всех событий, был проведен анализ событий. В результате я создал след фильтры в конф. файле
<event>
<eq property=”name” value=”sdbl”/>
<eq property=”usr” value=”Иванов И.И.”/>
<eq property=”func” value=”begintransaction”/>
</event>
<event>
<eq property=”name” value=”sdbl”/>
<eq property=”usr” value=”Петров П.П.”/>
<eq property=”func” value=”begintransaction”/>
</event>
<property name=”context”>
<event>
<eq property=”name” value=”sdbl”/>
<like property=”context” value=”%реализация%”/>
</event>
</property>
<property name=”func”>
<event>
<eq property=”name” value=”sdbl”/>
</event>
</property>
<property name=”usr”>
<event>
<eq property=”name” value=”sdbl”/>
</event>
</property>
но как я ни бился отфильтровать по контексту мне так и не удалось (тесты проводил на последней версии платформы 8.2.13.205) .
по 2 и 3 части ТЗ вопросов не возникло!
>но как я ни бился отфильтровать по контексту мне так и не удалось
К сожалению, фильтр по контексту действительно не работает..
по заданию я понял что нельзя изменять конфигурацию, мне кажется нужно делать решение через технологический журнал – я прав? а то уже много времени потратил.
Да, можно использовать ТЖ.