Имя: Пароль:
1C
1С v8
Изменение данных поля строки табличной части
0 gmax007
 
24.07.13
15:56
8.2 Управляемые формы. Как изменить данные определенного поля во всех строках (в цикле) в уже открытой форме при нажатии на кнопку, новые данные рассчитываются умножением данных из других полей. В отладчике все считается, ошибок нет, а на форме ничего не меняется. Помогите
1 ДенисЧ
 
24.07.13
16:04
Беги на сервер и там меняй...
Если это ТЧ объекта, то через Объект.ТЧ, Иначе РеквизитФормыВЗначение("ТЧ"); ЗначениеВРеквизитФормы(); КОнецЕсли;
2 Поросенок Петр
 
24.07.13
16:04
Ошибка в 4-й строке. Однозначно.
3 gmax007
 
24.07.13
16:20
(1) а как на сервере к полю ТЧ обратиться чтобы его перезаписать как раз. Объект.ТЧ - сама ТЧ, а его поле
4 ДенисЧ
 
24.07.13
16:23
(3) Каком кверху :-)
Для Каждого стр из Объект.Тч Цикл
 Стр.Реквизит3 = стр1.Реквизит1 + стр.Реквизит2;
КонецЦикла;
5 banco
 
24.07.13
16:25
(1) можно и на клиенте
6 palpetrovich
 
24.07.13
16:32
(5) +1
&НаКлиенте
Процедура ТоварыТоварПриИзменении(Элемент)

   РаботаСДокументамиНаКлиенте.РасчитатьСумму(СтрокаТабличнойЧасти);

КонецПроцедуры
7 palpetrovich
 
24.07.13
16:32
+ 6 поудалял лишнее :)
СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
8 gmax007
 
24.07.13
16:36
(4)  + 6
Да все это я пробовал, в отладчике все считается например

Для Каждого стр из Объект.Тч Цикл
 Сообщить(Стр.Реквизит3);
КонецЦикла;

честно сообщает, а вот

Для Каждого стр из Объект.Тч Цикл
 Стр.Реквизит3 = стр1.Реквизит1 + стр.Реквизит2;
КонецЦикла;

ну считается реквизит3 а вот на форме не меняется
9 gmax007
 
24.07.13
16:38
то же и на клиенте происходит
10 gmax007
 
24.07.13
16:43
&НаСервере
Процедура ПересчетПоКурсу(Курс)
ЗакРубСумма = 0;
//ТаможенныеРасходы - имя ТЧ
Для Каждого стр из Объект.ТаможенныеРасходы Цикл
 Стр.ЗакупочнаяЦенаРуб = Стр.ЗакупочнаяЦенаДол*Курс;
 ЗакРубСумма = ЗакРубСумма + Стр.ЗакупочнаяЦенаРуб;
КонецЦикла

вот конкретный пример
11 palpetrovich
 
24.07.13
16:57
все работает:
// в форме документа:
&НаКлиенте
Процедура ТоварыТоварПриИзменении(Элемент)
   СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
   РаботаСДокументамиНаКлиенте.РасчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
// общий модуль, в свойствах флаг - только на "Клиент(упр.прил)
Процедура РасчитатьСумму(СтрокаТабличнойЧасти) Экспорт
   СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
КонецПроцедуры
12 gmax007
 
24.07.13
17:00
Попробую, отпишусь, щас вспоминаю раньше тоже что-то подобное через общий модуль пришлось делать

А вот здесь
&НаСервере
Процедура ПересчетПоКурсу(Курс)
ЗакРубСумма = 0;
//ТаможенныеРасходы - имя ТЧ

Для Каждого стр из Объект.ТаможенныеРасходы Цикл
 Стр.ЗакупочнаяЦенаРуб = Стр.ЗакупочнаяЦенаДол*Курс;
 ЗакРубСумма = ЗакРубСумма + Стр.ЗакупочнаяЦенаРуб;
КонецЦикла

Реквизиты readonly штоль? почему он выводит (Сообщить), а не пишет? Так уж интересно просто
13 gmax007
 
25.07.13
09:12
{ОбщийМодуль.МойОбщийМодуль.Модуль(3)}: Значение не является значением объектного типа (ЗакупочнаяЦенаРуб)
      СтрокаТабличнойЧасти.ЗакупочнаяЦенаРуб = СтрокаТабличнойЧасти.ЗакупочнаяЦенаДол*Курс;


В чем может быть дело?
14 Капитан О
 
25.07.13
09:14
(13) в СтрокаТабличнойЧасти
15 gmax007
 
25.07.13
09:19
Ну это я понял, а как мне посчитать то ее в общем модуле?
16 Капитан О
 
25.07.13
09:21
(15) присвоить туда строку ТЧ, а не всякую хню
17 gmax007
 
25.07.13
09:23
(11)
А собственно почему СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;

текущие данные это же вроде когда пользователь выделяет строку в ТЧ, а у меня должен просто дату курса доллара менять и вся ТЧ тутже пересчитываться
18 Капитан О
 
25.07.13
09:25
кажется, начинает работать мозг
19 gmax007
 
25.07.13
10:00
Помогите, как мне данные из поля строки передать в общий модуль и там их перезаписать
20 cw014
 
25.07.13
10:02
Я подозреваю, что на форме таблица никак не связана с ТЧ
21 Капитан О
 
25.07.13
10:06
(19) передавай данные из данных
22 gmax007
 
25.07.13
10:06
Все связано, она у меня заполняется из документа-основания, дефолтными данными которые я ей даю при обработке заполнения,там из документа-основания дата переходит в дату курса доллара и прям обработке заполнения все считается, а вот надо чтобы еще пользователь мог эту дату изменить вручную, и при изменении пересчиталось
23 cw014
 
25.07.13
10:08
(22) Ну не знаю. Если увижу картинку - отвечу, иначе вариантов мильон
24 gmax007
 
25.07.13
10:09
(21) Можно попроще я не профессионал, данные из данных это что конкретно вот например мне нужно передать в общий модуль данные строки
Я передаю стр = ЭтаФорма.Элементы.ИмяТЧ.(а здесь что только не пробовал)
Я понимаю что я не сами данные а форму передаю
Приведите пожалуйста пример что за данные из данных
25 Капитан О
 
25.07.13
10:10
(24) пример: РассчитатьТЧ(ТЧ)
26 gmax007
 
25.07.13
10:19
(23)
Вот форма документа, функцию которая получает курс доллара на дату я написал и этот курс как раз хочу передать в общий модуль да пересчета колонки ТЧ
[URL=http://radikal.ru/fp/03ce8092253049279292726195c4033a][IMG]http://s55.radikal.ru/i150/1307/83/e3483044ffdft.jpg[/IMG][/URL]
27 gmax007
 
25.07.13
10:20
28 cw014
 
25.07.13
10:21
Код в студию
29 gmax007
 
25.07.13
10:28
Модуль формы
&НаКлиенте
Процедура ПолучитьКурс(ДатаКурса)
    Курс = 0;
  ПолучениеКурса(ДатаКурса, Курс);

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

&НаСервере
Процедура ПолучениеКурса(ДатаКурса, Курс)
  Обработка = РеквизитФормыВЗначение("Объект");
  Курс = Обработка.ПересчетДолларовВРублиНаУказДату(ДатаКурса);
  ЗначениеВРеквизитФормы(Обработка, "Объект");
КонецПроцедуры

&НаКлиенте
Процедура ДатаОплатыПоступленияПриИзменении(Элемент)
    ДатаКурса = Объект.ДатаОплатыПоступления; //новая дата курса
    Курс = 0;
    ПолучениеКурса(ДатаКурса, Курс);// Курс прилетает на нужную ДатаКурса

    Строка = ЭтаФорма.Элементы.ТаможенныеРасходы;    //СтрокаТабличнойЧасти = ЭтаФорма.Элементы.ТаможенныеРасходыЗакупочнаяЦенаРуб;  // здесь незнаю что нужно получить для передачи в общий модуль

    ЗакРубСумма = 0;  

    МойОбщийМодуль.ПересчитатьПоКурсуДляСебестоимости (Строка, Курс, ЗакРубСумма); // Идем в общий модуль вместе со строкой и курсом      
КонецПроцедуры

Общий модуль (должно считаться типа того и переписать данные ТЧ)
Для каждого цикл
строка.ценаРуб = строка.ценаДол*Курс
конеццикла
30 Капитан О
 
25.07.13
10:30
(29) ПересчетДолларовВРублиНаУказДату - вот тут пиши верный код
31 gmax007
 
25.07.13
10:33
Курс = Обработка.ПересчетДолларовВРублиНаУказДату(ДатаКурса);

В Курс записывается правильный курс из регистра, а ПересчетДолларовВРублиНаУказДату(ДатаКурса) в модуле объекта у меня, тут нормально я получаю курс, который можно передать в общий модуль, а если не оптимизировано, то это потом буду смотреть
32 cw014
 
25.07.13
10:41
Строка = ЭтаФорма.Элементы.ТаможенныеРасходы;    //СтрокаТабличнойЧасти = ЭтаФорма.Элементы.ТаможенныеРасходыЗакупочнаяЦенаРуб;  // здесь незнаю что нужно получить для передачи в общий модуль


Убирай этот фееричный бред
33 gmax007
 
25.07.13
10:43
(32) что мне  передать вместо моего бреда в общий модуль чтоб можно было пересчитать ТЧ
34 Капитан О
 
25.07.13
10:44
(33) дату, если она не является реквизитом
35 cw014
 
25.07.13
10:44
Элементы.ТвояТЧ.ТекущиеДанные
36 Капитан О
 
25.07.13
10:46
(35) скажи как умный товарищ, зачем без формы пересчитывать то, что живёт только на форме? (у автора так же?)
37 cw014
 
25.07.13
10:47
(36) Понятия не имею. Я весь код не вижу, да и задача до конца мне не ясна. Она так то в течение 5 минут решается
38 Капитан О
 
25.07.13
10:49
(37) задача - пересчёт ТЧ. как в букваре радченко при изменении цены пересчитывается сумма. только у радченко вынесение кода в ОМ оправдано (данные пересчитываются без формы), а зачем автор захотел использовать модуль обработки - ещё вопрос
39 gmax007
 
25.07.13
10:49
Данные = Элементы.ТаможенныеРасходы.ТекущиеДанные; уже тип Неопределено
40 gmax007
 
25.07.13
10:50
я ж пробовал так сто раз текущиеданные, текущаястрока толку нет
41 Капитан О
 
25.07.13
10:50
(39) зачем тебе элементы? зачем тебе текущая строка?
42 cw014
 
25.07.13
10:50
(39) Логично, строка то не выбрана

Делай так:

Для Каждого СтрокаТЧ ИЗ Объект.ТвояТЧ Цикл
    МойОбщийМодуль.ПересчитатьПоКурсуДляСебестоимости (СтрокаТЧ, Курс, ЗакРубСумма); // Идем в общий модуль вместе со строкой и курсом
КонецЦикла;
43 gmax007
 
25.07.13
10:51
(38)
именно как у Радченко, только там строка становиться текущий, потому что пльзователь на ней стоит и меняет цену (вроде) , а у меня при изменении даты, которая в шапке а не ТЧ
44 Капитан О
 
25.07.13
10:51
(43) поэтому тебе надо переработать всю таблицу
45 cw014
 
25.07.13
10:52
(43) см (42)
46 Капитан О
 
25.07.13
10:52
а я за цикл в ОМ
47 gmax007
 
25.07.13
10:53
(44) вот я и прошу, чтоб ткнули что нужно в таком случае вместо текущейстроки передавать, чтоб тип был у данных и посчитать
48 gmax007
 
25.07.13
10:56
(42) тоже самое все там передается СтрокаТЧ (которую как раз я и не знаю как получить), вопрос не вцикле и в аргументах, а в том какую строку (как получить) (или же поле) передать для подсчета
49 gmax007
 
25.07.13
10:56
(42) Напиши что есть СтрокаТЧ из приведенного примера
50 cw014
 
25.07.13
10:56
(48) Тебе готовое решение твоей проблемы написали
51 cw014
 
25.07.13
10:57
(49) СтрокаТЧ из приведенного примера - это ДанныеФормыЭлементКоллекции
52 gmax007
 
25.07.13
11:00
(51) (8)
53 cw014
 
25.07.13
11:02
(25) > (20)
54 cw014
 
25.07.13
11:02
(52) Либо данная колонка не связана с реквизитом
55 Капитан О
 
25.07.13
11:03
(54) я вообще понял, что у него всё на форме живёт
56 gmax007
 
25.07.13
11:13
(55) может я что-то непонимаю про житье на форме ну я писал что реквизиты заполняются/считаются еще при создании этого документа на основании другого
вот реквизиты, связаны они, я табличную часть наформу перетаскивал реквизитом
http://s020.radikal.ru/i703/1307/ab/1ad6cb5c6fa2.jpg
57 gmax007
 
25.07.13
11:15
Через Объект. можно обратиться к ТЧ
58 gmax007
 
25.07.13
11:21
То есть я могу обратиться Объект.ИмяТЧ, но не могу Объект.ИмяТЧ.Реквизит, так должно или не должно быть?
59 Капитан О
 
25.07.13
11:23
(58) какая из трёхсот строк имеется в виду во втором случае?
60 gmax007
 
25.07.13
11:25
(59) О = Объект.ТаможенныеРасходы.ЗакупочнаяЦенаРуб

Прогнал через отладчик - поле объекта не обнаружено, может заново весь док и форму построить
61 Капитан О
 
25.07.13
11:26
(60) а на вопрос ответь
62 gmax007
 
25.07.13
11:27
говорю же Объект.ТаможенныеРасходы.ЗакупочнаяЦенаРуб не работает а Объект.ТаможенныеРасходы. Эти случаи имеешь виду?
63 cw014
 
25.07.13
11:27
Я пасс, я уже не знаю как объяснять. Уже на пальцах разжевали и в рот положили, он все равно свое гнет
64 gmax007
 
25.07.13
11:28
(63)не гнул бы если работало
65 Капитан О
 
25.07.13
11:28
(62) какая строка?
66 Капитан О
 
25.07.13
11:28
(64) пока будешь гнуть, не заработает
67 gmax007
 
25.07.13
11:29
(65) писал же сто раз Объект.ТаможенныеРасходы.ЗакупочнаяЦенаРуб
68 Капитан О
 
25.07.13
11:31
(67) в ТЧ тысяча строк. закупочную цену какой ты сейчас показал?
69 gmax007
 
25.07.13
11:32
Ладно, буду заново форму строить или весь документ
70 gmax007
 
25.07.13
15:01
Короче все по другому сделал. Теперь пользователь у меня не будет менять дату курса, а будет ее указывать в окне обработки (а также записываться в константу), которая создает документ и передает управление обработке заполнения на основании, которое также будет указано в окне обработки, так даже лучше потому что не будет дефолтного заполнения , которое будет не на нужную дату, а сразу. А те расчеты чот у меня не получились также считаются в заполнении но у же с нужным курсом на дату(из константы)
71 Капитан О
 
25.07.13
15:59
спорим, константа тут на фих не нужна?
72 gmax007
 
25.07.13
16:12
(71)
Возможно не нужна. Не знал как проще данные из общего модуля передать в модуль объекта моего документа, ну работает эта часть пока, оптимизировать потом мож буду
73 Капитан О
 
25.07.13
16:19
(72) оптимизация - это о другом. в твоём случае делать правильно нужно
74 gmax007
 
25.07.13
16:23
(73) Да я хочу побыстрей доделать документ, регистры евошние потом ну и отчеты, показать экономистам что себестоимость так как им нужно считается)) торопют целыми днями. А вообще у меня получается что из обработки после ОткрытьФорму выполняется обработка заполнения, я не знаю как передать основание и дату курса (указанные в окне обработки) в нее из ОткрытьФорму, а вот додумался через константы. примитив конечно же, зато доволен что считается
75 Капитан О
 
25.07.13
16:33
(74) спешка нужна лишь при ловле блох
76 gmax007
 
26.07.13
11:28
странно
&НаСервере
Процедура ПересчетПоКурсу(Курс)
ЗакРубСумма = 0;
//ТаможенныеРасходы - имя ТЧ


Для Каждого стр из Объект.ТаможенныеРасходы Цикл
  Стр.ЗакупочнаяЦенаРуб = Стр.ЗакупочнаяЦенаДол*Курс;
  КонецЦикла

Здесь не записывалось в Стр.ЗакупочнаяЦенаРуб


Позже делал подобную вещь только распределение себестимости
там было
Для Каждого стр из Объект.ТаможенныеРасходы Цикл
  Стр.Расходы = Стр.ЗакупочнаяЦенаРуб ну и формула расчета;
  КонецЦикла

и все в Стр.Расходы записалось