|
ПолучитьДействие | ☑ | ||
---|---|---|---|---|
0
ЯЧайник
27.08.15
✎
14:08
|
Управляемые формы.
В общем модуле НаКлиенте пишу: ТоварыТаб = Форма.Объект.Товары; СтрТовары = ТоварыТаб.Добавить(); ЗаполнитьЗначенияСвойств(СтрТовары,ТекущиеДанные) СтрТовары.Количество = ВыбраннаяСерия.Количество-ВыбраннаяСерия.СвободныйОстаток; СтрТовары.КоличествоУпаковок = ВыбраннаяСерия.Количество-ВыбраннаяСерия.СвободныйОстаток; После Чего Я хочу, чтобы сработало действие "ПриИзменении" у поля КоличествоУпаковок. У меня ничего не выходит. Подскажите,как это сожно сделать? |
|||
1
ЯЧайник
27.08.15
✎
14:09
|
можно сделать
|
|||
2
PR третий
27.08.15
✎
14:10
|
Никак.
|
|||
3
bolobol
27.08.15
✎
14:10
|
А в каком месте это хотение реализовано?, чтобы говорить о том, что "ничего не выходит"
|
|||
4
ДенисЧ
27.08.15
✎
14:10
|
а что, просто позвать соответствующую функцию - нельзя?
|
|||
5
ibreiter
27.08.15
✎
14:11
|
Вызови ее
|
|||
6
bolobol
27.08.15
✎
14:12
|
(4) Тут нет позиционирования в нужную строку, как и обновления данных формы.
|
|||
7
Митрополит Кирюха
27.08.15
✎
14:12
|
ТоварыТаб = Форма.Объект.Товары;
СтрТовары = ТоварыТаб.Добавить(); ЗаполнитьЗначенияСвойств(СтрТовары,ТекущиеДанные) СтрТовары.Количество = ВыбраннаяСерия.Количество-ВыбраннаяСерия.СвободныйОстаток; СтрТовары.КоличествоУпаковок = ВыбраннаяСерия.Количество-ВыбраннаяСерия.СвободныйОстаток; ПриИзменении(<твой элемент>) |
|||
8
ЯЧайник
27.08.15
✎
14:12
|
Как ее позвать из общего модуля на клиенте?
|
|||
9
bolobol
27.08.15
✎
14:14
|
(8) По возвращению на клиент, на форму - циклом обойти все строки, активизируя их, выполнить ПриИзменении()
|
|||
10
Митрополит Кирюха
27.08.15
✎
14:14
|
(7) это в контексте формы разумеется. Из общего точно сказать не могу
|
|||
11
ЯЧайник
27.08.15
✎
14:23
|
(7),(10)
Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(447,4)}: Процедура или функция с указанным именем не определена (ПриИзменении) <<?>>ПриИзменении(Стр.КоличествоУпаковок); (Проверка: Тонкий клиент) |
|||
12
ЯЧайник
27.08.15
✎
14:24
|
Вроде,надо как-то Действ = ПолучитьДействие()
Выполнить(Действ) Это так? Если делать,как советует (9) |
|||
13
ibreiter
27.08.15
✎
14:24
|
А вы ее откуда вызываете?
|
|||
14
ibreiter
27.08.15
✎
14:24
|
(11) Имеется ввиду
|
|||
15
bolobol
27.08.15
✎
14:25
|
(11) А ежели не определена, то что вызывать-то хотите?
|
|||
16
ЯЧайник
27.08.15
✎
14:26
|
(13) Там же ясно видно, что Форма документа ЗаказКлиента
|
|||
17
ЯЧайник
27.08.15
✎
14:27
|
Я ее всмысле хочу вызвать из другой процедуры, как (9) советует
|
|||
18
ibreiter
27.08.15
✎
14:27
|
(16) (17) Контекст какой у этой процедуры?
|
|||
19
Митрополит Кирюха
27.08.15
✎
14:28
|
(16) Вопрос в том, что процедура ПриИзменении находится в контексте формы документа ЗаказКлиента? И на сколько я вижу вы не элемент пихаете в ПриИзменении
|
|||
20
Митрополит Кирюха
27.08.15
✎
14:29
|
(18) И да, ПриИзменении у вас может называться по другому, например ЗаказыПриИзменении
|
|||
21
ЯЧайник
27.08.15
✎
14:29
|
Да,я поняла о чем речь,сейчас попробую
|
|||
22
bolobol
27.08.15
✎
14:31
|
(21) Я тоже понял, при чём тут ПолучитьДействие() - чтоб не париться о наименовании процедуры и вообще о её наличии. Нет действия - нет выполнения. Логично, чо! Но, не юзал сие.
|
|||
23
ЯЧайник
27.08.15
✎
14:41
|
Пишу
Для Каждого Стр ИЗ ЭтаФорма.Элементы.Товары Цикл ТоварыКоличествоУпаковокПриИзменении(<Элемент>); КонецЦикла; Не пойму, что должно быть на месте <Элемент>? |
|||
24
Митрополит Кирюха
27.08.15
✎
14:43
|
(23) Элементы.ТоварыКоличествоУпаковок
|
|||
25
ЯЧайник
27.08.15
✎
14:45
|
Ага! У меня на другое ругается, что нельзя писать для каждого стр из элементы.товары. Я запуталась, как писать надо?
|
|||
26
Митрополит Кирюха
27.08.15
✎
14:49
|
(25) Элементы.Товары это у вас не коллекция, у Элементы.Товары есть свойство ПодчиненныеЭлементы, вот их перебрать можно
|
|||
27
Митрополит Кирюха
27.08.15
✎
14:52
|
(23) И я бы на вашем месте не вызывал ПриИзменении в цикле, это бессмысленно, после цикла вызовите ТоварыКоличествоУпаковокПриИзменении(Элементы.ТоварыКоличествоУпаковок);
|
|||
28
ЯЧайник
27.08.15
✎
14:54
|
Я так написала
Для Каждого Стр ИЗ Объект.Товары Цикл ТоварыКоличествоУпаковокПриИзменении(ЭтаФорма.Элементы.ТоварыКоличествоУпаковок); КонецЦикла; Работает Попробую без цикла |
|||
29
ЯЧайник
27.08.15
✎
15:01
|
Нет, без цикла у меня меняется только та строчка,на которой стоит курсор, потому что в процедуре ПриИзменении Написано:
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; и дальше естественно все процедуры выполняются с текущаяСтрока Только вот думаю - это же,наверное,много времени машинного будет занимать в цикле то вызывать. мне так-то надо только измененную строку и добавленную ( то изменение строки и добавление происходит в общем модуле на клиенте) можете подсказать какое-то решение? |
|||
30
bolobol
27.08.15
✎
15:19
|
(29) Ну, там же не списание по партиям в цикле))
|
|||
31
bolobol
27.08.15
✎
15:20
|
(28) Вообще - не должно работать! Потому как нет перепозиционирования текущей строки в вашем цикле. То есть - цикл отрабатывает много раз, но только для исходной выделенной строки.
|
|||
32
ЯЧайник
27.08.15
✎
15:37
|
(30) где списание по партиям в цикле? у меня нет цикла, у меня обработчик события выбора серии. надо,когда выбираешь серию и этой серии не хватает на складе,надо, чтобы строчка разбивалась на две: в первой уменьшалось количество, во второй остаток к обеспечению
|
|||
33
ЯЧайник
27.08.15
✎
15:45
|
(31) Я же попробовала,работает. просто мне не нужен цикл. А без цикла как раз и надо позиционироваться на добавленной строке. В процессе пока...)))
|
|||
34
ibreiter
27.08.15
✎
15:48
|
(32) Да ну вы чего...он же пошутил)
|
|||
35
ЯЧайник
27.08.15
✎
15:50
|
Не,мой мозг не распознает такие шутки и смысл их не догоняет))) в чем прикол-то?
|
|||
36
ЯЧайник
27.08.15
✎
16:02
|
В общем, скопировала процедуру из общего модуля (переименовала) и поместила ее в модуле формы, там:
Текущиеданные.Количество = ВыбраннаяСерия.СвободныйОстаток; ТекущиеДанные.КоличествоУпаковок = ВыбраннаяСерия.СвободныйОстаток; ТекущиеДанные.СерияРезерв = ВыбраннаяСерия.Значение; ТоварыКоличествоУпаковокПриИзменении(ЭтаФорма.Элементы.ТоварыКоличествоУпаковок); ТоварыТаб = Форма.Объект.Товары; СтрТовары = ТоварыТаб.Добавить(); ЗаполнитьЗначенияСвойств(СтрТовары,ТекущиеДанные,,"СерияРезерв,НомерСтроки"); СтрТовары.Количество = ВыбраннаяСерия.Количество-ВыбраннаяСерия.СвободныйОстаток; СтрТовары.КоличествоУпаковок = ВыбраннаяСерия.Количество-ВыбраннаяСерия.СвободныйОстаток; СтрТовары.ВариантОбеспечения = ПредопределенноеЗначение("Перечисление.ВариантыОбеспечения.Требуется"); Индекс = СтрТовары.ПолучитьИдентификатор(); ЭтаФорма.Элементы.Товары.ТекущаяСтрока = Индекс; ТоварыКоличествоУпаковокПриИзменении(ЭтаФорма.Элементы.ТоварыКоличествоУпаковок); Вроде,работает. Может,есть замечания? |
|||
37
bolobol
27.08.15
✎
16:12
|
(35) Да нет там шутки. Это ответ на "много машинного времени". Вот где "много" - я и указал. Если там в ПриИзменении такого нет, то и "много" никакого нет.
Но с точки зрения оптимизации - согласен. Она никогда не лишняя. Другой вопрос, что тут детально рассматривать нужно, особенно - источник того, откуда изменения в строках приплыли. Как определить сколько их, в общем - вникать капитально. Одного не пойму - ааа... в (36) уже корректно - строка текущая ставится и на неё ПриИзменении натравить - да. И в модуль формы если перенесено - то да, и цикл не нужен. |
|||
38
ЯЧайник
27.08.15
✎
16:19
|
Спасибо за помощь и за комментарии))) Изменения в строках при выборе серии - далее обработка выбора с источником "Обработка.ПодборСерийВДокументы.Форма.ФормаПодбора".И там уже сравнивается количество в строке и свободный остаток, в зависимости от этого строка разбивается или нет на две строки
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |