|
15.12.2006, 16:03 | #1 |
Участник
|
Копирование строк в форме
Простите за нелепый вопрос...Хотелось бы спросить совет.
Есть форма , также существует checkbox. Так вот,нужно отметить нужные строки , и сохранить их... Я выбрала временную таблицу...Чтобы дальше запускать класс по скопированным значениям.. Можно обойтись ещё чем-либо кроме темповских таблиц? Мэпы или контейнеры... что лучше? |
|
15.12.2006, 16:12 | #2 |
Участник
|
Как делаю я:
1. если необходимо просто повыбирать строки - использую кнопки с multiSelect = Yes. ( то есть просто строки выбираем, а дальше getField(true) и поехали) 2. Если таки хотят галочки в форме и по галочке выбирать, то использую Set в который помещаю RecId строк. 3. Если нужно помимо галочки (выбор записи) еще заполнить какое-то значение по строке, то использую Map (RecId, тип Значения - обычно у меня - дата ) 4. Если нужно что-то другое, использую временную таблицу. |
|
|
За это сообщение автора поблагодарили: e@gle (1). |
18.12.2006, 10:42 | #3 |
Участник
|
Цитата:
Сообщение от kashperuk
Как делаю я:
1. если необходимо просто повыбирать строки - использую кнопки с multiSelect = Yes. ( то есть просто строки выбираем, а дальше getField(true) и поехали) 2. Если таки хотят галочки в форме и по галочке выбирать, то использую Set в который помещаю RecId строк. 3. Если нужно помимо галочки (выбор записи) еще заполнить какое-то значение по строке, то использую Map (RecId, тип Значения - обычно у меня - дата ) 4. Если нужно что-то другое, использую временную таблицу. можно что-нибудь для примера, где можно посмотреть? |
|
18.12.2006, 11:24 | #4 |
Участник
|
Цитата:
Попробую описать последовательность шагов, которые нужно выполнить. 1. Объявляем в classDeclaration формы переменную типа Set markedSet; 2. В init формы, к примеру, инициализируем ее - markedSet = new Set(Types::Integer); 3. Делаем edit-method типа NoYes на источнике, и в коде этого метода пишем следующий код (похожий): X++: if (_set) { if (_value) markedSet.add(_currentTableRecord.RecId); //или другое ключевое поле, по которому есть метод find else markedSet.remove(_currentTableRecord.RecId); } return markedSet.in(_currentTableRecord.RecId); //возвращает true или false X++: SetIterator si = new SetIterator(markedSet); PurchLine purchLine; ; ttsbegin; si.begin(); // переходим к первому элементу множества while (si.more()) //перебираем все элементы { purchLine = PurchLine::findRecId(si.value(), true); purchLine.PurchReceivedNow = 1; purchLine.update(); si.next(); } ttscommit; // Здесь si.value() содержит RecId отмеченных записей |
|
15.12.2006, 16:14 | #5 |
MCTS
|
Посмотрите как организовано похожее копирование Расчеты с поставщиками -> Закупка -> Функции -> Копирование из всех.
Но имхо здесь подходят лучше всего временные таблицы. |
|
15.12.2006, 16:18 | #6 |
Участник
|
Ну мне нужны галочки, чтобы пользователь видел, что навыбирал... И сохранить номер журнала.. для последующего экспорта выбранного журнала в 1С.
Значит, всё-таки Мэп... А я так вот запихивала во временную таблицу.. Зря значит...(. edit NoYes ERG_JournalMarker(boolean _set, InventJournalTable _inventJournalTable, NoYes _value) { ; select firstonly JournalMarker where JournalMarker.JournalId == _inventJournalTable.JournalId; if (_set) { if (_value) { if (! JournalMarker) { JournalMarker.JournalId = _inventJournalTable.JournalId; JournalMarker.insert(); } } else { delete_from JournalMarker where JournalMarker.JournalId == _inventJournalTable.JournalId; } } if (JournalMarker) _value = NoYes::Yes; else _value = NoYes::No; return _value; } |
|
15.12.2006, 16:24 | #7 |
Участник
|
Номер журнала ведь уникальный - значит можно и set = new Set(Types::String) и в него запихивать номер журнала. (можно и RecId, но для этого должен быть включен индекс по RecId на таблице)
|
|
15.12.2006, 16:34 | #8 |
Участник
|
|
|
15.12.2006, 16:40 | #9 |
Участник
|
Форма \Forms\HRMVirtualNetworkDismiss
в ней ищите по ключевому слову markedSet |
|
15.12.2006, 16:42 | #10 |
Участник
|
Спасибо
|
|
18.12.2006, 13:36 | #11 |
Участник
|
спасибо, за разжевывание..)
Всё получилось. |
|