1с подчиненные элементы добавить
Для получения подчиненных элементов иерархического справочника в языке запросов предусмотрена конструкция В ИЕРАРХИИ :
В данном примере будут получены все записи справочника Номенклатура , находящиеся в группе &Группа , включая ее саму, ее подчиненные группы и элементы, принадлежащие подчиненным группам.
Если же нас интересуют только элементы и группы, находящиеся непосредственно в заданной группе, то такие элементы мы можем получить, установив условие на поле Родитель :
Такой запрос выберет группы и элементы, находящиеся в подчинении группы со ссылкой &Группа .
Проверка наличия подчиненных элементов у элемента справочника
Для проверки наличия подчиненных записей элемента справочника можно пользоваться запросом, аналогичным представленному:
В данном примере ссылка элемента, для которого необходимо проверить наличие дочерних элементов, записывается в параметр запроса &Родитель . После выполнения такого запроса необходимо проверить результат на пустоту. Если результат не пустой, то подчиненные записи есть. Иначе — нет.
Получение всех родителей элемента
В языке запросов не предусмотрено специальных средств для получения всех родителей элемента. Для выполнения задачи можно воспользоваться иерархическими итогами, однако получение иерархических итогов оптимизировано для построения итогов большого количества записей, и не вполне эффективно для получения родителей одного элемента. Для более эффективного получения всех родительских записей элемента, рекомендуется перебирать в цикле его родителей небольшими порциями.
Если число уровней в справочнике ограничено и невелико, то возможно получение всех родителей одним запросом без цикла.
Вывод иерархического справочника в отчет
Для вывода иерархического справочника в отчет с сохранением иерархии необходимо пользоваться запросом аналогичным следующему:
Данный запрос выбирает все записи из справочника и производит упорядочивание по иерархии. Результат будет упорядочен по наименованию, с учетом иерархии.
Для того, чтобы группы справочника размещались выше элементов необходимо в данном запросе заменить предложение УПОРЯДОЧИТЬ ПО на следующее:
Результат по-прежнему будет упорядочен по иерархии, однако группы будут располагаться выше элементов.
Возможна также замена предложения УПОРЯДОЧИТЬ ПО на предложение АВТОУПОРЯДОЧИВАНИЕ . В этом случае результат будет упорядочен в соответствии с настройками справочника, т.е. если в справочнике указано, что группы должны располагаться выше элементов, то они будут расположены выше.
Получить иерархическую структуру справочника также возможно и при помощи итогов:
Получение итогов по иерархии
Для получения итогов по иерархии в запросе необходимо в предложении ИТОГИ ПО указать ключевое слово ИЕРАРХИЯ после указания поля, по которому будет рассчитываться итоги. Пример отчета «Обороты номенклатуры» с получением итогов по иерархии:
В результате данного запроса будут рассчитаны итоги не только для каждой номенклатуры, но и для групп, к которым принадлежит та или иная номенклатура.
В случае, когда не нужны итоги по элементам, а нужны итоги только по группам, необходимо использовать в итогах конструкцию ТОЛЬКО ИЕРАРХИЯ :
В результате данного запроса будут итоговые записи только для групп номенклатуры.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Обработка тестировалась на релизе платформы 8.3.13.1513.
Специальные предложения
полезные данные! удобно сразу все собрано в одном месте
для добавление реквизитов с помощью расширений очень удобно
Смысл добавлять реквизиты и элементы программно, если обработчики для них нужно прописывать в коде формы.
Было бы больше пользы - если бы показали "типовые приемы" обработки событий программно добавленных элементов.
(1) Смысл в том что элементы формы могут "слететь" при обновлении конфигурации. А если их задавать программно, то объединение кода намного проще, особенно если пользоваться KDiff например.
Я давно перешел на такой способ добавления реквизитов на форму (в шапки документа, в табличную часть). Правда основной кусок кода выносится в Общие модули.
(2)Согласен. Пришел к этому опытным путем.
Тоже элементы добавляю программно. При сравнении-объединении сразу видны изменения. И не нужно потом еще форму руками менять.
(1) В примере добавления поля ввода, показано добавление обработчика
/Можно добавить обработчик события
//См. синтакс-помощник чтобы узнать список событий
// Интерфейс (управляемый) -> Поле формы -> ПолеФормы -> События
// а так же остальные варианты расширения поля формы в зависимости от вида кнопки
// Интерфейс (управляемый) -> Поле формы -> Расширение поля ввода -> События
// и прочее
ПолеВвода.УстановитьДействие(
"ПриИзменении", //Имя события
"ПриИзмененииКомментария"); //Имя процедуры обработчика
(3) Как добавить обработчик не расположенный в форме? В тех случаях когда я из внешней (по отношению к форме) части программы хочу добавить кнопку или поле ввода. Насколько я знаю (могу и ошибаться) назначить обработчик можно только расположенный в модуле формы. А значит надо исполнять "танцы с бубном" по вызову своих обработчиков (расположенных например в общем модуле) из обработчиков расположенных на форме. И тут получается несостыковочка. Вроде бы форму можно полностью построить программно. Но не полностью . т.к. обработчики должны быть в форме заранее.
Если есть какой-то способ обойти это "ограничение" - буду рад если поделитесь со мной.
(1) в современных конфигурациях, про обработчики уже позаботились. В формах есть подключаемая процедурка
Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
которая ведет в общий модуль СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду
Там в свою очередь, есть вызов ОбщегоМодуля МодификацияКонфигурацииКлиентПереопределяемый.ВыполнитьПереопределяемуюКоманду(Форма, Команда, ДополнительныеПараметры);
где по имени команды и формы, можно определить свою, и напилить свои обработчики.
В итоге, получим абсолютно неизмененный объект, на поддержке. но в нем, программно добавленная кнопка и свой обработчик событий.
единственное, что у некоторых элементов параметров, предполагается много. и они как бы будут недоступны..но тут приходится или маневры искать, или немного усовершенствовать.. но в простых случаях, вполне себе все решаемо
(4) Так-то оно так. Если дело касается добавления какой-нибудь "некузявой" кнопочки, или чего-то незначительно-дополняющего функциональность формы или объекта который форма представляет.
Но если копнуть глубже, и рассматривать некую систему в которой есть оснастка, в которую разные модули (подсистемы) добавляют нужные им элементы управления (списки, диаграммы, таблицы со связью один ко многим и т.п.). Да еще и замахнуться на механику, когда пользователь сам решает какие модули и подсистемы ему нужны. Другими словами, разработать решение в стиле "плагинов" как во всяких там WinAmp-ах и прочих модных штуках. И тут получается нужно в форме-оснастке предусмотреть все возможные типы событий (который на ИТС кстати рекомендуют обрамлять префиксом "Подключаемый_"), а потом еще и у этих событий предусмотреть модель поведения когда нужны: а) только клиентские вызовы, б) клиентские и внеконтекстные сервеные, в) клиентские и контекстные серверные вызовы.
Поэтому да, многое можно, но навык "танец с бубном" должен быть 99lvl
И речь в данном случае не о "сферическом слоне в вакууме", а о например Рабочем Месте, которое настраивается в зависимости от роли пользователя, подразделении пользователя, полномочиям которые ему делегировали временно или постоянно и т.п.
В целом, я не пытаюсь очернить, или критиковать подходы. Просто думаю разумно было бы - побольше раскрыть нюансы именно обработки событий программно-добавленных элементов. Описать на какие подводные грабли можно наступить, как обойти.
(1) https://infostart.ru/public/1106063/ как раз заложена логика обработки событий от элементов формы. Тут нужно поиграться с именами :) и Выполнить("Кусок кода") и будет магия практически программного создания всего :)) тоже столкнулся с проблемой сначала как блин подготовить неизвестное количество событий-процедур для команд. но оказалось нужна одна, но хитровыкорчеванная, грабли конечно, но вариант имеет право на жизнь.
(1) Смысл есть. К примеру, сегодня выполнял такую задачу. Динамическое количество кнопок и у каждой кнопки была своя задача. Код для всех задач был одинаковый, но уникальность кода для каждой кнопки выполнил алгоритмически
Если УФ и платформа больше 8.3.10, то имхо, проще заюзать расширение. В нем нагляднее и конфа не снимается с поддержки.
(5) Не соглашусь, таким образом невозможно понять, какие реквизиты были добавлены в расширении, а какие уже были в исходной конфигурации.
Когда придет время обновлять расширение, эти вопросы обязательно могут возникнуть.
С расширением порядок проблем при обновлении намного меньше. С 8.3.6 их начал юзать, и функционал расширений только улучшается.
Ранее да, на ОФ именно программным кодом пользовался, и вот ни разу не визуально, и весьма проблематично. Пользовался обработкой с инфостарта по декомпиляции форм. Т.е. сперва визуально делаешь, потом в програмный код. Так вот телодвижений и в УФ осталось много. С расширением все намного проще. Мое имхо, конечно же.
Ошибочка. Добавлять элементы на форму надо с проверкой, например,
Если Элементы.Найти("Владелец") = Неопределено Тогда
ПолеВвода = Элементы.Добавить("Владелец", Тип("ПолеФормы"), ЭтаФорма);
ПолеВвода.Заголовок = "Владелец";
ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
ПолеВвода.ПутьКДанным = "Объект.Владелец";
КонецЕсли;
Они ведь иногда появляются, когда 1с-овцы трезвеют.
К тому же, если на форме много изменений, процесс перехода на расширение может занять большое время, и элемент всё ещё может присутствовать в конфигурации на форме, поэтому надо включать защиту от дурака уже заранее.
(11)Описанная проблема обычно решается установкой префикса в имени добавляемого реквизита.
Максимум, 1с-овцы могут добавить аналогичное по содержанию поле. И их будет 2 на форме.
Как добавить реквизиты/кнопки в нужное место(Форма, Группа, Командная панель) например в начало списка, по умолчанию элементы добавляются в конец
(12) Вставить вместо добавить. Пример для кнопки контекстного меню. Нам надо вставить ее в начало списка меню:
Как вариант, сначала создать список значений как реквизит формы, затем добавить поля формы и связать их с реквизитом формы, указав в пути к данным путь "ИмяРеквизитаСпискаЗначений[ИндексСтроки].Пометка" и "ИмяРеквизитаСпискаЗначений[ИндексСтроки].Представление"
Любое изменение флажка будет так же влиять и на список значений.
полезные данные! удобно сразу все собрано в одном месте
для добавление реквизитов с помощью расширений очень удобно
(33)Предлагаю проверить такой вариант, результат удивит:
Коллеги, приветствую!
Сейчас разбираюсь с подобной задачей. Но мне нужно кнопки командной панели создавать при наступлении события, а не только "однажды" "присозданиинасервере". Есть у кого-нибудь готовые алгоритмы?
Очень часто в 1С 8.3. в справочнике необходимо настроить определенный порядок подчинения элементов. Для реализации подобных задач из простого справочника необходимо сделать иерархический справочник 1С.
В платформе 1С существует два вида иерархии – иерархия групп и элементов и иерархия элементов.
Иерархия групп и элементов
Для того, чтобы справочник имел иерархию групп и элементов, необходимо в редакторе справочника на закладке Иерархия установить флаг Иерархический справочник, а свойству Вид иерархии установить значение Иерархия групп и элементов.
Тогда у справочника можно будет создавать группы, и размещать элементы в группах.
При иерархии групп или элементов существуют группы (каталоги), в которые входят или другие группы, или элементы. И группы, и элементы являются экземплярами объекта справочника.
Группа это тоже экземпляр объекта справочника, по которому не ведется какой-либо учёт (как правило), и который может быть родителем другого экземпляра, т.е. в группу могут входить другие группы и элементы справочников.
Иерархия элементов
Иерархия элементов настраивается похожим способом: в редакторе справочника на закладке Иерархия устанавливается флаг Иерархический справочник, но свойству Вид иерархии следует установить значение Иерархия элементов.
После этого, каждый элемент может быть родителем другого элемента.
Родитель иерархического справочника 1С
У каждого элемента иерархического справочника должен быть родитель. В случае иерархии групп и элементов родитель это группа иерархического справочника, в случае иерархии элементов, родитель это элемент.
Родитель это стандартный реквизит справочника. Если иерархия отключена, то этот стандартный реквизит не доступен. Как у этого справочника Сотрудники.
А если иерархия включена, то этот реквизит доступен. Как у справочника Контрагенты.
Если форма элемента справочника автоматически генерируется платформой (т.е. она не создана), то этот реквизит отображается на управляемой форме. И, в случае иерархии групп и элементов в нем указана группа, в которую входит этот элемент.
Если группа не указана, то значит элемент верхнего уровня.
Также, родитель имеется у элементов справочника с иерархией элементов.
Создать элемент иерархического справочника 1С
Для того, чтобы создать группу справочника (в случае, иерархии групп и элементов), необходимо воспользоваться методом менеджера справочника СоздатьГруппу(). А для создания элемента следует воспользоваться методом СоздатьЭлемент(). Если мы хотим, чтобы вновь созданный элемент входил в какую-то группу, то следует в свойство Родитель этого элемента записать ссылку на нужную группу.
В коде ниже, создаем группу, а потом создаем элемент, который входит в эту группу:
Заметьте, группа в коде выше, группа верхнего уровня. У неё при создании не был задан Родитель.
В случае иерархии элементов всегда нужно создавать элементы, но также следует в свойстве Родитель созданного элемента указать ссылку на другой элемент, которому будет подчинен созданный.
Изменить элемент иерархического справочника 1С
Если мы хотим поменять подчиненность элемента иерархического справочника, или вообще убрать её, т.е. сделать из элемента элемент верхнего уровня, то следует работать со стандартным реквизитом Родитель. В случае, изменения подчиненности, этому реквизиту нужно присвоить ссылку на другую группу.
Если же мы хотим сделать элемент верхнего уровня, то этому реквизиту нужно присвоить пустую ссылку.
Поиск в иерархическом справочнике 1С
В платформе 1С имеется возможность искать в определенной группе иерархического справочника, для этого следует в методах НайтиПоНаименованию, НайтиПоКоду и НайтиПоРеквизиту заполнять параметр Родитель.
Например, поиск в определенной группе будет осуществляться так:
Где, третий параметр Группа — это ссылка на группу, внутри которой ищется элемент по указанному названию.
Выборка иерархического справочника 1С
В платформе 1С 8.3. существует возможность выбрать элементы иерархического справочника, которые входят в ту или иную группу, для этого следует воспользоваться методом Выбрать с заполненным параметром Родитель. В этом случае будут выбраны группы и элементы, которых входят непосредственно в указанную группу, но не будут выбраны группы элементы, которые входят в подчиненные группы. Чтобы выбрать элемент и группы, входящие в какую-то группу, следует воспользоваться методом ВыбратьИерархически.
Например, при таком коде:
Будут выбраны элементы, входящие в указанную группу.
А в этом случае:
Будут выбраны элементы, которые входят и в указанную группу, и в подчиненные ей группы.
И Выбрать, и ВыбратьИерархически отбирают и группы, и элементы справочников. Поэтому, в коде выше было использовано свойство ссылки справочника ЭтоГруппа. Это свойство имеет значение Истина, если ссылка является группой справочника.
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
Курс лекций
Форум
Справочник – это агрегатный тип данных, средство для работы со списками однородных элементов данных. Название и структура каждого конкретного справочника определяются при его создании в конфигураторе. У любого справочника существуют два реквизита, которые создаются автоматически – «Код» и «Наименование». Реквизиты справочников могут быть периодическими, т.е. иметь значения, связанные с датой. При изменении значения периодического реквизита старое значение сохраняется, при этом новое значение начинает действовать с указанной даты, старое – до указанной даты.
Свойства справочника редактируются в окне редактирования «Справочник». Для визуального представления справочника существуют «Форма элемента», «Форма группы» и «Формы списка» (их может быть несколько).
Если один справочник подчинен другому (задается в поле «подчинен» окна редактирования), то каждый элемент подчиненного справочника будет соответствовать элементу справочника-владельца. Для этого есть специальный реквизит «Владелец», по которому можно найти элемент справочника-владельца.
Справочник может иметь иерархическую структуру. Число уровней иерархии определяется в поле «Кол-во уровней» в окне редактирования. Для задания иерархии используется реквизит «Родитель», который и определяет, к какой группе относится элемент. Наиболее важные функции:
- ЭтоГруппа() – возвращает 1, если текущий элемент справочника – группа;
- ПринадлежитГруппе() – возвращает 1, если текущий элемент принадлежит группе ;
- Уровень() – возвращает номер уровня текущего элемента.
Глубина вложенности групп настраивается в конфигураторе и не может превышать 10 уровней.
Обычно для обработки элементов справочника используется следующая последовательность команд:
Есть несколько способов поиска элемента справочника:
В последнем случае необходимо, чтобы элементы справочника были отсортированы по этому реквизиту – в свойстве реквизита в закладке «Дополнительно» нужно поставить флажок «Сортировка».
Пример. Следующая функция выполняет поиск элемента справочника по наименованию. Если элемент с таким наименованием не найден, то создается новый элемент. Параметр «Справ» – строка с идентификатором справочника, «Наим» – наименование по которому производится поиск элемента. Функция возвращает ссылку на найденный или созданный элемент.
Для удаления текущего элемента справочника используется функция Удалить(), где может иметь значение 0 – пометка на удаление, 1 – непосредственное удаление (используется по умолчанию). Вообще непосредственное удаление не рекомендуется, из-за возможного нарушения ссылочной целостности базы данных.
Чтобы удалить помеченные на удаление объекты через систему 1С:Предприятие 7.7, нужно зайти в программу в монопольном режиме и в меню «Операции» выбрать пункт «Удаление помеченных объектов…».
Документы в системе 1С: Предприятие используются для ввода, просмотра и корректировки информации о совершаемых хозяйственных операциях. У любого документа есть три обязательных реквизита «ДатаДок», «ВремяДок», «НомерДок». Дата и время, – наиболее важные характеристики документов, так как позволяют устанавливать строгую временную последовательность совершения операций. Форма документа редактируется при нажатии кнопки «Форма».
Реквизиты шапки документа задаются в списке «Реквизиты шапки». Реквизиты табличной части задаются в списке «Реквизиты табличной части».
Для того чтобы документ формировал проводки, необходимо
- создать хотя бы один план счетов.
- поставить флажок «Разрешить проведение документа».
- поставить флажок «Бухгалтерский учет».
Формирование проводок происходит в «Модуле документа» в предопределенной процедуре «Обработка проведения».
Обычно для обработки документов используется следующая последовательность команд:
Для ввода документа используется функция «Новый()», далее заполняются реквизиты шапки документа. Для ввода новой строки документа используется функция «НоваяСтрока()» и заполняются реквизиты табличной части документа.
Для просмотра списка документов используется «Журналы документов». Создание журнала производится в конфигураторе. В диалоговой форме задаются графы – реквизиты документов, входящих в журнал. Реквизиты табличной части можно добавить в журнал только в том случае, если в свойствах реквизита в закладке «Дополнительно» стоит флажок «Итог по колонке».
В соответствии с заданием №1 из приложения 3 создать справочники и документы в новой информационной базе.
Как открыть форму списка подчиненного справочника с отбором по владельцу?
В 1С Предприятии 8.2 реализована механика перехода к подчиненной информации. Врезультате платформа автоматически предоставляет команду перехода к списку подчиненного справочника и вставляет ее в форму справочника-владельца в панель навигации в группу Перейти .
Однако, в форму списка платформа такую команду не вставляет, но это может сделать сам разработчик - Команды - Глобальные команды- Параметризуемые - Элементы - Список - Имя подчиненного справочника - Элементы.Список.ТекущиеДанные.Ссылка .
Если нужно, можно все то же самое сделать программным образом. Для этого следует открыть форму подчиненного справочника с отбором по владельцу. Сначала задается параметр формы Отбор , и форма списка открывается с этим параметром. В процессе открытия формы будет установлен отбор по указанному владельцу.
При этом, если вы в помещаете команду перехода к подчиненному списку в форму элемента, то значение владельца - это Объект.Ссылка , а если в форму списка, то значение владельца - это Элементы.Список.ТекущаяСтрока .
Например, процедура в модуле формы элемента справочника Контрагенты , которая открывает форму списка подчиненного справочника ДоговорыВзаиморасчетов , может выглядеть следующим образом:
ЗначениеОтбора = Новый Структура("Владелец", Объект.Ссылка);
ПараметрыФормы = Новый Структура("Отбор", ЗначениеОтбора);
А если нужно открыть форму списка справочника подчиненного текущему элементу списка справочника владельца, обработчик нажатия соответствующей кнопки будет выглядеть следующим образом:
ЗначениеОтбора = Новый Структура("Владелец", Элементы.Список.ТекущаяСтрока);
ПараметрыФормы = Новый Структура("Отбор", ЗначениеОтбора);
Демонстрационные примеры с автоматически и программно сформированными командами перехода к списку подчиненного справочника находятся в каталоге 1CITS/EXE/FAQ/Catalog. Примеры выполнены на версии платформы 8.2.9.356.
Читайте также: