Имя: Пароль:
1C
1С v8
табличные части с8,2
0 KonstantinK90
 
26.03.15
07:06
Здтаствуйте! Подскажите как правильно сделать. Я создаю новый документ в нем есть 2 табЧасти: 1 Прицепы 2 РасходГСМ, В Первой ТабЧасти Есть колонки такие как ТС и ОстатокТоплива и 2 ТабЧасти Есть колонки  такие как ТС ОстатокТоплива как их связать что бы при изменении в 1 табЧасти ОстатокТоплива Автоматом менялся и 2 ТабЧасти ОстатокТоплива. Я понимаю что нужно повесить на событие приИзменении ОстатокТоплива в 1 ТабЧасти. Но как правильно это сделать если во 2 колонке строк 5-10.... как пробежаться по всем строкам 2 табЧасти и найти   Соответсвие ТС и приравнять остаток топлива
1 rphosts
 
26.03.15
07:15
(0) Если у вас всегда 1 строке из таблицы 1 соответствует 1 строка таблицы 2 - тебе не нужны 2 ТЧ, тебе достаточно 1 ТЧ и если уж отображать в разных видах - отображать разные наборы реквизитов на разных закладках/в разных окнах.
Если такого соответствия нет: обрабатывать события ПриОкончанииРедактирования и ПослеУдаления по алгаритмо реализуещему увязывание данных одной ТЧ с другой
2 rphosts
 
26.03.15
07:16
*алгоритму
3 Chameleon1980
 
26.03.15
07:17
какой нить реквизит "Ключ" и в 1й и во 2й тч
4 KonstantinK90
 
26.03.15
07:18
ключ это тс (транспортное средство)
5 KonstantinK90
 
26.03.15
07:19
пишу вот так
Процедура ТабличноеПолеПрицепыТопливоПриВыездеПриИзменении(Элемент)
    // Вставить содержимое обработчика.
ТабПолеПрицепы   = ЭлементыФормы.ТабличноеПолеПрицепы.ТекущиеДанные;
ТабПолеРасходГСМ = ЭлементыФормы.ТабличноеПолеРасходГСМ.ТекущиеДанные;
Если ТабПолеПрицепы.ТС.Наименование = ТабПолеРасходГСМ.ТС.Наименование Тогда
     ТабПолеРасходГСМ.ОстатокПриВыезде = ТабПолеПрицепы.ТопливоПриВыезде;
    КонецЕсли;
КонецПроцедуры
6 KonstantinK90
 
26.03.15
07:19
прицепы это первая таб
7 KonstantinK90
 
26.03.15
07:21
он берет тс из первой таб части и сравнивает тс из 2 таб части только 1 строку а если соответствующая тс во в 2 таблице находится в строке 2 или 5 как пробежаться по сторкам и сравнить
8 ДенисЧ
 
26.03.15
07:22
(7) Продам описание функции НайтиСтроки(), а также конструкции цикла.
9 KonstantinK90
 
26.03.15
07:23
о блин точно найти строки как это сделать скажите а тя уже голову сломал
10 KonstantinK90
 
26.03.15
07:26
как воспользоваться найтиСтроки
11 KonstantinK90
 
26.03.15
07:27
в моем случаи?
12 rphosts
 
26.03.15
07:31
Твоё ПриИзменении не отловит факта удаления строки из одной ТЧ, не отловит изменения ТС в строке и т.д.
13 KonstantinK90
 
26.03.15
07:32
ну а как нужно?
14 аспид
 
26.03.15
07:35
ТабПолеПрицепы   = ЭлементыФормы.ТабличноеПолеПрицепы.ТекущиеДанные;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ТС", ТабПолеПрицепы.ТС);
НайденныеСтроки = ТабПолеРасходГСМ.НайтиСтроки(ПараметрыОтбора);

Вот как то так попробуй
15 kosts
 
26.03.15
07:38
Тоже самое но компактнее )


Для Каждого Строка Из ТабПолеРасходГСМ.НайтиСтроки(Новый Структура("ТС", ТабПолеПрицепы.ТС)) Цикл
    
КонецЦикла;
16 KonstantinK90
 
26.03.15
07:39
спасибо сейчас по пробую
17 Chameleon1980
 
26.03.15
07:39
да блин ну что за люди.
то в СП трудно глянуть, то отладчиком поглядеть.
Нет. Пойдем на форум - за кнопкой "Сделать все".
18 аспид
 
26.03.15
07:39
(15)
*Для Каждого СтрокаТЧ ИЗ ...
так правильнее ))
19 kosts
 
26.03.15
07:43
(18) И так и так работает, но чаще я пишу проще

Для Каждого т Из ... Цикл
    
КонецЦикла;
20 KonstantinK90
 
26.03.15
07:43
Значение не является значением объектного типа (НайтиСтроки)
НайденныеСтроки = ТабПолеРасходГСМ.НайтиСтроки(ПараметрыОтбора);
21 kosts
 
26.03.15
07:48
(20) Вместо ТабПолеРасходГСМ надо написать действительное имя табличной части, а не имя табличного поля.
22 аспид
 
26.03.15
07:57
(19) Стив Макконнелл на тебя смотрит неодобрительно ))

я в таких случая обычно пишу

Для Каждого СтрокаТабЧастиИмяТабЧастиИмениБорисаНуралиева из ИмяТабЧастиИмениБорисаНуралиева Цикл ..

букв не жалко.. зато читать потом проще .. и мне и тому кто будет потом ..
23 KonstantinK90
 
26.03.15
08:01
пишу вот так
Процедура ТабличноеПолеПрицепыТопливоПриВыездеПриИзменении(Элемент)
    // Вставить содержимое обработчика.
ТабПолеПрицепы   = ЭлементыФормы.ТабличноеПолеПрицепы.ТекущиеДанные;
ТабПолеРасходГСМ = ЭлементыФормы.ТабличноеПолеРасходГСМ.ТекущиеДанные;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ТС", ТабПолеПрицепы.ТС);
НайденныеСтроки = РасходГСМ.НайтиСтроки(ПараметрыОтбора);

Для Каждого Строка Из НайденныеСтроки Цикл
    Если Строка.ТС.Наименование = ТабПолеПрицепы.ТС.Наименование Тогда
        ТабПолеРасходГСМ.ОстатокПриВыезде = ТабПолеПрицепы.ТопливоПриВыезде;
        КонецЕсли;
КонецЦикла;

КонецПроцедуры
выдает ошибку Значение не является значением объектного типа (ОстатокПриВыезде)
        ТабПолеРасходГСМ.ОстатокПриВыезде = ТабПолеПрицепы.ТопливоПриВыезде;
в чем дело подскажите
24 kosts
 
26.03.15
08:03
(22) В имена переменных с простым смыслом нет смысла писать полный смысл. Во как )))
25 KonstantinK90
 
26.03.15
08:05
??
26 kosts
 
26.03.15
08:07
(23) >Если Строка.ТС.Наименование = ТабПолеПрицепы.ТС.Наименование Тогда
Это так специально написано , сравнение по наименованию или по ошибке?
27 аспид
 
26.03.15
08:07
"ТабПолеРасходГСМ" это элемент формы ? или табличная часть документа ?
28 аспид
 
26.03.15
08:12
(23) а впрочем пофиг..
Вместо:
ТабПолеРасходГСМ.ОстатокПриВыезде = ТабПолеПрицепы.ТопливоПриВыезде;

Пиши:
Строка.ОстатокПриВыезде = ТабПолеПрицепы.ТопливоПриВыезде;
29 KonstantinK90
 
26.03.15
08:15
уже на писал вот так. главное что интересно ошибки нет в отладчике смотрю он передает значение в Строка.ОстатокПриВыезде а при выходе из отладки значение ноль
30 аспид
 
26.03.15
08:19
(29) ээээ .. щито ? еще раз. в чем проблема ?
31 KonstantinK90
 
26.03.15
08:23
пишу вот так
Процедура ТабличноеПолеПрицепыТопливоПриВыездеПриИзменении(Элемент)
    // Вставить содержимое обработчика.
ТабПолеПрицепы   = ЭлементыФормы.ТабличноеПолеПрицепы.ТекущиеДанные;
ТабПолеРасходГСМ = ЭлементыФормы.ТабличноеПолеРасходГСМ.ТекущиеДанные;

ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ТС", ТабПолеПрицепы.ТС);
НайденныеСтроки = РасходГСМ.НайтиСтроки(ПараметрыОтбора);

Для Каждого Строка Из НайденныеСтроки Цикл
    Если Строка.ТС.Наименование = ТабПолеПрицепы.ТС.Наименование Тогда
        Строка.ОстатокПриВыезде = ТабПолеПрицепы.ТопливоПриВыезде;
        
        Сообщить(Строка.ОстатокПриВыезде);
        КонецЕсли;
КонецЦикла;

КонецПроцедуры
32 KonstantinK90
 
26.03.15
08:24
он передает данные в значение строка.ОстатокПриВыезде но при выходе из отладчика значение строка.ОстатокПриВыезде пусто как будто он передает но не сохраняет что передал
33 аспид
 
26.03.15
08:25
ага ? и ? что сообщает ?
34 KonstantinK90
 
26.03.15
08:26
и главное на писал для проверки Сообщить(Строка.ОстатокПриВыезде); сообщает верон не сохраняет
35 KonstantinK90
 
26.03.15
08:26
сообщает то что я указал в ТабПолеПрицепы.ТопливоПриВыезде
36 аспид
 
26.03.15
08:27
Если Строка.ТС.Наименование = ТабПолеПрицепы.ТС.Наименование Тогда
        Строка.ОстатокПриВыезде = ТабПолеПрицепы.ТопливоПриВыезде;
        
        Сообщить("1 -" + Строка.ОстатокПриВыезде);
        Сообщить("2 -" + ТабПолеПрицепы.ТопливоПриВыезде);
КонецЕсли;

Что сообщит ?
37 KonstantinK90
 
26.03.15
08:30
1 -5
2 -5
38 KonstantinK90
 
26.03.15
08:31
и что это значит?
39 KonstantinK90
 
26.03.15
08:31
в поле ТабПолеПрицепы.ТопливоПриВыезде я указал число 5
40 KonstantinK90
 
26.03.15
08:32
?
41 аспид
 
26.03.15
08:34
это значит что в таб поле РасходГСМ должно появиться указанное значение.
42 KonstantinK90
 
26.03.15
08:34
это я уже сам понял но оно почему то не появляеться
43 аспид
 
26.03.15
08:35
значит что в строку таб части все передается корректно. на форме в таб части что нить появляется ?
44 kosts
 
26.03.15
08:36
Возможно где-то еще какой-то код выполняется и перезатирает
45 аспид
 
26.03.15
08:36
всё. теперь сам. пора валить на работу. я ушел.
46 KonstantinK90
 
26.03.15
08:37
сам вакт интересен если я в с  Строка.ОстатокПриВыезде  руками поставлю какое нибудь число а потом в поле ТабПолеПрицепы.ТопливоПриВыезде то при выполнении события в Строка.ОстатокПриВыезде = 0