Установить владельца программно 1с

Обновлено: 07.07.2024

Всем привет. продолжаем изучать платформу 1С: Предприятие 8.3. Это уже второй урок, в котором мы начнем изучать основные объекты платформы для возможности разработки собственного приложения. Первый объект - это константа.

Приступим к изучению!

Часть 1. Запуск созданной информационной базы ( Урок 1 )

Запустим ярлык на рабочем столе, откроется уже знакомое окно, в котором есть два режима: режим разработчика и режим пользователя. Так как в прошлом уроке мы мы создали информационную базу, нам ее еще раз создавать ненужно. Выделим нашу информационную базу "Автоматизация предприятия" и нажмем на кнопку "Конфигуратор". По нажатию на эту кнопку происходит переход в режим разработчика.

Здесь нужно понять лишь один смысл! Если мы хотим разработать что-то свое, то это только режим разработчика. Если мы хотим работать в существующей программе, то это режим пользователя. Платформа позволяет работать одному человеку сразу в двух режимах (сначала что-то разработал, потом заходишь и проверяешь).Учебная версия - она ограничена по функционалу и дает возможность работать только одному человеку. А если лицензия - то их может доходить и до 300 (все зависит от вида лицензии).

Нажимаем кнопку "Конфигуратор" (Рисунок 1).

Произошел переход в режим разработчика (Рисунок 2).

На рисунке 2 показана иконка, на которую нужно нажать и у вас откроется дерево конфигурации (Рисунок 3).

Дерево конфигурации - это дерево, которое имеет ветви, а каждая ветвь в свою очередь имеет какие-то отростки - объекты. Объекты - это константы, справочники, документы и так далее. Более подробно можно почитать нажав сюда.

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

Как только разработчик создает справочник или константу, она сразу же отображается в режиме пользователя.

В прошлом уроке мы пробовали создавать справочник, но перед этим заходили в режим пользователя, чтобы убедиться в том, что там ничего нет. Добавили справочник и только после этого у пользователя появилась возможность сразу автоматизировать свою деятельность.

Ничего не создавая, перейдем в режим пользователя и еще раз убедимся в том, что там ничего нет. Для этого выполним команду: "Сервис-1С:Предприятие" (Рисунок 4).

Откроется знакомое окно и оно действительно пустое (Рисунок 5).

На рисунке 5 отображается пользовательский режим, а сверху написано имя вашей программы и называется она "Конфигурация". Давайте изменим его и назовем "Автоматизация предприятия". Закроем режим "1С: Предприятие" на крестик в верхнем правом углу и вернемся в режим разработчика.

Выделим в дереве конфигурации корень этого дерева - слово Конфигурация, правой кнопкой мыши вызовем контекстное меню (или дважды щелкнем по нему правой кнопкой мыши) и выберем пункт "Свойства" (Рисунок 6).

Откроется палитра свойств (рисунок 7)

Палитра свойств - это окно, в котором отображаются все свойства, доступные для данного объекта. В данном случае, это свойства всего дерева конфигурации.

В открывшейся палитре свойств нам сейчас важны два свойства, Имя и Синоним.

Имя - это идентификатор, который нужен для разработчика и виден от только разработчику. Он нужен программисту для того, чтобы он мог к нему с помощью кода обратиться и где-то использовать.

Синоним - это имя, которое будет отображаться в пользовательском режиме и будет видно пользователю. То есть это то свойство, которое необходимо для пользователя.

Имя и синоним могут быть одинаковыми. Правила задания свойства "Имя":

1. Должно начинаться с буквы

2. Не может содержать пробелов и других специальных символов кроме подчеркивания "_"

3. Пишется слитно, но каждое слово с большой буквы - "АвтоматизацияПредприятия". Этот способ называется - верблюжий. В этом случае платформа понимает, что ей необходимо отделить каждое слово друг от друга (Рисунок 8).

Часть 2. Изменим имя конфигурации (программы)

Изменим имя "Конфигурация" на "АвтоматизацияПредприятия" и нажмем "Tab". В этом случае (Рисунок 8) синоним автоматически заполнится и разделится на два слова (но можно и просто перенести курсор в поле синоним), а свойство Имя останется также слитно - так и должно быть.

Таким образом мы изменили нашу программу (она называется конфигурация или программное решение - это термины 1С). Посмотрите на рисунок 8, в дереве объектов изменилось название. Теперь необходимо обновить программу, внести изменения и проверить все в пользовательском режиме. Нажмем клавишу F7 или значок на панели инструментов (Рисунок 9)

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

Перейдем теперь в режим пользователя и проверим изменения. Для этого необходимо выполнить команду "сервис-1С6Предприятие". Откроется знакомое окно, в котором будет название нашей программы (рисунок 10).

Сейчас вы уже сделали первых два шага по разработке своей конфигурации и это уже совсем не плохо!

Часть 2. Создание константы

Теперь необходимо как-то дальше разработать программу, чтобы она подходила для вашего предприятия.

Что такое константа? Константа - это объект дерева конфигурации, который предназначен для хранения постоянной величины или величины, которая меняется очень редко.
Константа я языках программирования - это то, что никогда не изменяется. Тем это и отличается в платформе. В платформе 1С это величина, которая изменяется крайне редко.

Вся платформа 1С создана так, что ее смысл понятен в русском языке. Константа в жизни каждого человека, это, например, его имя. Оно вроде является постоянной величиной, но его можно изменить. Или, это фамилия, инн, адрес и так далее. все это константы в понимании 1С.

Константа нужна для хранения "постоянной" величины. В нашем случае константами будут являться: 1. ИНН организации, имя директора магазина, адрес магазина и так далее - все это константы.

Перейдем в режим разработчика, выделим константу и правой кнопкой мыши добавим новую константу (или это можно сделать иначе. Выделить константы и нажать на плюсик в верхней панели дерева объектов).


Вопрос Как программно установить связь по владельцу в форме

Однако, бывает так, что владельца нужно установить программно, в зависимости от какого-то условия.

Как это реализовать?

Как программно добавить новый элемент справочника, если у него есть владелец

admin

6 thoughts on “ Как программно установить связь по владельцу в форме. Как программно добавить новый элемент справочника, если у него есть владелец (1С: Программисту) ”

Алексей, уточните, что именно нужно. Вероятно, действительно стоит добавить какую-то информацию, но не понятно, что именно осталось непонятным 🙂
Вы внимательно прочитали вторую часть, то, что написано после картинки? Там поясняется, как программно задать владельца по какому-то условию. Обратили внимание на слова, выделенные жирным шрифтом? Поняли приведенную процедуру?

Т.е. при программном создании элемента формы нельзя программно установить для колонки ТП _имя_ реквизита формы / объекта (как в конфигураторе в редакторе формы), в котором хранится ссылка на владельца, а нужно каждый раз при вызове в обработчике подсовывать эту ссылку, непосредственно в экземпляр элемента управления

Расширение элементов управления, расположенных в форме
УстановитьДействие (SetAction)
Синтаксис:
УстановитьДействие( , )
Параметры:
(обязательный)
Тип: Строка. Имя события.
(обязательный)
Тип: Действие, Неопределено. Устанавливаемое действие.
В случае установки значения Неопределено при получении от элемента управления указанного события никакого действия выполнено не будет.
Описание:
Устанавливает новую процедуру-обработчик (действие) для указанного события.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Примечание:
Процедура должна быть экспортируемой и располагаться в модуле формы, при этом количество параметров должно совпадать с необходимым количеством параметров события, инициирующего вызов действия.

Если НЕ ЭтоНовый() Тогда
ПолеРегистра.Значение.Прочитать();
КонецЕсли;

ПолеРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Верх,
КоманднаяПанельРегистра,
ГраницаЭлементаУправления.Низ);
ПолеРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Низ,
ЭлементыФормы.ОсновнаяПанель,
ГраницаЭлементаУправления.Низ);
ПолеРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Право,
ЭлементыФормы.ОсновнаяПанель,
ГраницаЭлементаУправления.Право);

Если Метаданные.РегистрыНакопления[СтрокаТаблицы.Имя].ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда

ПолеРегистра.Колонки.Регистратор.Видимость = Ложь;
ПолеРегистра.Колонки.Период.Видимость = Ложь;
ПолеРегистра.Колонки.НомерСтроки.Видимость = Ложь;

В этой статье будет постепенно публиковаться набор кратких шпаргалок по использованию методов языка и спосбов разработки на платформе 1С:8.2 (часть из них применима и к 8.1, но об этом упоминаться не будет).

Основные формы можно подменять формами собственной разработки, созданными в кострукторе форм.

Вопрос о событиях форм.
Ответ Существует два вида событий форм:

Вопрос Как программно изменить структуру дерева распределенной информационной базы.
Ответ Механизм распределенных информационных баз содержит программное средство конфигурирования структуры узлов распределенной базы. Для этого существует метод УстановитьГлавныйУзел() объекта ПланыОбменаМенеджер. В параметре этого метода передается ссылка на узел плана обмена распределенной информационной базы, который устанавливается главным для текущей базы. Также в этом параметре может быть передано значение Неопределено, тогда у текущей базы будет отсутствовать главный узел, т.е. она станет корневым узлом.
Пример:

При этом будут удалены все записи регистрации изменений конфигурации Узла2, относящиеся к Узлу2, передача изменений конфигурации будет возможна теперь только от Узла2 к Узлу1. Записи регистрации изменения данных удалены не будут, т.к. передача данных будет по-прежнему возможна между этими узлами.

Создание распределенной информационной базы из баз с одинаковой конфигурацией:

Вопрос Можно ли из встроенного языка менять список выбора, который генеририруется платформой автоматически в автогенерируемых формах.
Ответ Да, можно. Для этого используется обработчик события Обработка получения данных выбора, модуль которого располагается в модуле менеджера объекта. Например, в модуле менеджера справочника, когда в поле ввода подбирается один из элементов этого справочника.

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

При этом особенности внутренней реализации объекта КонстантыНабор таковы, что при записи набора констант будут вызваны для каждой константы, входящей в записываемый набор, обработчики событий: ОбработкаПроверкиЗаполнения(), ПередЗаписью() и ПриЗаписи() модуля менеджера значения константы (если они там определены).
===

Вопрос Примеры программного кода работы со справочниками (аналогично с планами видов характеристик, с планами счетов, с планами видов расчета и с планами обмена).
Ответ

Вопрос Примеры программного кода обработки документов.
Ответ

Вопрос Примеры программного кода работы с перечислениями.
Ответ

Вопрос Примеры программного кода работы с регистрами сведений.
Ответ

Пример модуля проведения по этой схеме:

Вопрос В табличной части документа есть реквизит сумма. Требуется вывести итог в шапку документа. Как это лучше сделать?
Ответ Подсчет итога по графе «Сумма» и заполнение реквизита шапки этим результатом лучше сделать в МодулеДокумента в процедуре-событии «Перед записью»:

Вопрос Как в запросе осуществить выборку остатков и оборотов регистра накопления за заданный период, включая последнюю секунду, когда период задан параметрами виртуальной таблицы.
Ответ Особенность виртуальной таблицы регистра накопления такова, что когда конец выборки задается значением вида 12.13.2011 23:59:59 (т.е. конец дня), то последняя секунда дня не попадает в выборку. А если указать 12.13.2011 23:59:59 + 1 (т.е. добавить секунду), то в выборку попадут данные следующего дня, что тоже не правильно. Чтобы этого не происходило, дату окончания нужно задавать, используя метод «Граница». Пример:

Вопрос На какие данные можно опираться при проведении документов и на какие нельзя? В частности, в каком случае можно опираться на валюту, указанную в реквизите справочника договоров контрагента при проведении документа.
Ответ При проведении документа нужно следить за тем, чтобы выполняемые им движения были стабильно воспроизводимыми. Нельзя допускать ситуации, когда документ при проведении определяет, например, валюту как рубль, затем пользователь изменяет в договоре с контрагентом валюту на другую, и при повторном проведении документа валюта определяется в движениях уже как другая.
Документ в своих движениях может опираться на:

  • свои реквизиты;
  • значения данных, сконфигурированные таким образом, что они не могут быть потом независимо от этого документа изменены на другие;
  • данные регистров, записи которых подчинены регистраторам.

Допустим, в документе есть реквизит «Договор». Для выполнения движений, предположим, требуется узнать валюту договора, т.е. валюта – это реквизит договора с контрагентом. И пусть договор – это элемент справочника «Договоры», подчиненного справочнику «Контрагенты». В таком случае при проведении документа мы можем использовать валюту из договора только в том случае, если конфигурированием мы добились того, что пользователь после записи в базу данных нового договора уже не может поменять в нем валюту. Такой запрет на изменение лучше всего разместить в предопределенной процедуре-событии модуля объекта справочника договоров «ПередЗаписью» (тогда при любом из возможных вариантов модификации этого справочника будет осуществляться соответствующая проверка):

// Будет добавлено на форму ,
// связанное с переданным , ПолеВвода Владелец (первый владелец из возможных).
// Будет размещён в
// - будут найдены Владелец Владельца и тд.
Процедура ДобавитьСвязанныйЭлементВладельцаНаФорму ( Форма , Элемент , НайтиВсехВладельцев = Истина, МассивПодчиненных = Неопределено) Экспорт

Выполнить (" ЗначениеРеквизита = Форма." + Элемент . ПутьКДанным) ;

Если Справочники . ТипВсеСсылки (). СодержитТип ( ТипЗнч ( ЗначениеРеквизита )) Тогда

// Размещение элемента
Родитель = Элемент . Родитель ;

Для Каждого Владелец Из ЗначениеРеквизита . Метаданные (). Владельцы Цикл

ЗаголовокВладельца = Владелец . РасширенноеПредставлениеОбъекта ;
ЗаголовокВладельца = ?( ПустаяСтрока ( ЗаголовокВладельца ), Владелец . ПредставлениеОбъекта , ЗаголовокВладельца );
ЗаголовокВладельца = ?( ПустаяСтрока ( ЗаголовокВладельца ), Владелец . Имя , ЗаголовокВладельца );

ПреффиксТипаСсылки = ?( Метаданные . Справочники . Содержит ( Владелец ), "СправочникСсылка." , "ПланВидовХарактеристикСсылка." );
ОписаниеТипаВладельца = Новый ОписаниеТипов ( ПреффиксТипаСсылки + Владелец . Имя );

ИмяРеквизитаВладельца = Элемент . Имя + "__Владелец" ;

// добавим реквизит формы и связанный с ним элемент
РеквизитВладельца = ДобавитьВРеквизитыФормы ( Форма , ИмяРеквизитаВладельца , ОписаниеТипаВладельца ,, ЗаголовокВладельца ,Истина);
ЭлементВладельца = ДобавитьЭлементНаФорму ( Форма , ИмяРеквизитаВладельца , Тип ( "ПолеФормы" ), Родитель , ИмяРеквизитаВладельца );

// значение нового реквизита
Форма [ РеквизитВладельца . Имя ] = ЗначениеРеквизита . Владелец ;

// переместим "вперёд" элемент владельца
Форма . Элементы . Переместить ( ЭлементВладельца , Родитель , Элемент );

// установим связь с
ЗадатьСвязьЭлементаФормы ( Элемент , "Отбор.Владелец" , РеквизитВладельца . Имя );

Если ТипЗнч ( МассивПодчиненных ) <> Тип ( "Массив" ) Тогда МассивПодчиненных = Новый Массив КонецЕсли;

Для Каждого ЗаписьМассива Из МассивПодчиненных Цикл
ЗадатьСвязьЭлементаФормы ( Форма . Элементы [ ЗаписьМассива ], РеквизитВладельца . Имя , РеквизитВладельца . Имя );
КонецЦикла;

МассивПодчиненных . Добавить ( Элемент . Имя );

Если НайтиВсехВладельцев = Истина Тогда
ДобавитьСвязанныйЭлементВладельцаНаФорму ( Форма , ЭлементВладельца , НайтиВсехВладельцев , МассивПодчиненных );
КонецЕсли;

Прервать;
КонецЦикла;
КонецЕсли;

Функция ДобавитьВРеквизитыФормы ( Форма , Имя , Тип , Путь = Неопределено, Заголовок = Неопределено, СохраняемыеДанные = Неопределено) Экспорт

Реквизит = Новый РеквизитФормы ( Имя , Тип , Путь , Заголовок , СохраняемыеДанные );

МассивРеквизитов = Новый Массив ;
МассивРеквизитов . Добавить ( Реквизит );
Форма . ИзменитьРеквизиты ( МассивРеквизитов );

Функция ДобавитьЭлементНаФорму ( Форма , Имя , ТипЭлемента , Родитель = Неопределено, ПутьКДанным = Неопределено) Экспорт

Элемент = Форма . Элементы . Добавить ( Имя , ТипЭлемента , Родитель );
Элемент . Вид = ВидПоляФормы . ПолеВвода ;
Элемент . ПутьКДанным = ПутьКДанным ;

Процедура ЗадатьСвязьЭлементаФормы ( Элемент , Имя , ПутьКДанным , ИзменениеЗначения = Неопределено, ЗамещатьРанееУстановленные = Истина) Экспорт

МассивСвязи = Новый Массив ;

Если ТипЗнч ( ИзменениеЗначения ) <> Тип ( "РежимИзмененияСвязанногоЗначения" ) Тогда
ИзменениеЗначения = РежимИзмененияСвязанногоЗначения . Очищать ;
КонецЕсли;

Если ЗамещатьРанееУстановленные <> Истина Тогда
СкопироватьМассив ( Элемент . СвязиПараметровВыбора , МассивСвязи );
КонецЕсли;

МассивСвязи . Добавить (Новый СвязьПараметраВыбора ( Имя , ПутьКДанным , ИзменениеЗначения ));

Элемент . СвязиПараметровВыбора = Новый ФиксированныйМассив ( МассивСвязи );

Процедура СкопироватьМассив ( Источник , Приемник ) Экспорт

Для Каждого ЗаписьМассива Из Источник Цикл Приемник . Добавить ( ЗаписьМассива ) КонецЦикла;


В дереве метаданных справочники находятся в узле Справочники. При добавлении нового справочника открывается окно редактирования свойств справочника, в котором, переходя по закладкам можно заполнить основные свойства справочника:

Справочник в 1С 8.3

Структура справочника

При создании нового справочника в базе данных автоматически создается таблица для хранения данных этого справочника. Если в справочнике нет ни одного реквизита, то в таблице будут колонки только для полей Код, Наименование, ПометкаУдаления, Ссылка и некоторых других служебных реквизитов. При этом если на закладке Данные указать длину кода или наименования равной нулю, то для них не будет создана колонка в таблице:

Справочник в 1С 8.3

Если добавить в справочник несколько реквизитов:

Справочник в 1С 8.3

То в таблицу базы данных автоматически будут добавлены две колонки: Артикул и Поставщик:

СсылкаНаименованиеКодАртикулПоставщик

Каждый элемент справочника хранится в отдельной строке (записи) таблицы. Например, если в пользовательском режиме добавить несколько элементов:

Справочник в 1С 8.3

То таблица базы данных будет выглядеть следующим образом:

СсылкаНаименованиеКодАртикулПоставщик
8eae102c-86d5-11eb-80a3-e0d55e4e2669Клавиатура000000001Клав20Привезу все
8eae102d-86d5-11eb-80a3-e0d55e4e2669Смартфон000000002См-30Привезу все

Табличные части справочника

Табличная часть справочника хранится в отдельной таблице. В этой таблице есть колонки Ссылка и НомерСтроки, а также по одной колонке для каждого реквизита табличной части. Основная таблица справочника и табличная часть связаны между собой через поле Ссылка.

Если мы добавим в справочник табличную часть для хранения цен:

Табличные части справочника в 1С 8.3

И для элемента Клавиатура заполним ее следующим образом:

Табличные части справочника в 1С 8.3

То в базе данных будет создана следующая таблица:

СсылкаНомер строкиВид ценыЦена
8eae102c-86d5-11eb-80a3-e0d55e4e26691Оптовая500
8eae102c-86d5-11eb-80a3-e0d55e4e26692Розничная1000

В поле Ссылка хранится тот же самый идентификатор, что и в основной таблице справочника.

Иерархические справочники

Справочники могут быть иерархическими, то есть внутри одного элемента могут храниться другие элементы. Настройка иерархии выполняется на закладке Иерархия:

Иерархические справочники в 1С 8.3

Если установить флаг Иерархический справочник, то в пользовательском режиме можно будет создавать как элементы, так и группы:

Иерархические справочники в 1С 8.3

Элементы можно перетаскивать в группы, тогда они будут находиться внутри этой группы:

Иерархические справочники в 1С 8.3

На уровне базы данных иерархия реализована через поля ЭтоГруппа и Родитель. В поле Родитель хранится ссылка на группу, в которой находится элемент (или группа, группы могут быть вложены друг в друга). Поле ЭтоГруппа имеет тип булево и в нем хранится признак группа это или элемент.

Для текущего состояния справочника таблица будет выглядеть следующим образом (для упрощения в поле Ссылка я буду отображать наименование элемента, а не идентификатор. Из реквизитов в таблице только код и наименование):

СсылкаНаименованиеКодЭто группаРодитель
СмартфоныСмартфоны000000004Да
СмартфонСмартфон000000002НетСмартфоны
Составляющие ПКСоставляющие ПК000000003Да
КлавиатураКлавиатура000000001НетСоставляющие ПК

Для элементов или групп, которые находятся на верхнем уровне иерархии поле Родитель не заполнено.

Иерархия может быть двух видов:

  • Иерархия групп и элементов
  • Иерархия элементов

Пример иерархии групп и элементов можно увидеть выше. Это когда есть группы и есть элементы. Иерархия элементов выглядит следующим образом:

Иерархия элементов в 1С 8.3

В этом случае нет разделения на группы и элементы. При этом элементы могут быть вложены друг в друга.

Флаг Размещать группы сверху определяет как будет выполняться сортировка. Если данный флаг установлен, то группы всегда будут выше элементов:

Иерархические справочники в 1С 8.3

Если снять данный флажок, то сортировка будет выполняться независимо от признака ЭтоГруппа:

Иерархические справочники в 1С 8.3

Также можно ограничить использование реквизитов. Для этого у каждого в реквизита в свойствах можно указать Использование:

Подчиненные справочники

Один справочник может быть подчинен другому справочнику. Например, есть справочник контрагентов и справочник договоров контрагентов. Чтобы в справочнике договоров не заводить отдельный реквизит для указания контрагента можно сделать его подчиненным справочнику контрагентов. В этом случае в таблице справочника будет добавлено поле Владелец, которое будет хранить ссылку на владельца.

Настройка подчиненности выполняется на закладке Владельцы в подчиненном справочнике:

Подчиненные справочники в 1С 8.3

Для добавления владельца нужно нажать на кнопку с зеленым карандашом и указать справочники-владельцы. Можно указать несколько справочников, тогда поле Владелец будет составного типа.

В поле Использование подчинения можно указать могут ли владельцами быть группы справочников или только элементы.

После настройки подчиненности, в пользовательском режиме у справочника-владельца вверху, в панели навигации формы появится ссылка для перехода в подчиненный справочник, причем автоматически будет выполнен отбор по владельцу:

Подчиненные справочники в 1С 8.3

Нумерация

Настройка нумерации справочников выполняется на закладке Нумерация:

Нумерация справочников в 1С 8.3

Флаг Автонумерация позволяет автоматически заполнять поле Код при записи. Новый код будет на единицу больше предыдущего. Если данный флаг снят, то поле Код придется заполнять вручную. Как правило данный флаг оставляют включенным.

Флаг Контроль уникальности позволяет контролировать уникальность кодов справочника. Ниже можно указать в пределах чего контролировать уникальность:

Также на закладке Данные можно указать Длину кода и Тип кода. Тип может быть строковым или числовым:

Нумерация справочников в 1С 8.3

Формы справочника

На закладке формы можно создать формы для справочника и указать некоторые из них как основные:

Формы справочника в 1С 8.3

Читайте также: