helpf.pro
Регистрация

v8.3: Можно ли в 1с сделать генеалогическое древо?

DemKir
04.11.2017 17:39Прочитано: 3147

Нужно хоть какое -то представление, как это сделать. И реально ли это вообще? 

Yandex
Возможно, вас также заинтересует
Реклама на портале
АВП
04.11.2017 17:54Ответ № 1

Это что-то новое в работе с 1С ))). А по теме:

Это же обычная иерархия (ну, по крайней мере на первый взгляд, может чего не понимаю)  Заполнить данные, вывести запросом с иерархией, построить дерево значений

АВП
04.11.2017 17:58Ответ № 2

На примере справочника Номенклатура: 

Вертикальные связи - группы, горизонтальные связи - категории

DemKir
05.11.2017 15:43Ответ № 3

А можно по-подробнее где находятся эти настройки?

АВП
05.11.2017 16:40Ответ № 4

О каких настройках речь? Генеалогическое древо это не профиль 1С (или я чего-то не знаю). Сделать что-то подобное ради интереса/прикола можно (пример - справочник Номенклатура как образец). Только зачем? И уж точно никаких штатных настроек под именно генеалогическое древо в 1С точно нет

DemKir
05.11.2017 16:56Ответ № 5

Это понятно, что 1с не предназначен для этого.Но есть задача что бы из справочника,брались данные персон и в отчете строилась модель на подобии генеалогического дерева. Такие условия ставят преподаватели. Как настроить отчет?

АВП
05.11.2017 17:37Ответ № 6

ааааааааа. Теперь понятно. Т.е. вам нужно просто построить дерево значений по Сотрудникам. ПРедполагаю (вам виднее из вашей базы) что это будет по подразделениям и/или подчиненности сотрудников

Структурно так: 

Создать на форме таблицу с типом Дерево Значений, колонки - по уровню вложенности

Запросом получить данные справочника сотрудники,

Заполнить дерево значений

Вам в помощь две статьи. Они для УФ, но несложно адаптировать к ОФ

https://1c-programmer-blog.ru/programmirovanie/rab...

https://1c-programmer-blog.ru/programmirovanie/pre...

DemKir
05.11.2017 17:50Ответ № 7

Нет необходим отчет именно в виде генеалогического дерева с мамами, папами, братьями и т.д. можно ли это реализовать?

АВП
05.11.2017 19:12Ответ № 8

а где данные брать про мам, пап и т.д.? Они есть в вашей базе? Т.е., в принципе возможно, но для этого надо все данные занести в программу.

Какая структура справочника Сотрудники у вас?

АВП
05.11.2017 19:36Ответ № 9

По идеи, надо создавать регистр сведений РодственникиСотрудника типа: Измерения Сотрудник, СтепеньРодства - создать перечисление, Ресурс ФИО Каким-то образом записывать в него данные (новые реквизиты в Справочнике Сотрудник, новое движение по регистру РодственникиСотрудника)

Запросом получать данные регистра, группировать по степени родства и строить дерево значений, раставив колонки дерева по ресурсу Степень родства

DemKir
05.11.2017 20:06Ответ № 10

Спасибо за совет

DemKir
06.11.2017 12:44Ответ № 11

Задача поставлена таким образом, что бы отчет выводился так. Реально что бы это выводилось таким образом? 

АВП
06.11.2017 22:48Ответ № 12

Все конечно можно.

Нет под рукой конфигурации на ОФ, поэтому пример на УФ. Но не так уж отличается сделаете по образу и на ОФ.

Создаете на форме дерево значений  

АВП
06.11.2017 22:53Ответ № 13

Черт, скрин не вставляется 

АВП
06.11.2017 22:56Ответ № 14

О! Получилось

АВП
06.11.2017 23:01Ответ № 15

Далее прописываете процедуру заполнения дерева. Я сделал по кнопке (у меня нет никаких данных для заполнения и для убыстрения процесса подсказки), вам же надо выводить реквизит Сотрудник (СправочникСсылка.Сотрудники) и в процедуре СотрудникПриИзменении

Код 1C v 8.3
 

&НаСервере
Процедура Команда1НаСервере()

тДерево = РеквизитФормыВЗначение("Дерево");
 
   нСтр1 = тДерево.Строки.Добавить();
   нСтр1.Колонка1 = "Сотрудник"; // здесь значение выбранного сотрудника
   нСтр1.Уровень = 1;
   
   нСтр2 = нСтр1.Строки.Добавить();
   нСтр2.Колонка1 = "Папа"; // Данные полученные запросом или неважно как по родственникам сотрудника из вашей базы
   нСтр2.Колонка2 = "Мама";
   нСтр2.Уровень = 2;
 
   нСтр3 = нСтр2.Строки.Добавить();
   нСтр3.Колонка1 = "Дед по папе";
   нСтр3.Колонка2 = "Бабка по папе";
   нСтр3.Колонка3 = "Дед по маме";
   нСтр3.Колонка4 = "Бабка по маме";
   нСтр3.Уровень = 3;
   ЗначениеВРеквизитФормы(тДерево, "Дерево"); // Вставить содержимое обработчика.
КонецПроцедуры


&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры


АВП
06.11.2017 23:04Ответ № 16

В результате отработки этой процедуры получаем дерево значений (пока на форме, просто показать, что полуается, потом с формы удалим. Вам не надо выводить дерево на форму) 

АВП
06.11.2017 23:09Ответ № 17

Далее делаете форму как на вашем скрине (у себя просто добавил декорация надпись )  Т.е. делаете красиво как у вас с линиями рамками и т.д. (если коненчо все это, децствительно, надо) 

АВП
06.11.2017 23:11Ответ № 18

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

Код 1C v 8.3
 &НаСервере
Процедура Команда1НаСервере()

тДерево = РеквизитФормыВЗначение("Дерево");
 
   нСтр1 = тДерево.Строки.Добавить();
   нСтр1.Колонка1 = "Сотрудник";
   нСтр1.Уровень = 1;
   
   нСтр2 = нСтр1.Строки.Добавить();
   нСтр2.Колонка1 = "Папа";
   нСтр2.Колонка2 = "Мама";
   нСтр2.Уровень = 2;
 
   нСтр3 = нСтр2.Строки.Добавить();
   нСтр3.Колонка1 = "Дед по папе";
   нСтр3.Колонка2 = "Бабка по папе";
   нСтр3.Колонка3 = "Дед по маме";
   нСтр3.Колонка4 = "Бабка по маме";
   нСтр3.Уровень = 3;


   ОбходДерева(тДерево); // Вызов процедуры обхода
   

ЗначениеВРеквизитФормы(тДерево, "Дерево"); // Вставить содержимое обработчика.
КонецПроцедуры

&НаСервере
Процедура ОбходДерева(Дерево)
Для каждого Стр Из Дерево.Строки Цикл
Если Стр.Уровень = 1 Тогда
Элементы.нСотрудник.Заголовок = Стр.Колонка1;
    ИначеЕсли Стр.Уровень = 2 Тогда
Элементы.Папа.Заголовок = Стр.Колонка1;
Элементы.Мама.Заголовок = Стр.Колонка2;
    ИначеЕсли Стр.Уровень = 3 Тогда
Элементы.ДедПапа.Заголовок = Стр.Колонка1;
Элементы.БабкаПапа.Заголовок = Стр.Колонка2;
    Элементы.ДедМама.Заголовок = Стр.Колонка3;
Элементы.БабкаМама.Заголовок = Стр.Колонка4;


КонецЕсли;


Если Стр.Строки.Количество()>0 Тогда
         ОбходДерева(Стр);
      КонецЕсли;
КонецЦикла;
КонецПроцедуры



АВП
06.11.2017 23:14Ответ № 19

В результате получим искомое 

АВП
06.11.2017 23:18Ответ № 20

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

АВП
06.11.2017 23:32Ответ № 21

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

DemKir
09.11.2017 10:08Ответ № 22

Выводит ошибку вот тут. 

DemKir
09.11.2017 10:09Ответ № 23

И должны быть две разные формы??

АВП
10.11.2017 15:34Ответ № 24

С первым вопросом, смотрю, справились - на втором скрине готовая таблица. По второму:

1.Форма должна быть одна. Таблицу вообще не выводите на форму. Она нужна только для сбора и хранения информации. На форме только нужные реквизиты как на посл скрине слева. Только, раз уж это УФ, делайте не поле ввода (оно тут вовсе ни к чему), а Декорация "Надпись" без Заголовка. Нет инфе по какому-то родственнику (дед, например) - на форме ничего, чисто. Есть инфа по родственнику, в нужную декорацию вставляете Заголовок, надпись появляется. И заголовок групп ДедыБабки и т.п. тоже необязателен

А вообще для УФ, мой код полностью соответствует, надо только красиво расставить декорации и оформить

Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.