Рейтинг:  5 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда активна
 

Добрый день. Сегодня мы рассмотрим на практике интересную особенность платформы 8.3. Теория нововведения была изложена тут http://prosto1s.ru/index.php/4-predopredelenniy-v-8-3. Коротко напомню, что в 1С Предприятии 8.3 у объектов способных иметь предопределенные данные появился реквизит «ИмяПредопределенныхДанных», который доступен как для чтения, так и для записи. Это позволяет нам сделать непредопределенный элемент предопределенным и наоборот.
Практику будем осваивать на примере конфигурации «Зарплата и управление персоналом, редакция 3.0», но сразу скажу, что обработка, которую мы тут создадим, будет своего рода кроссплатформенной :) т.е. кроссконфигурационной. Она будет работать в любой конфигурации, работающей на платформе версии 8.3.


Теперь водные данные задачи, на основе которых мы будем практиковаться. В ЗУП 3.0 есть справочник «Группы доступа». В нем есть один предопределенный элемент с именем «Администраторы». Нам нужно получить возможность для работы неких алгоритмов получать ссылку на элемент справочника с именем «отдел кадров». Естественно, он уже создан в справочнике в рабочей базе, а разработчик добавил предопределенный элемент с таким именем и теперь мы видим следующую картину:
При создании предопределенного элемента справочника мы получили дубли
Предполагается, что «живой» элемент справочника уже настроен, в нем много указано пользователей и перекинуть всех в другую, новую предопределенную, группу доступа займет более 15 минут. Да и лениво настоящему программисту руками что-либо заполнять.
Ну что, понеслась!
Шаг первый, открываем конфигуратор.
Шаг второй, создаем внешнюю обработку. Даем ей адекватное имя «ПерекинутьНеПредопределнныйЭлементНаПредопределенный» или какое другое, главное не оставлять стандартное «ВнешняяОбработка1». Знаете как грустно потом смотреть  на рабочий стол, на котором валяются пару десятков хороших и полезных обработок с именами «ВнешняяОбработка1», «ВнешняяОбработка2»… Как правило весь этот интеллектуальный труд отправляется в корзину. Создаем основную форму обработки.
Шаг третий, рисуем форму. Поскольку мы делаем обработку универсальную, с заделом на бедующие подобные задачи, то мы тут немного заморочимся. Но не пугайтесь, несмотря на заморочки, задача потратить на создание обработки 5 минут. Создаем реквизит фрмы «ИмяСправочника», тип у него будет «ОписаниеТипов». Далее создаем реквизит с именем «НеПредопределенный» с составным типом «ПланВидовРасчетаСсылка, ПланВидовХарактеристикСсылка, ПланСчетовСсылка, СправочникСсылка», можно ограничиться только справочником ссылкой, но я решил делать сразу на все случаи жизни. Ну создаем реквизит с аналогичным типом и с именем «Предопределенный».
Рисуем управляемую форму обработки, создаем реквизиты формы
Тащим мышкой наши реквизиты формы в дерево элементов формы. Это самый быстрый способ их нарисовать.
Рисуем в управляемой форме элементы формы, перетаскиванием реквизитов формы в дерево элементов
Выделяем элемент формы «НеПредопределенный» в дереве элементов или на самой форме. Помню времена, когда в конструкторе управляемой формы нельзя было выделять элементы формы на форме, только в дереве. Это было крайне не удобно. Ну не отвлекаемся, выделили элемент и, если палитра свойств элемента не открыта, жмем «Alt+Enter». Далее в палитре свойств ищем «СвязьПоТипу», жмем три точки и указываем связь с элементом «ИмяСправочника». Указываем ту же связь по типу и для элемента «Предопределенный».
Указываем связь по типу
Переходим в команды формы и добавляем новую команду с именем «Перекинуть». В палитре свойств команды напротив действия жмем линзу. Она спросит, какую процедуру создать. Выбираем «Создать на клиенте и процедуру на сервере».
Создаем команду в управляемом интерфейсе
Мы переключились в модуль формы, вернемся обратно в конструктор формы и перетащим мышкой команду в дерево элементов формы.
С управляемом интерфейсом все. Даже если медленно двигать мышкой, это должно занять не более 5ти минут.
Шаг четвертый. Программирование. Переходим в модуль формы. Заголовки процедур нам уже сварганил конструктор, осталось только написать содержимое. Оно очень короткое:
&НаКлиенте
Процедура Перекинуть(Команда)
 ПерекинутьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПерекинутьНаСервере()
 ОбъектПредопределенный = Предопределенный.ПолучитьОбъект();
 ИмяПредопределенныхДанных = ОбъектПредопределенный.ИмяПредопределенныхДанных;
 ОбъектПредопределенный.ИмяПредопределенныхДанных = "";
 ОбъектПредопределенный.Записать();
 ОбъектНеПредопределенный = НеПредопределенный.ПолучитьОбъект();
 ОбъектНеПредопределенный.ИмяПредопределенныхДанных = ИмяПредопределенныхДанных;
 ОбъектНеПредопределенный.Записать();
КонецПроцедуры


Вот и все, сохраняемся и запускаем в режиме предприятия. Попорядку заполняем три поля ввода и жмакаем кнопку. После выполнения лезем в наш справочник и радуемся, живой элемент справочника стал предопределенным.

Запускаем обработку в режиме предприятия

На сегодня все, спасибо за внимание.

Авторизуйтесь пожалуйста