|   |   | 
| 
 | v7: автоматический вывод на форму реквизита справочника | ☑ | ||
|---|---|---|---|---|
| 0
    
        Frostier 14.11.19✎ 19:36 | 
        Товарищи, прошу подсказать: 1с 7.7. есть справочник Исполнители, в котором есть наименование исполнителя (фирма) и его реквизиты (Директор, адрес, банк и тп). Нужно, чтобы после выбора на форме названия исполнителя в следующем поле ввода автоматически  появлялась бы фамилия директора. Спасибо     | |||
| 1
    
        ДенисЧ 14.11.19✎ 19:37 | 
        Ну так лови изменение исполнителя, определяй директора и записывай его в реквизит...     | |||
| 2
    
        Frostier 14.11.19✎ 19:47 | 
        а как определить директора и записать его в реквизит?     | |||
| 3
    
        Frostier 14.11.19✎ 19:58 | 
        (1) а как определить директора и записать его в реквизит?     | |||
| 4
    
        MWWRuza гуру 14.11.19✎ 20:02 | 
        (2)как определить директора
 Ну, наверное так, если я правильно понял вопрос: Исполнитель[или как там у Вас реквизит называется?].Директор, или, если реквизит периодический, то Исполнитель.Директор.Получить([нужная Вам дата]). А записать - ВашРеквизит = То, что получили. | |||
| 5
    
        MWWRuza гуру 14.11.19✎ 20:08 | 
        +(4)То, что в "квадратных скобках", это я так, для наглядности. Естественно, никаких квадратных скобок в коде не нужно :-)     | |||
| 6
    
        Frostier 14.11.19✎ 20:29 | 
        (5) Дружище, есть справочник "Исполнители". В этом справочнике есть реквизит "Директор". 
 В форме отчета есть поле ввода Исполнитель с типом Справочник.Исполнители. Следующее поле ввода - Директор. Я в поле ввода Исполнитель выбираю этого исполнителя и хочу, чтобы в поле Директор автоматически появлялась бы фамилия директора . Что мне нужно сделать? | |||
| 7
    
        andrewalexk 14.11.19✎ 20:31 | 
        (6) :) ох уж это поколение снеговичков...     | |||
| 8
    
        Злопчинский 14.11.19✎ 20:32 | 
        (6) каким образом у тебя Директор связан с Исполнителями?     | |||
| 9
    
        Злопчинский 14.11.19✎ 20:35 | 
        (6) кладешь на форму реквизит исполнитель (тип справочник)
 кладешь на форму поле ввода (ты сам так определил выше) тип строка . в свойтсва поля Исполнитель на закладке Дополнительно пишешь Имя процедуры. в коде пишешь эту процедуру, ей доступны реквизиты формы. уже имеешь заполненного Исполнителя. Через точки вытягиваешь Директора, присваиваешь в поле ввода на форму | |||
| 10
    
        Злопчинский 14.11.19✎ 20:35 | 
        всё почти так как в 8-ке.
 только красивше. | |||
| 11
    
        Frostier 14.11.19✎ 20:46 | 
        (10) Процедура ПриВыбореИсполнителя()
 Справочник= СоздатьОбъект("Справочник.Исполнители"); Директор = Справочник.Директор; КонецПроцедуры вот так пишу, но поле директор остается пустым | |||
| 12
    
        HawkEye 14.11.19✎ 21:07 | 
        (11) директор = НазваниеТвоегоРеквизитаГдеФирма.НазваниеРеквизитаФирмыГдеДиректор;
 ну и проверки на всякие заполнено/не заполнено | |||
| 13
    
        Frostier 14.11.19✎ 21:21 | 
        (12) НазваниеТвоегоРеквизитаГдеФирма.НазваниеРеквизитаФирмыГдеДиректор;  ?????? можно понятнее?     | |||
| 14
    
        Cthulhu 14.11.19✎ 21:30 | 
        блин. телепаты на марше.
 1. Тебе не надо реквизит - тебе надо (только) видеть кто директор у того "исполнителя", которого ты выбрал... спорим - я угадал?.. 2. У того исполнителя, которого ты выбираешь - есть реквизит "Директор"?.. Если ответ "да" - тогда добавляешь ТЕКСТОВЫЙ РЕКВИЗИТ НА ФОРМУ, в его формуле тупо пишешь - ?(Исполнитель.Выбран()<>0,""+Исполнитель.Директор,"<Исполнитель не выбран>") (вышеназванный код верен, если реквизит, в который ты выбираешь исполнителя - называется "Исполнитель" (без кавычек, самособой) - если он называется по другому тоже не беда, чур ты сам догадаешься, как надо откорректировать формулу))) | |||
| 15
    
        HawkEye 14.11.19✎ 21:46 | 
        (13) как тебе будет понятнее?     | |||
| 16
    
        MWWRuza гуру 14.11.19✎ 21:50 | 
        Ды блииин... Вот, автор, специально для Вас, соорудил пример, скачивайте, смотрите: https://cloud.mail.ru/public/2pXu/28nHa38Yu     | |||
| 17
    
        MWWRuza гуру 14.11.19✎ 21:53 | 
        Тьфу-ты, не ту ссылку дал... Пардон. Вот правильная: https://cloud.mail.ru/public/3LMR/38dNRN5QN     | |||
| 18
    
        MWWRuza гуру 14.11.19✎ 21:55 | 
        +(17) Это архив конфигурации из двух объектов - Справочник и Отчет. Разверните куда-нибудь, подключите как новую базу, и смотрите...     | |||
| 19
    
        MWWRuza гуру 14.11.19✎ 22:00 | 
        (14)1. Тебе не надо реквизит
 Теоретически, как это чаще всего работает в большинстве случаев, да. Но, вдруг ему все-таки реквизит нужен, который будет автоматически заполняться, но, его он захочет "пешком" поменять? Тогда, мой вариант. | |||
| 20
    
        Frostier 14.11.19✎ 22:20 | 
        (19) Огромнейшее спасибо! Был бы ты в Минске - я б тебя пивом напоил! Буду разбираться сейчас, почему у меня все не как у людей. Еще раз благодарю. Всем спасибо!Крепко обнимаю!     | |||
| 21
    
        MWWRuza гуру 14.11.19✎ 23:25 | 
        (20) :-) Да, может когда-нибудь и окажусь в Минске... По молодости, приходилось бывать. Красивый город, у меня о нем самые благоприятные воспоминания.
 "Буду разбираться сейчас, почему у меня все не как у людей." Да потому, что восьмерка, особенно с ее УФ, отучает от простых и понятных решений. В 7.7 все просто, без заморочек. "Определить" - реквизит через ".", установить - через "=". Бывают, конечно заморочки, когда пытаются присваивать значения для недоступных для записи реквизитов, там приходится "огород городить", но, это уже "дебри". В данном случае, все элементарно просто. | |||
| 22
    
        Злопчинский 14.11.19✎ 23:58 | 
        (11) потому что не напрягается моз.
 (сейчас учу еще одного 77-ка) Рассмотрим твой код 1. Справочник = СоздатьОбъект("Справочник.Исполнители"); 2. Директор = Справочник.Директор; первым пунктом ты создал некий обьект "справочник" с которым ты собрался работать. если есть тяма-логика то ты должен понимать, что справочник как некая сущность - это неограниченная совокупность однородных записей. Имея НЕОГРАНИЧЕННУЮ СОВОКУПНОСТЬ ЗАПИСЕЙ ты или можешь что-то делать СРАЗУ ОС ВСЕЙ СОВОКУПНОСТЬЮ (что явно не подходит) или что-то делать с неким подмножеством записей (в пределе - подмножество состоит из одной записи). поэтому оператор по пункту 2 - бессмысленен, так как ты пытаешься вытащить директора ИЗ ЧЕГО? дальше логику кода и его оправданность для решения задачи - не рассматриваем, достаточно просто посмотреть на п.1 и 2. | |||
| 23
    
        Злопчинский 15.11.19✎ 00:00 | 
        хотя.. для 61 года - неплохо...     | |||
| 24
    
        MWWRuza гуру 15.11.19✎ 01:01 | 
        (11), 
 +(22) Процедура ПриВыбореИсполнителя() Справочник= СоздатьОбъект("Справочник.Исполнители"); // Теперь, нужно спозиционироваться на конкретном элементе справочника... Как? Проще всего методом НайтиЭлемент(Исп), в качестве "Исп" можно использовать выбираемый на форме элемент этого-же справочника. Будет работать... Директор = Справочник.Директор; КонецПроцедуры Но, только зачем все это??? В реквизите "Исп" уже ссылка на конкретный элемент справочника, далее, через точку сразу получаем его реквизит, и присваиваем его реквизиту формы отчета "Директор" через оператор присвоения - "=". Вот так: Процедура ВыбИсп() Директор = Исп.Директор; КонецПроцедуры И не нужно ничего создавать, искать и т.д... Одна строчка. А если нужно просто в текст на форму вывести, то функцией, вызываемой из поля "Формула" закладки "Дополнительно" этого текста: Функция ВывДиректора() Возврат СокрЛП(Исп.Директор); КонецФункции Заголовок у этого текстового поля нужно убрать. Ну, об этом в (14) написано. PS Только, как я уже писал выше - мы не знаем, что у Вас за конфа... Если какая-то типовая - то с вероятностью 99% так у Вас не заработает, так, как их "писатели" прекрасно понимают, что сегодня директор(главбух, кассир.....) один, а завтра он может поменяться. Поэтому эти реквизиты обычно периодические(некий примитивный аналог восьмерошного регистра сведений). В таком случае, эта конструкция будет выдавать ошибку. Тогда надо так: Директор = Исп.Директор.Получить(ДатаОтчета); где ДатаОтчета реквизит типа "Дата" выбираемый на форме. Ну, или, если надо всегда получать на текущую дату, то можно воспользоваться функцией ТекущаяДата() - всегда будет равна системной дате компа, или РабочаяДата() - тоже самое, но можно изменить принудительно через Сервис-Параметры-Рабочая дата. | |||
| 25
    
        Frostier 15.11.19✎ 06:56 | 
        (24) (23) Спасибо за помощь!     | |||
| 26
    
        Slypower 15.11.19✎ 09:01 | 
        (20) можешь тогда меня напоить)))))     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |