|
v7: НазначитьТип для реквизита в таб. части документа | ☑ | ||
---|---|---|---|---|
0
Zhuravlik
22.04.12
✎
19:26
|
Здравствуйте. Пишу документ "ВводОстатков", - в виде тренировки. На форме - выпадающий список, с значениями - идентификаторами всех регистров в системе. Его я получаю так:
Процедура ПриОТкрытии() Для сч=1 По Метаданные.Регистр() Цикл спВидРегистра.ДобавитьЗначение(Метаданные.Регистр(сч).Идентификатор, Метаданные.Регистр(сч).Синоним); КонецЦикла; КонецПроцедуры // ПриОТкрытии В самом документа - два реквизита (измерения регистра), предполагаю что их везде два. ОсновноеИзмерение - в диалоге формы (например для мест хранения - склад), ДополнительноеИзмерение - в таб. части (напр. номенклатура). Оба реквизита - неопределенного типа. Суть задачи: при выборе вида регистра из списка им назначается соотв. тип и вид. Пробовал делать так: текРегистр = спВидРегистра.ПолучитьЗначение(спВидРегистра.ТекущаяСтрока()); ТипОсн = Метаданные.Регистр(текРегистр).Измерение(1).Тип; ВидОсн = Метаданные.Регистр(текРегистр).Измерение(1).Вид; НазначитьТип("ОсновноеИзмерение", ТипОсн + "." + ВидОсн); ТипОсн = Метаданные.Регистр(текРегистр).Измерение(2).Тип; ВидОсн = Метаданные.Регистр(текРегистр).Измерение(2).Вид; НазначитьТип("ДополнительноеИзмерение", ТипОсн + "." + ВидОсн); Но почему-то при выборе регистра из списка тип назначается только диалоговому реквизиту. Я подумал, что для таб. части надо назначать тип при вводе новой строки, прописал в процедуру ПриВводеСтроки() - но все-равно не получается. Как это сделать? Конфа - тестовая, четыре вида регистра, измерения по номерам совпадают, Сообщить(тип + "." +вид) - все как надо возвращается... |
|||
1
zak555
22.04.12
✎
19:27
|
> Пишу документ "ВводОстатков"
возьми готовый |
|||
2
Zhuravlik
22.04.12
✎
19:28
|
(1) Хочу понять, это все для себя делается.
|
|||
3
Zhuravlik
22.04.12
✎
19:31
|
Я смотрел в типовой конфе, в тисе, но там не нашел такого. А где-то было, при вводе строки спрашивается вид номенклатуры, и назначается вид справочника... Пробовал назначать ДополнительномуРеквизиту тип - справочник, и НазначитьВид() - тоже не прокатывает. Уже моск себе проел...
|
|||
4
andrewks
22.04.12
✎
19:36
|
||||
5
Zhuravlik
22.04.12
✎
19:49
|
(4) Класс) Спасибо, сейчас буду копать.
|
|||
6
Torquader
22.04.12
✎
19:54
|
Только нужно не забывать, что тип нужно выбирать для каждой строки отдельно.
|
|||
7
Zhuravlik
22.04.12
✎
19:57
|
(4) Интересный документ, но на свой вопрос не могу найти ответа...
|
|||
8
Torquader
22.04.12
✎
20:00
|
(7) Перехватывай ПриВыбореЗначения с идентификатором твоего реквизита - тогда можно одновременно выбрать и тип и значение.
|
|||
9
Zhuravlik
22.04.12
✎
20:01
|
(4) У Вас заполняется таблицаЗначений, а при записи просто переносится в табличную часть? А именно в табличной части если реквизит неопределенного вида, его нельзя определять? Тогда почему есть возможность назначать неопределнный в тч?
(8) Именно ПриВыборе? Я пробовал так делать приНачалеВыбораЗначения, привыборе - надо ведь сначала выбрать... А как выбирать, если тип неопределен? Сейчас попробую конечно... |
|||
10
Torquader
22.04.12
✎
20:05
|
(9) Если стандартно, то система предлагает выбрать сначала тип - потом значение.
Если внучную, то отключаешь стандартный выбор и выбираешь списком, что хочешь - причём - можно даже все типы и значения в одном списке собрать. |
|||
11
andrewks
22.04.12
✎
20:09
|
(9) "У Вас заполняется таблицаЗначений, а при записи просто переносится в табличную часть?" да
"А именно в табличной части если реквизит неопределенного вида, его нельзя определять?" можно |
|||
12
Zhuravlik
22.04.12
✎
20:09
|
(10) А нельзя назначить программно и тип и вид, чтобы пользователь уже выбирал сразу непосредственно значение?
Вот, изменил для ДополнительныйРеквизит тип с неопределенного на справочник. Прописал: Процедура ПриНачалеВыбораЗначения(Идент, ФСО) Если Идент = "ДополнительноеИзмерение" Тогда ТипОсн = Метаданные.Регистр(текРегистр).Измерение(2).Тип; ВидОсн = Метаданные.Регистр(текРегистр).Измерение(2).Вид; //НазначитьТип("ДополнительноеИзмерение", ТипОсн + "." + ВидОсн); НазначитьВид(ДополнительноеИзмерение, ВидОсн); КонецЕсли; КонецПроцедуры // ПриВыбореЗначения При вводе новой строки выскакивает список с типами справочников для выбора. Т.е. не але( Если назначаю неопределенный, и делаю то же самое, то вообще ничего не вцыбирается. (11) а как?) Я это и хочу узнать... |
|||
13
Zhuravlik
22.04.12
✎
20:10
|
(12) не то же самое а НазначитьТип
|
|||
14
andrewks
22.04.12
✎
20:10
|
(12) ты забываешь изменять ФСО
|
|||
15
Torquader
22.04.12
✎
20:11
|
(14) Так он и не должен его менять - он назначает тип, и система сама обрабатывает ввод значения - ему сам ввод отключать не надо.
|
|||
16
Zhuravlik
22.04.12
✎
20:20
|
(14) Если его отключать, то надо писать свой подбор, а не стандартно как это происходит при выборе...
Но что с отключенный, что с включенным ФСО вот это //====================================================================== Процедура ПриНачалеВыбораЗначения(Идент, ФСО) Если Идент = "ДополнительноеИзмерение" Тогда ВидОсн = Метаданные.Регистр(текРегистр).Измерение(2).Вид; //НазначитьТип("ДополнительноеИзмерение", ТипОсн + "." + ВидОсн); НазначитьВид(ДополнительноеИзмерение, ВидОсн); КонецЕсли; Сообщить(ДополнительноеИзмерение.Вид()); КонецПроцедуры // ПриВыбореЗначения Сообщает нужный вид справочника, а все равно при выборе выходит список. |
|||
17
andrewks
22.04.12
✎
20:21
|
(16) НазначитьВид() не предназначен для типа Неопределенный. только НазначитьТип()
|
|||
18
Zhuravlik
22.04.12
✎
20:21
|
(16) + это если доп.реквизит - не неопределнный, а справочник.
|
|||
19
Zhuravlik
22.04.12
✎
20:22
|
(17) ну да, я просто и так и так пробую.
|
|||
20
Torquader
22.04.12
✎
20:22
|
НазначитьТип(ИмяРеквизита,"Регистр."+ИдентификаторРегистра)
|
|||
21
Zhuravlik
22.04.12
✎
20:24
|
(17) Процедура ПриНАчалеВыбора не работает, если реквизит - неопределенный, у реквизита просто нет "педальки" для выбора.
(20) У меня реквизит заранее известно, что справочник. Это не регистр ни разу... |
|||
22
Zhuravlik
22.04.12
✎
20:25
|
(21) + получается, что надо обходиться предопределенными ПриВводеСтроки, ПриНачалеРедактирования - но это ничего не дает...
|
|||
23
Torquader
22.04.12
✎
20:26
|
(21) Тогда какого хрена ты пишешь:
ВидОсн = Метаданные.Регистр(текРегистр).Измерение(2).Вид; Пиши, что справочник и указывай вид справочника, если это нужно. |
|||
24
Torquader
22.04.12
✎
20:28
|
(22) Так можно и ПриНачалеРедактированияСтроки - получить момент, когда у нас вводится наше поле Через АктивныйЭлемент и дальше обработать ввод.
Если же нужно установить какой-то справочник заранее, то ПриВводеНовойСтроки выставляем Тип и оставляем автовыбор. |
|||
25
Zhuravlik
22.04.12
✎
20:28
|
(23) ну - Метаданные.Регистр(текРегистр).*ИЗМЕРЕНИЕ*(2).Вид - вид измерения регистра. Они все - справочник) Суть задачи, как определить этот тип для реквизита табличной части, если он неопределен. Просто я потом уже начал пробовать с указанием типа Справочник, но так тоже не выходит.
|
|||
26
Torquader
22.04.12
✎
20:30
|
"Справочник."+Метаданные.Регистр(текРегистр).Измерение(2).Вид - не помогает ?
|
|||
27
Zhuravlik
22.04.12
✎
20:32
|
(24) я пробовал, ничего не выходит.
Если вид реквизита - справочник: Процедура ПриВводеСтроки() ТипОсн = Метаданные.Регистр(текРегистр).Измерение(2).Тип; ВидОсн = Метаданные.Регистр(текРегистр).Измерение(2).Вид; НазначитьВид(ДополнительноеИзмерение, ВидОсн); КонецПроцедуры // ПриВводеСтроки При выборе выпадает список всех справочников. Если вид реквизита - неопределнный: //====================================================================== Процедура ПриВводеСтроки() ТипОсн = Метаданные.Регистр(текРегистр).Измерение(2).Тип; ВидОсн = Метаданные.Регистр(текРегистр).Измерение(2).Вид; НазначитьТип("ДополнительноеИзмерение", ТипОсн + "." + ВидОсн); КонецПроцедуры // ПриВводеСтроки И вообще отсутствует выбор... |
|||
28
Zhuravlik
22.04.12
✎
20:32
|
(26) Сообщить(ТипОсн + "." + ВидОсн) - Возвращает нормально справочник.Такой-то
|
|||
29
Zhuravlik
22.04.12
✎
20:33
|
А можно программно назначить, чтобы у реквизита была "педалька"?
|
|||
30
Torquader
22.04.12
✎
20:35
|
(29) Так в табличной части педалька предполагается автоматом, то есть она должна работать.
|
|||
31
andrewks
22.04.12
✎
20:37
|
(21) Неопределенный у тебя редактироваться не будет, пока не назначишь тип
|
|||
32
Torquader
22.04.12
✎
20:37
|
Только педалька начинает работать тогда, когда выбираешь именно этот реквизит (а он у тебя явно не первый).
Попробуй вставить данный код в ПриРедактированииНовойСтроки() |
|||
33
Zhuravlik
22.04.12
✎
20:38
|
(30) нету. Для неопределенного...
(31) ну вот, назначаю - а ее все равно нету. Вроде все так, я понять не могу что неправильно? |
|||
34
Zhuravlik
22.04.12
✎
20:39
|
(32) Пробовал. Он идет после номера строки, получается, что первый в тч?
|
|||
35
andrewks
22.04.12
✎
20:40
|
(33) у меня всё работает. что-то ты там перемудрил
назначай тип в ПриРедактированииНовойСтроки() и ПриНачалеРедактированияСтроки() |
|||
36
Torquader
22.04.12
✎
20:41
|
(34) Ну, если уж совсем не получается, то делай выбор вручную.
Спр=CreateObject("Справочник."+ВидОсн); If Спр.Choose()=1 Then МойРекв=Спр.CurrentItem();EndIf; |
|||
37
andrewks
22.04.12
✎
20:43
|
но вообще, ТЗ побогаче смотрится. а ТП ещё лучше
|
|||
38
Zhuravlik
22.04.12
✎
20:44
|
(35) странное дело, тип назначается для ПРЕДИДУЩЕЙ строки! Т.е. ввожу вторую строку - могу сделать выбор в первой, вторую - в третьей и т.д.
|
|||
39
Zhuravlik
22.04.12
✎
20:45
|
Вот так заработало -
//====================================================================== Процедура ПриВводеСтроки() текРегистр = спВидРегистра.ПолучитьЗначение(спВидРегистра.ТекущаяСтрока()); ТипОсн = Метаданные.Регистр(текРегистр).Измерение(2).Тип; ВидОсн = Метаданные.Регистр(текРегистр).Измерение(2).Вид; НазначитьТип("ДополнительноеИзмерение", ТипОсн + "." + ВидОсн); КонецПроцедуры // ПриВводеСтроки Процедура ПриРедактированииНовойСтроки() текРегистр = спВидРегистра.ПолучитьЗначение(спВидРегистра.ТекущаяСтрока()); ТипОсн = Метаданные.Регистр(текРегистр).Измерение(2).Тип; ВидОсн = Метаданные.Регистр(текРегистр).Измерение(2).Вид; НазначитьТип("ДополнительноеИзмерение", ТипОсн + "." + ВидОсн); КонецПроцедуры //====================================================================== Процедура ПриНачалеРедактированияСтроки() текРегистр = спВидРегистра.ПолучитьЗначение(спВидРегистра.ТекущаяСтрока()); ТипОсн = Метаданные.Регистр(текРегистр).Измерение(2).Тип; ВидОсн = Метаданные.Регистр(текРегистр).Измерение(2).Вид; НазначитьТип("ДополнительноеИзмерение", ТипОсн + "." + ВидОсн); КонецПроцедуры // ПриВводеСтроки т.е. для всех трех процедур... странно как-то. |
|||
40
Zhuravlik
22.04.12
✎
20:46
|
(37) а что такое ТП?
|
|||
41
Torquader
22.04.12
✎
20:46
|
(38) ПриВводеНовойСтроки вызывается, насколько я помню, после того, как строка будет уже введена, то есть очень похоже, что у тебя именно это и есть.
|
|||
42
andrewks
22.04.12
✎
20:47
|
(39) у меня всё работает при назначении типа только в указанных мной двух предопределённых процедурах
|
|||
43
andrewks
22.04.12
✎
20:47
|
(40) ТабличноеПоле 1с++
|
|||
44
Zhuravlik
22.04.12
✎
20:47
|
(41) Но спозиционирована текущая строка? Значит В этой процедуре обрабатываются переменные в ней...
|
|||
45
Torquader
22.04.12
✎
20:48
|
У меня число методологический вопрос - почему нельзя задать измерение сразу, если вы положили в коде, что Тип это Справочник, то задать всевозможные справочники.
|
|||
46
Zhuravlik
22.04.12
✎
20:48
|
(42) да, у меня тоже, поспешил...
|
|||
47
Zhuravlik
22.04.12
✎
20:50
|
(45) В регистрах - измерения - справочники определенного вида. Я хотел для тч понять как именно для неопределенного реквизита задать и тип и вид, потому что возможно позже столкнусь с тем, что в регистрах будут измерения - перечисления.
|
|||
48
Zhuravlik
22.04.12
✎
20:53
|
(46) все-равно непонятно. Если я при начале редактирования задаю тип и вид, зачем мне это делать еще и ПРИ редактировании? Это же просто случайно пальцем в небо ткнул, и догадался, а технически - я не понимаю почему так?
|
|||
49
andrewks
22.04.12
✎
20:55
|
(48) когда вводишь новую строку, ПриНачалеРедактированияСтроки() не вызывается. если тип уже проставлен, то потом в ней его указывать уже необязательно
|
|||
50
Zhuravlik
22.04.12
✎
20:59
|
(49) это понятно. Я о другом. Вот я тыкнул два раза в диалог, вызывалось ПриНачалеРедактированияСтроки(), я так рассуждал - здесь указываю тип и вид переменной, и ПриРедактировании - когда я ввожу данные система уже понимает, что там за тип и вид. А получается, что не так?
|
|||
51
Zhuravlik
22.04.12
✎
21:11
|
Видимо с этим вопросом я один на один)))) Спасибо всем за помощь.
|
|||
52
Torquader
22.04.12
✎
21:13
|
(50) Если всё сделано правильно, то повторно задавать не надо, если, конечно, вид не поменялся.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |