Куделя написал(а):
-------------------------------------------------------
> Во втором апдейте к версии 2022 в ФЛК записи для
> RDR добавили непреодолимый контроль для защиты 907
> поля от ручной корректировки
>
> if v907<>ref(mfn,v907) then '1Нельзя
> корректировать 907 поле!' else…
>
> В результате невозможно восстановить логически
> удаленную запись. Точнее восстановить-то, конечно,
> можно, а вот сохранить – нет. Потому что ref к
> логически удаленной записи не возвращает ничего.
> К сожалению, обойти эту ситуацию никак нельзя.
> &uf('N1,v907') здесь тоже не помогает, поскольку
> обращается все-таки к самой ранней предыдущей
> копии. В то же время проверять статус записи тоже
> смысла нет – максимум что можно сделать если
> &uf('+6')='0' это просто отменить проверку вовсе,
> ведь даже если в 907 поле вносились изменения, мы
> этого никак не узнаем из-за «зазора» между
> фактическими данными в БД (к которым обратиться
> форматер не может) и «полкой» куда программа
> поместила эти данные при восстановлении.
> Может быть имеет смысл доработать &uf('4')
> расширив перечень вариантов первого аргумента за
> счет «0»?
> То есть &uf('40,format') расформатировало бы
> именно активную запись, повторно обращаясь к базе.
> Ну то есть тот же ref(mfn,fmt), только
> игнорирующий статус записи в БД.
Есть несколько способов решить конкретно эту проблему:
1. Включить Xpft -- там ref(mfn, fmt) умеет читать удаленные и блокированные записи.
2. Использовать unfor('D..') он умеет читать удаленные и блокированные записи в любой реализации форматера.
3. Тупо сделать проверку преодолимой, заменив 1 на 2 в литерале
кроме этого надо учесть, что запись может быть новая. То есть сделать проверку mfn > 0.
Таким образом, наиболее универсальный вариант первой строки ФЛК для RDR такой:
if mfn > 0 and v907 <> &uf('D,@'mfn',v907') then '1Нельзя корректировать 907 поле!' else
НО и это не панацея, так как внешние приложения, например ИРБИС128, могут сами писать в 907 поле дату своего вмешательства и они это делают ДО скрипта автоввода, который в И64 занимается простановкой даты редактирования.
Лучше от этой строки просто отказаться, а редактирование 907 полей запрещать на уровне рабочих листов