Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут! (в рабочие часы)

1С Эксперт – Пример решения билета (вариант 3)

Рассмотрим еще один гипотетический вариант билета с экзамена 1С- Эксперт по технологическим вопросам. Хочу предупредить, я не гарантирую что ответ на данный вопрос 100% правильный и полный, это лишь моё виденье.

Обучение экспертов 1С

Вопросы примерного билета 1С эксперт по технологическим вопросам

Вопрос 1

В конфигурации определен регистр накопления «ОстаткиТоваровНаСкладах», который имеет следующий набор измерений:

  • Склад
  • Товар

Измерения регистра не проиндексированы.

Пользователь А выполняет в транзакции запрос следующего вида:

Запрос.Текст = “ВЫБРАТЬ

| Остатки.Склад КАК Склад,

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

| Остатки.Товар КАК Товар,

| Остатки. КоличествоОстаток КАК Остаток

| ИЗ

|  РегистрНакопления.ТоварыНаСкладах.Остатки(,Товар=&Товар) КАК Остатки”;

Запрос.УстановитьПараметр(“Товар”, Справочники.Товары.НайтиПоКоду(“00001”));

Пользователь Б выполняет в запись следующего набора записей  регистра ТоварыНаСкладах:

Склад Товар
ОсновнойСклад Телевизор SHARP
ОптовыйСклад Телевизор SHARP

Смогут ли два этих действия выполнится параллельно? Обоснуйте свой ответ. Как измениться ситуация, если Пользователь А укажет условие по складу «Резервный склад». Почему?

Вопрос 2

Код конфигурации содержит следующий фрагмент:

НачатьТранзакцию();

            Процедура1();

            НачатьТранзакцию();

                        Процедура2();

                        НачатьТранзакцию();

                        Процедура3();

                        ОтменитьТранзакцию();

Какие действия будут отменены в результате выполнения функции ОтменитьТранзакцию() в 7 строке.

Вопрос 3

Для работы системы используется сетевой ключ на 50 пользователей, который установлен на сервере 1С предприятия. Во время работы системы у различных пользователей периодически возникает ошибка «Не обнаружен ключ защиты программы». Укажите возможные причины возникновения ошибки и предложите способы их устранения.

Ответы на данный билет аттестации 1С эксперт

Ответ на вопрос 1:

При чтении пользователем А таблицы регистра, система установит S блокировку на всю таблицу. Связано это с отсутствием индекса для данной таблицы. Без индекса, скорее всего, оптимизатор SQL server выберет полное сканирование таблицы – table scan.

Блокировка пользователя Б произойдет по причине несовместимости блокировок. При записи система создает X блокировку, которая не совместима не с одним типом блокировок.

Единственная особенность– длительность захвата ресурса, в зависимости от режима управления блокировками в 1С предприятии:

  • Если 1С предприятие работает в режиме управляемых блокировок – то блокировка установится только на время чтения. Следовательно, после окончания выполнения запроса пользователем А, пользователь Б может произвести запись в регистр.
  • Если в системе установлен режим автоматических блокировок – на прочитанные данные S блокировка сохранится до конца транзакции. Следовательно, до конца транзакции пользователь Б будет ожидать окончания транзакции первого пользователя.

Если пользователь А установить в запросе склад «Резервный склад» ничего не изменится. Связано это с тем, что оптимизатор выбирает сканирование таблицы (table scan) из-за отсутствия индексов и тем самым блокирует таблицу целиком.

Ответ на вопрос 2:

Так как система 1С предприятия не учитывает вложенность транзакций, метод «ОтменитьТранзакцию» отменит все транзакции.

Ответ на вопрос 3:

Если сетевой ключ установлен на сервере 1С предприятия, то по причине высокой загруженности оборудования, менеджер лицензий может не успевать «выдавать» пользователю лицензию на программу. Для решения проблемы рекомендуется вынести сервер лицензий 1С на отдельную машину. Он абсолютно не требователен к аппаратным ресурсам.

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Остались вопросы?

СПРОСИТЕ в комментариях!

Комментариев: 7 на “1С Эксперт – Пример решения билета (вариант 3)
  1. В ответе на 1 вопрос звучит: «Если пользователь А установить в запросе склад «Резервный склад» ничего не изменится».
    Это неверно. Да, измерения регистра не проиндексированы (по условию) и это вводит в заблуждение. У таблицы итогов есть индекс «Период+Измерение1+..+ИзмерениеN». Сл-но, если указать еще и условие по измерению «Склад = РезервныйСклад», то будет попадание в индекс, не будет table scan и блокирования всей таблицы, будет четкая S блокировка только на РезервныйСклад+ТоварСКодом1, а значит в этом случае пользователи А и Б успешно распараллелятся (т.к. ресурсы разные).

    Ответить

    • Отличное замечание.Так мало информации по блокировкам,я кроме статьи Чистова больше не видел,но он не до конца все объясняет,например почему не использует блокировку в запросе и т.д.

      Ответить

    • СКЛАД это второе измерение. Поскольку первое измерение в запросе не указано, то , думаю, что сканирования не избежать.

      Ответить

      • ТОВАР это второе измерение. Поскольку первое измерение в запросе не указано, то , думаю, что сканирования не избежать.

        Ответить

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

    ОтменитьТранзакцию();

    Сообщить(«транзакция активна «+ТранзакцияАктивна());

    То увидим что транзакция активна и она не отменена.

    Ответить

    • Интересное наблюдение) Тоже попробовал — действительно так

      Может быть на самом деле глючит функция»ТранзакцияАктивна()».

      Ответить

    • «ОтменитьТранзакцию()» не завершает её, а отменяет все изменения которые были внесены в базу в процессе этой транзакции. Транзакция будет активна, пока не завершится корректным способом или пока не произойдёт новое обращение к данным. Во втором случае будет ошибка «В данной транзакции уже происходили ошибки»

      Ответить

Добавить комментарий:

Ваш адрес email не будет опубликован.