Срочно надо!

lira89

Well-Known Member
12.03.2010
154
0
#1
Здравствуйте. Есть два вопроса:
1) Есть форма Справочника1. У него есть подчиненный Справочник2. Как можно с помощью кода на форму Справочника1 добавить форму списка со всеми реквизитами Справочника2 (возможно надо использовать ТаблицуЗначений, но на данный момент ничего не получилось)?
2) В Справочнике1 есть 3 реквизита: Фамилия, Имя, Отчество (тип Строка у всех). В Справочнике2 есть один реквизит, напр. Пользователь, у которого тип Справочник1. Как с помощью кода сделать, чтобы в реквизит Пользователь при выборе из Справочника1 нужной записи записывались все три реквизита Справочника1, т.е. отдельные реквизиты одного справочника отобразились в одном реквизите Справочника2?
Заранее всех благодарю. прошу извенить, если я вдруг задала глупые вопросы, просто я только начинаю и очень мало людей, у которых можно проконсультироваться, вот и пришлось обратиться к данному форуму ^_^
 

vbs

Well-Known Member
18.02.2007
1 708
3
#2
если я вдруг задала глупые вопросы, просто я только начинаю и очень мало людей
М-да ... вопросы-то глупыми не выглядят, но понять этот опус не так и просто. Например, если спр2 подчинен спр1, зачем в спр2 реквизит типа спр1? И какую нагрузку он несет ?
Платформу бы еще указать, да можно и конкретные справочники (если типовые, вряд ли это будет раскрытием тайны)
Как можно с помощью кода на форму Справочника1 добавить форму списка со всеми реквизитами Справочника2
Я так понимаю, нужно все подчиненные вывести на форму ?

В общем, стоит еще раз переработать вопрос и внятно изложить, думаю помощь не замедлит оказаться на пороге
 

evgenyatam

Well-Known Member
07.09.2007
175
0
#3
Есть форма Справочника1. У него есть подчиненный Справочник2. Как можно с помощью кода на форму Справочника1 добавить форму списка со всеми реквизитами Справочника2 (возможно надо использовать ТаблицуЗначений, но на данный момент ничего не получилось)?
если платформа - 8.х - то элементарно. если семерка - то через таблицу значений.
 

lira89

Well-Known Member
12.03.2010
154
0
#4
Платформу бы еще указать, да можно и конкретные справочники (если типовые, вряд ли это будет раскрытием тайны)
Платформа 7.7. Это не типовые справочники. Я делаю(конфигурирую) новую базу со своими справочниками.
если семерка - то через таблицу значений.
Я понимаю, что через ТЗ, но у меня не получается это сделать, поэтому я и прошу помочь мне с кодом)
Я так понимаю, нужно все подчиненные вывести на форму ?
Надо вывести только форму списка Справочника2(УчебныеЗаведения) со всеми реквизитами.
Прошу извенить за мои неточности и попробую более подробно сформулировать вопросы:
1) Есть форма Справочника1(Студенты). У него есть подчиненный Справочник2(УчебныеЗаведения). Как можно с помощью кода на форму элемента Справочника1(Студенты) добавить форму списка со всеми реквизитами Справочника2(УчебныеЗаведения) (возможно надо использовать ТаблицуЗначений, но на данный момент ничего не получилось)?
2) Прошу извенить за неточность во втором моем вопросе: здесь не Справочник2, а Справочник3(Обучение) (просто я забыла его переименовать) не является подчиненным Справочнику1(Студенты) . Реквизит формы элемента Справочника3(Обучение) "Пользователь" имеет тип Справочник.Справочник1(Студенты) и надо, чтобы при выборе(заполнении) в Справочнике3(Обучение) поля Пользователь данный реквизит заполнялся значениями реквизитов выбранной строки из Справочника1(Студенты) "Фамилией", "Именем" и "Отчеством" (что-то похожее на склеивание :) )
Если я вдруг опять плохо сформулировала вопросы и ли что-то неточно указала, то не поленюсь переписать еще разок :rolleyes:
 

TimeDontWait

Well-Known Member
04.01.2010
367
0
#5
(1)
Код:
Процедура добавить()
тз = создатьобъект("ТаблицаЗначений");
спр=создатьобъект("Справочник.УчебныеЗаведения");

спр.использоватьвладельца(текущийэлемент());
спр.выбратьэлементы();
Пока спр.получитьэлемент()=1 цикл
тз.новаястрока();
тз.колонка1=спр.ТвойРеквизит;
.....
КонецЦикла;
КонецПроцедуры

тз.новаяколонка("колонка1");
...
+ не забывай метод Получить() для периодических реквизитов

(2)
Если у реквизита тип Справочник.Справочник1, то при выборе он будет представлен или кодом или наименованием(соответственно, в виде кода или наименования представление справочника)
 

lira89

Well-Known Member
12.03.2010
154
0
#6
Код:
Функция ФормированиеНаименования()
Перем Результат;	
Стр = "";
СпрФЛ=СоздатьОбъект("Справочник.ФизическиеЛица"); 
СпрФЛ.ВыбратьЭлементы();																 //Здесь выводит только первую запись, а не выбранную. 
Если СпрФЛ.Выбран()= 1 Тогда															// Это недочет
Стр =СокрЛП(СпрФЛ.Фамилия)+" "+СокрЛП(СпрФЛ.Имя)+" "+СокрЛП(СпрФЛ.Отчество);
Иначе Стр=" ";
КонецЕсли;	 
Результат = Стр;
Возврат Результат;
КонецФункции
В этом коде недочет в том, что выбирается только первая строка из Справочник.ФизическиеЛица, а надо, чтобы выбиралась та, на которую нажали. В чем здесь ошибка и как ее исправить?
Еще раз напомню, здесь в один реквизит ФизЛицо заносится три реквизита из Справочник.ФизическиеЛица (данная операция находится в другой процедуре приЗакрытиии). На данный момент интересует только возможность выбора определенного элемента в функции ФормированиеНаименования()
 

vbs

Well-Known Member
18.02.2007
1 708
3
#7
СпрФЛ=СоздатьОбъект("Справочник.ФизическиеЛица");
СпрФЛ.ВыбратьЭлементы();
этого не надо, так ВСЕГДА будет обрабатываться ПЕРВЫЙ элемент справочника (ибо именно он и выбран данным кодом)

Можно, например, так :
Если ВвестиЗначение(СПРФЛ,"","Справочник.ФизическиеЛица")= 1 тогда

далее по тексту

или на форме поместить реквизит типа "Справочник.ФизическиеЛица" и этому реквизиту
через закладку "Дополнительно" сопоставить нужную процедуру, которая будет вызываться при выборе
 

lira89

Well-Known Member
12.03.2010
154
0
#8
Можно, например, так :
Если ВвестиЗначение(СПРФЛ,"","Справочник.ФизическиеЛица")= 1 тогда
Спасибо, я заменила на этот код, можно сказать что все работает, однако при выборе нужного элемента из справочника ФизическиеЛица открывается этот справочник еще раз(
Вот что получилось. Процедура ПриЗакрытии() вызывеаеться при выборе реквизита и написана во вкладке "Дполнительно"
Код:
Функция ФормированиеНаименования()
Перем Результат;	
Стр = "";
СпрФЛ=СоздатьОбъект("Справочник.ФизическиеЛица"); 
Если ВвестиЗначение(СпрФЛ,"","Справочник.ФизическиеЛица")= 1 тогда
Стр =СокрЛП(СпрФЛ.Фамилия)+" "+СокрЛП(СпрФЛ.Имя)+" "+СокрЛП(СпрФЛ.Отчество);
КонецЕсли;	 
Результат = Стр;
Возврат Результат;
КонецФункции 

Процедура ПриЗакрытии() 
ФизЛицо.Наименование = ФормированиеНаименования();
КонецПроцедуры
 

lira89

Well-Known Member
12.03.2010
154
0
#12
СПРФЛ получит выбранное значение заданного типа
Я убрала ту строку СпрФЛ=СоздатьОбъект("Справочник.ФизическиеЛица"); и у меня выбивает следующее:
Если ВвестиЗначение(СпрФЛ<<?>>,"","Справочник.ФизическиеЛица")= 1 тогда
{Справочник.Обучение.Форма.Модуль(6)}: Переменная не определена (СпрФЛ)
Стр =СокрЛП(СпрФЛ<<?>>.Фамилия)+" "+СокрЛП(СпрФЛ.Имя)+" "+СокрЛП(СпрФЛ.Отчество);
{Справочник.Обучение.Форма.Модуль(7)}: Переменная не определена (СпрФЛ)

И что же все таки надо сделать, чтобы все заработало??? :newconfus:
Может надо использовать процедуру ПриЗаписи()????? И там что сделать?

И еще хотела спросить, вот если не убирать ту строку в поле заполняются только 25 символов. Как можно увеличить их количество, например, чтобы у меня туда записывалось не больше 70 символов?
 

vbs

Well-Known Member
18.02.2007
1 708
3
#13
определить переменную :
Перем СПРФПЛ;

Добавлено:
вот если не убирать ту строку в поле заполняются только 25 символов
Это следствие наличия ненужной строки
СпрФЛ=СоздатьОбъект("Справочник.ФизическиеЛица");
Скорее всего, у этого справочника длина наименования 25 символов
 

lira89

Well-Known Member
12.03.2010
154
0
#14
Скорее всего, у этого справочника длина наименования 25 символов
А можно это как-то обыграть, ну с помощью кода поставить не 25, а 75 символов? Если можно, то как это сделать в вышеуказанном коде?
 

vbs

Well-Known Member
18.02.2007
1 708
3
#15
СпрФЛ=СоздатьОбъект("Справочник.ФизическиеЛица");
Да сколько ж повторять - убери эту строку из кода. :*цензура*you:
Переменная СПРФЛ будет ЭЛЕМЕНТОМ справочника "ФизическиеЛица", а Стр - строкой любой длины
Вот так оставь :
Функция ФормированиеНаименования()
Перем СПРФЛ;
Стр = "";
Если ВвестиЗначение(СпрФЛ,"","Справочник.ФизическиеЛица")= 1 тогда
Стр =СокрЛП(СпрФЛ.Фамилия)+" "+СокрЛП(СпрФЛ.Имя)+" "+СокрЛП(СпрФЛ.Отчество);
КонецЕсли;
Возврат Стр
КонецФункции
Процедура ПриЗакрытии()
ФизЛицо.Наименование = ФормированиеНаименования();
// а вот этот реквизит определи в конфигураторе как Строка 75 знаков
КонецПроцедуры