Вероятно, у Вас в методе this.docinsert(first) происходит перемещение указателя записи purchTable. Вам надо запомнить текущее положение записи до вызова этого метода и восстановить после
X++:
PurchTable purchTableFind;
;
// Запоминаем текущее положение
purchTableFind = PurchTable::find(purchTable.PurchId)
(...)
this.docinsert(first);
// На источнике данных восстанавливаем текущее положение
purchTable_ds.findRecord(purchTableFind);
super();
Правда, следует иметь в виду, что метод purchTable_ds.findRecord() работает относительно медленно. Поэтому лучше проанализировать Ваш метод this.docinsert(first); с тем, чтобы в нем не происходило перемещение указателя записи по источнику данных. Ну, или он возвращал указатель в исходное положение
Возможно, Вам еще понадобиться предварительно сделать перезапрос к базе данных, если в Вашем методе происходит изменение данных PurchTable. Тогда надо добавить
X++:
PurchTable purchTableFind;
;
// Запоминаем текущее положение
purchTableFind = PurchTable::find(purchTable.PurchId)
(...)
this.docinsert(first);
// Синхронизация с базой данных
purchTable_ds.research();
// Обновление "картинки" на форме
purchTable_ds.reread();
// На источнике данных восстанавливаем текущее положение
purchTable_ds.findRecord(purchTableFind);
super();