Срочно надо!

  • Автор темы Автор темы lira89
  • Дата начала Дата начала
L

lira89

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

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

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

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

(2)
Если у реквизита тип Справочник.Справочник1, то при выборе он будет представлен или кодом или наименованием(соответственно, в виде кода или наименования представление справочника)
 
Код:
Функция ФормированиеНаименования()
Перем Результат;	
Стр = "";
СпрФЛ=СоздатьОбъект("Справочник.ФизическиеЛица"); 
СпрФЛ.ВыбратьЭлементы();																 //Здесь выводит только первую запись, а не выбранную. 
Если СпрФЛ.Выбран()= 1 Тогда															// Это недочет
Стр =СокрЛП(СпрФЛ.Фамилия)+" "+СокрЛП(СпрФЛ.Имя)+" "+СокрЛП(СпрФЛ.Отчество);
Иначе Стр=" ";
КонецЕсли;	 
Результат = Стр;
Возврат Результат;
КонецФункции

В этом коде недочет в том, что выбирается только первая строка из Справочник.ФизическиеЛица, а надо, чтобы выбиралась та, на которую нажали. В чем здесь ошибка и как ее исправить?
Еще раз напомню, здесь в один реквизит ФизЛицо заносится три реквизита из Справочник.ФизическиеЛица (данная операция находится в другой процедуре приЗакрытиии). На данный момент интересует только возможность выбора определенного элемента в функции ФормированиеНаименования()
 
СпрФЛ=СоздатьОбъект("Справочник.ФизическиеЛица");
СпрФЛ.ВыбратьЭлементы();
этого не надо, так ВСЕГДА будет обрабатываться ПЕРВЫЙ элемент справочника (ибо именно он и выбран данным кодом)

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

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

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

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

Процедура ПриЗакрытии() 
ФизЛицо.Наименование = ФормированиеНаименования();
КонецПроцедуры
 
СпрФЛ=СоздатьОбъект("Справочник.ФизическиеЛица");



Это лишнее - можно убрать
не совсем. СпрФЛ надо как то проинициализовать. иначе синтаксическая ошибка.
 
не совсем. СпрФЛ надо как то проинициализовать. иначе синтаксическая ошибка
Да ладно :rolleyes:

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

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

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

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

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab