Имя: Пароль:
1C
1С v8
v8: Помогите связать таблицы
0 titan1993
 
28.05.13
12:19
Уже не первая просьба помощи, !Умоляю!, подскажите что не так?
создал документ с двумя ТЧ, первая ТЧ называется Услуги, а вторая Документы. Пытаюсь установить между ними связь через запрос по полю "Владелец" не пойму как реализовать механизм выбора.

написал код:
Функция ОбновитьТаблицу(ЭтаФорма)

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

КонецФункции // ()


&НаСервереБезКонтекста
Процедура стораз(МассивДанных)

         //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

   Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    ОказаниеУслугиДокументы.Ссылка,
       |    ОказаниеУслугиДокументы.НомерСтроки,
       |    ОказаниеУслугиДокументы.Наименование,
       |    ОказаниеУслугиУслуги.Ссылка КАК Ссылка1,
       |    ОказаниеУслугиУслуги.НомерСтроки КАК НомерСтроки1,
       |    ОказаниеУслугиУслуги.НаименованиеУслуги,
       |    ОказаниеУслугиУслуги.Количество,
       |    ОказаниеУслугиУслуги.Цена,
       |    ОказаниеУслугиУслуги.Сумма
       |ИЗ
       |    Документ.ОказаниеУслуги.Услуги КАК ОказаниеУслугиУслуги
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОказаниеУслуги.Документы КАК ОказаниеУслугиДокументы
       |        ПО ОказаниеУслугиУслуги.НаименованиеУслуги = ОказаниеУслугиДокументы.Наименование.Владелец
       |ГДЕ
       |    ОказаниеУслугиДокументы.Наименование В(&Ссылки)";

       Запрос.УстановитьПараметр("Ссылки", МассивДанных);
       Выборка = Запрос.Выполнить().Выбрать();
       Если Выборка.Следующий() Тогда
           
           результат = Выборка.ОказаниеУслугиДокументы
                             
       КонецЕсли;
       
       Сообщить(результат);

   //Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
   //    // Вставить обработку выборки ВыборкаДетальныеЗаписи
   //КонецЦикла;

   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

   
КонецПроцедуры

&НаКлиенте
Процедура ВсеДоговоры(Команда)
   ОбновитьТаблицу(ЭтаФорма);
КонецПроцедуры



ошибка:


{Документ.ОказаниеУслуги.Форма.ФормаДокумента.Форма(145)}: Ошибка при вызове метода контекста (ОбновитьТаблицу)
   ОбновитьТаблицу(ЭтаФорма);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
   форма: Элемент
   имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'УправляемаяФорма'
1 shuhard
 
28.05.13
12:20
(0)[Уже не первая просьба помощи]
лимит исчерпан,
зайдите на следующей неделе
2 Mitriy
 
28.05.13
12:21
ну не знает сервер, что такое форма... и ругается открытым текстом...
3 чувак
 
28.05.13
12:22
ух ты, дважди шайтан.
Это же юпилейная 666666 ая ветка!
4 EvgenOrvin
 
28.05.13
12:24
Вот уж точно... скрин.
5 titan1993
 
28.05.13
12:25
ну подскажите что не так? я уже 3 дня голову ломаю:(
6 rull9ss
 
28.05.13
12:25
(5)
код ошибки прочитай. написано же все
7 evorle145
 
28.05.13
12:25
(2), "ОбновитьТаблицу" выполняется не на сервере
8 rull9ss
 
28.05.13
12:26
ты с клиента пытаешься передать форму на сервер - вот на это он и ругается. передавай на сервер сразу табличные части(или что там тебе еще надо)
9 titan1993
 
28.05.13
12:26
&НаКлиентеНаСервереБезКонтекста?
10 titan1993
 
28.05.13
12:28
(8) прости, это как? Подскажите, 200 руб. на тлф положу, не знаю я буду просто бесконечно рад, если у меня получится связать эти две ТЧ
11 sapphire
 
28.05.13
12:28
Запрос.Текст =
       "ВЫБРАТЬ
       |    ОказаниеУслугиДокументы.Ссылка,
       |    ОказаниеУслугиДокументы.НомерСтроки,
       |    ОказаниеУслугиДокументы.Наименование,
       |    ОказаниеУслугиУслуги.Ссылка КАК Ссылка1,
       |    ОказаниеУслугиУслуги.НомерСтроки КАК НомерСтроки1,
       |    ОказаниеУслугиУслуги.НаименованиеУслуги,
       |    ОказаниеУслугиУслуги.Количество,
       |    ОказаниеУслугиУслуги.Цена,
       |    ОказаниеУслугиУслуги.Сумма
       |ИЗ
       |    Документ.ОказаниеУслуги.Услуги КАК ОказаниеУслугиУслуги
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОказаниеУслуги.Документы КАК ОказаниеУслугиДокументы
       |        ПО ОказаниеУслугиУслуги.Ссылка = ОказаниеУслугиДокументы.Ссылка
       |ГДЕ
       |    ОказаниеУслугиДокументы.Ссылка В(&Ссылки)";
12 rull9ss
 
28.05.13
12:28
&НаКлиенте
Процедура ВсеДоговоры(Команда)
   ОбновитьТаблицу(ЭтаФорма.Объект.Документы);
КонецПроцедуры

Функция ОбновитьТаблицу(ТаблЧасть)

   МассивДанных = Новый Массив;
   Для каждого СтрокаТЧ Из ТаблЧасть Цикл
       МассивДанных.Добавить(СтрокаТЧ.Наименование);
   КонецЦикла;

КонецФункции
13 titan1993
 
28.05.13
12:29
Вот это я понимаю, пошла помощь:) (12) сейчас попробую
14 Mitriy
 
28.05.13
12:30
да не надо вообще ничего передавать в параметрах, даже на сервер лезть не надо, все делай на клиенте в контексте формы...
15 Mitriy
 
28.05.13
12:30
в смысле, массив формируй, а потом уже массив кидай на сервер...
16 rull9ss
 
28.05.13
12:31
за 200 рублей книгу Радченко себе купи лучше
17 titan1993
 
28.05.13
12:32
(12) {Документ.ОказаниеУслуги.Форма.ФормаДокумента.Форма(145)}: Ошибка при установке значения атрибута контекста (Документы)
   ОбновитьТаблицу(ЭтаФорма.Объект.Документы);
по причине:
Нельзя изменять поле, содержащее объект данных формы
18 sapphire
 
28.05.13
12:33
(17) Зачем?!
19 titan1993
 
28.05.13
12:33
я понимаю, что я ничего не понимаю :(, но сейчас все серьезно, если я не сделаю то чего от меня просят, тогда мне кирдык:'(
20 titan1993
 
28.05.13
12:34
(18) Что, зачем?
21 evorle145
 
28.05.13
12:34
(17), так пиши
Процедура ВсеДоговоры(Команда)
   Данные = ЭтаФорма.Объект.Документы;
   ОбновитьТаблицу(Данные);
КонецПроцедуры
22 Mitriy
 
28.05.13
12:35
млять...

&НаКлиенте
Процедура ВсеДоговоры(Команда)

   МассивДанных = Новый Массив;
   Для каждого СтрокаТЧ Из ТаблЧасть Цикл
       МассивДанных.Добавить(СтрокаТЧ.Наименование);
   КонецЦикла;

КонецПроцедуры
23 Mitriy
 
28.05.13
12:35
Вместо ТаблЧасть, подставь Объект.Документы...
24 sapphire
 
28.05.13
12:38
Если на форме отображается таблица Объект.Документы, то она сама обновится, если перечитать данные формы или изменения вводились интерактивно
25 titan1993
 
28.05.13
12:41
мне кажется мой косяк тут?

       Запрос.УстановитьПараметр("Ссылки", МассивДанных);
       Выборка = Запрос.Выполнить().Выбрать();
       Если Выборка.Следующий() Тогда
           
           результат = Выборка.ОказаниеУслугиДокументы
                             
       КонецЕсли;
       
       Сообщить(результат);
26 titan1993
 
28.05.13
12:45
Люди добрые! Спасите :'(
27 sapphire
 
28.05.13
12:45
(25) Отладчиком не умеешь пользоваться?
28 sapphire
 
28.05.13
12:47
(26) с двумя ТЧ, первая ТЧ называется Услуги, а вторая Документы

Опиши структуру метаданных табличных частей и внятно, что именно ты хочешь, что бы тебе подсказали.
29 titan1993
 
28.05.13
12:52
Функция ОбновитьТаблицу(ТаблЧасть)
   ТаблЧасть = Объект.Документы;
   МассивДанных = Новый Массив;
   Для каждого СтрокаТЧ Из ТаблЧасть Цикл
       МассивДанных.Добавить(СтрокаТЧ.Наименование);
   КонецЦикла;
   Сообщить(МассивДанных)
   
КонецФункции // ()

&НаКлиенте
Процедура ВсеДоговоры(Команда)
   ТаблЧасть = Объект.Документы;
   ОбновитьТаблицу(ТаблЧасть);
КонецПроцедуры

теперь сообщается массив, вопрос в том, как его заполнить данными :(
30 sapphire
 
28.05.13
12:55
(29) У тебя структура больная.
31 titan1993
 
28.05.13
12:57
СпрСвойства подчинен СпрУслуги. Документ с двумя табличными частями. Надо чтобы когда я добавлял элемент в ТЧ Услуги, в ТЧ Свойства добавлялись автоматически все свойства этого справочника. т.е. в ТЧ1 я выбираю ложка, а в ТЧ2 отобразилось красный зеленый синий
32 titan1993
 
28.05.13
12:57
У меня все больное(
33 sapphire
 
28.05.13
13:03
(31)
в ТЧ1 я выбираю ложка,а в ТЧ2 отобразилось красный зеленый синий

Если речь об отображении... То, ИМХО, ТЧ2 должна отображать
список СпрСвойства, а отбор по владельцу через ТЧ1 текущие данные поле с сылкой на услуги, или, использовать для ТЧ2 отбор строк при изменении позиционирования в ТЧ1
34 titan1993
 
28.05.13
13:11
(33) я попытался это сделать сперва с помощь. кнопки, для отладки. Но у меня проблема с выборкой, немогу понять как заполнить данные из выборки в массив, а потом из массива в ТЧ
35 sapphire
 
28.05.13
13:13
(34) Как раз проблема в подходе...
36 sapphire
 
28.05.13
13:15
(34) ИМХО, стОит добавить реквизит формы с типом ТаблицаЗначений, коей добавить 2 колонки - Услуга,Свойство
При изменении услуг заполнять этот реквизит, а при изменении позиционирования в ТЧ1 играться с отбором строк в элементе формы, указывающем на реквизит.
37 titan1993
 
28.05.13
13:19
(36) понял, спасибо
38 Звездочёт
 
29.05.13
17:33
(0) страшная тема... см. код в адресной строке :)
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн