Имя: Пароль:
1C
1С v8
Связь поля таблицы с другой таблицей
,
0 Kertis138
 
17.09.17
11:08
Здравствуйте!

В документе есть 1 табличная часть. В реквизитах 1ой ТЧ есть ХранилищеЗначений, в котором я хотел хранить другую таблицу.
На форме 1ая таблица естественно не может отображать ХранилищеЗначений и поэтому ПриАктивацииСтроки, я хочу выводить таблицу этого поля из ХранилищаЗначений во вторую табличную форму, которая чуть ниже. Подскажите как это реализовывается?

По моим предположениям ПриАктивацииСтроки я выгружаю ХранилищеЗначений на вторую табличную форму. Только как получить доступ к этому ХранилищуЗначений?
1 vicof
 
17.09.17
11:12
Сделай две таблицы. С хранилищем кривая архитектура.
2 Kertis138
 
17.09.17
11:16
Дело в том, что мне нужно каждую запись первой таблицы ассоциировать с другой таблицей.

Проблема изначально была такая:
Каждая запись таблицы имеет поле УСЛУГИ. Туда может быть записано либо ничего, либо несколько услуг.

Думаю, можно сделать многострочное поле с услугами через разделитель. А во второй таблице, при активации строки первой таблицы, выводить эти услуги в удобном видеКак думаете?
3 Филиал-msk
 
17.09.17
11:17
Сделай. Две. Таблицы.
4 Kertis138
 
17.09.17
11:22
А как будет все это выглядеть с двумя таблицами?
В одной таблице список из всех товаров.

А во второй Товар-Услуга? А если на один товар несколько услуг?
5 Филиал-msk
 
17.09.17
11:26
То тогда во второй таблице у тебя будет несколько строк. Так-то!
6 Cyberhawk
 
17.09.17
11:30
У каждой строки первой таблицы должен быть уникальный ключ, который будет присутствовать во второй таблице и таким образом ты сможешь из второй таблицы отбирать строки, относящиеся к конкретной строке первой таблицы (по этому ключу)
7 Kertis138
 
17.09.17
11:33
Идея с уникальными ключами хорошо подойдет.
То есть вторая ТЧ хранить ID-услугу и в форме уже выводит объединение двух таблиц - НазваниеТовара-Услуга, верно?
8 Kertis138
 
17.09.17
11:38
Проблема в том, что работники жаловались на неудобство.
Неудобно, когда на один товар несколько строк для услуг.
Хотелось бы это все объединить.
Или сгруппировать по Услугам. Возможно ли в форме документа сделать такую группировку?
9 Cyberhawk
 
17.09.17
11:44
(7) Не верно. Ключ первой таблицы - товар, ключ второй составной "товар + услуга". На форме выведены обе таблицы
10 Kertis138
 
17.09.17
12:01
Две таблицы сделал. А как теперь сделать их "соединение".
Например, чтобы при нажатии на строку в первой таблице, создавалась строка во второй с заполненным ID ?
11 Cyberhawk
 
17.09.17
12:02
(10) Руками (писать код)
12 Cyberhawk
 
17.09.17
12:02
При навигации по строкам первой таблицы во второй ничего создаваться не должно - это же навигация для просмотра
13 Cyberhawk
 
17.09.17
12:03
Устанавливай отбор во второй таблице по товару, который сейчас выделен в строке первой таблицы
14 Cyberhawk
 
17.09.17
12:03
Добавление строк во вторую таблицу - вручную с уже заполненным полем "Товар" из выделенной строки первой таблицы
15 Kertis138
 
17.09.17
12:43
(13) Спасибо! Этот вариант - то, что нужно. А Вы случайно не знаете, может есть в Инете нормальные туториалы, чтобы разобраться в этом всем? Например, как получить вторую таблицу, когда происходит события выбора строки на первой? Как сделать отбор?
Или может есть книга, в которой этим моменты описываются?
В Инете сколько не гуглил, нормального ничего не могу найти.
16 Филиал-msk
 
17.09.17
12:53
Миста, между прочим, тоже интернет
17 Kertis138
 
17.09.17
12:59
(16) У меня не хватает опыта, чтобы просто сформировать верный запрос в поисковике :)
В итоге я получаю совсем не то, что мне нужно.

Где мне найти примеры отбора таблиц в форме документа с составным ключем?
18 Злопчинский
 
17.09.17
13:23
Ну, для начала почитать теорию реляционных баз данных
19 breezee
 
17.09.17
13:26
(17) ОткрытьФорму()
20 Филиал-msk
 
17.09.17
13:29
(17) Ты не поверишь
https://www.google.ru/search?q=синхронизация+таблиц+на+форме+1с
21 Kertis138
 
17.09.17
13:29
(18) С ней я знаком. А в 1с я недавно и мне пока нужен небольшой толчок. Базовые вещи я делаю, а что-то посложней пока не могу
22 Филиал-msk
 
17.09.17
13:30
(18) Вот ещё, скажешь тоже! Это же путь для неудачников. Настоящие креативные менеджеры всегда программируют методом тыка (:
23 Злопчинский
 
17.09.17
13:30
(21) как-то у меня сложилось другое мнение
24 Kertis138
 
17.09.17
13:34
У меня там все ссылки помечены, как прочитанные :)
Там везде про форму списка.
А с формой документа если и есть, то не очень понятно.

В первой таблице происходит событие ПриАктивацииСтроки, когда я выбираю какую-то строку. Теперь мне надо отобрать во второй таблице данные по Товару.

&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
//Вот я нахожусь в таблице 1
//Мне нужно получить таблицу 2 и сделать отбор
КонецПроцедуры

Вроде порядок действий такой, но вот примеры реализации везде странные :)
25 Kertis138
 
17.09.17
13:36
Вот один из примеров.

//установить отбор
ЭлементыФормы.ИмяТабПоля.ОтборСтрок.Колонка1.Установить(ЗначениеОтбора);

Вот так я пытаюсь дойти до второй таблицы:
Элемент.Родитель.ПодчиненныеЭлементы.ТаблицаУслуг

Верно?
26 Kertis138
 
17.09.17
13:40
http://catalog.mista.ru/public/186522/

Вот тут еще хорошо написано. Сейчас попробую
27 Kertis138
 
17.09.17
14:23
Вылетает ошибка
Элементы.Услуги.ОтборСтрок.ИД.Значение = Данные.ИД;

{Документ.ТестовыйДокумент.Форма.ФормаДокумента.Форма(121)}: Значение не является значением объектного типа (ИД)
    Элементы.Услуги.ОтборСтрок.ИД.Значение = Данные.ИД;

И что тут не так?
28 Kertis138
 
17.09.17
15:01
Очень странно, но в версии 8.3.9 название методом отличается.
Почти все получилось. Единственное не удается сделать отбор строк. Видимо, тут тоже никакой совместимости...
29 Kertis138
 
17.09.17
15:25
Наконец-то все получилось! Спасибо за информацию.
Прикладываю код. Может кому поможет.
Версия 8.3.9
Главная таблица - НомераТруб
Производная таблица - Услуги
Реквизит связи - ИД


&НаКлиенте
Процедура НомераТрубПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
    Данные = Элементы.НомераТруб.ТекущиеДанные;
    Если НоваяСтрока Тогда
        Данные.ИД = Новый УникальныйИдентификатор;
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура УслугиТаблицаПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
    Данные = Элементы.НомераТруб.ТекущиеДанные;
    ТекДанные = Элементы.Услуги.ТекущиеДанные;
    Если НоваяСтрока Тогда
        ТекДанные.ИД = Данные.ИД;
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура НомераТрубПередУдалением(Элемент, Отказ)
    Данные = Элементы.НомераТруб.ТекущиеДанные;
    Отбор = Новый Структура("ИД",Данные.ИД);
    Масс = Объект.Услуги.НайтиСтроки(Отбор);
    Для каждого Строка из Масс Цикл
        Объект.Услуги.Удалить(Строка);
    КонецЦикла;
КонецПроцедуры


&НаКлиенте
Процедура НомераТрубПриАктивизацииСтроки(Элемент)
    Данные = Элементы.НомераТруб.ТекущиеДанные;
    Если Данные = Неопределено Тогда
        Возврат;
    КонецЕсли;    
    ФМ=Новый ФиксированнаяСтруктура("ИД",Данные.ИД);
    Элементы.Услуги.ОтборСтрок = ФМ;
КонецПроцедуры
30 Филиал-msk
 
17.09.17
21:02
(29) Поломается, если начать добавлять строку в услуги, когда нет ни одного товара
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс