Имя: Пароль:
1C
 
связь нескольких таблиц на форме
,
0 falselight
 
21.10.16
08:06
На форме справочника расположены 3 таблицы.
Как между ними можно устанавливать связь?
К примеру что бы выделенная строка в первой,
отображала соответствующие только ей данные во второй.
А выделенная строка во второй, отображала соответствующие ей данные
в третьей. И даже управляла видимостью третьей таблицы, в зависимости
от выбранного значения в определенном поле строки второй таблицы.
1 falselight
 
21.10.16
08:06
интерфейс такси
2 AlexToo
 
21.10.16
08:07
(1) в типовых конфах правда на обычных формах, это реализовано через ключевые поля типа "номер строки"
3 falselight
 
21.10.16
08:25
(2) Формы обычные. Но не думаю что есть какое то существенное различие. Можете подсказать по алгоритму как это сделать? Честно не соображаю пока сам.
4 catena
 
21.10.16
08:29
Создать ключ связи таблиц, при активизации строки управлять отборами в подчиненных таблицах.
5 DrShad
 
21.10.16
08:30
каким образом заполняются эти три таблицы? если запросами, то ставь отборы и будет тебе счастье
6 falselight
 
21.10.16
08:32
(5) нет не запросами, в ручную
важно что бы строки соответствовали главной таблице
7 falselight
 
21.10.16
08:33
(4) да, так примерно я и думаю делать
8 falselight
 
21.10.16
08:39
(4) Заполнять ключ связи во второй таблице, нужно видимо считывая номер строки в первой таблице? Какая там выделена строка, да?
9 catena
 
21.10.16
08:41
(8)По идее, ключом может быть любое удобное для отбора поле.
10 falselight
 
21.10.16
08:46
(9) вот и пытаюсь понять как лучше.
Но как любое? Я думаю номер строки из первой таблицы основной.
Иначе какие варианты? И в какой процедуре заполнять ключ связи во второй таблице?
11 catena
 
21.10.16
08:48
(10)Ну все же зависит от логики заполнения таблиц. Я ж откуда знаю, как заполняются, по каким принципам связываются?
12 DrShad
 
21.10.16
08:53
(9) лучше использовать поле со значением УникальныйИдентификатор(), тогда не будет траблов если вдруг изменят состав таблицы или еще что
13 falselight
 
21.10.16
08:54
(11) да вот особых наставлений не дали, покрайней мере пока их не получил, пытаюсь придумать сам
14 DDwe
 
21.10.16
08:55
(13) Вот с этого и нужно начинать.
15 falselight
 
21.10.16
08:55
(21) А как это будет выглядеть? Делать отбор по уникальному идентификатору не по номеру строки?

&НаКлиенте
Процедура АлгоритмыПриАктивизацииСтроки(Элемент)
    Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
        Элементы.Направления.ОтборСтрок = Новый ФиксированнаяСтруктура("КлючСвязи", Элемент.ТекущиеДанные.НомерСтроки);
    КонецЕсли;

КонецПроцедуры
16 DrShad
 
21.10.16
08:56
(15) точно также
17 falselight
 
21.10.16
08:57
(15) это к (12), пора бы правку сообщений сделать на мисте
18 falselight
 
21.10.16
08:57
(16) А в какой момент писать это в ключ связи второй таблицы?
19 DrShad
 
21.10.16
08:59
в момент заполнения таблиц естественно
20 falselight
 
21.10.16
09:00
(19) заполняю первую таблицу, второя же не заполняется в этот момент. Ввожу строку во вторую таблицу, в каком событии заполняется ключ связи????
21 DrShad
 
21.10.16
09:04
*рукалицо*
22 catena
 
21.10.16
09:08
(20)Встать на таблице в конфигураторе и посмотреть список доступных событий что мешает?
23 falselight
 
21.10.16
09:14
В процедуре при окончании редактирования нормально будет? Там есть параметр НоваяСтрока, отслеживающая ввод новой строки или редактирование существующей, что важно
24 DrShad
 
21.10.16
09:20
имхо вы сейчас оба вообще не в ту степь ушли
25 DrShad
 
21.10.16
09:22
а еще готовься к бесконечному циклу )))
26 falselight
 
21.10.16
09:35
(24) почему не в ту? подскажите правильное направление?
27 DrShad
 
21.10.16
09:36
(26) ключ связи нужно заполнять в момент формирования таблиц, не в момент их вывода на форму, а именно в момент формирования
28 falselight
 
21.10.16
09:37
(27) в процедуре при окончании редактирования, это и есть в момент формирования, добавления строк в таблицу
29 falselight
 
21.10.16
09:47
почему при добавлении строк номер строки не реальный???? К примеру добавляю строку в табличную часть а у неё номер 4 стоит
30 DDwe
 
21.10.16
09:56
Пятница!
31 catena
 
21.10.16
10:15
(27)Он до вывода еще не дошел, пока только до ввода. У него данные вручную вводятся.
32 catena
 
21.10.16
10:15
(29)Отстань от номера строки, не мучай честную женщину, зачем она тебе?
33 falselight
 
21.10.16
10:23
при вводе строк, я так буду получать уникальный идентификатор строки??? И добавлять его в поле КлючСвязи.
34 falselight
 
21.10.16
10:24
&НаКлиенте
Процедура АлгоритмыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
    Если НоваяСтрока Тогда
        Элементы.Алгоритмы.ТекущиеДанные.КлючСвязи = УникальныйИдентификатор();    
    КонецЕсли;
КонецПроцедуры
35 DDwe
 
21.10.16
10:24
(33) Сформулируй яснее..
36 catena
 
21.10.16
10:28
(33)Ты сперва заполняешь верхнюю таблицу иерархии или нижнюю?
37 DDwe
 
21.10.16
10:29
(36) Ну, зачем ты так?
38 catena
 
21.10.16
10:36
(37)Что, слова слишком длинные?
39 catena
 
21.10.16
10:39
(34)Вот, думай:

http://savepic.ru/11880325.png
40 falselight
 
21.10.16
10:43
(36) верхнюю
41 DrShad
 
21.10.16
11:18
(31) откуда инфа?
42 catena
 
21.10.16
11:21
(41)
   falselight автор
18 - 21.10.16 - 08:57
((16)) А в какой момент писать это в ключ связи второй таблицы?
   DrShad  
19 - 21.10.16 - 08:59
в момент заполнения таблиц естественно
   falselight автор
20 - 21.10.16 - 09:00
((19)) заполняю первую таблицу, второя же не заполняется в этот момент. Ввожу строку во вторую таблицу, в каком событии заполняется ключ связи????
43 falselight
 
21.10.16
11:22
правильное получение изначального уникального идентификатора при вводе данных в первую таблицу???

&НаКлиенте
Процедура АлгоритмыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
    Если НоваяСтрока Тогда
        УникальныйИдентификатор                    = Новый УникальныйИдентификатор;
        Элементы.Алгоритмы.ТекущиеДанные.КлючСвязи = Строка(УникальныйИдентификатор);     
    КонецЕсли;
КонецПроцедуры
//
44 catena
 
21.10.16
11:22
+(42)
   DrShad
5 - 21.10.16 - 08:30
каким образом заполняются эти три таблицы? если запросами, то ставь отборы и будет тебе счастье
   falselight автор
6 - 21.10.16 - 08:32
(5) нет не запросами, в ручную
45 DrShad
 
21.10.16
11:25
(44) ну тут как бы вручную понятие сомнительное, там может циклом заполняется или еще как
46 DrShad
 
21.10.16
11:26
(43) сделай во всех трех таблицах поле с типом УникальныйИдентификатор и не парь нам мозг
47 DrShad
 
21.10.16
11:27
при добавлении строки во вторую таблицу в событии при начале редактирования сразу заполняй это поле значением из текущей строки первой таблицы
48 falselight
 
21.10.16
11:32
(46) я сделал
но идет ошибка, на строке

УникальныйИдентификатор                    = Новый УникальныйИдентификатор;

{Справочник.Производители.Форма.ФормаЭлемента.Форма(106)}: Поле объекта недоступно для записи (УникальныйИдентификатор)
        УникальныйИдентификатор                    = Новый УникальныйИдентификатор;

как это делается?
49 Lexey_
 
21.10.16
11:34
(48) УникальныйИдентификатор - свойство формы
50 falselight
 
21.10.16
11:37
(49) понял, поправил на
&НаКлиенте
Процедура АлгоритмыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
    Если НоваяСтрока Тогда
        УнИд                                        = Новый УникальныйИдентификатор;
        Элементы.Алгоритмы.ТекущиеДанные.КлючСвязи = Строка(УнИд);     
    КонецЕсли;
КонецПроцедуры
51 falselight
 
21.10.16
11:41
не получается (((( ТекущиеДанные не определены в этот момент

&НаКлиенте
Процедура АлгоритмыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
    Если НоваяСтрока Тогда
        УнИд                                        = Новый УникальныйИдентификатор;
        Элементы.Алгоритмы.ТекущиеДанные.КлючСвязи = Строка(УнИд);     
    КонецЕсли;
КонецПроцедуры
52 falselight
 
21.10.16
11:42
(51) как получить доступ к добавляемой строке? не та процедура?
53 Lexey_
 
21.10.16
11:45
(51) ты бредишь, всё определено
54 falselight
 
21.10.16
12:08
(53) при вводе первой строки там нет данных
55 falselight
 
21.10.16
12:12
итак создаю первичный уникальный идентификатор в первой таблицы (после обычных форм постоянно заморачиваюсь с этими управляемыми)


&НаКлиенте
Процедура АлгоритмыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
    Если НоваяСтрока Тогда
        УнИд = Новый УникальныйИдентификатор;
        Если Объект.Алгоритмы.Количество() = 1 Тогда
            Инд = 0;
        Иначе
            Инд = Объект.Алгоритмы.Индекс(Элементы.Алгоритмы.ТекущиеДанные);
        КонецЕсли;  
        Объект.Алгоритмы[Инд].КлючСвязи = Строка(УнИд);                 
    КонецЕсли;
КонецПроцедуры
//
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn