Как сделать подчиненный справочник 1с
Пример. Необходимо Конвертировать справочник Контрагенты, у которого контактное лицо является ссылкой на независимый справочник КонтактныеЛица, в одноименный справочник имеющий в подчинении справочник КонтактныеЛица. То есть, в Источнике контактное лицо является ссылкой на независимый справочник, а в Приемнике оно является ссылкой на подчиненный справочник. В источнике ссылка на справочник находится в реквизите Контактные лица, а в приемнике в реквизите Основное контактное лицо. Таким образом при переносе справочника Контрагенты нам нужно будет так же и перенести справочник КонтактныеЛица, который из независимого становится подчиненным.
Решение. Создадим Правило конвертации объектов(ПКО) для справочников Контрагенты, для Правила конвертации свойств(ПКС) КонтактноеЛицо создадим (если не создалось автоматически) ПКО указав в качестве объекта – источника и объекта – приемника справочник КонтактныеЛица и проверим заполнение нужных нам свойств. Так как в базе Источнике у нас справочник Контактные лица является независимым, то нам необходимо предать Владельца в Приемник. Для этого в ПКО Контрагенты в ПКС КонтактноеЛицо в обработчике Перед выгрузкой нам нужно получить исходящие данные, а именно, Владельца для передачи в входящие данные ПКО КонтактныеЛица. Запишем код:
ИсходящиеДанные = Новый Структура ;
ИсходящиеДанные . Вставить ( "Владелец" , Источник );
Где Источник является ссылкой на контрагента.
Стоит заметить, что если Ключ структуры будет совпадать с Наименованием ПКС Приемника в ПКО куда передаются данные, то для переноса значения будет достаточно поставить флаг Получить из входящих данных.
Если сейчас произвести перенос данных, то на первый взгляд данные справочника Контрагенты перенесутся корректно.
И если контактное лицо не будет повторятся для нескольких элементов справочника, то перенос будет верным. Но, на практике, такая ситуация практически невозможна. Если мы посмотрим контагентов с однаковым контактным лицом, то контактное лицо будет указано верно, но если перейдем по ссылке в справочник КонтактныеЛица, то увидим, что контактное лицо есть лишь для одного из контрагентов.
Поэтому получается, что в реквизит Основное контактное лицо передается ссылка на «чужой» элемент. А элемент с нужным владельцем попросту не создается.
Почему так происходит?
Первая причина – система при выгрузке запоминает объекты по ключу выгружаемых данных (по умолчанию - ссылка) и при появлении следующего объекта с таким же ключом, она не создает еще один объект с этим ключом, пускай у него даже отличаются реквизиты, а отсылает к созданному. В нашем примере это выглядит следующим образом:
- Создается объект Контрагент, у него в правиле конвертации свойств стоит ссылка на правило конвертации объекта КонтактныеЛица, по нему создается контактное лицо, согласно правилу конвертации, с реквизитами Ссылка (ключ выгружаемых данных), Наименование, Код и Владелец (Контрагент который вызвал ПКО).
- Создается следующий объект Контрагент, он так же ссылается на КонтактныеЛица, и если контактное лицо уже встречалась при выгрузке ранее, то, так как ссылка (ключ выгружаемых данных) у этих элементов одинаковая – объект не выгружается, а ссылается на первый созданный объект. То есть, в этом случае, текущий Контрагент имеет ссылку на объект, у которого в качестве Владельца будет указан первый выгруженный Контрагент.
По умолчанию система считает, что в базе в пределах одной таблицы не может быть элементов с одинаковой ссылкой, исходя из этого, при конвертации с стандартными настройками, если правила выгрузки обращаются к элементам с одинаковым ключом выгрузки данных (по умолчанию – ссылка), то система, считает, что обращение идет к одному и тому же объекту и выгружать его дополнительно не нужно, а нужно лишь сослаться на элемент, который уже выгружен.
Отключить возможность запоминания объекта можно, если в Правиле конвертации объектов поставить флаг Не запоминать выгруженные объекты. В нашем случае это будет означать, что для каждого Контрагента будет выгружен контакт в независимости от того повторяется он или нет.
Если поставить флаг Не запоминать выгруженные объекты, то в нашем случае проблема все-равно не решится. Ситуация будет аналогична предыдущей, только теперь в качестве Владельца, организация будет иметь последнего выгруженного контрагента, то есть ООО «Гамма». И мы подходим ко второй причине.
Вторая причина – система, в настройках по умолчанию, ищет объект Приемника по внутреннему идентификатору, то есть GUID. Если уникальный идентификатор найден, то перезаписываются данные переданные из конвертации, если элемента с таким идентификатором нет, то создается новый объект с уникальным идентификатором из Источника. То есть, хотя мы и получили для каждого контрагента контактное лицо, каждый последующий выгруженный объект с совпадающим уникальным идентификатором перезаписывает предыдущий. Отличие заключается в следующем, в первом случае для каждого совпадения контактных лиц у контрагентов выгружался один объект, во втором при совпадениях выгружаются все объекты. Получается данных передано больше, а результат все равно аналогичен предыдущему.
Напрашивается решение поменять свойства поиска. Для этого, в Правиле конвертации объекта КонтактныеЛица в закладке Настройки снимем флаг Искать объект приемника по внутреннему идентификатору объекта источника, так же проверим наличие флага Не запоминать выгруженные объекты. После чего нужно выбрать новые свойства поиска, например, Наименование и Владелец (ставится флаг в закладке Конвертация свойств для нужного элемента), теперь поиск будет происходить не по GUID, а по выбранным нами полям, так же при создании нового объекта будет создаваться новый GUID отличный от Источника. И если сейчас мы совершим обмен, то данные передадутся корректно. Но, такое решение не является оптимальным. Если мы переносим только Контрагенты и КонтактныеЛица, тогда можно сделать и так, но если переносится много объектов и еще имеются ссылки на КонтактныеЛица, то скорее всего будут выгружены одинаковые объекты, что приведет к лишней нагрузке на систему. Поэтому правильнее будет отключить флаг Не запоминать выгруженные объекты, а для контактных лиц создать свой Ключ выгружаемых данных. Создаваемый ключ должен учитывать наличие владельца. Для чего в качестве ключа будем использовать ссылку самого контактного лица и ссылку владельца, в нашем случае контрагента. Получится если у элементов одинаковый владелец, то ключ и будет одинаковый, а значит и лишние объекты выгружаться не будут. Реализуем данное решение пошагово.
Правила конвертации объектов и Правила конвертации свойств у нас уже созданы, а так же в контактном лице получен владелец. Проверим настройки. Зайдем в Правило конвертации объектов Контактные лица, в вкладке Настройки проверим отсутствие флагов у Искать объект приемника по внутреннему идентификатору объекта источника и Не запоминать выгруженные объекты.
В этом же правиле конвертации в обработчике Перед выгрузкой напишем код для создания ключа:
Далее установим свойства поиска, можно как мы и говорили ранее установить по свойству Наименование (вместо Наименования или в дополнение можно выбрать Код) и Владелец.
Скорее всего Вы уже неоднократно замечали в обычных типовых конфигурациях, взаимосвязанные между собой справочники, когда при выборе элемента справочника(справочник1), значение другого справочника(справочник2) «фильтруется» по этому значению – то есть выбираются значения, принадлежащие только текущему элементу справочника1; к примеру – это Справочник «Подразделения», владельцем которого является Справочник «Организации».
Для того, чтобы сразу вникнуть в суть происходящего, давайте посмотрим что происходит на практике. Для этого, вы можете, создать пустую конфигурацию с нуля, либо зайти в какую-либо имеющуюся копию информационной базы и в конфигураторе создать 2 справочника.
Справочник1 и Справочник2. В справочнике2 перейдите на вкладку «Владельцы» и выберите владельца – «Справочник1», смотрите как показано на рисунке.
Теперь при создании элементов в «Справочнике2», система будет просить ввести владельца справочника1. Есть опция – Использование подчинения – когда задается подчинение Элементам, группам, или группам и элементам.
Казалось бы всё просто, но проблемы возникают у пользователей. Пользователь при открытии «Справочника2» видит все элементы в совершенно непонятном порядке, да и к тому же, если вы работали с типовыми конфигурациями, то могли заметить, что напрямую в справочнике «Подразделения» вы нигде не задаёте владельца, а при открытии справочника можете выбирать организацию и в зависимости от этого получать элементы, подчинённые той или иной организации; при этом при создании элемента справочника «Подразделения» по умолчанию вы получите того владельца, которого выбрали в форме списка подразделений.
Итак приступим, и создадим «Форму списка» для нашего «Справочника2», пока предоставьте это 1С, не внося никаких изменений, позже мы подкорректируем созданную конструктором форму.
В «Справочнике2» перейдите на вкладку Формы и добавьте (+) новую Форму списка справочника и нажмите Готово.
Создадим реквизит формы с типом данных «Справочник1.Ссылка», с именем «ОтборСправочник1», и перетащим этот реквизит на форму, задайте заголовок «Справочник1».
Теперь, для того, чтобы «сие чудо» заработало, необходимо написать код, который будет выполнять отбор при выборе Элемента Справочника1.
8.2, 8.3 Управляемые формы
Для того, чтобы отобразить в форме списка справочника только необходимые нам элементы по выбранному элементу Справочника1, необходимо программно сделать отбор – по выбранному элементу, для этого воспользуемся предопределенной процедурой элемента управления ОтборСправочник1, и напишем код, выполняющие указанную задачу.
В верхней части выберите «ОтборСправочник1» нажмите на правую клавишу мыши и выберите «Свойства», в появившемся окне найдите свойство «ПриИзменении» и нажмите лупу, тем самым перейдя в модуль формы; автоматически создается процедура «ОтборСправочник1ПриИзменении(Элемент)»
В процедуре введите следующий текст:
8.2 Обычные формы
При построении форм – всё то же самое, только формы необходимо создавать обычные, управляемые формы в обычном приложении не работают.
Разница будет состоять в процедуре отбора для элемента в форме списка и создании реквизита.
Чтобы добавить реквизит на обычную форму нажмите кнопку
И далее текст процедуры
Предпоследней строкой(?) – запрещаем изменять отбор при открытии параметров отбора пользователем - только через элемент управления!
Особенности работы в формах с подчиненным справочником
При работе в формах с подчиненных справочниками имеется ряд особенностей.
Прежде всего, следует отметить свойства формы списка справочника ПараметрОтборПоВладельцу и ПараметрВыборПоВладельцу .
Свойство ПараметрОтборПоВладельцу используются для передачи в форму списка справочника информации о том, что список нужно отображать по определенному владельцу. Расширение формы списка справочника на основании значения этого свойства в процессе открытия формы устанавливает отбор по владельцу. Этот параметр используется, например, системой при открытии подчиненного справочника по определенному элементу из списка справочника-владельца (по кнопке "Перейти"). Если отсутствует колонка для отображения владельца, то при открытии формы отключается возможность управления отбором пользователем, чтобы просмотр списка выполнялся строго по указанному владельцу.
Свойство ПараметрВыборПоВладельцу используется для инициализации формы выбора. В этом случае выбор будет выполняться только для элементов с указанным владельцем. Этот параметр используется системой при инициализации выбора значения подчиненного справочника в поле ввода из формы выбора.
Расширение поля ввода для подчиненного справочника предоставляет специальные средства для организации выбора из элементов подчиненных определенному владельцу. При нажатии кнопки выбора система открывает формы выбора подчиненного справочника, установив в ней значения описанных выше свойств на основании имеющегося значения владельца. Поле ввода может получать информацию о владельце либо на основании установленной связи по владельцу, либо из значения владельца, явно установленного в свойстве поля ввода ВыборПоВладельцу . Значение владельца используется полем ввода не только при выборе из формы, но и при быстром выборе (выборе из выпадающего списка) и при вводе по строке.
В 1С:Предприятии 8 выбор в поле ввода значения подчиненного справочника не производит предварительного выбора владельца (такое поведение было реализовано в 1С:Предприятии 7.7). Если в момент выбора в поле ввода значение владельца для поля ввода не установлено (ни через связь по владельцу, ни через значение свойства ВыборПоВладельцу ), то форма будет открыта без установленного владельца. Таким образом, необходимо в форме выбора подчиненного справочника предусмотреть возможность выбора владельца.
Выбор владельца может выполняться за счет использования стандартного диалога отбора, однако если необходимо часто выполнять такой выбор, то стандартный диалог не будет удобен.
Может использоваться возможность просмотра справочника по всем владельцам. В этом случае следует вставить в список колонку для отображения владельца. Однако такой вариант тоже может быть неудобен для выбора.
Эффективным решением может быть размещение в форме выбора поля ввода, связанного с данными отбора по владельцу ("Отбор.Владелец.Значение"). В этом случае пользователь сможет быстро установить отбор по владельцу и выбрать необходимый элемент.
Интернет был у парня под рукой - вчера увидел много различных вариантов и самое интерсное что рабочих.
вариант
ЗначениеОтбора = Новый Структура("Владелец", ЭлементыФормы.СправочникСписок.ТекущаяСтрока);
ПараметрыФормы = Новый Структура("Отбор", ЗначениеОтбора);
ОткрытьФорму("Справочник.Размеры.ФормаСписка", ПараметрыФормы);
(пример: найден в
Специальные предложения
А вообще задача не интересная Стандартными средствами
В свойствах кнопки вибираете:
Источник действий=СправочникСписок;
Нажатие=Подчиненный справочник. ;
Нажатие (Справочник)=Размеры;
Нажатие=Подчиненный справочник. ;
Нажатие (Справочник)=Размеры; Если одно и то-же нужно делать для нескольких справочников, тогда процедуру с параметрами вынести в общий модуль и тогда можно обойтись одной строкой кода в каждом справочнике. Да и символов в итоге поменьше будет =) Было бы гораздо интереснее узнать как программно установить/поменять "Связь по владельцу" не заходя в Конфигуратор. Например привязать к другому списку на форме?
Кто-то сталкивался? В управляемых формах есть же простое решение, без написания кода:
В форме списка справочника владельца (например Контрагенты) заходим в Команды-Глобальные команды.
Затем заходим в Параметризируемые-Элементы-Список. Внутри будет список подчиненных справочников.
Выбираем нужный (например Договоры) и мышькой перетаскиваем на форму.
В результате имеем кнопку (можно изменить на гиперссылку), при нажатии на которую, откроется форма списка подчиненного справочника с отбором по владельцу-текущей строке в первой форме списка.
Просмотры 62785
Загрузки 0
Рейтинг 8
Создание 27.07.10 09:31
Обновление 27.07.10 10:56
№ Публикации 73469
Тип файла Нет файла
Конфигурация Конфигурации 1cv8
Операционная система Не имеет значения
Страна Россия
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)
Код открыт Не указано
Курс рассчитан на тех, кто уже работает с платформой “1С:Предприятие” и имеет опыт доработки различных типовых прикладных решений. 1С:Предприятие для программистов: Расширения конфигурации. Онлайн-интенсив с 15 по 28 декабря 2021 г.См. также
Идея или как сохранить ЦВЕТ, ШРИФТ, ОФОРМЛЕНИЕ пользователя Промо
Простой и оригинальный способ сохранять ЦВЕТОВУЮ СХЕМУ и ОФОРМЛЕНИЕ пользователей. Как сохранить ЦВЕТ
22.06.2015 24935 Tatitutu 12
[ПОТРАЧЕНО] Динамическая таблица формы
История одной разработки в далеком 2020 году.
15.10.2021 3414 rpgshnik 47
Программно свернуть/развернуть узел динамического списка (с основной таблицей). Жирная точка над всеми "i".
Какой пользователь не мечтал поменьше тыркать кнопкой? Особенно в малюсенькие +/- в "древесных" динамических списках. Если вас тоже озадачили, чтобы, при выборе узла дерева сами развернулись все его вложенные элементы , а при выборе другого узла - так же автоматом свернулась ранее развернутая ветка (причем эти узлы могут находится в разных "отношениях" друг с другом). То вам - сюда.
08.10.2021 1482 e-9 13
Прогресс-бар в поле динамического списка
Изображаем прогресс-бары в колонке динамического списка
23.08.2021 2745 Yashazz 12
Хранение и редактирование дополнительных параметров в регламентированном отчете. Для начинающих. Промо
Для начинающих. Как редактировать дополнительные параметры регламентированного отчета, изменив только модуль формы и модуль объекта. Как сохранить дополнительные параметры в данных отчета.
22.01.2014 21058 KapasMordorov 4
Перенос расшифровки в пользовательские настройки
Как перенести данные расшифровки в пользовательские настройки.
11.08.2021 685 scientes 1
1С и ODBC
ODBC (Open Database Connectivity) — это программный интерфейс, универсальное средство доступа к базам данных, разработанное для обмена между источниками (базами данных) разного типа. Данный интерфейс принято считать более низкоуровневым, чем библиотека ADOdb, однако причина эта кроется не в более низком качестве, но в том, что ODBC послужила своего рода фундаментом более поздней ADOdb – работу с последней поддерживают все типы баз, работающие и с первой. В данной статье мы расскажем о том, как взаимодействуют ODBC и 1С, а точнее, поговорим о механизме 1С ВнешнийИсточникДанных и его использовании с вышеупомянутым интерфейсом.
02.06.2021 1290 Koder_Line 5
Предотвращение многократного вызова "ПриПолученииДанных" во время поиска в табличном поле в обычных формах
Долго искал решение: как при выводе строк заполнить значениями колонки, которые созданы программно, чтобы, не было тормозов при стандартном поиске. И с минимальными изменениями (легко контролируемыми, при обновлении).
07.04.2021 2069 Vlad_CK 9
Программное генерирование кнопочек для удобного управления уровнями группировки в отчетах (версия 2a). Промо
В табличных документах 1С 8 имеется отличная возможность использования группировок, но управление уровнями группировок через контекстное меню не очень удобное. В своих отчетах для управления уровнями группировок я использую маленькие кнопочки на поле табличного документа - это намного удобнее и быстрее, чем через контекстное меню.
09.04.2011 47331 mtv:) 75
Динамический список и поиск. неприятностей
Страх и ненависть в поиске по динамическому списку, или "Кое-что о неоптимальном отборе".
17.03.2021 4503 Yashazz 37
Отображение и редактирование в дереве большого количества настроек/параметров/опций программы, конфигурации, документа, справочника - без программного создания элементов формы
Очень много реквизитов (настроечные опции, параметры) у справочника или документа, и их все необходимо разместить на управляемую форму - лень! Хочется - добавил в метаданные и всё! В публикации отличное, простое и олдскульное решение с открытым кодом, научимся работать с ДанныеФормыДерево, ДеревомЗначений, сделаем быстрый поиск, создадим универсальный инструмент.
11.12.2020 1060 SizovE 6
Программное условное оформление динамического списка, раскраска строк списка по цветам справочника или любым другим условиям (условное оформление)
Большое количество динамических списков на форме, большое количество условий, долгое интерактивное добавление условий, оформление по значению элементов справочников - всё это не позволяет использовать интерактивный режим назначения условного оформления динамического списка. В публикации с открытым кодом детально разберем программное решение назначения условного оформления, создадим универсальную функцию для оформления списка.
30.11.2020 6392 SizovE 4
Хитрости компоновки данных: программное формирование заголовков отчета и колонок без использования макетов. Промо
Хитрости компоновки данных: программное формирование заголовков отчета и колонок без использования макетов. Очень часто необходимо программно сформировать заголовок отчета, например добавить туда наименование валюты, в которой формируется отчет. Можно использовать макеты, но во многих случаях это не оправданно.
27.07.2012 32855 milkers 10
[mobile] Переносим HTML интерфейс на 1С
Разберем методы переноса HTML интерфейса на 1С на примере реализации нижнего меню для мобильного приложения. Сравним методы между собой. Данные методы можно применять не только для мобильной разработки, но и для веб-клиента и т.д
02.11.2020 8815 leobrn 78
Цветовая схема конфигуратора в стиле OneScript
Цветовая схема конфигуратора 1С максимально приближенная к стандартной цветовой схеме OneScript в VS Code.
01.10.2020 1385 DmitrySinichnikov 3
Рендеринг элементов управляемого интерфейса
Реализация отображения всего состояния формы проще, чем работа по изменениям. Однако использование идеи разделения алгоритмов на программные слои MVC и построения реактивных систем позволяет получить не только простые и масштабируемые решения, но и производительные интерфейсы. Рассмотрим примеры таких реализаций на основе использования фреймворка «Управление состоянием»: Информационная надпись, Заголовок формы, Свертываемая группа, Отключаемые панели.
22.09.2020 3906 kalyaka 5
Рабочее место кассира для touch-screen и программируемой клавиатуры продавца в «1С: Розница» Промо
Вашему вниманию предлагается текст одного из технических проектов «1С: Розница 8», он описывает процесс разработки интерфейса РМК, с которым, нынче, работают кассиры очень многих магазинов.
29.11.2012 48330 aavolkoff 50
Переопределение представления ссылочного значения
Переопределение представления ссылочного значения
17.09.2020 4958 sam441 15
[Общий модуль] Динамическое формирование интерфейса
Версия 2.0.0.1 + добавил GitHub
28.08.2020 13049 rpgshnik 74
Медленно формируются отчеты в БП 3, способ исправления
При формировании любых отчетов, но в особенности оборотно-сальдовой ведомости в бухгалтерии 3, очень долго формировался отчет, ПОЯВЛЯЛСЯ ЖЕЛТЫЙ КОТ, разумеется у бухгалтера невроз, да и у меня тоже. Что только ни делал: тестирование и исправление с пересчетом итогов, настройка SQL, отключение фоновых заданий, обновление платформы и конфигурации, а толку нет, регламентные операции по скулю тоже сделал. И что же сделал, а вот что:
21.07.2020 3045 VID1234 8
Бухгалтерия предприятия 3.0 интерфейс, аналогичный 1С:Бухгалтерии 7.7; Промо
Бухгалтерия предприятия, редакция 3.0, версия 3.0.14. Добавлена возможность использовать интерфейс, аналогичный 1С:Бухгалтерии 7.7;
20.09.2012 37963 dour-dead 18
Регистр сведений как дополнение объекта
Подключаем регистры сведений к формам связанных с ними объектов, быстро и надежно.
19.05.2020 5104 Infector 14
Перенос инструкций из word во встроенную справку 1С с сохранением картинок и форматирования
Делюсь простым и удобным способом переноса справки/инструкций из ворда (и не только) во встроенную справку 1С с сохранением картинок и форматирования.
22.04.2020 5564 77dream77 21
Звездный рейтинг *****
Ранее я представил подсистему «Управление состоянием». К подсистеме был проявлен интерес, однако в рамках одной статьи аспекты её использования были представлены недостаточно полно. Более подробное рассмотрение использования подсистемы я планирую продолжить через публикацию отдельных учебные примеров. Это первая статья из цикла таких примеров.
06.04.2020 2711 kalyaka 3
Выбор вариантов отчета в "Управление торговлей" ред. 11 Промо
В УТ 11 в свойствах конфигурации задано хранилище вариантов отчетов. Исходя из этого, все отчеты будут использовать для своих вариантов именно это хранилище (если, конечно, в свойствах самого отчета не задано другое хранилище). По сути, все варианты для отчетов находятся в справочнике "Варианты отчетов", который заполняется при первом запуске системы. Вполне очевидно, что если Вы создаете свой отчет (внешний или внутренний) с несколькими вариантами, у Вас не будет возможности выбирать нужный вариант (переключаться между вариантами), т.к. в выше указанном справочнике нет никакой информации о вариантах созданного Вами отчета. В этой небольшой статье я покажу один из способов решения данной проблемы.
Читайте также: