1с сохранение настроек внешней обработки
В версии платформы «1С:Предприятие 8.3.8» появилась возможность выгружать внешние обработки и отчеты в виде набора XML-файлов. Эта функциональность предназначена для системы 1С:EDT, но может быть использована для решения любых других задач.
С ее помощью можно настроить версионирование внешних обработок и решить многие сложности, связанные с хранением и сравнением разных версий *.epf-файлов, отслеживанием изменений.
О чем эта статья
В этой статье мы:
- Рассмотрим процедуру выгрузки внешних обработок в XML-файлы
- Подключим систему управления версиями Git
- Научимся версионировать внешние обработки и просматривать историю их изменения.
Сложности при работе с внешними обработками
Внешние обработки — это обработки, которые не включены в состав конфигурации и хранятся в виде файлов с расширением *.epf.
Во внешние обработки обычно выносят программный код, который не привязан прямо к конкретному прикладному решению или требует многократного запуска и отладки.
Версионирование обработок, входящих в состав прикладного решения, реализуется с помощью стандартного хранилища платформы, но он не позволяет работать с внешними файлами. И в ситуации, когда обработка неоднократно меняется и интенсивно используется в работе, могут возникнуть сложности:
- Не ясно, что поменялось по сравнению с прошлой версией;
- Не понятно, когда именно были выполнены изменения. Это можно узнать только из комментариев, если они есть;
- Нет возможности быстро вернуться на прошлую версию обработки, если она не была предусмотрительно скопирована и не сохранена с другим названием или в другой папке;
- По прошествии некоторого времени сложно разобраться среди множества однотипных файлов.
- Чтобы безвозвратно не потерять изменяемую логику, приходится оставлять большие участки закомментированного кода (хотя комментарии должны только пояснять работу программного кода);
Частично сложностей можно избежать, если включать обработки в состав конфигурации или расширения, подключенных к хранилищу (подключение расширения к хранилищу возможно в версии платформы 8.3.12 и старше).
При этом обработка перестает быть «внешней» и теряет одно из своих главных преимуществ: удобство быстрой доработки и отладки. Но даже в этом случае сравнение версий происходит достаточно медленно из-за особенностей внутренней структуры хранилища. Подробнее о его работе можно прочитать в статье Важные вопросы про хранилище.
Выгрузка внешних отчетов и обработок в XML
Начиная с версии 8.3.8, платформа научилась выгружать внешние отчеты и обработки в файлы формата XML, проще говоря — конвертировать файлы *.epf и *.erf в набор файлов XML и BSL.
В виде XML-файлов выгружаются формы и описание обработки, а расширение BSL используется для файлов с исходным текстом модулей.
Рисунок 1. Конвертация файлов
При такой конвертации на диск сохраняется следующий набор файлов:
- Файл с описанием обработки или отчета в формате XML.
- Файлы с описанием всех форм обработки в формате XML.
- Файлы с исходным кодом модуля формы и модуля обработки или отчета в виде BSL-файлов.
С файлами такого формата могут работать все существующие системы контроля версий.
Используем систему контроля версий
Система контроля версий — это программа, которая умеет хранить множество различных версий файлов, сравнивать их между собой, переключаться между версиями, откатывать изменения, объединять эти версии и много другое.
Такие системы рассчитаны на работу с файлами в виде исходного программного кода и воспринимают файлы платформы 1С с расширениями *.epf и *.erf как двоичные, т.е. просто как набор нулей и единиц и поэтому не умеют их переводить в «читаемый» формат.
Рисунок 2. Так видит файл с расширением*.epf сторонняя программа
Существует множество различных систем контроля версий, а одной из самых распространенных является Git.
Система Git используется в качестве инструмента версионирования и групповой разработки в среде EDT (подробнее про это было описано в статье Системы контроля версий в EDT), поэтому именно она будет рассмотрена ниже.
Приступаем к настройке
Для того, чтобы настроить версионирование файлов обработки, нам понадобятся следующие инструменты:
- Git — программа для работы с системой управления версиями
- SourceTree — визуальный клиент для работы с Git
- Araxis Merge — программа для сравнения и объединения программного кода.
Рисунок 3. Необходимые программы
Выбор именно этих программных решений не является принципиальным — в качестве визуального клиента можно использовать другое приложение, например GitHub Desktop или TortoiseGit, а Araxis Merge можно заменить программами KDiff3, WinMerge или любой другой. Цель данной статьи — продемонстрировать подход к версионированию файлов платформы «1С:Предприятие», а не показать готовое решение.
Для демонстрационного примера будет использована внешняя обработка «ЗагрузкаСпецификации.epf», расположенная в папке «c:\Обработки\». В папке «c:\Repo1C\» будет создан проект Git, в котором будет храниться история разработки.
Рисунок 4. Исходный набор файлов
Интерактивная выгрузка
Чтобы выгрузить обработку в XML вручную, нужно выполнить следующие действия:
- Открыть обработку в конфигураторе платформы версии 8.3.8 и старше
- Открыть контекстное меню обработки
- Выбрать пункт «Выгрузить в файлы» и указать нужную папку.
Рисунок 5. Интерактивная выгрузка обработки
После выгрузки в выбранной папке можно увидеть выгруженные файлы: описание обработки, формы и текст модуля формы.
Рисунок 6. Выгруженные файлы
Недостаток ручного способа состоит в том, что нужно выполнять много действий — открывать основную форму обработки, открывать меню, выбирать папку. Если обработок будет несколько, процедура выгрузки и вовсе может затянуться.
Процесс выгрузки обработки можно автоматизировать. Для этого нужно запустить конфигуратор в пакетном режиме.
Пакетный режим
Пакетный режим предполагает выполнение действий без участия пользователя, при этом конфигуратор запускается из командной строки с указанием специальных параметров.
Чтобы произвести выгрузку обработок, нужно запустить исполняемый файл 1cv8.exe с указанием ключа DumpExternalDataProcessorOrReportToFiles.
После этого ключа нужно указать следующие параметры:
- Полный путь к файлу обработки («что выгрузить»)
- Путь к папке, в которую будут выгружены xml-файлы («куда выгрузить»)
- Формат выгрузки: иерархический или линейный. При иерархическом формате файлы будут выгружены с учетом структуры элементов, при линейном — простым списком, при этом тексты модулей будут сохранены с расширением *.txt.
Выполнять такой запуск нужно из командной консоли Windows. Чтобы запустить командную консоль, нужно открыть меню «Пуск — Выполнить» (или нажать сочетание клавиш Win+R), написать«cmd» и нажать Enter.
Откроется командная строка, в которой нужно написать следующую команду (путь к исполняемому файлу 1cv8.exe может быть другим, в зависимости от установленной версии платформы):
"c:\Program Files\1cv8\8.3.12.1529\bin\1cv8.exe" DESIGNER /DumpExternalDataProcessorOrReportToFiles "c:\Repo1C" "c:\Обработки\ЗагрузкаСпецификаций.epf" /Out "c:\Repo1C\out.txt"
Рисунок 7. Командная строка
После выполнения указанной команды в папку «C:\Repo1C» будут выгружены файлы, а в файле out.txt появится такая запись:
Рисунок 8. Выгрузка прошла успешно
Чтобы каждый раз не открывать командную строку и не набирать команду вручную, можно сохранить команды выгрузки в командный файл.
Командный файл
Командный файл — это текстовый файл с расширением «*.bat», который содержит последовательность команд для выполнения в системе Microsoft Windows.
Чтобы создать такой файл, нужно открыть Блокнот (или любой другой текстовый редактор: Notepad++, AkelPad), скопировать в него следующий текст и сохранить с расширением «.bat»:
SET PATH1C="c:\Program Files\1cv8\8.3.12.1529\bin\1cv8.exe"
SET EXT="c:\Обработки\ЗагрузкаСпецификации.epf"
SET SRC="c:\Repo1C"
SET OUT="c:\Repo1C\out.txt"
%PATH1C% DESIGNER /DumpExternalDataProcessorOrReportToFiles %SRC% %EXT% /Out %OUT%
Из-за особенностей работы командного процессора в названии обработки желательно не использовать пробелы. Также может оказаться, что при запуске bat-файла неверно распознается кодировка. В этом случае нужно пересохранить файл в OEM-866.
На изображение ниже показано, как выбрать кодировку в текстовом редакторе Notepad++.
Рисунок 9. Сохранение файла в кодировке OEM-866
После того как выгрузка файлов настроена, можно приступить к установке Git и созданию репозитория.
Создание репозитория
Для начала работы с системой Git, следует загрузить с официального сайта дистрибутив программы и установить ее на компьютер. При установке можно оставить значения всех параметров по умолчанию.
Чтобы Git мог отслеживать изменения файлов в определенной папке, нужно указать что эта папка является репозиторием. Git фиксирует изменения всех файлов, которые находятся в репозитории (если специально не указать обратное).
Наш тестовый репозиторий будет размещаться в папке, в которую мы выгружаем обработку – «c:\Repo1C».
Создать репозиторий можно через командную консоль, но проще воспользоваться программой SourceTree — ее также необходимо скачать с официального сайта и установить. При установке нужно указать адрес электронной почты (либо учетную запись Google) и пройти процедуру регистрации. Для создания репозитория нужно нажать на кнопку «Create» в главной панели SourceTree и указать полный путь к папке:
Рисунок 10. Создание репозитория в SourceTree
После создания репозитория в папке появляется скрытая директория «.git» — наличие ее означает, что Git теперь отслеживает изменения файлов в этой папке.
Поскольку в папке с:\Repo1C уже находились выгруженные файлы, Git сразу же предложит зафиксировать их в хранилище.
Чтобы изменения файлов попали в хранилище, файлы нужно проиндексировать — указать, что изменения действительно должны быть включены в новый «снимок состояния».
Рисунок 11. Помещение измененных файлов в индекс
Для фиксирования изменений нужно нажать кнопку «Закоммитить» (или сочетание клавиш Shift+Ctrl+C). Команда commit (с англ. — «совершать, фиксировать») помещает изменения файлов в служебное хранилище системы Git. Аналогичным действием в хранилище 1С является команда «Поместить в хранилище».
Рисунок 12. После заполнение комментария нужно нажать на кнопку “Закоммитить”
Попробуем теперь поменять что-то в нашей обработке и перевыгрузить файлы.
Например, после добавления в форму процедуры ПроверитьНастройкиВТаблицеДанных(),
Git снова отобразит информацию о том, что произошли изменения, и в этот раз покажет, какие именно части программного кода были изменены.
Рисунок 13. Git отображает изменения файлов обработки
Чтобы не делать коммит вручную, можно добавить команды сохранения изменений в наш командный файл:
cd %SRC%
set /P txtcommit="Введите текст комментария: "
git add .
git commit -m "%date% %time%: %txtcommit%"
Смотрим историю изменений
С помощью программы SourceTree можно увидеть историю изменений файла. Также можно «откатиться» на нужную версию файлов обработки. Для этого нужно дважды нажать на нужной строке в журнале изменений, после чего файлы в папке будут заменены на те, которые находились в ней до выбранного коммита.
Чтобы посмотреть историю изменений конкретного файла, нужно спозиционироваться на него и открыть меню «Журнал для выбранного»:
Рисунок 14. Просмотр изменений конкретного файла
Для сравнения версий файлов между собой будем использовать внешнюю утилиту сравнения Araxis Merge.
Предварительно нужно настроить SourceTree — указать, что именно Araxis нужно использовать в качестве внешнего средства сравнения.
Рисунок 15. Настройка внешней утилиты сравнения
Рисунок 16. Чтобы сравнить версии, нужно выбрать «Внешняя утилита сравнения»
В открывшемся окне программы Araxis Merge можно увидеть наглядное сравнение версий модуля формы.
Рисунок 17. Araxis Compare сравнивает версии файла
На изображении видно, что Araxis показал изменения в файлах и помог узнать, что именно происходило с программным модулем. Например, видно, что в последней версии модуля процедура ДобавитьКолонку() переименована в ДобавитьКолонкуПоТипу(), а также удалены два блока кода. Если в момент использования обработки возникли ошибки, то просматривая по шагам историю доработки, можно обнаружить момент, когда они были сделаны.
Дорабатываем командный файл
Если усовершенствовать наш командный файл и добавить в него обход всех файлов из выбранной папки, то не придется создавать его копию для каждой обработки. Достаточно будет указать в настройках (переменная EXT_FOLDER) нужную директорию, и все обработки и отчеты из нее будут выгружены в наш репозиторий и размещены по отдельным каталогам. При этом в лог-файл out.txt будет сохранена информация о результатах выгрузки всех файлов.
Окончательный вариант bat-файла будет выглядеть так:
SET PATH1C="c:\Program Files\1cv8\8.3.12.1529\bin\1cv8.exe"
SET EXT_FOLDER="c:\Обработки"
SET SRC="c:\Repo1C"
SET OUT="c:\Repo1C\out.txt"
cd /D %EXT%
del /f /q %OUT%
FOR %%F IN (*.epf *.erf) DO (
%PATH1C% DESIGNER /DumpExternalDataProcessorOrReportToFiles %SRC% %%F /OUT %OUT% -NoTruncate
)
set /P txtcommit="Введите текст комментария: "
git add .
git commit -m "%date% %time%: %txtcommit%"
В предложенном примере текст коммита вводится один раз для всех обработок, но можно перенести команды системы Git в цикл FOR и вводить описание для каждого файла.
Подведем итоги. Теперь мы можем:
- Фиксировать новые версии обработки в хранилище системы контроля версий. Например, это можно делать в конце рабочего дня или перед началом работы над новым блоком программного кода.
- Просматривать историю версий и внесенные изменения, чтобы быстро понять, когда и что было добавлено, изменено или удалено.
- Сравнивать версии обработки между собой. К примеру, можно увидеть, чем именно отличается версия недельной давности от текущей. Или в какой момент был неверно выбран алгоритм для решения задачи — и при необходимости вернуться в исходную точку.
При наличии удобных инструментов такие вопросы решаются быстрее и эффективнее.
Заключение
Мы рассмотрели основы работы с Git и общий способ версионирования внешних обработок, который заключается в следующем:
- Обработку нужно выгрузить в формате *.xml.
- Выгруженные файлы должны быть помещены в репозиторий системы контроля версий.
- Сравнение версий выполняется внешними инструментами сравнения.
Платформа 1С также предоставляет возможность обратной загрузки — формирования внешней обработки отчета из набора XML-файлов. Для этого существует команда «Загрузить из файлов» и ключ LoadExternalDataProcessorOrReportFromFiles.
Также за рамками статьи остались другие возможности, которые предоставляет система Git: облачное хранение репозитория, совместная работа над проектом и многое другое. Они тоже могут использованы при работе с внешними файлами системы «1С:Предприятие».
Задача: Необходим механизм, позволяющий сохранять произвольные пользовательские данные (настройки). Настройки относятся к внешней обработке, вариант с изменением конфигурации не рассматривается. План видов характеристик трогать тоже нет желания.
В рамках заметки предложено два вариант работы с настройками пользователя.
Ваиант 1
Сохранение настроек:
ИмяНастройки = "ТЕСТ" ;
ЗначениеНастройки = Новый Структура ( "Это настройки произвольного типа, к примеру структура" , "" );
СохранитьЗначение ( ИмяНастройки , ЗначениеНастройки ) ;
- ИмяНастройки - ключ настроек, тип “строка”.
- значение - значение произвольного типа, возможность заманчивая, но не стоит слишком увлекаться и сохранять все подряд.
Восстановление настроек:
ИмяНастройки = "ТЕСТ" ;
ЗначениеНастройки = ВосстановитьЗначение ( ИмяНастройки );
Если ЗначениеНастройки = Неопределено Тогда
Сообщить ( "Нет настройки с ключем ТЕСТ!" );
КонецЕсли;
- ИмяНастройки - ключ настройки, тип “строка”
- возвращает значение произвольного типа, сохраненное ранее.Если восстановить не удалось, возвращает “Неопределено”
Плюсы
- прост в использовании
- возможно сохранить настройки произвольного типа текущего пользователя в текущей информационной базе
Минусы
Только толстый клиент
Вариант 2
Использование объекта ХранилищеОбщихНастроек. Считаю этот вариант наиболее удобным и гибким.
Объект доступен в глобальном контексте. Содержит следующие методы:
Сохранение настроек:
// ключи могут быть произвольными строками
КлючОбъекта = " MIKO " ;
КлючНастроек = "ПанельТелефонии" ;
// настройки могут быть произвольного типа
Настройки = Новый Структура ( "Это настройки произвольного типа, к примеру структура" , "" );
ИмяПользователя = ИмяПользователя ();
// имя пользователя - пользователь владелец настроек, если параметр не указать,
// то настройки будут сохранены для ТЕКУЩЕГО пользователя
ИмяПользователя = ИмяПользователя ();
ХранилищеОбщихНастроек .C охранить ( КлючОбъекта , КлючНастроек , Настройки , , ИмяПользователя );
Под пользователем понимается именно пользователь информационной базы! Пример получения имени текущего пользователя:
// получим имя
ИмяТекущегоПользователя = ИмяПользователя ();
// в типовых конфигурация используется справочник "Пользователи"
// в этом справочнике в стандартном реквизите "Код" обычно
// хранят информацию по имени пользователя, пример получения имени:
ИмяПользователя = Справочники . Пользователи . НайтиПоНаименованию ( "Администратор" ). Код ;
// обычно "Код", для этого справочника - строка фиксированной длинны, потому вероятно разумно обрезать пробелы справа:
ИмяПользователя = СокрП ( ИмяПользователя );
Восстановление настроек:
КлючОбъекта = " MIKO " ;
КлючНастроек = "ПанельТелефонии" ;
ВладелецНастроек = ИмяПользователя ();
// Для восстановления настроек необходимо воспользоваться функцией Загрузить
СтруктураНастроек = Неопределено;
Попытка
СтруктураНастроек = ХранилищеОбщихНастроек . Загрузить ( КлючОбъекта , КлючНастроек ,, ВладелецНастроек );
// если настроек нет, то будет возвращено значение "Неопределено"
Исключение
Сообщить ( "Нет прав на восстановление настроек." );
КонецПопытки;
Если СтруктураНастроек = Неопределено Тогда
Сообщить ( "Не вышло восстановить настройки!" );
КонецЕсли;
ВладелецНастроек - это имя пользователя, владельца настроек. Параметр очень важный.
Настройки других пользователей могут получать ТОЛЬКО пользователи с расширенными правами.
Необходимо право "АдминистрированиеДанных".
Пробелы справа игнорируются!
Плюсы
- Возможно работать со значениями настроек других пользователей.
- Доступность: Сервер, толстый клиент, внешнее соединение.
Получение всех ключей настроек по ключу объекта
// Пример получения всех настроек по ключу объекта
КлючОбъекта = "MIKO" ;
ВладелецНастроек = ИмяПользователя ();
Попытка
// возвращает список значений
// элементы списка - ключи настроек
СтруктураНастроек = ХранилищеОбщихНастроек . ПолучитьСписок ( КлючОбъекта , ВладелецНастроек );
Исключение
Сообщить ( "Нет прав на восстановление настроек." );
КонецПопытки;
Подведем итог
В рамках этой заметки я рассказал о двух вариантах работы с настройками пользователя. Пробуйте :).
. Внимание! Статья устарела, смотрите комментарии. К сожалению, обновить статью не могу. В этой статье рассматриваются способы сохранения значений всех реквизитов внешней обработки в файл и чтение их из файла в управляемой форме.
Иногда требуется создать внешнюю обработку с большим количеством реквизитов (в том числе и с табличной частью), первое, что мы делаем для сохранения настроек в этом случае - устанавливаем свойство формы АвтоматическоеСохранениеДанныхВНастройках в Использовать. Затем ставим напротив всех нужных реквизитов галочки "Сохранение" и наслаждаемся результатом.
Однако, очень часто обработку нужно проверять на тестовой базе или другом сервере и т.п., поэтому требуется сохранить все значения реквизитов формы (в том числе табличной части) в файл, а потом загрузить из файла уже в другой конфигурации.
То, что это возможно легко понять по намёкам на форумах, однако ни одного законченного решения найти не удалось. Что ж, к этому нам не привыкать, начинаем придумывать велосипед.
Пробуем сначала сохранить значения всех реквизитов формы в файл. Поиски в интернете приводят нас к процедуре ЗначениеВФайл и функции ЗначениеВСтрокуВнутр, приём последней пользоваться как бы не рекомендуется, якобы она предназначена для обмена с 7.7. Обе конструкции языка доступны только на сервере и толстом клиенте, поэтому возникает вопрос, как бы обойти значения всех реквизитов формы &НаСервере.
выдаст вполне ожидаемую не для всех ошибку: Итератор для значения не определен.
Тоже самое ожидает нас и с переменными ЭтаФорма, ЭтотОбъект. На такую простую вещь можно потратить пару часов, однако отладчик и поисковики творят чудеса - получить значения всех реквизитов формы внешней обработки на сервере можно с помощью следующего кода:
Казалось бы, теперь всё просто, однако не совсем. Табличная часть, как и таблица значений имеют не совсем ожидаемый тип значений, их тип ДанныеФормыКоллекция. А ведь они должны быть обязательно выгружены для сохранения, иначе в файле получим только их уникальные индификаторы.
В результате этого знания получаем:
Это даже работает, но радоваться рано - этот код неправильный! Мы допустили одну из самых распространенных ошибок при написании кода на управляемых формах. Выбрав имя файла на клиенте, а потом передав его на сервер, мы забыли, что при клиент-серверном режиме работы код, выполняемый на стороне сервера, будет запущен под другим пользователем. И далеко не факт, что этот пользователь будет иметь доступ туда (например, локальный диск терминальной сессии по RDP), куда мы сохраняем файл.
Поэтому переписываем код, сохраняем файл теперь на клиенте, правда придётся воспользоваться не очень рекомендуемой функцией ЗначениеВСтрокуВнутр:
Теперь перейдём к загрузке из файла. Мы не будем использовать, как мы уже выяснили, следующий неправильный код с передачей только имени файла на сервер:
А напишем другой вариант, например, используя временное хранилище:
Если внимательно посмотреть код, то легко заметить, что после получения данных из временного хранилища (с типом ДвоичныеДанные) мы вынуждены записать их во временный файл. Другого нормального способа получить данные с типом Строка из временного хранилища попросту нет.
Чтобы не насиловать файловую систему временными файлами, давайте перепишем код, без использования временного хранилища, но с использованием не очень рекомендуемой функции ЗначениеИзСтрокиВнутр:
Как видно, вариантов сохранения настроек в файл и чтения настроек из файла очень много, даже в этой статье мы рассмотрели далеко не все, однако эти варианты рабочие и должны сэкономить вам время, когда у вас возникнет такая необходимость.
В прикрепленной ниже внешней обработке используется последний вариант сохранения и чтения настроек через файл из этой статьи, ну и, конечно, автосохранение штатными средствами в информационной базе.
Пользователи работают с обработкой, в которой часть параметров меняется очень редко, но параметры у каждого пользователя свои. Необходимо организовать сохранение настроек и их восстановление для определенных реквизитов. Сохранение и восстановление выполнять только по кнопкам на форме.
Решение
Для сохранения настроек воспользуемся хранилищем настроек. Если конфигурация позволяет, то можно создать свое хранилище, или же воспользоваться одним из системных. Считаем, что конфигурация типовая(не редактируется), в качестве хранилища будем использовать ХранилищеНастроекДанныхФорм.
В форме определим команду Сохранить настройки, в которой вызовем метод Сохранить() указав ключ объекта, ключ настроек, сами настройки и пользователя:
В форме определим команду Восстановить настройки, в которой спросим про восстановление(пример с вопросом в режиме без модальных вызовов разбирал здесь) и при утвердительном ответе вызовем метод Загрузить() указав ключ объекта, ключ настроек и пользователя:
В итоге у каждого пользователя есть возможность сохранить определенные настройки и при необходимости восстановить их. Можно реализовать сохранение нескольких настроек, если дать возможность указания имени настройки и передавать его при сохранении/восстановлении как ключ настроек.
При работе с внешними обработками/печатными формами нередко возникают случаи, когда в самой обработке используются дополнительные параметры.
В предыдущих версиях типовых (УТ10.3, БП 2.0, ЗУП 2.5) никаких проблем с этим не было, т.к. был механизм Дополнительных параметров, позволяющий сохранять и использовать произвольные параметры при работе с внешней обработкой, однако, в новых версиях (УТ11, БП 3.0, ЗУП 3.1 и т.д.) нас лишили этого удобного механизма.
Ниже предлагается описание одного из способов сохранения и использования произвольных доп.параметров для внешних обработок. Для этой цели воспользуемся объектом "ХранилищеОбщихНастроек".
У этого объекта есть метод
Сохранить( , , , , )
По умолчанию (если параметр не задан) настройки сохраняются для текущего пользователя. Важно понимать, что во-первых, это просто строка, а во-вторых, в случае если у пользователя, вызвашего этот метод есть право "АдминистрированиеДанных" он может работать с настройками других пользователей и мы можем сохранить общие настройки для некого виртуального "пользователя" ВнешниеОбработки, естественно, никакого пользователя ВнешниеОбработки у нас в базе нет, это просто ключ, в разрезе которого мы будем хранить настройки для всех внешних обработок.
в нашем случае ключом будет Имя внешней обработки для которой сохраняем настройки, а — строка "ДополнительныеПараметры"(имя можно придумать любое).
Сами настройки передаются в параметре тип параметра произвольный. Удобнее всего для наших целей использовать структуру.
Вот собственно и все. Далее в самой внешней обработке мы сможем считать настройки с помощью метода
Загрузить( , , , )
Для удобства работы с доп.параметрами можно создать отдельную обработку с помощью которой устанавливать/копировать настройки для любой внешней обработки из тех, что используются в нашей базе.
Буду рад, если кому-то пригодится этот прием в работе. Также,если после прочтения остались вопросы с удовольствием отвечу на них в комментариях.
В работе службы сопровождения 1С нередко возникают ситуации, когда нужно обеспечить отсутствие пользователей в базе для проведения каких-то регламетных процедур или сервисных работ. Некоторые такие процедуры должны выполняться регулярно, и было бы удобно настроить расписание установки блокировки на вход в информационную базу.
1) Создание обработки "Блокировка работы пользователей" для запуска по расписанию
Не секрет, что с некоторых пор в типовых конфигурациях 1С появилась возможность запуска дополнительных обработок по расписанию.
Для этого в модуле внешней обработки в процедуре СведенияОВнешнейОбработке добавляем команду с вариантом использования "ВызовСерверногоМетода"
Также добавляем в модуль процедуру "ВыполнитьКоманду(ИдентификаторКоманды)", которая будет обрабатывать вызов нашего серверного метода
В процедуре "ВыполнитьУстановку" будем заполнять необходимые реквизиты блокировки и затем вызывать процедуру глобального контекста "УстановитьБлокировкуСеансов".
Теперь все готово для того, чтобы зарегистировать нашу обработку в списке дополнительных отчетов и обработок и настроить расписание запуска
2) Сохранение произвольных параметров для дополнительных обработок
Для сохранения настроек воспользуемся объектом "ХранилищеОбщихНастроек" и его методом
По умолчанию (если параметр не задан) настройки сохраняются для текущего пользователя. Однако, если у пользователя, вызвашего этот метод
есть права "АдминистрированиеДанных" он может работать с настройками других пользователей и к тому же ИмяПользователя это просто строка — этим-то мы и воспользуемся для решения своей задачи:
мы будем сохранять настройки для "пользователя" ДополнительныеОбработки(естественно никакого пользователя ДополнительныеОбработки у нас в базе нет, это просто ключ, в разрезе которого мы будем хранить настройки для внешних обработок)
в нашем случае ключом будет Имя внешней обработки для которой сохраняем настройки, а — строка "ДополнительныеНастройки"(имя можно придумать любое).
Сами настройки передаются в параметре тип параметра произвольный. Для нашей задачи мы будем использовать, структуру.
Теперь остается в обработке блокировки пользователей считать сведения о настройках для нашей обработки
прочитать настройки на основании полученных сведений и заполнить реквизиты обработки полученными значениями
В качестве примера реализации описанного выше подхода во вложении приведены обработки:
1. Внешняя обработка "Сохранение настроек доп.обработок" — сохраняет произвольный перечень параметров для выбранной на форме дополнительной обработки.
2. Внешняя обработка "Блокировка пользователей (автозапуск)" — позволяет запускать обработку блокировки по расписанию и считывать сохраненные для обработки настройки.
Пользователь при работе с программами 1С задает массу разнообразнейших настроек, начиная с настроек какой-либо сервисной обработки и до формирования отчетов любых видов. Чтобы постоянно не тратить время на повторяющиеся действия, все заданные параметры можно сохранять для дальнейшего использования их в работе. Платформа 1С:Предприятие снабжена необходимым функционалом для сохранения и, в случае необходимости, быстрого восстановления заданных параметров с помощью коротких команд. Купив 1С:Бухгалтерия и правильно установив настройки самостоятельно, следуя нашей инструкции, можно серьезно сэкономить время при работе с программой.
Рис.1 Существуют хранилища двух видов
Существуют хранилища двух видов. Рассмотрим их использование на примере программы «1С:Бухгалтерия предприятия 3.0».
Стандартное хранилище настроек пользователя 1С
В решениях 1С:Предприятие предусмотрено стандартное хранение, предустановленное на уровне разработки. При таком варианте сделанные установки хранятся в таблицах ИБ.
Администратор может это изменить, задав новые места хранения и определив их в свойствах конфигурации. Это актуально при необходимости контроля ссылочной целостности, перемещении настроек между информационными базами, когда необходима определенная структура хранения настроек и другие ситуации. Если вы не уверены в своих знаниях, наши специалисты с радостью помогут вам в рамках услуг по доработке типовой конфигурации 1С.
Если поля хранилищ оставить пустыми, то система будет использовать стандартное хранилище.
Рис.2 Стандартное хранилище настроек пользователя 1С
К настройкам из предустановленных хранилищ администратор имеет возможность обратиться как к свойству глобального контекста:
ХранилищеВариантовОтчетов – для установленных параметров вариантов отчетов, сохраненных пользователем.
Пример использования в коде.
Рис.3 ХранилищеВариантовОтчетов
ХранилищеПользовательскихНастроекОтчетов – ориентирован на организацию доступа к сохраненным настройкам отчетов пользователя.
Пример использования в коде.
Рис.4 ХранилищеПользовательскихНастроекОтчетов
ХранилищеНастроекДанныхФорм – хранит пользовательские установки данных форм.
Пример использования в коде.
Рис.5 ХранилищеНастроекДанныхФорм
ХранилищеОбщихНастроек – с его помощью организовано хранение и доступ к общим настройкам программы. Этот вид хранилища не используется платформой самостоятельно. Он может использоваться разработчиком, чтобы хранить параметры, заданные пользователем. Пример использования в коде.
Рис.6 ХранилищеОбщихНастроек
ХранилищеСистемныхНастроек – для организации хранения системных установок программы и доступа к ним.
Рис.7 ХранилищеСистемныхНастроек
ХранилищеПользовательскихНастроекДинамическихСписков – с его помощью осуществляется хранение пользовательских установок динамических списков.
Рис.8 ХранилищеПользовательскихНастроекДинамическихСписков
Механизм работы
Механизм «Хранилища настроек» как объект метаданных описывает порядок хранения настроек некоторых объектов. Откроем для примера программу «1С:Бухгалтерия предприятия 3.0» в конфигурационном режиме и развернем дерево метаданных. Нас интересует узел в разделе «Общие-Хранилища настроек».
Рис.9 Механизм работы
Так, разработчиком может быть организовано хранение параметров. В свойствах конфигурации или объекта указывается, что оно будет использовано для хранения установок формы.
Использование в отчетах и обработках
Если мы откроем в режиме конфигурирования свойства любого отчета, то на закладке «Прочее» мы увидим параметр, определяющий, какое хранилище задано для хранения установок выбранного объекта.
Рис.10 Использование в отчетах и обработках
В управляемых формах имеется два варианта:
- Сохранение параметров в предустановленное хранилище при закрытии формы автоматом и при открытии – восстановление из него;
- В настройках. Чтобы воспользоваться этим вариантом, установим в списке реквизитов формы галку напротив сохраняемого реквизита в колонке «Сохранять».
Рис.11 Использование в отчетах и обработках
Реквизиты формы отчета
С помощью вышеописанного механизма можно сохранить данные не в системных таблицах, а отдельных объектах конфигурации. Для его реализации программист описывает алгоритмы, по которым идет процесс сохранения/восстановления настроек.
Хранилища настроек дают возможность сохранить и, если надо посмотреть, настройки параметров формируемых отчетов, что позволяет автоматически заполнять формы настроек, тем самым оптимизируя работу. Если у вас остались вопросы, обращайтесь на линию консультаций 1С 8.3, наши специалисты с радостью вам помогут.
Читайте также: