Если коротко, то починили баг, который проявлялся ПриЗаписи() и появилась возможность программного включения Истории данных.
Честно скажу, меня терзал интерес, так как ранее я не стал дожидаться, когда обработку по программному включению истории данных выпустит 1С, и сделал ее сам. Выложил для бесплатного скачивания: Моя версия настройки состава «Истории данных»
В статье я сравню эти две разработки и выложу типовую от фирмы 1С.
Поехали, начнем с бага.
1 Баг, который присутствовал в предыдущих версиях (до 8.3.24.1020):
Я решил его воссоздать.
Демонстрирую на платформе (8.3.23):
Я создал справочник «ТестируемБаг», добавил ему реквизит «Комментарий» - строка длиной 150 символов.
Включил Историю данных и обновление истории данных сразу после записи:
Далее я запустил клиент и создал элемент справочника:
В истории у нас вот такая версия:
Добавил подписки ПередЗаписью и ПриЗаписи:
Код обработчиков вот такой:
Процедура ТестируемБагПередЗаписью(Источник, Отказ) Экспорт
Источник.Комментарий = "Перед записью"
КонецПроцедуры
Процедура ТестируемБагПриЗаписи(Источник, Отказ) Экспорт
Источник.Комментарий = "При записи"
КонецПроцедуры
Открыл созданный ранее элемент и перезаписал:
В комментарии видим «При записи»
Нажимаем «Перечитать»
В комментарии видим «Перед записью»
А что у нас в Истории данных?
В истории данных мы видим «При записи», а в элементе справочника в текущий момент «Перед записью».
Я проверил данное поведение в 8.3.24.1020. Данное поведение исправили, правда должен быть выключен режим совместимости. Возможно, во всех платформах младше 8.3.23 вышедших после данного релиза ошибку поправят, но это не точно.
2 Сравнение типовой обработки с моей в части включения Истории данных по объектам.
Скажу честно, пока я сравнивал две обработки я устал от типовой. Дело в том, что при запуске открывается форма настройки отбора. Просто ранее эта обработка служила для поиска версий и почему-то в 1С решили оставить старое поведение. Поэтому приходилось все время закрывать форму отбора.
В итоге я вытащил типовую обработку из платформы и закомментировал код, выполняющий запуск формы:
&AtClient
Procedure OnOpen(Cancel)
MakeFilterPresentation(FilterValue);
// СДВ Форма отбора при открытии обработки ++
//AttachIdleHandler("OnOpenDelayed", 0.1, True);
// СДВ Форма отбора при открытии обработки --
EndProcedure
В таком виде я прикрепил типовую обработку к статье. Напомню, для работы заявленного 1С функционала нужна платформа от 8.3.11, а лучше 8.3.15.
Объекты, на которые нет прав:
Открываем типовую обработку 1С:
Решение интересное. Если нет прав тогда название объекта становится светлым и появляется надпись, что прав недостаточно. С другой стороны, кто будет пользоваться этой обработкой? Обычные пользователи?
Запускаем мою обработку:
Я предусмотрел «привилегированный режим» включения, тем более данные настройки должен включать человек с административными правами.
Итог: За оформление объектов, на которые нет прав я несомненно ставлю плюс фирме 1С, но то, что не предусмотрен привилегированный режим ставлю минус.
Счет: 1-1
Запуск на платформе 8.3.24 в режиме совместимости 8.3.10 (до появления истории данных):
Открываем типовую обработку 1С как внешнюю:
Информативность сообщения, конечно, не «Агонь». Хотелось бы более дружелюбное сообщение, в котором указывалось с какой версии обработку можно запускать.
Хм, стресс тест не пройден… Дам тогда фору и запущу на 8.3.24 в режиме совместимости 8.3.10 прямо из «Функции для технического специалиста». Но не тут-то было. Обработка пропала из меню.
Запускаем мою обработку:
У меня обработка запускается и выводит четко и понятно какую платформу нужно установить.
Итог: Если вы используете режим совместимости 8.3.10 вы даже не узнаете про новую возможность. Балы не дам не себе не 1С, будем считать это незначительными придирками.
Счет: 1-1
В режимах совместимости 8.3.11 и выше, обработки ведут себя одинаково адекватно
Счет: 2-2
Информативность:
Открываем типовую обработку 1С:
Вот скажите История данных включена в конфигураторе или программно? А может быть, где-то есть выключенная программно история данных?
Смотрим, например, Регистр Сведений:
Что за поля? Что есть ресурс, а что реквизит? И самое непонятное - это для чего выведено измерение?
Я решил провести краш тест. Выключаем измерение «Имя подсистемы»
Меня ждал сюрприз, дело в том, что ранее подобное поведение приводило к ошибке, из-за чего я выключил отображение измерений в своей обработке.
В любом случае не видно, что у регистра Версии подсистем что-то отключено, пока не выделишь его.
Запускаем мою обработку:
Все наглядно. Сразу видно, какой документ включен программно, какой в конфигураторе. И если выключить программно, мы тоже это увидим.
Я вернул обратно «Измерения» и выложил новую версию своей обработки.
Итог: Информативность у 1С явно проигрывает и самое интересное далее станет понятно почему ;))
Счет: 2-3
Тест - Нажимаем «Записать» ничего не меняя:
Ничего не произошло. Обе обработки прошли этот тест.
Счет: 3-4
Тест – Нажимаем выключить, а затем включить историю данных у объекта, после чего нажимаем «Записать».
Ничего не произошло. Обе обработки прошли этот тест.
Счет: 4-5
Тест – У включенного в конфигуратор объекта снимаем галочку. Записываем. Ставим галочку обратно и записываем.
При выключении и записи обе обработки повели себя правильно. Было установлено программное отключение истории данных. (Результат буду демонстрировать через мою обработку, так как в типовой этот момент невиден)
А теперь ставим включить и записываем.
1С сделала двойное включение…
То есть теперь история данных включена и в конфигураторе и программно. Соответственно в таблице, где хранятся программные настройки «DataHistorySettings» появилась лишняя запись, а обыватель об этом и знать не знает.
Моя обработка смотрит если включено в конфигураторе тогда программно включать не надо и не включает.
Итог: В 1С явно пошли путем на скорую руку, работает и ладно. Тут я бы еще и отнял бал за реализацию, но не буду.
Счет: 4-6
Настройки по умолчанию.
Что я ожидал от этой кнопки? Я ожидал, что в любой момент нажму на данную кнопку и вернусь к версии с очищенными программными настройками.
В 1С так и делают на первый взгляд. Снимают все галочки программные. А дальше ты думаешь все норм и закрываешь обработку и изменения не меняются. Оказывается, нужно нажать «Записать» и вот тут получаем еще более странное поведение:
До того, как нажал «Настройки по умолчанию» и «Записать»:
Результат:
Включенный программно объект, выключен тоже программно. Соответственно место в таблице «DataHistorySettings» занято данной настройкой.
Моя обработка при нажатии «Настройка по умолчанию» чистит программные настройки освобождая таблицу «DataHistorySettings» от ненужных данных.
Итог: Поведение у 1С крайне странное, отключение программных настроек происходит путем создания программной настройки. Моя обработка удаляет программные настройки и соответственно чистит после себя таблицу «DataHistorySettings»
Счет: 4-7
Отменить изменения и Прочитать настройки заново:
Обе обработки отработали корректно. Отменили все текущие изменения.
Счет: 4-8
Подвожу итоги:
Обработка от 1С рабочая, но, к сожалению, сделана на скорую руку. Имеет функционал достаточный для включения/выключения истории данных в пользовательском режиме, но только если есть права на все объекты. Визуально непонятно, что включено программно, а что в конфигураторе. При выключенных реквизитах вы не увидите изменений по выключенному объекту. В общем, хорошо, что они сделали, но плохо что сделали на 3-
По моему субъективному мнению, моя обработка выиграла со счетом 8 – 4, хотя я поддавался в некоторых пунктах.
На этом заканчиваю. Всем удачи и новых свершений!
Полезные статьи по этой теме:
Обработка для программной настройки состава "Истории данных"