1
0
mirror of https://github.com/netology-code/1c-homeworks.git synced 2024-11-16 07:10:14 +02:00
1c-homeworks/homework-4-1.md
2023-01-18 19:33:12 +03:00

12 KiB

Задание к занятию «Справочники»

Задача 1. «Версия конфигурации»

Описание задачи

Добавить константу ВерсияКонфигурации, которая будет хранить версию конфигурации из свойств метаданных, с которой программа запускалась в последний раз. Хранение версии в данных позволит обнаружить запуск программы с изменённой версией и запустить код, заполняющий недостающие данные при обновлении версии.

Требования к результату

Выгрузка информационной базы (.dt) с конфигурацией из диплома блока А, в которой:

  • присутствует константа ВерсияКонфигурации, скрытая из командного интерфейса;
  • присутствует код, при начале работы системы сравнивающий версию из метаданных и версию из константы и при обнаружении отличий устанавливающий значение константы равным версии из свойств метаданных.

Процесс выполнения

  1. Создать константу ВерсияКонфигурации типа Строка, которая будет хранить текущую версию конфигурации. Скрыть её из командного интерфейса, сняв флажок «Использовать стандартные команды».
  2. Создать общий модуль ОбновлениеИнформационнойБазыВызовСервера с экспортной процедурой ПриНачалеРаботыСистемы, которая:
  • проверит, совпадает ли версия конфигурации (Метаданные.Версия) со значением константы (Константы.ВерсияКонфигурации.Получить());
  • при совпадении ничего не сделает;
  • при выявлении разницы вызовет ОбновлениеИнформационнойБазы.ПриИзмененииВерсии(СтараяВерсия, НоваяВерсия);
  • установит значение константы равным новой версии из метаданных.
  1. Таким образом, при обновлении информационной базы старой версии на конфигурацию новой версии будут выполнены обработчики обновления, необходимые новой версии. Сами обработчики обновления писать пока не нужно, процедура ПриИзмененииВерсии будет пустой.
  2. Проверьте, что при изменении версии в метаданных и запуске программы значение константы обновляется. Открыть константу можно через режим технического специалиста.

Задача 2. «Контактная информация»

Описание задачи

Добавить в справочник «Контрагенты» табличную часть «Контактная информация» для хранения адресов, телефонов и т. п. в разрезе видов контактной информации — так, как это делается в реальных прикладных решениях, вместо хранения каждого вида контактной информации в отдельном реквизите, как мы это делали раньше. Заполнить предопределенные виды контактной информации недостающими данными и сделать обработчик переноса контактной информации из отдельных реквизитов в табличную часть — так, как это делается при обновлении в реальных прикладных решениях.

Важно! Чтобы проверить успешность переноса, не забудьте предварительно заполнить контактную информацию некоторых контрагентов в отдельных реквизитах.

Требования к результату

Выгрузка информационной базы (.dt) с конфигурацией из диплома блока А, в которой:

  • присутствует справочник ВидыКонтактнойИнформации с пятью предопределенными элементами: ЮридическийАдресКонтрагента, ПочтовыйАдресКонтрагента, ФактическийАдресКонтрагента, ТелефонКонтрагента, EMailКонтрагента и реквизитом Тип (ПеречислениеСсылка.ТипыКонтактнойИнформации);
  • в справочнике Контрагенты присутствует табличная часть КонтактнаяИнформация, данные которой выведены на форму контрагента таблицей, а прежние реквизиты, напротив, имеют префикс Удалить и скрыты;
  • присутствует код, при начале работы системы сравнивающий версию из метаданных и версию из константы, и:
    • при переходе на версию 1.0.0.1 или более новую, а также при первом запуске инициирующий заполнение типов предопределенных элементов справочника ВидыКонтактнойИнформации;
    • при переходе на версию 1.0.0.2 или более новую, а также при первом запуске инициирующий перенос контактной информации из реквизитов Удалить<...> в ТЧ КонтактнаяИнформация.

Процесс выполнения

Виды контактной информации

  1. Создать перечисление ТипыКонтактнойИнформации со значениями: Адрес, Телефон, EMail.
  2. Создать справочник ВидыКонтактнойИнформации с реквизитом Тип (ПеречислениеСсылка.ТипыКонтактнойИнформации), включив его в роль БазовыеПрава на просмотр и чтение. Справочник будет расширяемым для пользователей, а значение реквизита Тип позволит программе понять, как работать с этим видом КИ.
  3. Создать предопределённые виды контактной информации: ЮридическийАдресКонтрагента, ПочтовыйАдресКонтрагента, ФактическийАдресКонтрагента, ТелефонКонтрагента, EMailКонтрагента.
  4. В модуле менеджера справочника создать экспортную процедуру ЗаполнитьПредопределенныеЭлементы(), которая заполнит реквизит Тип у всех предопределённых элементов этого справочника. В Конфигураторе можно задать только код и наименование предопределённых элементов, но не другие реквизиты.
  5. Установить версию конфигурации в метаданных на произвольное значение (например, 1.0.0.1).
  6. В процедуре ОбновлениеИнформационнойБазы.ПриИзмененииВерсии:
  • проверить, не находится ли версия 1.0.0.1 между значениями параметров СтараяВерсия и НоваяВерсия, включая границы. Если старая версия пуста, значит, она меньше любой текущей;
  • если версия 1.0.0.1 находится между старой и новой версией, включая границы, — вызвать процедуру ЗаполнитьПредопределенныеЭлементы().
  1. Таким образом, и при первом запуске, и при обновлении будут заполнены предопределённые элементы.

Контрагенты

  1. Нужно использовать справочник Контрагенты из диплома блока А.
  2. Стандартному реквизиту Наименование дать синоним «Краткое наименование».
  3. Добавить табличную часть КонтактнаяИнформация с реквизитами Вид (СправочникСсылка.ВидыКонтактнойИнформации) и Значение (Строка).
  4. Прежним реквизитам, отвечавшим за контактную информацию, нужно добавить к наименованию префикс «Удалить» (Например: УдалитьЮридическийАдресКонтрагента) и скрыть их из форм. Совсем удалять их нельзя, чтобы можно было перенести старые данные.
  5. Добавить в форму контрагента, лучше на отдельную закладку, новую табличную часть.
  6. В модуле менеджера справочника создать экспортную процедуру ЗаполнитьТабличнуюЧастьКонтактнаяИнформация(), которая:
  • откроет выборку всех элементов справочника (Справочники.Контрагенты.Выбрать());
  • для каждого элемента очистит ТЧ КонтактнаяИнформация и заполнит её значениями старых реквизитов (с префиксом Удалить);
  • запишет каждый элемент.
  1. В процедуре ОбновлениеИнформационнойБазы.ПриИзмененииВерсии при обновлении на версию 1.0.0.2 вызвать процедуру ЗаполнитьТабличнуюЧастьКонтактнаяИнформация().
  2. Взвести версию в метаданных на 1.0.0.2.
  3. Запустить программу и удостовериться, что ранее введенная контактная информация не утеряна и доступна теперь уже через новую табличную часть, как в реальных прикладных решениях.