Продвинутый курс. МГ от 03.01.2011

Продолжаем отвечать на вопросы участников продвинутого курса.

1. Дублирование ярлыков.
Настройки все сделаны , 1SCStart.exe на сервере. Делаем его ярлык пользователю.
Запускает – устанавливается приложение и создает свой ярлык 1С.
Дальше уже правильность работы пользователя не гарантируется, она может запустить любой из 2-х ярлыков запуска 1С: который создался при установке с локальным путем и наш ярлык из сетевой папки.
Есть решение, кроме как создавать ярлык с картинкой и названием отличным от стандартных 1С?

2. Автоматическая установка.
В Главе 2 урок 3. Идет рассказ об автоматической установке платформы, и утверждается, что не требуются права локального администратора для обновления.
Попытка смоделировать автоматическую установку платформы на клиенте с WindowsXP для учетной записи с ограниченными правами по описанной методике провалилась с сообщением “Не обнаружена установленная версия 1С:Предприятия”.
Если же запуск производился от имени учетной записи с правами администратора, то все отработало как описано в видео.
Может есть какие то нюансы при настройке учетной записи с ограниченными правами?

3. Вопросы по ЖР.
Возможно но ли к существующему журналу добавить другой журнал, например, совместить два журнала с разных периодов?
Что делать если историю изменения смотреть хочется, но файлы на столько большие что получение из них информации тормозят систему в целом?
Если ли смысл хранить журнал по периодам? Будет ли быстрее доступ к данным/запись если выставить к примеру период равный день или месяц?

4. Регистрация события «Доступ».
В описании полей регистрации для описания использования доступа в журнале регистрации приведен текст: ”Тип: Массив. Поля, которые в случае участия их в результате выборки запроса, будут выведены в таблицу значений (поле Данные.Данные события журнала регистрации). Поля регистрации задаются массивом, элементом которого является либо строка – имя поля, либо массив строк – имен полей. Первый уровень массива определяет набор ключевых полей, которые будут зарегистрированы. Если элементом массива является массив строк, то в этом массиве описываются альтернативные ключевые поля. В случае возможности вывода нескольких альтернативных ключевых полей выводится поле с меньшим индексом.“
Можно ли расшифровать написанное?
Поскольку не совсем понятно следующее: ” …Если элементом массива является массив строк, то в этом массиве описываются альтернативные ключевые поля. В случае возможности вывода нескольких альтернативных ключевых полей выводится поле с меньшим индексом.”

5. Проведение документа.
В  уроках  говорится  о  том,  что  в  документах  при проведении  нежелательно    обращаться    к    напрямую  к  реквизиту  документа.
Но при проведении,  либо  при  открытии  документа создается объект и следовательно считываются его реквизиты.
Получается в момент проведения  мы  уже  имеем  в  кэше  данные по объекту и обратившись к реквизиту  вроде  ничего  не  теряем.
Может  я  чего  то  недопонял?

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

комментария 22 на “Продвинутый курс. МГ от 03.01.2011”

  1. Здравствуйте!
    Не могу получить доступ к материалам. Пишет:
     К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.

    • Андрей Шнитов 23.07.2012 в 07:25

      MamZhan, здравствуйте!
      Попробуйте еще раз.

  2. Александр Горлов 03.01.2011 в 22:21

    По п.7
    1. Запрос к базе при проведении документа – это хорошо. Вот только интересно, во всех ли случаях будут получаться одни и те же данные? Ведь при проведении транзакция еще не зафиксирована, хотя данные объекта уже записаны в базу. И получается, что запрос выполняет “грязное чтение” (Read Uncommited), чтение данных еще не зафиксированной транзакции. Нет ли режимов работы ИБ (автоматический/управляемый режим блокировок, …), которые привели бы к запрету такого чтения и, соответственно, к невозможности применения запросов к данным объекта при проведении?
    .
    2. Насколько я видел в типовых решениях на 8.1 проведение большинства документов построено на том, что сначала создается структура со значениями реквизитов документа, а затем уже она используется в общих модулях при проведении. Это пример “неэффективного” кода или вообще никак не связано с рассматриваемым вопросом?

    • Александр Горлов 03.01.2011 в 22:29

      2 (продолжение). А может, причина такого кода кроется в ответе на п.1? Ведь не так уж и давно все типовые перешли с автоматического на управляемый режим блокировок…

      • >>Ведь не так уж и давно все типовые перешли с автоматического на управляемый режим блокировок
        Последняя бухгалтерия 2.0 (2.0.18.1):  я не нашел ни одного документа, использующего данный режим.
        Последняя бухгалтерия КОРП: нашел только 2-а документа.
        Надеюсь, когда будем проходить управляемые блокировки, ответы на данные “загадочные” действия разработчиков найдутся! :)

        • Сейчас нет под рукой типовых.
          Однако действительно все типовые (от фирмы 1С) должны быть на управляемых блокировках. Из тем более БП Корп, само название обязывает :)
          Посмотрите в свойствах конфигурации (корневого узла), что установлено для “Режима блокировки конфигурации”. Должно быть значение “Управляемый”.

          • Да, Евгений, Вы – правы. И Вы, Александр, тоже! На корневом узле стоит значение – управляемый.  Я видать пока что очень “темный” в плане. Моему разуму почему-то казалось, что чтобы управляемому режиму блокировок заработать, на самом документе должен быть установлен данный признак.
            Буду ждать соотв.раздела в нашем курсе. Для просветления ;)

            • Ок :)

            • Александр Горлов 05.01.2011 в 00:40

              1. Про управляемые блокировки отлично написан раздел 2 книги “1С:Предприятие от 8.0 к 8.1” (авторы: П.С.Белоусов, А.В.Островерх). Мне он очень помог при освоении этой темы. Но для “просветления” все равно стоит дождаться раздела Продвинутого курса :)
              2. Режим блокировок у объектов принимается во внимание только тогда, когда у корневого узла установлен режим “Автоматический и управляемый”. Если установлен конкретный режим, то он и применяется, режим объектов не учитывается. Евгений, поправьте, если ошибаюсь.
              3. Режим “Автоматический и управляемый” для корневого элемента нужен для постепенного перехода от автоматических блокировок к управляемым. Однажды я был очень удивлен, когда при очередном обновлении вся типовая конфигурация разом перешла на управляемые блокировки! При этом ни строчки кода для поддержки режима управляемых блокировок не появилось! В книге из п.1 я прочел, что блокировки автоматические “разруливаются” на уровне СУБД, а управляемые – на уровне сервера предприятия. Но я так и не понял, почему же не нужно писать код для собственно управления блокировками в управляемом режиме… Так что ждем “просветления”! ;)

              • > Если установлен конкретный режим, то он и применяется, режим объектов не учитывается.
                Все верно.
                >Но я так и не понял, почему же не нужно писать код для собственно управления блокировками в управляемом режиме
                Код писать нужно. Видимо он был спрятан далеко в общий модуль :)

                • “Код писать нужно. Видимо он был спрятан далеко в общий модуль :)”
                  Евгений, я задавал вопрос на эту тему в базовом курсе. Но не совсем понял ответ :) Если в нашей учебной конфигурации установлен режим “управляемый”, но код мы НЕ пишем. В каком режиме работает платформа ? В автоматическом ?
                  Или управляемом ? Как работают блокировки, если кода нет ?

                • >В каком режиме работает платформа ?
                  В режиме управляемых блокировок.
                  Но он характерен только для клиент-серверного варианта использования платформы.
                  >Как работают блокировки, если кода нет ?
                  Блокировки не накладываются. Соответственно при работе нескольких пользователей есть большая вероятность возникновения коллизии.
                  Однако, в файловом варианте блокировки все равно накладываются автоматически на уровне таблиц.

              • Александр, спасибо за наводку на книжку! Она у меня есть, правда именно этот раздел я уже давным-давно забыл. Я в основном оттуда только про расширение языка запросов читал :)
                Вот Вы, Александр, вы с не типовыми конфигурациями работаете? Видели ли вы, чтоб в какой-нибудь очередной нетленки, использовался режим управляемых блокировок? Насколько я понимаю, в типовых этот функционал появился сравнительно недавно?

                • >Насколько я понимаю, в типовых этот функционал появился сравнительно недавно?
                  Навскидку более 2х лет применяется БП, в УПП примерно 3 года.

                • Александр Горлов 07.01.2011 в 14:00

                  1. Нужно учесть еще, что типовые конфигурации для России обычно опережают остальные по функционалу на полгода-год. То, что сказал Евгений – это для российских типовых. А, например, Бухгалтерия для Украины перешла на управляемые блокировки лишь летом 2010 года.
                  2. С нетиповыми конфигурациями встречаться приходится нечасто. Хотя, смотря что называть типовыми. Ведь типовая может быть сильно переработана, а есть еще отраслевые решения… Если речь идет о написанной с нуля “нетленке” – то было дело с использованием регистра сведений в управляемом режиме в одной конфигурации, автоматизировавшей учет презентационных дней компании и помещений. А что именно Вас интересует?

    • > И получается, что запрос выполняет «грязное чтение» (Read Uncommited), чтение данных еще не зафиксированной транзакции.
      Кажется, что грязного чтения здесь быть не может.
      Не могут другие транзакции изменить документ, который проводится в текущей транзакции.
      Ведь проведение подразумевает запись объекта, которая вызывает блокировку на уровне СУБД. А обработка проведения выполняется после записи объекта.
      Можете провести эксперименты, интересно посмотреть на результат :)
      >2. Насколько я видел в типовых решениях на 8.1 проведение большинства документов построено на том
      Рекомендация использования запроса была и для платформы 8.1. Однако давно не заглядывал в старые конфигурации, точно сказать не могу..

      • Александр Горлов 05.01.2011 в 00:45

        Я говорил о “грязном чтении” в части чтения новых данных, измененных в еще не зафиксированной транзакции. Ведь запись-проведение документа выполняются в единой транзакции. Получается, что при работе метода ОбработкаПроведения() новые данные документа уже записаны в ИБ, но транзакция еще не зафиксирована, ведь так? И в этом методе, выходит, мы читаем данные еще не зафиксированной транзакции…

        • >при работе метода ОбработкаПроведения() новые данные документа уже записаны в ИБ, но транзакция еще не зафиксирована
          Да, совершенно верно.

          Можно допустить следующую ситуацию:
          0. Пользователь создает новый документ и проводит его.
          1. В обработчике ПередЗаписью, были модифицированы данные документа №313. Например, заполнился реквизит СуммаДокумента.
          Далее, произошла запись в БД, и начала работу ОбработкаПроведения().
          2. В это время другой пользователь формирует отчет, который строится по данным документов (сумм документов). И в отчет могут попасть данные документа №313.
          3. Далее в обработке проведения происходит контроль и Отказ устанавливается в Истину.

          Получилось, что отчет содержит неактуальные данные.
          Вы говорили о подобной ситуации?

          Но в этом страшного нет ничего. С таким же успехом пользователь мог провести документ, сформировать отчет, отменить проведение документа. Данные в отчете были бы не актуальные.

        • Александр Горлов 05.01.2011 в 14:50

          А если пойти дальше и предположить, что сумма документа в отчете использовалась вместе с движениями документа? Тогда получится, что данные в отчете “кривые”, а не просто неактуальные: сумма документа уже новая, а данные движений еще старые… Вот это я и называю “грязное чтение” – чтение данных еще не завершившейся транзакции. И по-хорошему, СУБД не должна допускать операций Read Uncommited.
          Вообще в книге “От 8.0 к 8.1” детально расписаны режимы работы блокировок каждой СУБД в зависимости от режима блокировок платформы. В частности, в книге я не встречал вообще варианта работы СУБД, когда может работать Read Uncommited… Поэтому и заинтересовало, почему запросом можно получать данные документа, транзакция записи которого еще не завершилась.
          Может все дело в том, что данные документа, использующиеся в транзакции при его записи/проведении просто не блокируются, а потому доступны запросом внутри текущей транзакции или даже извне (как в описанном выше способе с отчетом)?

          • >сумма документа уже новая, а данные движений еще старые…
            Такая ситуация возможна.
            >Почему запросом можно получать данные документа, транзакция записи которого еще не завершилась.
            СУБД выполняет блокировку чтения только в момент физической записи, это незначительное время.