1с получить имя конфигурации
По долгу службы наша контора обслуживает несколько организаций, которые для управленческого и бухгалтерского учета используют 1с.
1с, как известно, постоянно выпускает обновления для своих конфигураций.
Соответственно на обновление хотя бы 5 баз уходит приличное количество времени.
Рассказ о том, как добиться полной (кроме скачивания обновлений) автоматизации процесса средствами MSSQL далее.
Автоматизировать процесс начнем с «конца»
- В 1с обновление возможно только с определенной версии на определенную. Это связано с тем, что файлы обновления поставляются не в виде полного «слепка» конфигурации. А в виде изменений от эталонной версии.
- Так же в самом коде 1с есть предопределенные обработки, которые запускаются при переходе с одной версии на другую.
При создании класса надо передать MemoryStream binary data из таблицы _config.
Как видно в коде им можно парсить и конфигурации 7.7, предварительно распаковав.
Теперь до версии конфигурации можно добраться зная её «адрес»: Далее просто создаем пустую базу с версией «ВЕРСИЯ» и находи что её «адрес» (v8metadata)(((v8metadata)(((v8metadata)(this.array_data[3])).array_data[1])).array_data[1])).array_data[15].ToString();
Но где же здесь MSSQL?
Вот CLR функция, которая получит эти данные в самом MSSQL:
У нас есть отдельная БД, которая хранит в себе сервера и базы. Соответственно функция адаптирована под это.
А как определить какое обновление необходимо для данной конфигурации 1с?
При установке обновлении 1с можно использовать каталог обновлений на сервере. В каждом обновлении есть файл .mft вида:
Vendor=Фирма "1С"
Name=БухгалтерияПредприятия
Version=2.0.25.5
AppVersion=8.2
.
И файл UpdInfo.txt
Version=2.0.25.5
FromVersions=;2.0.24.10;
UpdateDate=11.07.2011
Это же всё, что нам надо.
Зная FromVersions и дату выхода обновления мы можем автоматически генерировать строку для запуска обновления 1с. (ссылка на параметры в начале топика)
Но тут появляется еще одна проблема — наличие пользователей в базе. 1с не обновляется. Пишем «выгонялку» пользователей (vbscript)
Войдите как ученик, чтобы получить доступ к материалам школы
Создание конфигураций 1С: добавляем обработку
Автор уроков и преподаватель школы: Владимир Милькин
Продолжаем изучение азов создания конфигураций на 1С.
На этом уроке мы вместе создадим новую обработку, а затем напишем для неё команды, которые демонстрируют работу со справочником "Сотрудники".
Возвращаемся в конфигуратор и открываем дерево конфигурации.
Добавляем новую обработку
Правой кнопкой нажимаем на разделе "Обработки" и выбираем пункт "Добавить":
Открылось окно создания новой обработки. Перейдём на закладку "Основные" и укажем в качестве имени обработки "ОбработкаСправочников":
Создаём форму для обработки
Перейдём на закладку "Формы" нажмём на зелёный плюсик, чтобы добавить новую форму (визуальное представление нашей обработки):
Появился конструктор создания формы. Оставим всё по умолчанию и нажмём "Готово":
Открылась новая форма:
Создаём новую команду для формы
Перейдём на закладку "Команды"->"Команды формы":
Добавим новую команду (зелёный плюсик):
И в свойствах новой команды укажем имя "ВыводВсехСотрудников":
Нажмём в её же свойствах на лупу рядом с полем "Действие", чтобы задать обработчик команды. Выберем вариант создания обработчика "НаКлиенте" и нажмём "ОК":
Нас перенесло в модуль формы в процедуру-обработчик команды "ВыводВсехСотрудников":
Пишем код обработчика команды
Теперь наша задача написать код на внутреннем языке 1С, который будет перебирать все элементы справочника "Сотрудники".
Сразу хочу сказать, что этот код нельзя писать прямо в процедуре "ВыводВсехСотрудников", так как она выполняется на клиенте (обратите внимание на специальную строчку перед процедурой "&НаКлиенте"). Попытка прочитать данные из базы в клиентской процедуре всегда будет приводить к ошибке (пока просто запомните это).
Поэтому давайте допишем в конце модуля процедуру такого вида:
Обратите внимание, что перед ней я указал признак "&НаСервере". Это означает, что она будет выполняться на сервере, а значит мы можем из неё читать данные справочника.
Теперь организуем вызов этой процедуры из клиентской "ВыводВсехСотрудников":
Тут логика такая:
Это на самом деле несложно. Обход всех справочников в 1С однотипен. А значит научившись это делать сейчас со справочником "Сотрудники", вы сможете делать также и с любыми другими справочниками.
Для доступа к данным справочника используется менеджер, доступ к которому осуществляется так:
В этом предложении ключевая часть находится справа от знака равно. Слева - это просто переменная, в которую мы сохраняем менеджер, чтобы работать с ним дальше. Имя этой переменной могло быть не только "Менеджер", но и любое другое - хоть "Барабашка".
Что представляет из себя менеджер справочника? Менеджер - это ещё не сами данные справочника. Менеджер - это некоторый программный объект (можете представлять его себе в виде чёрного ящика), через который мы можем что-либо делать со справочником.
Менеджер справочника - это как бы такая прослойка между нашим кодом и данными справочника. И получается, что, если нам требуется прочитать все элементы справочника, то мы не можем этого сделать напрямую. Мы можем только попросить об этом нашу прослойку между нами и справочником, то есть менеджер.
Чтобы сделать это - необходимо вызвать встроенный в менеджер метод "Выбрать". Вызывается он через точку после имени переменной, в которой хранится менеджер, и возвращает коллекцию элементов справочника:
Что представляет из себя выборка? Выборка (опять же это только имя переменной, в которую мы сохраняем результат работы метода "Выбрать" и оно могло бы быть любым другим) представляет из себя коллекцию, но не такую, как например массив или список значений.
Выборка представляет собой объект - опять же думайте о нём как о ящике, но ещё не сами данные. Особенность этого объекта в том, что он умеет перебирать элементы нужного нам справочника. Причём перебирает он их динамически. Это означает, что использование выборки не считывает все элементы справочника сразу, а выбирает их порциями из базы данных.
Такой подход позволяет достаточно быстро обходить с помощью выборки большие списки справочников, не загружая их в память компьютера все сразу.
Чтобы получить очередную порцию данных из выборки, необходимо вызвать у выборки встроенный в неё метод "Следующий". Получение порций данных (одна порция соответствует одному элементу справочника) обычно происходит в цикле:
Когда данные (элементы справочника) в выборке закончатся, метод "Следующий" вернёт Ложь и цикл прекратится.
После каждого вызова метода "Следующий" (при условии, что он вернул "Истина") выборка будет содержать в себе все поля с данными только считанного элемента справочника, обращаться к которым можно по именам через точку:
Получается в один момент - мы работаем с данными только одного из элементов справочника. И тут мы можем или сразу их вывести пользователю (методом "Сообщить") или, к примеру, мы можем сложить их в другую коллекцию (массив), чтобы потом уже за раз с ними что-нибудь сделать. Всё зависит от задачи, которую мы решаем.
Значит код процедуры "ВыводВсехСотрудниковНаСервере" напишем таким образом:
Превращаем команду в кнопку
Давайте проверять! Для этого перетащим нашу команду на форму, чтобы она превратилась в кнопку:
Готово!
Теперь запустим 1С:Предприятие (меню "Отладка"->"Начать отладку"), откроем нашу обработку (меню "Сервис"->"Обработка справочников") и нажмём кнопку "Вывод всех сотрудников":
Ну раз такое дело - со следующего урока начинаем создавать более интересные проекты.
Для учеников
Обязательно повторяйте все действия, которые мы выполняем на уроках данного модуля. Теория, не подкреплённая практикой - ничего не значит.
На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .
Gigi --> GigiНу да . список вообще всех форм в конфигурации. которые были созданы программистом.
Вот что.. Gigi --> Gigi
Gigi @ Сегодня, 11:20 ,
Короче . по указанному вопросу кое что нарыл. А потом прописал функцию в таком виде:
Т.е. в том же стиле как и для случая списка элементов метаданных по группе. С единственной разницей. С той что в этой функции (по списку форм) вынужден был добавить еще один третий аргумент: "МетаданныеИмя". А мне нужно без этого аргумента. А еще лучше и вообще без каких либо главных аргументов. т.е. Без "МетаданныеГруппа" и "МетаданныеИмя".
Т.е. команда или функция которая выводит список ПОЛНЫХ ИМЕН всех созданных программистом форм в конфигурации. Вне зависимости от Группы метаданных.
Вот что.
Gigi @ Сегодня, 13:16 ,
Гуу . как понимаю исходя из возможностей языка 1С по данной теме, можно написать функцию только в таком думаю финальном виде:
И как догадываюсь по другому в более универсальном стиле никак не сделаешь.
На пример так:
Никак не пропишешь. Потому, что в 1С это не корректно.
А мне именно так и надо.
В стиле:
Gigi @ Сегодня, 14:51 ,
Да. еще . все таки решил сделать постскриптум.
Так .. для большей наглядности того что было нужно. Да и вообще если кому то из гостей сайта будет нужно.
Вот финальный полный вариант решения вопроса темы:
Хотя стоп …. Еще малое дополнение…
Мною была допущена одна ошибка … по запарке на скорую руку. Из-за которой, выбранную форму из списка полученных форм, открыть невозможно. Ибо полные имена форм некорректные.
Хотя можно было забить и оставить с ошибкой. Но все-таки…. Раз решил скинуть функцию решающую вопрос темы. Ту функцию, которая думаю, подавляющему большинству зареганых на данном сайте не нужна на фиг … ))…, а думаю, может понадобиться только гостям данного сайта. И раз решил все таки выставил решение то, все должно быть все таки без ошибок.
Короче … где там ошибка… которую зареганные пользователи думаю, заметили. И как устранить ее.
Ко всему изложенному выше нужно добавить одну функцию, на пример вот эту:
в функции с именем: «СписокФормПоГруппе» текст кода:
Нужно сменить на вот этот:
Вот теперь нормально…
Gigi @ Сегодня, 12:42 ,
И все это касательно для списка созданных форм. А для вывода системных форм нужно доработать.
Кстати в 1С и тут малая недоработка.
Когда выбираешь формы для рабочего стола то система 1С выводит список только созданных форм.
А где же список системных? И тут, лично я думаю что перед появлением списка форм система до этого должна вообще давать возможность выбора. Формы: "Системные" или "Созданные".
Вот еще недоработка, хотя малая.
Поэтому тут опять нужно самому дорабатывать.
[необходимо зарегистрироваться для просмотра ссылки] Gigi --> Gigi
andr_andrey @ Сегодня, 10:51 ,
[необходимо зарегистрироваться для просмотра ссылки]
Там же написано: "Писалось студентом-программистом и студентом-лингвистом."
И дата указанной публикации "махровая". Gigi --> Gigi
Доброго времени суток коллеги.
Наверное разучился я пользоваться СП.
Вопрос: каким образом программно получить версию конфигурации.
ЗЫ: В СП не нашел.
Fynjy --> FynjyСистемнаяИнформация (SystemInfo) ВерсияПриложения (AppVersion)
Flexy --> FlexyОбъектМетаданныхКонфигурация (ConfigurationMetadataObject)
Версия (Version)
Использование:
Только чтение.
Описание:
Тип: Строка.
Версия конфигурации.
Сервер, толстый клиент, внешнее соединение.
logist --> logistСистемнаяИнформация (SystemInfo) ВерсияПриложения (AppVersion)
Не то, но спасибо.
ЗЫ: Пора в отпуск.
ValeryZ --> ValeryZУзнать версию платформы:
Узнать версию (релиз) конфигурации:
| Текстовая версия | Сейчас: 24.11.21, 10:19 |
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!
Читайте также: