Имя: Пароль:
1C
1C 7.7
v7: Форма списка справочника. Заполнение реквизита элемента неопределенного вида.
0 __Se24
 
16.02.17
15:03
Здравствуйте. Собственно сабж.
Есть справочник , у которого есть реквизит вида "неопределенный".
Форма списка с режимом редактирования в форме списка.
Как можно сделать заполнение данного реквизита ?
В режиме по умолчанию при двойном клике на реквизит ничего не происходит.

пробовал сделать так :


Процедура ПриНачалеРедактированияСтроки()
    врТекРекв=Форма.АктивныйЭлемент();
    //Сообщить(врТекРекв);
    Если врТекРекв<>"ОбъектДляОбмена" Тогда
        Возврат;
    КонецЕсли;
    
    СЗ1=СоздатьОбъект("СписокЗначений");
    СЗ1.ДобавитьЗначение("Справочник");
    СЗ1.ДобавитьЗначение("Документ");
    
    врПоз=0;
    врЗнач="";
    рв=СЗ1.ВыбратьЗначение(врЗнач,,врПоз,45,2);
    Если рв<>1 Тогда
        Возврат;
    КонецЕсли;
    
    ТекущийЭлемент().НазначитьТип("ОбъектДляОбмена",врЗнач);
    
КонецПроцедуры

Список открывается , но эффект нулевой.
1 lxs
 
16.02.17
15:27
(0) "реквизит вида "неопределенный"." - поясни
2 __Se24
 
16.02.17
15:28
(1) У справочника есть реквизит "ОбъектДляОбмена" , у которого тип не число , не строка , а "Неопределенный" ... самый первый в списке.
3 lxs
 
16.02.17
15:31
(2) У меня нет такого типа.. Но суть даже не в этом, какой смысл делать реквизит непонятного типа, если потом при редактировании ты хочешь этот тип ему назначить? Зачем этот изврат?
4 lxs
 
16.02.17
15:32
к (3) "этот тип ему назначить" - в смысле не непонятный тип, а какой-то конкретный.
5 __Se24
 
16.02.17
15:43
(3) Затем чтобы была возможность присваивать этому реквизиту ссылки на любой тип (Справочник , документ , счет ....)
Мне кажется , что это очевидно.
6 lxs
 
16.02.17
15:46
(5) А не судьба сразу указать составной тип и выбрать там СправочникСсылка, ДокументСсылка и т.п.? Что за тупоголовый подход?
7 silent person
 
16.02.17
15:46
(6) это 7.7 там нет составного типа
8 Злопчинский
 
16.02.17
15:47
ТекущийЭлемент().НазначитьТип("ОбъектДляОбмена",врЗнач);
убери первое до точки
9 __Se24
 
16.02.17
15:48
(6) затем что это 7.7 ... тут нет такого ... смотрите внимательнее , когда даете "хорошие" советы..
10 lxs
 
16.02.17
15:48
а бл.. сорян. не глянул, что это топорища.
11 Злопчинский
 
16.02.17
15:49
(8) не, соврал... ща проверю
12 __Se24
 
16.02.17
15:52
(8) так тож не работает ((
13 Злопчинский
 
16.02.17
15:56
Процедура ПриНачалеРедактированияСтроки()
    врТекРекв=Форма.ТекущаяКолонка(); // !!!!!
    //Сообщить(врТекРекв);
14 __Se24
 
16.02.17
16:00
(13) и что там ?
15 Злопчинский
 
16.02.17
16:01
там оно, как ты планировал
16 __Se24
 
16.02.17
16:05
(15) что именно ?
Я переменную "врТекРекв" использую для того , чтобы убедиться что клик происходит именно по нужному мне реквизиту (который мне нужно заполнить).
АктивныйЭлемент() мне дает тоже самое что и ТекущаяКолонка()
Проблема в другом ... даже если я типизирую реквизит (хотя , я даже не уверен что он типизируется ) не происходит открытия формы подбора.
17 Злопчинский
 
16.02.17
16:13
(16) а кто сказал что должна открываться форма подбора?
надо - открывай!
18 __Se24
 
16.02.17
16:21
(17) а как ?
Стандартный подбор не подходит , он требует указания Вида объекта.
19 Svetka
 
16.02.17
16:26
(0)Найди обработку REPLVAL.ERT+ к ней вторая RVDlg.ERT (как раз диалог)
Там по ходу то, что ты хочешь.
20 __Se24
 
16.02.17
16:32
(19) Спасибо , изучу !
21 Злопчинский
 
16.02.17
17:06
(18) ну ты ж вид объекта знаешь что подбирать хочешь? ни и укажешь его в ОткрытьПодбор или проще

Спр = СоздатьОбъект("Справочник.Какойто");
Спр.Выбрать(,,,)
Мойэлемент.Чеготоотам = Спр.ТекущийЭлемент();
22 __Se24
 
16.02.17
17:16
(19) Не , там похоже , но не совсем то что нужно.

(21) Нет, не знаю даже тип... предполагается , что пользователь должен тыкнуть туда и красивенько выбрать
сначала тип (документ , спавочник ...) , потом вид , потом сам объект
23 vcv
 
16.02.17
17:40
Может быть задачу переформулировать более правильно?

>> У справочника есть реквизит "ОбъектДляОбмена"

Мне кажется, если справочник служит для регистрации неких объектов для обмена, функционал удобней будет не от справочника (добавляем запись, указываем произвольный объект), а от объекта. То есть видим, например, документ в журнале, жмём некую кнопку и документ зарегистрирован для обмена.
И пользователям удобней и понятней, и проблем с интерфейсом выбора произвольного объекта не будет.
24 Pit0n_08
 
16.02.17
17:49
(23) только куда эту кнопку добавить - во все формы?
25 __Se24
 
16.02.17
18:00
(23) головняк ... шуршать по всем объектам ИБ ?
Гораздо проще одним запросом собрать данные по одному справочнику, без головняка и изобретения велосипедов.
Собственно , тот вопрос что я описал в (1) это просто красивая надстройка интерфейсная..  данные заполняются без проблем кодом из процедуры "ФормаПослеЗаписи()".
Я прекрасно понимаю , что есть много способов снять шкуру с собаки , в том числе написать обработку , которая через ТЗ с эпим прекрасно справляется ... но хотелось бы понять , как это сделать именно этим способом "штатно"
26 Хряк
 
16.02.17
18:50
см. назначитьвид
27 Злопчинский
 
16.02.17
22:30
(25) хрен его знает какую задачу вы хотите решить. из сабжа это непонятно.

(22) по (21) > Нет, не знаю даже тип... предполагается , что пользователь должен тыкнуть туда и красивенько выбрать
сначала тип (документ , спавочник ...) , потом вид , потом сам объект

- не вижу здесь никаких проблем. тыкнул - вывалился список "справочник, документ", выбрал справочник, вывалился перечень видов справочников, выбрал нужный вид, вывалился перечень объектов - выбрал обект. выбранный обьект ТОЛЬКО СЕЙЧАС запихнул в реквизит с неопределенным типов/видом - в чем здесь проблемы?
28 vcv
 
17.02.17
08:06
(24) Добавить можно в какую-нибудь кнопку типа "Действия", которая есть во многих типовых от 1С и дёргает процедуру из глобальника.
(27) Проблем, конечно в "тыкнул - вывалился - выбрал - вывалился - выбрал - вывалился - выбрал" нет. Но, понимаешь ли, по опыту работы с UChoice с подобным интерфейсом, после пятого раза в течении часа очень хочется пулемёт и побольше патронов.
29 vcv
 
17.02.17
08:09
(24) (25) (27) "Пишите код, исходя из того, что все программисты, которые будут сопровождать вашу программу, — склонные к насилию психопаты, знающие, где вы живёте" -- Мартин Голдинг
Аналогично можно сказать про "пользователей, которые будут использовать вашу программу"
30 __Se24
 
17.02.17
09:06
Я конечно понимаю что программисты зачастую пляшут от конкретной задачи, и из 10 возможных решений выберут то , которое им удобнее (читай как тот метод , которым они пользовались до этого и знают ).
Мне бы хотелось разобраться именно в этом способе решения данной задачи. А именно , как из формы списка справочника (способ редактирования справочника "в списке" ) заполнить нетипизированный реквизит.
Прикручивать списки я и так умею ...
Либо понять что этот вариант невозможен.
Вдаваться в дискуссии на тему почему я не хочу воспользоваться остальными способами нет желания. Спасибо.
31 Злопчинский
 
17.02.17
09:14
(28) понимаю
Выше я написал что хз какую задачу решает автор. Его вопрос - чисто инструментальный. Такой и ответ.
Если бы спросил КАК ЗАДАЧУ решить - получил бы другой ответ
32 vcv
 
17.02.17
09:30
(30) Мсье извращенец. Нет, что бы решать задачу, поставленную пользователями/потребностями, он ставит себе некий аппендикс от задачи и пытается его удалить ректально.

Ну ладно, хрен с вами. Проблема в том, что пока паш реквизит неопределенного типа, 1С никак не позволяет начать его редактирование, потому как не знает даже как. Что там должно быть? Число? Строка? Дата? Справочник?

Поэтому первая задача, назначить реквизиту тип, который бы выбирался.
Процедура ПриНачалеРедактированияСтроки()
    Если ПустоеЗначение(ОбъектДляОбмена) = 1 Тогда
        Если ТипЗначенияСтр(ОбъектДляОбмена) = "" Тогда
            НазначитьТип("ОбъектДляОбмена","Справочник");
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры // ПриНачалеРедактированияСтроки

А когда у реквизита есть тип, у него появляются "три точки", можно поймать начало выбора и уточнить тип и вид.

Процедура ПриНачалеВыбораЗначения(Идентификатор, ФСО)
    Перем Выбор;
    Если Идентификатор = "ОбъектДляОбмена" Тогда
        Меню = СоздатьОбъект("СписокЗначений");
        Меню.ДобавитьЗначение("Документ");
        Меню.ДобавитьЗначение("Справочник");
        Если Меню.ВыбратьЗначение(Выбор,"Тип значения") = 0 Тогда
            ФСО = 0;
            Возврат;
        КонецЕсли;
        НазначитьТип("ОбъектДляОбмена",Выбор);
    КонецЕсли;
КонецПроцедуры // ПриНачалеВыбораЗначения

Где-то так должно работать, как вам надо. Ну, если я правильно понял, как надо.
33 __Se24
 
17.02.17
11:15
(32) Спасибо !! Да , это именно то что было нужно.
Сходу не заработало , но логику я уловил,  буду дорабатывать напильником )
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.