Продвинутый курс. Занятие №6

Первое занятие 1-го блока продвинутого курса.

Необходимо изучить следующие главы текущего блока.
Глава 1. Базовые приемы работы в конфигураторе.
Раздел справки о параметрах запуска приложения должен подсказать нужные ключи.

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте
залогиньтесь.

Если не активировали токен — посмотрите видео-инструкцию (видео N5)

Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись —
напишите нам на e-mail поддержки.

комментариев 14 на “Продвинутый курс. Занятие №6”

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

  2. Задание выполнено.
    Воспользовался рекомендованными в задании методами, а также методом ПолучитьСоединенияИнформационнойБазы для определения наличия работающих пользователей. Для выгрузки ИБ и тестирования/исправления проверяется наличие любых других соединений, для синтаксического контроля только наличие соединений в режиме Designer.
    Все действия выполняются с помощью ЗапуститьПриложение с нужной строкой команды. В описании ключа /IBConnectionString не сразу дочитал про кавычки :), какое-то время потратил, пытаясь понять почему не запускается. Для вывода результата использую ключ /out с указанием имени файла, из которого затем читается результат операции.
    Для проверки синтаксиса запускал приложение с параметром “ДождатьсяЗавершения” = Истина, но почему-то обработка не стопалась и пыталась читать файл, когда того еще не было. Пришлось использовать цикл в котором пытаюсь прочитать файл в конструкции Попытка-Исключение до удачного чтения, после чего показываю результат на форме.
    Для того чтобы выполнить тестирование/исправление и выгрузку базы сразу после ЗапуститьПриложение выполняется безусловное закрытие текущего сеанса через ЗавершитьРаботуСистемы(Ложь). Тестировал на двух разных по мощности машинах, а так же в клиент-серверном варианте – всегда успевало закрыться текущее соединение и файл выгрузки успешно создавался. Но все равно не уверен, что такой метод 100% рабочий.

  3. Домашнее задание выполнено.
    Трудности возникли при попытке выгрузки/тестировании текущей базы. Стало сразу понятно, что единственный способ это сделать – как-то завершить пользовательский сеанс и сразу же запустить конфигуратор с нужными параметрами. Но я не догадался подправить конфигурацию и использовать событие “ПриЗавершенииРаботыСистемы”, возможно, сбила с толку формулировка ДЗ “разработайте внешнюю обработку”. В любом случае, очень интересное решение, теперь буду знать о таком способе.

  4. Задание выполнил, но не совсем полностью.
    Воспользовался рекомендованными в задании методами. Конструировал строку соединения с базой данных. Программно завершаю работу текущей базы данных в том случае если есть возможность установить монопольный режим, далее передаю параметр в ЗавершитьРаботуСистемы() для перезапуска , и в дополнительные параметры передаю сконструированную строку параметров в которой так же указываю перезапуск. в конструкции параметров указываю файл в который будет производится выгрузка /OUT -NoTruncate в итоге в файл выводится информация о том что было произведенна та или иная операция но когда автоматом загружается ИБ в пользовательском режиме так и не удалось получить данные из этого файла. Но, при всем при этом, если вручную запустить обработку то содержимое файла выводится в текстовый документ на форме.
    Буду смотреть решение :) .

  5. respublica 23.05.2011 в 23:43

    Задание выполнено. Для меня очень полезное задание :). Пришлось помучиться с запуском приложения через параметр /IBConnectionString: нужно не только расставить кавычки, но и убрать запятую в строке соединения. Результаты работы выводил через /DumpResult.

  6. ДЗ выполнила. Пользовалась рекомендованными методами. Данные о соединении получала через метод СтрокаСоединенияИнформационнойБазы() с дальнейшим разбором в зависимости от варианта подключения БД.
    Работают ли с базой пользователи проверяю по количеству сеансов ИБ, исключая свой.
    ДЗ выполнила. Пользовалась рекомендованными методами. Данные о соединении получала через метод СтрокаСоединенияИнформационнойБазы() с дальнейшим разбором в зависимости от варианта подключения БД. Работают ли с базой пользователи проверяю по количеству сеансов ИБ, исключая свой.

  7. Задание выполнено без особых затруднений. Подобные примеры помнится рассказывались в базовом курсе

  8. Кононов Сергей 23.05.2011 в 15:19

    Много интересного получил решая это ДЗ, но я его так и не решил. Все что у меня хорошо получилось, это программное получение строки для запуска в командной строке операционной системы. Если мою полученную строку ввести там, то получим результат. Но из текущей открытой базы, все тоже самое не работало. Для выгрузки БД в файл .dt следует завершить все сеансы работы пользователей и мой соответственно и запустить выгрузку, но командами завершить работу системы я и еще другими я этого не добился, буду ждать Вашего решения, так как задача очень интересная.

  9. Используем реквизиты формы Пароль, ФайлОтчета, ТекстОтчета, СтрокаЗапуска. Для реквизитов Пароль и ФайлОтчета добавим поля ввода и настроим их для ввода пароля и выбора/чтения файла. Результат выполнения действия будем сохранять в файл отчета. Для просмотра отчета добавим на форму поле текстового документа ТекстОтчета. Настроим автоматическое сохранение значения реквизита ФайлОтчета.
    СтрокаЗапуска заполняется в процедуре ПриСозданииНаСервере(), имеет вид:
    “DESIGNER ”
    + ?(КлиентСервер,”/S “+АдресИБ,” /F “””+ПутьИБ+””””)
    + ” /N “+ИмяПользователя()
    + ?(ЗначениеЗаполнено(Пароль),” /P ” +Пароль,””)+” ”
    Адрес или путь ИБ получаем с помощью метода СтрокаСоединенияИнформационнойБазы().
    Для проверки наличия работающих пользователей используем функцию ВыполнениеВозможно() :Возврат ?(ПолучитьСоединенияИнформационнойБазы().Количество()>1,ложь, истина).
    В процедуре выполнения действия проверяем возможность выполнения, формируем СтрокуДействия, используя СтрокуЗапуска и соответствующие параметры и ключи, с выводом результата в файл отчета. Для выгрузки резервной копии дополнительно выводим диалог выбора каталога выгрузки. Для запуска самого действия резервного копирования и тестирования используем вызов метода ЗавершитьРаботуСистемы(истина,истина,СтрокаДействия). 
    Синтаксический контроль не требует монопольного режима конфигуратора, для него можно не проверять возможность выполнения и использовать вызов метода ЗапуститьПриложение(СтрокаДействия,, истина ), дополнив СтрокуДействия вызовом программы: КаталогПрограммы()+”1cv8.exe”. Отчет можно сразу вывести в текстовый документ в форме обработки. 
    Возник вопрос, чем различаются ЗавершитьРаботуСистемы() и ПрекратитьРаботуСистемы(), кроме параметра “ЗапрашиватьВозможность”? Также при использовании параметров “/RunEnterprise /EXECUTE внешняя обработка” файл отчета создается, но не заполняется – не успевает завершиться запись в файл?

    • ПрекратитьРаботуСистемы – более жесткий метод, завершается работа безусловно, даже обработчики завершения не вызываются.
      >файл отчета создается, но не заполняется
      Поясните, пожалуйста, эту фразу.

      • Если не использовать параметр /RunEnterprise, файл, указанный в /Out, заполняется сообщениями о результате работы, при использовании этого параметра действия в конфигураторе выполняются, но файл лога оказывается пустым.

        • Файл лога заполняются, только если возникли ошибки.
          Самое интересное, что в этот файл пишутся коды ошибок, которые никак не документированы.
          Даже сами разработчики не смогли ответить сходу на вопрос, что означает код ошибки “101”.

  10. Задание выполнила. Немного помучилась с двойными кавычками в параметрах запуска. Не сразу заметила параметр Out для сохранения служебных сообщений.

  11. Готово! Только я вместо ЗапуститьПриложение() использовал ЗапуститьСистему(). В этом случае нам не нужно определять вариант (файловый или клиент-серверный). Поэтому метод СтрокаСоединенияИнформационнойБазы() и парсинг получившейся строки не нужны.