Срочно надо!

Тема в разделе "1C и всё что с ней связано", создана пользователем lira89, 12 мар 2010.

  1. lira89

    lira89 Well-Known Member

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    М-да ... вопросы-то глупыми не выглядят, но понять этот опус не так и просто. Например, если спр2 подчинен спр1, зачем в спр2 реквизит типа спр1? И какую нагрузку он несет ?
    Платформу бы еще указать, да можно и конкретные справочники (если типовые, вряд ли это будет раскрытием тайны)
    Я так понимаю, нужно все подчиненные вывести на форму ?

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

    evgenyatam Well-Known Member

    Регистрация:
    7 сен 2007
    Сообщения:
    175
    Симпатии:
    0
    если платформа - 8.х - то элементарно. если семерка - то через таблицу значений.
     
  4. lira89

    lira89 Well-Known Member

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

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    (1)
    Код (Text):
    Процедура добавить()
    тз = создатьобъект("ТаблицаЗначений");
    спр=создатьобъект("Справочник.УчебныеЗаведения");

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

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

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

    lira89 Well-Known Member

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    этого не надо, так ВСЕГДА будет обрабатываться ПЕРВЫЙ элемент справочника (ибо именно он и выбран данным кодом)

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

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

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

    lira89 Well-Known Member

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

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Это лишнее - можно убрать
     
  10. evgenyatam

    evgenyatam Well-Known Member

    Регистрация:
    7 сен 2007
    Сообщения:
    175
    Симпатии:
    0
    не совсем. СпрФЛ надо как то проинициализовать. иначе синтаксическая ошибка.
     
  11. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Да ладно :rolleyes:

    Прежде чем критиковать - проверь. СПРФЛ получит выбранное значение заданного типа
     
  12. lira89

    lira89 Well-Known Member

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

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

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    определить переменную :
    Перем СПРФПЛ;

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

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    А можно это как-то обыграть, ну с помощью кода поставить не 25, а 75 символов? Если можно, то как это сделать в вышеуказанном коде?
     
  15. vbs

    vbs Well-Known Member

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

Поделиться этой страницей