Продвинутый курс. Домашнее задание №6
Новое задание по 1-му блоку продвинутого курса.
Для выполнения рекомендуется изучить следующие главы 1-го курса.
Глава 1. Базовые приемы работы в конфигураторе.
Раздел справки о параметрах запуска приложения должен подсказать нужные ключи.
В этой же теме необходимо написать отчет о выполнении задания.
К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.
Задание выполнил, все оказалось очень просто.
Ключи запуска конфигуратора очень подробно описаны в справке.
Проверку наличия других пользователей сделал временной установкой монопольного режима.
ДЗ 6 выполнил. Особых проблем не возникло. Вызывается 1cv8 с ключом designer и ключами из раздела справки о ключах в пакетном режиме. Информация о результате вызова выводится в файл при помощи ключа out
Готово.
ДЗ выполнено.
Задание выполнил для файлового варианта базы. Пришлось еще раз почитать справку по пакетному запуску конфигуратора. Ключи запуска копировал прямо из справки.
Задание выполнено. Проблем не возникло.
Синтаксический контроль: ЗапуститьПриложение(“C:\Program Files\1cv82\common\1cestart.exe DESIGNER /F”””+Путь+””” /N”””+Пользователь+””” /P”””+Пароль+””” /CheckModules -ThinClient /Outd:\8.2\dz6.txt”)
Выгрузка базы: ЗапуститьПриложение(“C:\Program Files\1cv82\common\1cestart.exe DESIGNER /F”””+Путь+””” /N”””+Пользователь+””” /P”””+Пароль+””” /DumpIB D:\8.2\dz6.dt”)
Тестирование базы: ЗапуститьПриложение(“C:\Program Files\1cv82\common\1cestart.exe DESIGNER /F”””+Путь+””” /N”””+Пользователь+””” /P”””+Пароль+””” /IBCheckAndRepair -ReIndex -LogIntegrity -RecalcTotals /Outd:\8.2\dz62.txt”)
Ну тут уже все написали… Можно сказать, что выехал на чужом опыте…
Задание выполнил, ожидал где-то “подводного” камня.. но все обошлось:-)
Задание выполнил. Не думал, что существует столько ключей.
Выполнено.
Выполнено
Задание выполнил. Сложностей не возникло, за исключением
правильной расстановки кавычек и слэшей при формировании командных строк.
В качестве справки по ключам использовал синтакс-пормощник.
1. Синтаксический контроль выполнется без проверки количества сеансов.
«C:\Program Files\1cv82\common\1cestart.exe» DESIGNER
/FC:\Базы\Задание6 /N Администратор /CheckModules -ThinClient
-WebClient -Server -ExternalConnection -ThickClientOrdinaryApplication
/Out c:\Базы\Файлы\syntaxКоntrol.txt
Результаты записываются в текстовый файл.
2. Создание резервной копии.
Анализируется результат выполнения функции ПолучитьСоединенияИнформационнойБазы() и если
количество соединений больше одного вылетает сообщение о невозможности выгрузки ИБ,
иначе выполняется выгрузка.
«C:\Program Files\1cv82\common\1cestart.exe DESIGNER
/FC:\Базы\Задание6 /NАдминистратор /DumpIB c:\Базы\1cBaza.dt /out c:\Базы\Файлы\dump.txt
3. Тестирование и исправление ИБ.
Аналогично 2-му пункту.
«C:\Program Files\1cv82\common\1cestart.exe» DESIGNER
/FC:\Базы\Задание6 /NАдминистратор /IBCheckAndRepair -ReIndex
-LogAndRefsIntegrity -BadRefCreate -BadDataCreate /Out c:\Базы\Файлы\Test.txt
Задание выполнено. С выполнением поставленной задачи вопросов не возникло.
Формирую строку запуска конфигуратора из 3 частей:
1.КаталогПрограммы() + “1cv8.exe DESIGNER /IBConnectionString ” + СтрокаСоединения + “/N” + ТекущийПользователь()
2.Далее в зависимости от выполняемой задачи (CheckModules, DumpIB, IBCheckAndRepair) с параметрами…
3. Сохранение результата в файл (/Out)
Далее выполняется команда системы и завершается текущий сеанс.
Хотел добавить еще действие в параметры запуска конфигуратора, чтобы после выполнения автоматически запускалось приложение и открывался лог-файл. Делал с помощью параметра “/RunEnterprise”… Не получилось… Все время повторно запускается конфигуратор…
Задание выполнено.
На форме присутствуют поля для ввода пользователя и пароля, от которого будет идти запуск приложения, а также пути к файлам.
Нужные ключи берем из синтакс-помощника.
Пункт 1:
Не важно работают ли пользователи, выполняем без проверки. Пишем в текстовый файл результаты. Читаем текстовый файл.
Пункт 2:
С помощью функции ПолучитьСоединенияИнформационнойБазы() проверяем количество сеансов, если больше одного (текущего) сообщаем о невозможности обновления. Иначе запускаем выгрузку и закрываем себя – ЗавершитьРаботуСистемы(Ложь, Истина)
Пункт 3:
Тоже самое, что и во втором пункте. Пишем в текстовый файл результаты тестирования и исправления.
Ссылка на форму обработки
http://www.screencast.com/t/52j5N9f1wpXn
Задание выполнил, сложностей не возникло.
ДЗ выполнил.
Предусмотрен вариант работы как с текущей базой, так и с другими базами. Все сделано при помощи строки параметров запуска, которая формируется в зависимости от реквизитов установленных в форме.
Особых проблем не возникло.
Задание выполнил.
1. Вначале сделал обработку где пользователь прописывает путь к базе данных для файлового варианта и кнопки с соответствующими командами и с необходимыми параметрами командной строки. Вывод идет в файл (/Out имя файла). Количество пользователей проверяю подключившись к данной базе по СОМ и использую ПолучитьСоединенияИнформационнойБазы().Количество().
2. Второй вариант сделал для текущей базе путь к базе вытащил из СтрокаСоединенияИнформационнойБазы() и после ЗапуститьПриложение() делаю ЗавершитьРаботуСистемы.
3. Клиент-серверный вариант не делал, но проблем думаю не будет, нужно только использовать не параметр File, а другие типа Srvr,Ref.
Задание выполнил. Тема знакома, никаких сложностей не возникло. Правда пришлось поднять материалы МГ базового курса + еще раз пересмотреть вторую редакцию по работе с формами. К сожалению, констатирую тот факт, в среднем, на данный момент мне нужно времени в раз 5 больше, чтобы решить какую-то задачку на управляемой форме, нежели на обычной. Надеюсь, опыт свое возьмет :)
Должен взять, со временем ;)
ДЗ №6. Внешняя обработка «Утилита администрирования». Возможность выбора файловой или серверной базы. 3 опции: выгрузка базы, тестирование и исправление и синтаксический контроль.
Перед выполнением операции проверяется, работают ли пользователи с выбранной базой (с помощью процедуры СтрокаСоединенияИнформационнойБазы() с использованием COMObject(“V82.Application”)), если кто-то работает, то выдается сообщение о невозможности выполнения операции.
Пример командной строки для выгрузки базы:
“C:\Program Files\1cv82\common\1cestart.exe DESIGNER /FC:\1c\Риб1 /Nадминистратор /DumpIB c:\1c82.dt /out c:\dump.txt
Пример командной строки для тестирования и исправления базы:
“C:\Program Files\1cv82\common\1cestart.exe” DESIGNER /FC:\1c\Риб1 /Nадминистратор /IBCheckAndRepair -ReIndex -LogAndRefsIntegrity -BadRefCreate -BadDataCreate /Out c:\check.txt
Пример командной строки для синтаксического контроля базы:
“C:\Program Files\1cv82\common\1cestart.exe” DESIGNER /FC:\1c\Риб1 /Nадминистратор /CheckModules -ThinClient -WebClient -Server -ExternalConnection -ThickClientOrdinaryApplication /Out c:\syntax.txt
«C:\Program Files\1cv82\common\1cestart.exe DESIGNER /FC:\1c\Риб1 /Nадминистратор /DumpIB c:\1c82.dt /out c:\dump.txt
Платформа в ошибку валится при выполнении данной команды у меня :)
ДЗ № 6 выполнила.
Создала внешнюю обработку.
Считаю, что нельзя допускать одновременного запуска регламентных операций, поэтому сделала отдельные кнопки на форме для запуска. Разработкой красивого интерфейса не занималась, не в этом суть задания.
Для определения вида ИБ и путей к базе использую метод СтрокаСоединенияИнформационнойБазы().
Выгрузку делаю той базы, из которой производится запуск обработки. Чтобы закрыть пользовательский режим нужно после вызова процедуры ЗапуститьПриложение выполнить закрытие текущего сеанса с помощью процедуры ЗавершитьРаботуСистемы(Ложь). У меня во всех случаях пользовательский сеанс успевал закрыться до запуска выгрузки.
Проверила обработку в файловом и клиент-серверном вариантах базы. Все работает.
Может быть я не совсем понял. Тут все активно используют метод СтрокаСоединенияИнформационнойБазы(). В ДЗ предусматривалась ведь возможность произвести указанные действия с любой информационной базой, а не только с текущей?
Через COM можно обратиться этим методом и другой ИБ.
В общем, задание выполнено.
Результат представлен скриншотом.
Конечно же, можно улучшать инструмент, например, пользователей выбирать из выпадающего списка, а не вводить вручную.
В окно сообщений выводится содержимое текстового файла лога, куда перенаправлен при вызове вывод сообщений.
Столкнулся со следующей проблемой: совместное использование ключей не работает. Так, при установке “Синтаксический контроль” + “Выгрузка”, срабатывает только выгрузка (в лог сведения о выполнении синтакс-контроля не выводятся), а “Выгрузка” + “ТиИ” отрабатывает опять только последнее (файл выгрузки не создается). Приходится вызывать конфигуратор несколько раз отдельно. Есть ли другой выход? Или ключи действий всегда имеют приоритет и не выполняются последовательно за один вызов?
Добрый вечер!
Задание выполнено.
1. Сделал обработку с каталогом результата, списком выбора возможных действий и текстом команды запуска.
2. При изменении типа действия меняется текст команды
3. Количество рабочих пользователей определяю как ПолучитьСеансыИнформационнойБазы().Количество()
4. Сами операции логично реализовать не через ЗапуститьПриложение, а через ЗавершитьРаботуСистемы, установку 2 параметра в истину, а в третьем переопределить строку запуска, что я и сделал. Но так как в задании написано сделать через ЗапуститьПриложение то сделал для учебных целей еще и так, хотя первый вариант намного симпатичнее.
5. Поймал небольшой глюк – при использовании ЗавершитьРаботуСистемы при создании лог-файла (/Out) вылетает ошибка совместного доступа к данному файлу, но файл при этом создается правильный. Правда, релиз у меня не последний, возможно в самых актуальных этого нет.
Выполнил. Главное в задании – внимательность к ковычкам и слешам ))
И не говорите! А еще к пробелам – особенно между ключем и значением этого ключа…
Моя обработка работает только, если указать другую базу. Я думаю – это логичное поведение. При указании другой базы все процедуры отрабатывают корректно – создается файл dt и файлы txt. При попытке вызова обработки из проверяемой-выгружаемой-тестируемой базы получается следующее. Проверка синтаксиса отрабатывает, файл txt формируется. Выгрузка не работает, файл dt не формируется, в текстовом файле – “Ошибка исключительной блокировки информационной базы”. Это естественно – ведь мой сеанс активен. При тестировании – аналогично -” Не удалось переключить доступ в монопольный режим Имеются работающие пользователи. ”
Если переключаюсь ПриСозданииНаСервере в монопольный режим – другие ошибки. “Ошибка разделенной блокировки информационной базы”
Исправила, доделала. Теперь можно выбирать базу и работать с ней. Вечно тороплюсь
:)
ДЗ выполнено: через ПолучитьСеансыИнформационнойБазы() проверяю наличие других пользователей + пакетный запуск с ключами
А у Вас получилось выгрузить текущую базу, из которой обработка запускается?
Естественно, что базу приходится закрывать перед этим…
Тогда не совсем понятно куда выдавать результат выполнения=)
В текстовый файл, например
Или в ЖР
Коллеги, у меня вопрос : Как организовали выдачу результата ? В условии задания стоит “с выдачей результата”. У меня операции выполняются, но выдачу результата реализовать не смог. Я так понимаю имеется ввиду служебные сообщения которые выдаются при ТИИ :
Объект изменен: ПланВидовХарактеристик.ВидыСубконто
Объект изменен: ПланОбмена.УниверсальныйОбмен
Объект изменен: ПланОбмена.РИБ
Принятие изменений…
Тестирование закончено
При Синтаксическом контроле:
Синтаксических ошибок не обнаружено!
В выполнение задания помогла встроенная справка: Параметры командной строки в пакетном режиме запуска конфигуратора. Предварительно устанавливаю монопольный режим, затем выполняю операции ТИИ, Синтаксис, Выгрузки информационной базы.
Запуск с ключем /Out и файлом лога на диске, который после отработки затем выводить при помощи Сообщить().
Только придется заставить процедуру ЗапуститьПриложение() ждать окончания операции, т.к. по умолчанию управление передается дальше без ожидания…
выполнено, в файловом варианте. особых проблем, на которых следует остановится не было.
А у Вас получилось выгрузить текущую базу, из которой обработка запускается?
Задание выполнил.
Использовал рекомендуемую процедуру ЗапуститьПриложение().
Строку запуска получал функцией СтрокаСоединенияИнформационнойБазы().
Вывел на форму реквизит для указания пути к каталогу, в который выгружаются файл dt и текстовый файл с результатами проверки.
После запуска конфигуратора процедурой ЗапуститьПриложение() работу 1С в пользовательском режиме завершаю.
Ключи запуска конфигуратора взял из справки конфигуратора.
После запуска конфигуратора процедурой ЗапуститьПриложение() работу 1С в пользовательском режиме завершаю.
А если пользовательский режим не успеет закрыться до начала выгрузки конфигуратором?
Сделала.
Только для файлового – сервера нет.
Использовала справку для ключей.
Долго составляла правильные пути из СтрокаСоединенияИнформационнойБазы() в части кавычек и пробелов через Лев, Прав, СтрДлина, СтрЗаменить.
Выполнено.
Дольше всего возился с кавычками…
Задание выполнил используя ключи пакетного запуска.
http://i009.radikal.ru/1011/65/ff149f4e5144.jpg
Вопросы:
1) Когда выдается сообщение о блокировке базы, дальше то что делать? Точнее чтобы выполнить Дамп или Тестирование и Исправление надо заходить в другую базу и от туда запускать Обработку, но тогда не понятно зачем проверять СтрокаСоединенияИнформационнойБазы() мы то уже в другой базе…
2) Возможно это было где то в ответах мастер-группы, почему сохраняя внешнюю обработку в папке, при повторном закрытии и открытии, все равно открывается старая обработка, помогает перезапуск тонкого клиента.
Ошибка блокировки
http://i037.radikal.ru/1011/ef/999fd3b15928.jpg
2 ситуация возникает только в Кл-серверном варианте
1. Можно просто предупредить админа о невозможности операции.
2. Это глюк платформы. Выход один – перезапускать приложение..
Выполнено.
ДЗ выполнено.
Проверил работу только в файловом варианте, все пункты выполняются.
Задание выполнил.
Файловая или серверная база – определял с помощью поиска в строке, возвращаемой процедурой СтрокаСоединенияИнформационнойБазы().
Далее пытался установить монопольный режим. Если попытка удавалась, значит других пользователей нет (другого способа не вспомнил).
Попытка
УстановитьМонопольныйРежим(Истина);
Исключение
Сообщить(“Невозможно установить монопольный режим. Работают другие пользователи”);
Возврат Ложь;
КонецПопытки;
Возврат Истина;
Ключи запуска конфигуратора – в справке. Интересное задание.
В процедуре ПриСозданииНаСервере проверяю, если ПолучитьСеансыИнформационнойБазы().Количество() больше 1, тогда не запускаем обработку.
Далее 3 кнопки: приведу код одной, например для синтаксического контроля:
<code>&НаКлиенте
Процедура СинтаксическийКонтроль(Команда)
ИмяФайла = “E:\Books\1c\ВидеоУроки\ДЗ\Продвинутый\6\Sintax.txt”;
ЗапуститьПриложение(“C:\Program Files\1cv82\common\1cestart.exe DESIGNER /IBConnectionString “””+СтрокаСоединенияИнформационнойБазы()+
“”” /N “”Администратор”” /CheckModules -ThinClient -WebClient -Server -ExternalConnection -ThickClientOrdinaryApplication /Out “””+
ИмяФайла+””””);
КонецПроцедуры
</code>
Единственная проблема, что открывается окно запуска баз и там нужно нажать кнопку Конфигуратор. Возможно нужно использовать другое приложение, а не 1cestart.exe.
Это значит, что авторизация не проходит…или путь к базе не верен. СтрокаСоединенияИнфБазы() возвращает строку, которую нужно обработать перед помещением её в команндную строку для запуска. Как минимум там в конце стоит лишняя “;” и Вместо “File=” я оставлял просто “F”. Посмотрите мой пост
Спасибо!
Задание выполнено
Проверяю, работают ли пользователи, если нет – то кнопки выполнения регламентных действий на форме доступны
После выбора каталога запуск конфигуратора с ключами – помогла справка
Параметры командной строки в пакетном режиме запуска конфигуратора
Правильно ли я понял, что для решения ДЗ необходимо изучить данную главу:
Глава 1. Приемы работы в конфигураторе.
– Использование буфера обмена при работе в конфигураторе.
– Проектирование базы данных.
– Виды связей между таблицами.
– Применение связи «Один-ко-многим».
– Реализация связи «Многие-ко-многим».
– Связь «Один-к-одному».
Если да, то как то невяжется с ДЗ. Если нет то укажите материал для изучения.
За ранее извиняюсь если просто ступил.
Напрямую глава 1 не относится к выполнению ДЗ, но изучить ее нужно в любом случае.
Сделал указание на дополнительный материал.
Хотя даже если НЕ делать проверку на наличие активных подключений, то вся информация будет содержаться в файле логов.
Начало ДЗ звучит как-то странно :)
Компания планирует вести независимый управленческий и регламентированный учет. С
целью
Разработайте внешнюю обработку “Утилита администрирования”.
Жесть :))
Исправлено, Сергей.
Задание выполнено.
Первоначально определяю, работают ли другие пользователи. Если нет, то разрешаю выполнть регламентные операции.
При открытии формы определяю СтрокуСоединенияСИБ и устанавливаю флаг – файловая-ли база
СтрокаСоединенияИБ = СтрокаСоединенияИнформационнойБазы();
Если Найти(СтрокаСоединенияИБ,”File”) тогда
ФайловаяБаза = Истина;
Иначе
ФайловаяБаза = Ложь;
КонецЕсли;
Далее делаю три команды (тестировал только на файле – нет возможности пока развернуть сервер, но логика такая же)
Например для архивирования
Процедура СоздатьАрхивнуюКопию(Команда)
Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
ДиалогВыбораКаталога = Новый ДиалогВыбораФайла(Режим);
Если ДиалогВыбораКаталога.Выбрать() Тогда
Каталог = ДиалогВыбораКаталога.Каталог;
Если ФайловаяБаза тогда
ЗапуститьПриложение(“””C:\Program Files\1cv82\common\1cestart.exe””” + ” CONFIG /” + СтрЗаменить(Лев(СтрокаСоединенияИБ,СтрДлина(СтрокаСоединенияИБ)-1),”ile=”,””) + ” /N” + “””Администратор””” + ” /DumpIB” + “””” + Каталог + “\1c.dt””” + ” /OUT” + “””” + Каталог + “\LOG.txt””” );
Иначе
//Запуск для серверной базы
КонецЕсли;
ЗавершитьРаботуСистемы(Ложь, Ложь);
Иначе
Сообщить(“Не выбран каталог”);
КонецЕсли;
Естественно с проверкой, а не работает ли кто-то…
Ну и аналогично для Синтаксиса и ТиИ
Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
ДиалогВыбораКаталога = Новый ДиалогВыбораФайла(Режим);
Если ДиалогВыбораКаталога.Выбрать() Тогда
Каталог = ДиалогВыбораКаталога.Каталог;
Если ФайловаяБаза тогда
ЗапуститьПриложение(“””C:\Program Files\1cv82\common\1cestart.exe””” + ” CONFIG /” + СтрЗаменить(Лев(СтрокаСоединенияИБ,СтрДлина(СтрокаСоединенияИБ)-1),”ile=”,””) + ” /N” + “””Администратор””” + ” /CheckModules” + ” /OUT” + “””” + Каталог + “\Sin.txt””” );
Иначе
//Запуск для серверной базы
КонецЕсли;
Иначе
Сообщить(“Не выбран каталог”);
КонецЕсли;
Ключи для ТиИ
/IBCheckAndRepair [-ReIndex]
[-LogIntergrity] [-RecalcTotals]
[-IBCompression]
[-TestOnly | [-BadRefCreate |
-BadRefClear | -BadRefNone]
[-BadDataCreate |
-BadDataDelete] ]
И еще…не совсем понятно. Рекомендовано перед ДЗ посмотреть первую главу. Может я не очень внимательно смотрел, каюсь, но там нет информации, достаточной для выполнения ДЗ?! Если бы я НЕ настраивал выгрузку ИБ через командную строку ранее, то даже определить где искать было бы затруднительно.
Главу это изучить нужно, хоть она и не сильно поможет в решении.
А чем дополнительно можно воспользоваться написал в записи :)