Имя: Пароль:
1C
1С v8
Заполнить ТЧ в управляемых формах
0 gerthog
 
13.01.15
15:56
Нужно при изменении одного реквизита ТЧ заполнить другой, делаю так:

&НаКлиенте
Процедура ИсследованияНоменклатураПриИзменении(Элемент)
    СтрокаТЧ = Элементы.Исследования.ТекущиеДанные;
    СтрокаТЧ.лис_Биоматериал = ИсследованияНоменклатураИзмененить(Элементы.Исследования.ТекущиеДанные.Номенклатура);
КонецПроцедуры

Ошибок нет, но и не заполняется нифига
1 Timon1405
 
13.01.15
15:58
2 gerthog
 
13.01.15
16:02
(1) Петросян что ли?
3 Garykom
 
гуру
13.01.15
16:07
(2) Вот почему люди считают что можно без изучения теории, прохождения практики и сдачи экзамена пилотировать авиалайнер?

Просто задав вопрос на форуме пилотов?
4 gerthog
 
13.01.15
16:10
Я с УФ больше года не работал, да и когда работал и то чуток. Помню раньше я это делал, ща просто туплю чёто
5 Garykom
 
гуру
13.01.15
16:12
(4) угу после операции коррекции пола ))
6 olegves
 
13.01.15
16:20
(0) код для ИсследованияНоменклатураИзмененить покажи
7 Euguln
 
13.01.15
16:22
(0) сразу в глаза бросается:
СтрокаТЧ = Элементы.Исследования.ТекущиеДанные;
СтрокаТЧ.лис_Биоматериал = ИсследованияНоменклатураИзмененить(СтрокаТЧ.Номенклатура);

(6) + 1, как вариант типы не совпадают
8 gerthog
 
13.01.15
16:25
(6) Он работает
&НаСервере
Функция ИсследованияНоменклатураИзмененить(Элемент)
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Лис_Биоматериал.Ссылка
        |ИЗ
        |    Справочник.Лис_Биоматериал КАК Лис_Биоматериал
        |ГДЕ
        |    Лис_Биоматериал.Владелец = &Элемент";
    
    Запрос.УстановитьПараметр("Элемент", Элемент);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ВыборкаДетальныеЗаписи.Количество() = 1 Тогда
            Возврат ВыборкаДетальныеЗаписи.Ссылка;
        КонецЕсли;
    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА    
КонецФункции

И типы совпадают
9 vicof
 
13.01.15
16:27
"Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ВыборкаДетальныеЗаписи.Количество() = 1 Тогда
            Возврат ВыборкаДетальныеЗаписи.Ссылка;
        КонецЕсли;
    КонецЦикла;"
А если записей нет или больше одной? Что за балбес писал это?
10 olegves
 
13.01.15
16:36
(8) это зачем?

Если ВыборкаДетальныеЗаписи.Количество() = 1 Тогда
11 gerthog
 
13.01.15
16:39
(10) Их может быть больше одного, если больше одного тогда надо оставить как есть. Если ни одного или больше одного, то делать ничего не надо. Почему балбес то?
12 Euguln
 
13.01.15
16:41
(11) Отладчиком проходил?
13 gerthog
 
13.01.15
16:51
(12) Отладчиком проходил, функция всё вернула, типы совпадают всё проходит на ура, только ничего не меняется
14 polosov
 
13.01.15
16:54
(13)
ТаблицаФормы (FormTable)
ТекущиеДанные (CurrentData)
Использование:

Только чтение.
Описание:

Тип: ДанныеФормыСтруктура; ДанныеФормыЭлементКоллекции; ДанныеФормыЭлементДерева.
Представляет доступ к текущим данным (данным текущей строки).

Доступность:

Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент).
15 gerthog
 
13.01.15
16:57
(14) Ах вот оно чё, а как тогда надо?)
16 polosov
 
13.01.15
16:58
(15) Хотя наверно должно писать в дочерний объект
17 Euguln
 
13.01.15
16:59
(14) Не в этом дело, свойства можно менять.
18 polosov
 
13.01.15
17:02
(16) У меня есть подобное присваивание. Все нормально отрабатывает. Только в ПередОкончаниемРедактирования
19 gerthog
 
13.01.15
17:15
(18) Можешь код показать?
20 Krolik Bezobraznik
 
13.01.15
17:27
Как мне кажется ТЧ следует заполнять наСервере.
21 Garykom
 
гуру
13.01.15
17:29
(20) +1 )) в случае УФ, но не надо  было говорить об этом ТС может все таки прочитал(ла) бы книжку
22 polosov
 
13.01.15
18:01
(19)
&НаКлиенте
Процедура ЗаготовкиПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
    
    Если НЕ ОтменаРедактирования Тогда
        Элемент.ТекущиеДанные.СерийныйНомерОтливки = ЭтаФорма.Элементы.Отливки.ТекущиеДанные.СерийныйНомерОтливки;
        СформироватьСерийныйНомерЗаготовки(ЭтаФорма.Элементы.Заготовки.ТекущиеДанные)        
    КонецЕсли;
КонецПроцедуры
23 gerthog
 
14.01.15
08:12
(20) Будет ошибка: "Текущие данные таблицы недоступны на сервере"
24 Рэйв
 
14.01.15
08:18
(20)Это если программно заполнять объект из базу.
А в случае с ТС все боступно через Объект.ТабЧасть
25 Рэйв
 
14.01.15
08:21
(23)Чцдес не бывает.
Варианты:
1.Типы все таки не совпадают
2.Возвращается пустая ссылка
3. Возвращается ссылка с пустым наименованием.
26 gerthog
 
14.01.15
08:26
(25) Отладчик говорит значение есть, тип: СправочникСсылка.Лис_Биоматериал, а реквизит ТЧ имеет тип: СправочникСсылка.Лис_Биоматериал
27 Рэйв
 
14.01.15
08:29
(26)А что говорит отладчик на:

ИсследованияНоменклатураИзмененить(Элементы.Исследования.ТекущиеДанные.Номенклатура).ПустаяСсылка()
?
28 gerthog
 
14.01.15
08:31
(27) Говорит: Метод объекта не обнаружен
29 Рэйв
 
14.01.15
08:32
(28)Офигенно:-)

ну тогда скажи что говорит на :

ТипЗнч(ИсследованияНоменклатураИзмененить(Элементы.Исследования.ТекущиеДанные.Номенклатура))
?
30 lxndr
 
14.01.15
08:33
(27) *Пустая()
31 Рэйв
 
14.01.15
08:34
(30)блин...точно.
32 Рэйв
 
14.01.15
08:34
(28) Попробуй с учетом (30)
Я с методом менеджера спутал:-)
33 polosov
 
14.01.15
08:35
(29) А ты не хочешь свой код поправить на такое?

  СтрокаТЧ = Элементы.Исследования.ТекущиеДанные;

Заменить на

  СтрокаТЧ = Элемент.ТекущиеДанные;
34 lxndr
 
14.01.15
08:35
Вот это:
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ВыборкаДетальныеЗаписи.Количество() = 1 Тогда
            Возврат ВыборкаДетальныеЗаписи.Ссылка;
        КонецЕсли;
    КонецЦикла;

Замени на это:

        Если ВыборкаДетальныеЗаписи.Количество() = 1 Тогда
            ВыборкаДетальныеЗаписи.Следующий();
            Возврат ВыборкаДетальныеЗаписи.Ссылка;
        Иначе Возврат Неопределено;
        КонецЕсли;
35 polosov
 
14.01.15
08:35
(33) это к (28)
36 Рэйв
 
14.01.15
08:36
(33)Буду я еще милисекунды высчитывать от использования второй точки.. Результат важен
37 Рэйв
 
14.01.15
08:38
(33)однохренственно же:-)
Но я тоже предпочитаю все таки явно обращаться через Элементы.Так более читаемо.
38 DrZombi
 
гуру
14.01.15
08:40
(28) тебе в (9) намекали, что у тебя Гуано Код.
Зачем ты присвистываешь Цикл?
39 DrZombi
 
гуру
14.01.15
08:40
(0) Отладчик включи, и почитай книжку по (1) :)
40 gerthog
 
14.01.15
08:47
(29) отладчик на это: "ТипЗнч(ИсследованияНоменклатураИзмененить(Элементы.Исследования.ТекущиеДанные.Номенклатура))", говорит: значение = Биоматериал, Тип= Тип
41 Рэйв
 
14.01.15
08:48
(40)На пустую проверь все таки с учетом (30)
42 gerthog
 
14.01.15
08:48
(38) В (9) чувак ляпнул не подумав. Хрен с ним, с циклом, пусть хотяб с циклом заработает
43 gerthog
 
14.01.15
08:49
(41) ТипЗнч(ИсследованияНоменклатураИзмененить(Элементы.Исследования.ТекущиеДанные.Номенклатура)) это возвращает Ложь
44 gerthog
 
14.01.15
08:49
(41) ИсследованияНоменклатураИзмененить(Элементы.Исследования.ТекущиеДанные.Номенклатура).Пустая() - это возвращает Ложь
45 gerthog
 
14.01.15
08:49
А (43) не то скопипастил
46 Krolik Bezobraznik
 
14.01.15
08:51
Но судя по всему код у ТС вполне работоспособный.

Вот пример когда у меня в ОтгрузкеТовара

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
    
    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;        
    
    Если ТекущиеДанные <> Неопределено Тогда
        Если ЗначениеЗаполнено(ТекущиеДанные.Номенклатура) Тогда
        
            НовыйКод = СокрЛП(ПолучитьЗначениеРеквизита(ТекущиеДанные.Номенклатура, "Код"));
            Если ТекущиеДанные.НоменклатураКод <> НовыйКод Тогда
                ТекущиеДанные.НоменклатураКод = НовыйКод;
            КонецЕсли;
        Иначе
            ТекущиеДанные.НоменклатураКод = "";
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьЗначениеРеквизита(Элемент, Реквизит = "")
    
    Возврат Элемент[Реквизит]
    
КонецФункции
47 Krolik Bezobraznik
 
14.01.15
08:52
(46) + вполне себе работает.

ТС у тебя действительно или Типы не совпадают или значение пустое возвращает.
48 gerthog
 
14.01.15
08:52
(34) Думаешь если заменю это решит проблему?
49 gerthog
 
14.01.15
08:55
Тут столько умников которые мне книжки советуют, а получается, что и сами их не читали
50 Krolik Bezobraznik
 
14.01.15
08:57
ТС ты бы в функции ИсследованияНоменклатураИзмененить добавил код возврата "неопределено" после цикла. Так было бы яснее что тебе возвращает твоя функция, раз отладчик не помогает.

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

Возврат Неопределено;
51 gerthog
 
14.01.15
08:59
(50) Сделал я так, и естесно не помогло, возвращает ссылку, нужную ссылку
52 polosov
 
14.01.15
09:02
Проверил код ТС.
Все работает.

&НаКлиенте
Процедура ТабличнаяЧасть1ПриИзменении(Элемент)
    // Вставить содержимое обработчика.
    ТекСтр = Элементы.ТабличнаяЧасть1.ТекущиеДанные;
    ТекСтр.Реквизит1 =     ПолучитьЭлементСпр();
    
КонецПроцедуры


&НаСервере
Функция ПолучитьЭлементСпр()

Возврат Справочники.Материалы.НайтиПоНаименованию("Лом 11А");    

КонецФункции // ПолучитьЭлементСпр()
53 gerthog
 
14.01.15
09:03
(52) Спасибо, тогда буду искать причины не в коде
54 Krolik Bezobraznik
 
14.01.15
09:08
ТС ты нам потом расскажи, в чем дело было. Уж больно загадочно. =))
55 gerthog
 
14.01.15
09:16
В реквизите ТЧ в связях параметра выбора, режим изменения связанного значения установил на "Не изменять" и заработало :)
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс