При работе с конфигурациями 1С:ЗУП 3.1 или 1С:ЗКГУ 3.1 мы часто сталкиваемся с необходимостью адаптировать систему под специфические требования нашей организации. Одной из таких задач может быть добавление нестандартных ученых степеней, например, Ph.D., которые не предусмотрены типовой конфигурацией. Давайте разберем, почему такая задача возникает и как ее эффективно решить.
Пользователи 1С:ЗУП (или ЗКГУ) часто обнаруживают, что справочник УченыеСтепени содержит только "Кандидат наук" и "Доктор наук" с детализацией по отраслям. Попытки добавить новую позицию, такую как Ph.D., интерактивно через режим "Предприятие" оказываются безуспешными, так как справочник не предоставляет такой возможности. Это связано с особым механизмом его заполнения, который мы рассмотрим подробнее.
Прежде чем пытаться добавить новую ученую степень, нам необходимо разобраться, как работает справочник УченыеСтепени в типовых конфигурациях 1С. Мы выясним, почему он отличается от обычных справочников, в которые пользователи могут свободно добавлять элементы.
Справочник УченыеСтепени в 1С:ЗУП и 1С:ЗКГУ не предназначен для интерактивного создания новых элементов пользователями. Его содержимое формируется не вручную, а из предопределенных данных, которые загружаются из специальных источников. Мы можем выделить несколько ключевых аспектов этого механизма:
УченыеСтепени, являются макеты конфигурации. Макет представляет собой таблицу или текстовый документ, встроенный в конфигурацию, который содержит начальные данные. В нашем случае, существует макет с именем УченыеСтепени, где определены основные степени.Процедура ЗаполнитьИзМакета. Эта процедура вызывается при первом запуске информационной базы, после обновления конфигурации или по требованию для инициализации предопределенных данных. Она читает строки из макета и, если элементов с такими наименованиями/кодами еще нет в справочнике, создает их.УченыеСтепени изначально включает только эти позиции, и степень Ph.D., являющаяся иностранной, в нем отсутствует.Таким образом, простое добавление записи в макет конфигурации УченыеСтепени (как предлагалось в обсуждении) не приведет к автоматическому появлению Ph.D. в справочнике в режиме "Предприятие". Для этого необходимо либо вызвать процедуру заполнения из макета (если она реализована таким образом, что перечитывает все элементы, а не только отсутствующие), либо, что более надежно, программно создать элемент справочника. Более того, понимание того, что Ph.D. отсутствует в ОКИН, объясняет изначальное отсутствие этой степени в типовой конфигурации.
После того как мы разобрались с механизмом заполнения справочника, мы можем приступить к выбору подходящего метода для добавления степени Ph.D. Поскольку интерактивное создание элементов заблокировано, нам потребуется использовать программные средства. Рассмотрим несколько подходов:
Если ваша конфигурация находится на поддержке, и вы не хотите снимать ее с нее для внесения изменений, использование расширений является предпочтительным и наиболее безопасным способом. Расширение позволяет добавлять или модифицировать функциональность без изменения основной конфигурации.
УченыеСтепени. Этот код может быть выполнен один раз (например, при первом запуске системы после установки расширения) или при необходимости.Этот подход предполагает снятие конфигурации с поддержки и непосредственное внесение изменений в типовые объекты. Мы крайне не рекомендуем использовать этот метод, поскольку он значительно усложняет процесс обновления конфигурации и обслуживания системы в целом.
Если все же по каким-то причинам вы решились на этот путь, шаги будут аналогичны тем, что описаны для расширения, но все изменения будут вноситься непосредственно в объекты основной конфигурации.
Этот подход чуть более сложен и может потребовать понимания внутренней логики процедуры ЗаполнитьИзМакета. Если мы добавляем новую запись непосредственно в макет УченыеСтепени в конфигураторе (что само по себе уже является изменением конфигурации или расширения), то для ее появления в справочнике необходимо вызвать эту процедуру.
Однако есть нюансы:
ЗаполнитьИзМакета обычно проверяет наличие элемента перед созданием. Если она уже запускалась, то повторный вызов может не создать новый элемент, если не будет явно указано пересоздавать все элементы.Мы предлагаем сосредоточиться на программном добавлении элемента справочника через расширение, как наиболее гибком и безопасном способе. Это позволит нам полностью контролировать процесс и обеспечить корректное добавление Ph.D. без конфликтов с существующей логикой.
Давайте подробно разберем шаги по программному добавлению ученой степени Ph.D. с использованием расширения конфигурации. Этот подход позволит нам чисто и управляемо внести необходимые изменения.
Откройте конфигуратор 1С. В меню выберите "Конфигурация" -> "Расширения конфигурации" -> "Добавить". Присвойте расширению понятное имя, например, "УченыеСтепени_Доработка". Убедитесь, что для расширения установлен флаг "Активно".
УченыеСтепени в расширение.
В дереве объектов конфигурации найдите справочник УченыеСтепени. Перетащите его в ваше новое расширение. После этого откройте свойства справочника в расширении и убедитесь, что свойство "Режим использования по умолчанию" установлено в "Измененный". Это позволит расширению работать с этим справочником.
В расширении создайте новый общий модуль (например, "ДоработкаУченыхСтепенейРасширение"). Важно, чтобы модуль имел свойства "Сервер" и "Клиент (обычное приложение)" или "Клиент (управляемое приложение)" в зависимости от того, откуда вы планируете его вызывать. Для простоты, мы можем использовать серверный модуль.
В созданном общем модуле напишите процедуру, которая будет проверять наличие степени Ph.D. и, при ее отсутствии, создавать новый элемент справочника. Мы рассмотрим пример кода:
Процедура ДобавитьУченуюСтепеньPhDKD() Экспорт
// Получаем ссылку на менеджер справочника "Ученые степени"
МенеджерСправочникаУченыеСтепени = Справочники.УченыеСтепени;
// Определяем наименование и полное наименование для новой степени
НаименованиеPhd = "Ph.D.";
ПолноеНаименованиеPhd = "Doctor of Philosophy (Ph.D.)";
// Проверяем, существует ли уже элемент с таким наименованием
// Это важно, чтобы избежать дублирования при повторном вызове процедуры
ЭлементPhd = МенеджерСправочникаУченыеСтепени.НайтиПоНаименованию(НаименованиеPhd);
Если ЭлементPhd.Пустая() Тогда
// Если элемент с наименованием "Ph.D." не найден, создаем новый
НовыйЭлемент = МенеджерСправочникаУченыеСтепени.СоздатьЭлемент();
НовыйЭлемент.Наименование = НаименованиеPhd;
НовыйЭлемент.ПолноеНаименование = ПолноеНаименованиеPhd;
// Присваиваем код. Код должен быть уникальным.
// В типовой конфигурации Кандидат наук - "000000001", Доктор наук - "000000002".
// Мы можем выбрать следующий свободный код или специальный код,
// чтобы избежать конфликтов с будущими обновлениями типовых данных.
// Например, использовать код, начинающийся с нестандартных цифр.
// Для примера, используем простой последовательный код "000000003".
// В реальных проектах можно использовать генерацию кода или зарезервированный диапазон.
НовыйЭлемент.Код = "000000003";
Попытка
// Записываем новый элемент справочника
НовыйЭлемент.Записать();
Сообщить("Ученая степень '" + НаименованиеPhd + "' успешно добавлена в справочник.");
Исключение
// Обработка возможной ошибки при записи (например, если код не уникален)
Сообщить("Ошибка при добавлении ученой степени '" + НаименованиеPhd + "': " + ОписаниеОшибки());
КонецПопытки;
Иначе
// Если элемент уже существует, сообщаем об этом
Сообщить("Ученая степень '" + НаименованиеPhd + "' уже существует в справочнике.");
КонецЕсли;
КонецПроцедуры
Мы обращаем ваше внимание, что при выборе кода необходимо проявлять осторожность. Если в типовой конфигурации в будущем появятся новые степени, их коды могут пересечься с тем, что мы зададим вручную. Рекомендуется использовать коды из диапазона, который заведомо не будет задействован типовой конфигурацией, или проверять уникальность кода перед записью.
Написанную процедуру необходимо вызвать. Существует несколько способов:
ПриНачалеРаботыСистемы модуля приложения вашего расширения. Это гарантирует, что элемент будет создан, если он отсутствует.Пример вызова в модуле приложения расширения (ПриНачалеРаботыСистемы):
#Область СлужебныеПроцедурыИФункции
// Процедуры и функции, вызываемые платформой, или предназначенные
// для вызова из других модулей, но не имеющие отношения к логике прикладного решения.
Процедура ПриНачалеРаботыСистемы()
// Вызываем процедуру добавления ученой степени Ph.D.
ДоработкаУченыхСтепенейРасширение.ДобавитьУченуюСтепеньPhDKD();
КонецПроцедуры
#КонецОбласти
После реализации и вызова процедуры, степень "Ph.D." появится в справочнике УченыеСтепени и будет доступна для выбора при заполнении данных о сотруднике.
При принятии решения о добавлении иностранной ученой степени, такой как Ph.D., в систему, мы также должны рассмотреть некоторые альтернативные подходы и важные нюансы, которые могут повлиять на учет и отчетность.
Некоторые специалисты рекомендуют не добавлять Ph.D. непосредственно в справочник "Ученые степени", если нет жесткой необходимости интегрировать ее в систему, основанную на ОКИН. Вместо этого, мы можем рассмотреть возможность ее учета как:
Этот подход полезен, если основная цель — просто зафиксировать наличие степени у сотрудника, а не интегрировать ее в официальную российскую систему учета ученых степеней, для которой предназначены стандартные поля и справочники.
После добавления Ph.D. в справочник УченыеСтепени, мы должны учитывать, как это повлияет на различные отчеты и печатные формы.
УченыеСтепени, будут включать и Ph.D. Если это нежелательно для каких-либо специфических отчетов (например, для государственной статистики, где учитываются только российские степени), потребуется их доработка для исключения Ph.D. из выборки.Мы рекомендуем всегда согласовывать такие доработки с методологией учета персонала и кадровой политики вашей организации. Важно понимать, как именно Ph.D. будет восприниматься и использоваться:
Ответы на эти вопросы помогут нам определить оптимальный способ учета Ph.D. в системе 1С.
Мы уже упоминали, что Ph.D. отсутствует в ОКИН. Это критический момент, поскольку 1С:ЗУП/ЗКГУ во многом ориентируются на российские стандарты. Добавляя Ph.D. программно, мы по сути расширяем этот стандарт внутри нашей информационной базы для внутренних нужд. Мы должны быть готовы объяснить это при аудитах или при формировании отчетов для внешних органов, которые строго следуют ОКИН.
В заключение, добавление ученой степени Ph.D. в справочник "Ученые степени" ЗУП 3.1 или ЗКГУ 3.1 — это задача, которая требует понимания внутренних механизмов платформы 1С и использования программных доработок, предпочтительно через расширения. Такой подход обеспечивает гибкость, управляемость и возможность дальнейшего обновления типовой конфигурации без потери внесенных изменений. Мы рассмотрели все основные шаги и нюансы, которые помогут вам успешно реализовать эту задачу.