Update форма с подчиненным Browse

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
pansoft
Бывалый
Сообщения: 76
Зарегистрирован: 08 Август 2011, 11:37

Update форма с подчиненным Browse

Сообщение pansoft »

Добрый день всем!

Вопрос наверное обсуждался на форуме но найти ответ не смог. C9+MS SQL.
Обычный Browse со списком накладных. Форма для редактирования имеет поля шапки накладной и связанный Browse со строками накладной.
Как одним нажатием кнопки "Insert" можно было заполнить шапку накладной и подчиненную таблицу с идентификатором еще не сохраненной накладной. И еще при нажатии кнопки отмена что бы в списке накладных не отображалась не заполненная (отмененная) накладная.

Заранее благодарен!
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Update форма с подчиненным Browse

Сообщение Yufil »

Был когда-то шаблон SuperInvoice, даже использовал когда-то...
pansoft
Бывалый
Сообщения: 76
Зарегистрирован: 08 Август 2011, 11:37

Update форма с подчиненным Browse

Сообщение pansoft »

Накладная была приведена в виде примера, мог быть и счет-фактура. Мне необходим был сам метод как сделать чтобы в форме Update добавлять записи в Browse на ней, без записи шапки в базу.
Тяжело написать.
Вообщем добавить в базу Шапку накладной и строки накладной одновременно.
А если ввел данные в шапку и добавил несколько строк, то отменить все тоже одновременно.
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Update форма с подчиненным Browse

Сообщение kreator »

Я не вижу проблем. Только вопрос не очень понятен. У меня накладная вводится так (SQL Anywhere). Есть таблица шапок и есть таблица содержимого. Пользователь в таблице шапок нажимает "Добавить", попадает в форму, где есть поля для шапки и есть таблица содержимого. Хочет сохранит без содержимого, только шапку, хочет с содержимым. Чтобы удалить содержимое с шапкой, надо сделать форейн ключ с каскадным удалением на серваке (естественно, в словаре это дело отразить).
We are hard at work… for you. :)
pansoft
Бывалый
Сообщения: 76
Зарегистрирован: 08 Август 2011, 11:37

Update форма с подчиненным Browse

Сообщение pansoft »

kreator писал(а): Хочет сохранит без содержимого, только шапку, хочет с содержимым.
Вот этот момент поподробнее:
На MS Sql пока не сохранишь шапку не получишь идентификатор для связи с содержимым.
В результате чего перед заполнением содержимого надо обязательно записывать шапку, чтобы на стороне сервера образовался Id, по которому происходит связь шапки с содержимым. Добавили пару строк в содержимое. И в этот момент решили что не то и нажали в форме шапки отмену. В результате ни какой отмены не будет, строки и шапка останутся в базе. Необходимо будет их еще удалять. А хотелось если нажал при первичном вводе отмену, то ни где ни что не записывалось.
2) Открываем такую форму где есть шапка и подчиненная таблица. Пользователь делает изменения в подчиненной таблице. А затем одумался и жмет отмена, в надежде что при закрытии все данные примут исходное положение в том числе и в подчиненной таблице.
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Update форма с подчиненным Browse

Сообщение kreator »

В кларионе есть Request'ы. Так вот, если Request=InsertRecord, то после нажатия на кнопку "Отмена" кларион удалит эту запись в любом случае. А id всё равно нужно присвоить. Ещё нужно присвоить номер документа (который с автонумерацией) и не знаю что ещё. Кларион - умный, если первичный ключ не нулевой (id<>null), то запись будет удалена.
По второму вопросу нужно пользователю объяснить, что это не Excel. Можно создать такую форму, что запись содержимого будет по кнопке "Сохранить" (хранить записи в очереди, по кнопке руками пытаться записать). Но это муторно, и во-вторых, проблемы придут откуда не ждали. Записи будут теряться при зависании программы, компа и т.д. У меня опыт в оптовой продаже. Накладные большие, вводятся достаточно долго и мало ли что. Все менеджеры понимают - ввёл неправильно позицию - сам и удаляй, "Отмена" не причём.
We are hard at work… for you. :)
pansoft
Бывалый
Сообщения: 76
Зарегистрирован: 08 Август 2011, 11:37

Update форма с подчиненным Browse

Сообщение pansoft »

Вводим шапку новой накладной, перед тем как добавлять в подчиненную таблицу строки, предлагаем пользователю сделать запись информации шапки, программа получает идентификатор, а потом только у пользователя появляется возможность добавить запись (Enable кнопки Insert) в подчиненную таблицу.

Как я понял, алгоритм примерно такой? Других хитрых, но не
kreator писал(а): это муторно, и во-вторых, проблемы придут откуда не ждали
способов нет?
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Update форма с подчиненным Browse

Сообщение kreator »

Нет, не так. В форме в методе PrimeFields записываем в БД эту шапку (предварительно можно номера документа вычислить и т.д.). Получается, что пользователь зашёл по Insert и он уже имеет id (и что там ещё). Может спокойно добавлять позиции накладной. Если он вышел потом без сохранения, то всё должно удалиться - и шапка, и позиции.
We are hard at work… for you. :)
pansoft
Бывалый
Сообщения: 76
Зарегистрирован: 08 Август 2011, 11:37

Update форма с подчиненным Browse

Сообщение pansoft »

Да когда используешь базу TPS то при Insert в Id появляется значение, при использование MS SQL Id остается пустым до момента записи, так как счетчик делает приращение на сервере при вставке записи. По этому приходится с начало записываться.
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Update форма с подчиненным Browse

Сообщение kreator »

Я так и говорю - нужно принудительно вставить шапку в методе PrimeFields этой шапки. Попробуй. Какие при этом проблемы?
We are hard at work… for you. :)
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Update форма с подчиненным Browse

Сообщение morkovin »

Был когда-то шаблон SuperInvoice, даже использовал когда-то...
И сейчас есть и прекрасно работает и в С10 (http://www.boxsoft.net)
The Super Invoice template is designed to support "in-place" data-entry on a list box. The entire transaction (the parent and all children) are held in memory until the [OK] button is pressed, which is much superior to the regular "Form with a Browse" implementation. All features have been developed with the following goals:
...
Although it is called an "Invoice" template, it is useful in any situation where you have a parent file and one or more child files, you want to provide in-place data entry, and you want to treat all changes as a single transaction. Another example would be a purchase order.
In those situations where you can't fit all the information in the listbox, you can use a separate "ChildWindow" to access these fields. For full-screen validation, we've also provided an "OkButton" template that helps you perform this task.
WBR, morkovin
pansoft
Бывалый
Сообщения: 76
Зарегистрирован: 08 Август 2011, 11:37

Update форма с подчиненным Browse

Сообщение pansoft »

morkovin писал(а): И сейчас есть и прекрасно работает и в С10 (http://www.boxsoft.net)
Да работает за $149.
morkovin писал(а): The Super Invoice template is designed to support "in-place" data-entry on a list box. The entire transaction (the parent and all children) are held in memory until the [OK] button is pressed, which is much superior to the regular "Form with a Browse" implementation. All features have been developed with the following goals
Да вот этого я и хотел.
kreator писал(а): Я так и говорю - нужно принудительно вставить шапку в методе PrimeFields этой шапки. Попробуй. Какие при этом проблемы?

Код: Выделить всё

ThisWindow.PrimeFields PROCEDURE

! Start of "WindowManager Method Data Section"
! [Priority 5000]

! End of "WindowManager Method Data Section"
  CODE
  ! Start of "WindowManager Method Executable Code Section"
  ! [Priority 1300]
  
  !Field priming (usually for insert) goes in here - Warning : The window may not be open
  ! [Priority 3800]
  Id=?
  ! Parent Call
  PARENT.PrimeFields
  ! [Priority 7500]

  ! End of "WindowManager Method Executable Code Section"

Вопрос Id=? ? Где взять новое значение?
Ал
✯ Ветеран ✯
Сообщения: 1011
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия

Update форма с подчиненным Browse

Сообщение Ал »

создать - всё сам-сам, ручками...
запросить у сервера...
pansoft
Бывалый
Сообщения: 76
Зарегистрирован: 08 Август 2011, 11:37

Update форма с подчиненным Browse

Сообщение pansoft »

morkovin писал(а):
Был когда-то шаблон SuperInvoice, даже использовал когда-то...
И сейчас есть и прекрасно работает и в С10 (http://www.boxsoft.net)
Спасибо за наводку, буду пробовать!
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Update форма с подчиненным Browse

Сообщение kreator »

Попробуй так:

Код: Выделить всё

ThisWindow.PrimeFields PROCEDURE

! Start of "WindowManager Method Data Section"
! [Priority 5000]

! End of "WindowManager Method Data Section"
  CODE
  ! Start of "WindowManager Method Executable Code Section"
  ! [Priority 1300]
  
  !Field priming (usually for insert) goes in here - Warning : The window may not be open
  ! [Priority 3800]
  ! Parent Call
  PARENT.PrimeFields
  ! [Priority 7500]
   Access:MyTable.Insert()
   stop(MyTable.ID)
  ! End of "WindowManager Method Executable Code Section"

Если по stop id не тот, то посмотри свойство этой таблицы PROP:ServerAutoInc (судя по описанию, если это свойство выставлено, то после добавления записи Кларион, грубо говоря делает "get" на только что введённую запись). Свойство точно работает на драйвере SQLAnywhere на стандартных шаблонах. Вот руками не пробовал.
На крайний случай, после Insert сделай запрос типа:

Код: Выделить всё

Dummy{prop:SQL} = 'select max(DBA.MyTable.ID) from DBA.MyTable.ID'
Ну и после запроса:

Код: Выделить всё

next(Dummy)
MyTable.ID = Dummy.dummy_col
Access:MyTable.Fetch(MyTable.IDKey)
Мне кажется - это уже на совсем крайний случай. Хорошо думаю о Кларионе :mrgreen: .
А шаблон SupeInvoice, наверно, всем хорош. Только при зависании компа теряется вся информация (вся накладная). Представлю себе, как у кладовщика (это про мой вариант) на 90 сканировании штрихкода объёмного изделия из 100 виснет программа и он начинает сканировать снова :mrgreen: .
We are hard at work… for you. :)
Ответить