Как связать справочники между собой в 1с
Среди множества элементов, справочники в 1С – это основа для любой конфигурации. В них хранится информация, которая используется множеством прочих объектов приложения 1С. По этой причине, прежде чем начать модернизацию или разработку системы на платформе 1С, необходимо заполнение и добавление новых справочников. Каждый разработчик, специализирующийся на 1С, должен хорошо разбираться в функциях, свойствах и возможностях данных объектов конфигурации.
Функции и структура справочников в 1С 8.3
Хранение и предоставление информации нормативно-справочного характера, является главной функцией справочников. В разрезе справочников, производится весь учет в системах 1С: Номенклатура, Клиенты и прочие.
Некоторые отдельные справочники вынесли в отдельный тип – это классификаторы. Они содержат информацию, к примеру, которая утверждена на уровне государства:
- Профессии.
- Страны мира.
- Разные единицы измерения.
- Валюты.
Структура справочников в приложении 1С похожа на списки, которые хранят определенные данные. Для изучения и знакомства с уже существующими справочниками в конфигурации 1С, нужен переход в режим конфигуратора. Дерево конфигуратора имеет ветку «Справочники», которую и нужно раскрыть.
Все справочники обладают свойствами, которые ранее были заданы разработчиками. Для примера возьмем справочник «Валюта» и рассмотрим основные свойства.
Во вкладке «Основные», можно найти описание и наименование справочника. Раздел «Подсистемы» позволит включить справочник в необходимую пользователю подсистему.
За определение функциональности при использовании того или иного справочника, отвечает вкладка «Функциональные опции». Закладка с названием «Иерархия» необходима для создания вложенных элементов выбранного справочника. Очень удобно и полезно, иногда использовать иерархические виды справочников.
Специальная вкладка «Владельцы» позволит, настроить механизм подчинения. Реквизит «Владелец» обязателен для заполнения, в случае, если справочник подчинен другому.
Вкладка «Данные» определяет характер информации, которая может быть добавлена в справочник 1С. Наименование и код настраивается сверху, что является стандартными реквизитами, а в центре – перечень добавленных реквизитов. Нижняя часть отображает табличные части справочника.
Для создания уникальной нумерации всех элементов справочника, используют соответственную функцию настройки нумерации объекта конфигурации в 1С.
Интерфейсы, которые отображаются конечным пользователям, создаются разработчиками во вкладке «Формы». Зачастую встречаются формы Списка и Элемента: в таком виде пользователи 1С видят разные элементы и списки данных любого справочника.
Для создания комфортных условий работы пользователей, необходима грамотная и тщательная настройка соответственных параметров вкладки «Поле ввода». Найти необходимый элемент помогут параметры «Быстрый выбор/Ввод по строке/Полнотекстовый поиск». Ранее используемые позиции можно сохранять, для этого существует «История выбора при вводе».
В разделе «Команды», находится перечень существующих кнопок, которые вызывают данный справочник. «Макеты» содержат все печатные формы конкретно взятого объекта конфигурации. «Ввод на основании» необходим лишь тогда, когда предполагается создание другого объекта конфигурации на основе элемента справочника.
Отдельный подраздел «Права», содержит информацию касательно того, какие роли включают в себя доступ к справочнику, включая изменение, заполнение и чтение справочников. Об участие справочников в планах обмена, расскажет вкладка «Обмен данными». Для перехода в модули написания функций и процедур, нужна последняя вкладка. Здесь же находится перечень заранее заданных значений справочника, к которым есть возможность обращаться напрямую в коде.
Нет необходимости заполнять абсолютно все свойства. Некоторые вкладки так и не понадобятся за весь жизненный срок ПО на платформе 1С.
Для лучшего понимания вопроса, создадим справочник в системе 1С.
Настроим 1C под ваши нужды прямо сейчас!
- Любые настройки, отчеты в 1С, обмены 1С
- Выезд специалиста на следующий день
- 24/7 принимаем ваши заявки
Создание и дальнейший перенос справочника в 1С 8.3
В качестве примера, возьмем нетиповую конфигурацию и будем использовать справочник «Подразделения», который будет отображать и хранить данные о структуре предприятия. В конфигураторе ищем дерево конфигурации, далее переходим в «Справочники» и жмем «Добавить». Нужны следующие поля:
- Имя/Синоним. Реквизит вначале ответственный за имя объекта в конфигурации, а следующий за название в режиме предприятия.
- Пункт представление объекта применяется в случае открытия одного элемента справочника.
- Пункт представление списка применяется при просмотре списка данных справочника.
- Пункт пояснения служит справкой для пользователей.
Следующим шагом будет добавление нового справочника в одну из необходимых подсистем. Если нужно, чтобы в пользовательском интерфейсе отображался справочник. После открытия вкладки «Подсистемы», нужно установить галки возле существующей подсистемы «Общее».
Новый справочник будет иметь иерархическую структуру, ведь разные подразделения могут входить одно в другое. По замыслу, наше предприятие не имеет групп подразделений, поэтому подходит тип «Иерархия элементов». Ограничений вложенности, также не предполагается.
Для работы нам понадобится стандартный набор, а также несколько реквизитов. Для перечня сотрудников предприятия, используем табличную часть. Чтобы это сделать, требуется их добавить во вкладке «Данные» каждого соответственного раздела.
Чтобы работать было удобно, необходимо добавить наши реквизиты в форму списка. Для этой цели, создаем новую форму списка на вкладке «Формы» и выбираем ее в качестве основной. В диалоговом окне, отмечаем галками напротив те реквизиты, которые нам понадобятся. В зависимости от требований пользователей, располагаем реквизиты в определенной последовательности, при помощи формы элемента.
Демонстрационный справочник «Подразделения» – создан, благодаря последовательности вышеуказанных действий. Теперь обновляем конфигурацию и перезапускаем систему, только в этот раз в режиме предприятия. Подсистема «Общее» обзавелась теперь функциональной клавишей «Список подразделений». При ее нажатии, откроется ранее заданная нами форма списка справочника, в которую можно вносить элементы.
Много компаний, в силу особенностей деятельности, работают одновременно с несколькими базами 1С, что ставит перед разработчиком задачу по переносу существующего справочника в другую базу. Для этих целей, в большинстве конфигураций предусмотрена внешняя обработка – это функция «Выгрузка и загрузка данных XML». Перед началом процесса переноса справочников 1С 8.3, нужно подготовить конфигурацию-приемник. Для этого создают подобный объект конфигурации с такими же табличными частями и полями, в конфигурации-приемнике.
Открывая данный тип обработки, нужно указать какие именно объекты требуют переноса, и выбрать файл. Далее запущенный процесс выгрузки справочника автоматически создаст XML-файл, и запишет в него все данные.
Нужно загрузить справочники в еще одну информационную базу, потребуется все та же внешняя обработка. Запускаем выгрузку на второй вкладке. Данный метод зачастую применяется при разовом использовании, ведь все нужно вводить вручную. Для регулярного ввода новых элементов, лучше настроить удобный обмен между базами.
Остались вопросы или нужны помощь в настройке 1С? Закажите консультацию наших специалистов!
Очень часто в 1С 8.3. в справочнике необходимо настроить определенный порядок подчинения элементов. Для реализации подобных задач из простого справочника необходимо сделать иерархический справочник 1С.
В платформе 1С существует два вида иерархии – иерархия групп и элементов и иерархия элементов.
Иерархия групп и элементов
Для того, чтобы справочник имел иерархию групп и элементов, необходимо в редакторе справочника на закладке Иерархия установить флаг Иерархический справочник, а свойству Вид иерархии установить значение Иерархия групп и элементов.
Тогда у справочника можно будет создавать группы, и размещать элементы в группах.
При иерархии групп или элементов существуют группы (каталоги), в которые входят или другие группы, или элементы. И группы, и элементы являются экземплярами объекта справочника.
Группа это тоже экземпляр объекта справочника, по которому не ведется какой-либо учёт (как правило), и который может быть родителем другого экземпляра, т.е. в группу могут входить другие группы и элементы справочников.
Иерархия элементов
Иерархия элементов настраивается похожим способом: в редакторе справочника на закладке Иерархия устанавливается флаг Иерархический справочник, но свойству Вид иерархии следует установить значение Иерархия элементов.
После этого, каждый элемент может быть родителем другого элемента.
Родитель иерархического справочника 1С
У каждого элемента иерархического справочника должен быть родитель. В случае иерархии групп и элементов родитель это группа иерархического справочника, в случае иерархии элементов, родитель это элемент.
Родитель это стандартный реквизит справочника. Если иерархия отключена, то этот стандартный реквизит не доступен. Как у этого справочника Сотрудники.
А если иерархия включена, то этот реквизит доступен. Как у справочника Контрагенты.
Если форма элемента справочника автоматически генерируется платформой (т.е. она не создана), то этот реквизит отображается на управляемой форме. И, в случае иерархии групп и элементов в нем указана группа, в которую входит этот элемент.
Если группа не указана, то значит элемент верхнего уровня.
Также, родитель имеется у элементов справочника с иерархией элементов.
Создать элемент иерархического справочника 1С
Для того, чтобы создать группу справочника (в случае, иерархии групп и элементов), необходимо воспользоваться методом менеджера справочника СоздатьГруппу(). А для создания элемента следует воспользоваться методом СоздатьЭлемент(). Если мы хотим, чтобы вновь созданный элемент входил в какую-то группу, то следует в свойство Родитель этого элемента записать ссылку на нужную группу.
В коде ниже, создаем группу, а потом создаем элемент, который входит в эту группу:
Заметьте, группа в коде выше, группа верхнего уровня. У неё при создании не был задан Родитель.
В случае иерархии элементов всегда нужно создавать элементы, но также следует в свойстве Родитель созданного элемента указать ссылку на другой элемент, которому будет подчинен созданный.
Изменить элемент иерархического справочника 1С
Если мы хотим поменять подчиненность элемента иерархического справочника, или вообще убрать её, т.е. сделать из элемента элемент верхнего уровня, то следует работать со стандартным реквизитом Родитель. В случае, изменения подчиненности, этому реквизиту нужно присвоить ссылку на другую группу.
Если же мы хотим сделать элемент верхнего уровня, то этому реквизиту нужно присвоить пустую ссылку.
Поиск в иерархическом справочнике 1С
В платформе 1С имеется возможность искать в определенной группе иерархического справочника, для этого следует в методах НайтиПоНаименованию, НайтиПоКоду и НайтиПоРеквизиту заполнять параметр Родитель.
Например, поиск в определенной группе будет осуществляться так:
Выборка иерархического справочника 1С
В платформе 1С 8.3. существует возможность выбрать элементы иерархического справочника, которые входят в ту или иную группу, для этого следует воспользоваться методом Выбрать с заполненным параметром Родитель. В этом случае будут выбраны группы и элементы, которых входят непосредственно в указанную группу, но не будут выбраны группы элементы, которые входят в подчиненные группы. Чтобы выбрать элемент и группы, входящие в какую-то группу, следует воспользоваться методом ВыбратьИерархически.
Например, при таком коде:
Будут выбраны элементы, входящие в указанную группу.
А в этом случае:
Будут выбраны элементы, которые входят и в указанную группу, и в подчиненные ей группы.
И Выбрать, и ВыбратьИерархически отбирают и группы, и элементы справочников. Поэтому, в коде выше было использовано свойство ссылки справочника ЭтоГруппа. Это свойство имеет значение Истина, если ссылка является группой справочника.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
Войдите как ученик, чтобы получить доступ к материалам школы
Язык запросов 1С 8.3 для начинающих программистов: соединения
Автор уроков и преподаватель школы: Владимир Милькин
Соединения в запросах
Соединение - одна из самых важных и нужных операций, выполняемых реляционными системами управления базами данных.
Соединения используются для того, чтобы сопоставить строки одной таблицы строкам другой таблицы.
Для того, чтобы осознать необходимость соединений давайте решим следующую задачу.
У нас в базе есть справочник Клиенты:
И справочник Ассоциации:
Наша задача вывести любимые ассоциации клиентов, основываясь на цвете.
Таким образом для Наташи любимой ассоциацией будет трава, так как её любимый цвет зелёный. А для Петра - солнце. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Для Андрея вообще нет подходящей ассоциации, так его любимый цвет красный, а ассоциаций красного цвета в базе нет.
Будем решать задачу постепенно.
Сначала запросим всех клиентов и их любимые цвета :
Затем запросим все ассоциации и их цвета :
Теперь нам каким-то образом следует совместить первую и вторую таблицу. Чтобы это сделать запросим информацию сразу из двух таблиц. Для этого перечислим обе таблицы в секции ИЗ через запятую. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. А в секции ВЫБРАТЬ укажем поля из обеих таблиц:
Если мы попробуем выполнить этот запрос, то получим ошибку:
Причина ошибки в том, что поле Наименование присутствует сразу в обеих таблицах (Клиенты и Ассоциации) и система просто не знает поле из какой именно таблицы имеется в виду.
Чтобы устранять подобные неоднозначности при выборке из более чем одной таблицы принято указывать полные названия полей. Полное название поля включает в себя полное имя таблицы (например, Справочник.Клиенты) и имя самого поля (например, Наименование).
Таким образом полное название поля Наименование из таблицы Клиенты будет Справочник.Клиенты.Наименование.
А полное названия поля Наименование из таблицы Ассоциации будет Справочник.Ассоциации.Наименование.
Перекрёстное соединение
Перепишем предыдущий запрос с полными именами полей:
Только что мы произвели перекрёстное соединение двух таблиц. Обратите внимание на то, каким образом сформировался результат:
Внутреннее соединение
Очевидно, что результат перекрестного соединения двух таблиц не есть решение нашей задачи. Нам нужны не все записи из перекрёстного соединения, а только те у которых поля ЛюбимыйЦвет и Цвет имеют одинаковое значение:
Чтобы получить эти записи добавим к предыдущему запросу секцию ГДЕ:
Это то, что нужно - мы решили, поставленную задачу!
В последнем запросе мы использовали перекрёстное соединение с дополнительным условием (в секции ГДЕ). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Такое соединение называется внутренним .
Есть ещё один вариант написания того же самого внутреннего соединения :
Сравните этот и предыдущий запрос. Они совершенно одинаковы с точки зрения платформы, просто имеют разный синтаксис. И этот и предыдущий запросы содержат внутреннее соединение таблицы Клиенты с таблицей Ассоциации по полям ЛюбимыйЦвет и Цвет соответственно.
Левое внешнее соединение
Обратите внимание на то, что в результат внутреннего соединения не попал Андрей. А всё потому, что его любимый цвет красный, а красных ассоциаций у нас в базе нет вовсе.
Получается, что для Андрея с его красным цветом просто не нашлось пары из таблицы ассоциаций.
Перепишем запрос так, чтобы в результат попадали в том числе те записи из первой таблицы, для которых не нашлось ни одной пары из второй таблицы (в данном случае Андрей):
Такое соединение называется левым внешним соединением (слово внешнее можно опускать для простоты).
Р езультат левого внешнего соединения представляет из себя: все записи из внутреннего соединения ПЛЮС все записи из первой таблицы , не попавшие во внутреннее соединение (для которых не нашлось пары).
Правое внешнее соединение
Но давайте снова вернёмся к внутреннему соединению:
Обратите внимание на то, что результат внутреннего соединения не содержит ассоциацию белый снег, так как не нашлось ни одного клиента, у которого любимым цветом был бы белый.
Перепишем запрос так, чтобы в результат попадали в том числе те записи из второй таблицы, для которых не нашлась ни одной пары из первой таблицы (в данном случае белый снег):
Такое соединение называется правым внешним соединением (слово внешнее можно опускать для простоты).
Результат правого внешнего соединения представляет из себя: все записи из внутреннего соединения ПЛЮС все записи из второй таблицы , не попавшие во внутреннее соединение (для которых не нашлось пары).
Полное соединение
А что если нам нужно, чтобы в результат запроса попадали помимо внутреннего соединения Андрей и Снег одновременно?
Для этого потребуется совместить результаты левого и правого соединений. Такой вид соединения уже придуман и называется полным соединением:
Результат полного соединения представляет из себя: все записи из внутреннего соединения ПЛЮС все записи из первой таблицы, не попавшие во внутреннее соединение (для которых не нашлось пары) ПЛЮС все записи из второй таблицы, не попавшие во внутреннее соединение (для которых не нашлось пары).
Псевдонимы таблиц
Согласитесь, что все запросы, которые мы писали в этом уроке выглядят довольно громоздко. Это связано с тем, что мы вынуждены указывать полные имена полей, чтобы избежать возникновение неоднозначности.
Чтобы сократить полное написание имени таблицы (например, Справочник.Клиенты) допустимо (как и для самих полей) использовать псевдонимы .
Давайте перепишем последний запрос так, чтобы при формировании полных имён полей вместо Справочник.Клиенты можно было использовать псевдоним К, а вместо Справочник.Ассоциации - псевдоним А:
А чтобы результат запроса был ещё нагляднее добавим псевдонимы полей, которые мы уже рассматривали на одном из прошлых уроков:
Обработка NULL
Присмотритесь к результатам последнего запроса (как впрочем и многих предыдущих на этом уроке).
Чему равны значения полей Ассоциация и ЕёЦвет для первой строчки? А что вы скажете насчет полей Клиент и ЕгоЦвет для последней строки?
Они равны NULL, которое как мы уже знаем означает отсутствие какого либо значения:
А так как NULL означает отсутствие значения, то любая попытка выполнить с ним какую-либо операцию (сравнение, сложение . ) вызовет неопределенное поведение базы данных, непредсказуемую ошибку.
Поэтому обязательной считается обработка значений NULL всегда, когда они могут возникнуть.
Под обработкой подразумевается то, что мы должны сказать в нашем запросе, что если одно из полей будет равно NULL, то в это поле следует подставить какое-то другое значение.
В данном случае для полей Клиент и Ассоциация в случае обнаружения NULL мы будем подставлять пустую строку "".
А вот поля ЕгоЦвет и ЕёЦвет являются ссылками на элементы справочника Цвета, поэтому в них можно подставлять только значения являющиеся ссылками указанных типов. Каждый ссылочный тип (например, Справочник или Документ) имеет предопределенный элемент ПустаяСсылка. Чтобы указать его значение в запросе воспользуемся функцией ЗНАЧЕНИЕ.
Для определения того, что в поле попало NULL будем использовать уже знакомую нам по прошлым урокам функцию ЕСТЬNULL:
С виду (из консоли запросов) результат не изменился. Мы по-прежнему видим пустые поля. Но это только потому, что строковые представления у NULL и у пустых полей всех типов совпадают и равны пустой строке.
На самом же деле эти пустые поля уже не есть NULL (отсутствие значения), теперь в них появились значения (пустые), с которыми уже можно работать (совершать операции).
Запомните пустое значение и отсутствие значение - это две большие разницы.
Соединение более двух таблиц
Можно последовательно соединять сколько угодно таблиц.
Предположим нужно решить следующую задачу. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Вывести все возможные варианты клиентов и их любимых ассоциаций и их любимых продуктов исходя из их любимого цвета.
Для этого последовательно соединим по цвету таблицу Клиенты с таблицей Ассоциации, а затем (получившийся результат) с таблицей Еда:
Читайте также: