Вот, постарался собрать из двух формул одну.
1. Формула по пересчету всех номеров (добавил комментарий, насколько хватило понимания)
Код:@SNS:=FIND("ОТ ДЛ01"); // выполняем строчный запрос по отбору всех записей поля 01 базы ДЛ
@D:=1; // переменной @D будет присвоено значение равное 1
@A:=1;// переменной @A будет присвоено значение равное 1
@CNT:=VALCOUNT(@SNS); // получаем количество записей массива (переменной) @SNS базы ДЛ
@I:=1 // счетчик записей равен 1
WHILE(@I<=@CNT) DO // тело цикла будет выполнено тогда, когда будут обработаны все отобранные записи переменной @CNT, которая больше или равна счетчику значений переменной @I
[if (@SNS(@I)#@SYSNOMER)/* первая часть выражения будет выполнена если переменная @SNS не равна системному номеру записи, обрабатываемой по формуле */
then (if (ДЛ49{@SNS(@I)}#"")/* вторая часть выражения будет выполнена если в первой части поле 49, обрабатываемой записи базы ДЛ, не равно пустому значению {}применяются для получения доступа к полю любой другой записи базы ДЛ */
then [ДЛ10{@SNS(@I)}:=@A<<"A"; @A:=@A+1] /* вторая часть выражения будет выполнена если полю 10, обрабатываемой записи базы ДЛ, будет присвоено значение переменной @A с индексом "А", а также переменной @A будет присвоено значение переменной @A с шагом + 1 {}применяются для получения доступа к полю любой другой записи базы ДЛ*/
else [ДЛ10{@SNS(@I)}:=@D; @D:=@D+1])/* третья часть выражения будет выполнена если полю 10, обрабатываемой записи базы ДЛ, будет присвоено значение переменной @D, а также переменной @D будет присвоено значение переменной @D с шагом + 1 {}применяются для получения доступа к полю любой другой записи базы ДЛ*/
else [ if (ДЛ49#"")/* третья часть выражения будет выполнена если в первой части поле 49, обрабатываемой записи базы ДЛ, не равно пустому значению */
then [ДЛ10:=@A<<"A"; @A:=@A+1] /* вторая часть выражения будет выполнена если полю 10, обрабатываемой записи базы ДЛ, будет присвоено значение переменной @A с индексом "А", а также переменной @A будет присвоено значение переменной @A с шагом + 1*/
else [ДЛ10:=@D; @D:=@D+1]];/* третья часть выражения будет выполнена если полю 10, обрабатываемой записи базы ДЛ, будет присвоено значение переменной @D, а также переменной @D будет присвоено значение переменной @D с шагом + 1*/
@I:=@I+1] //переменной @I будет присвоено значение переменной @I с шагом + 1
2. Формула по проставлению дополнительной литеры без изменения нумерации
Код:@SNS:=FIND("ОТ ДЛ01"); // выполняем строчный запрос по отбору всех записей поля 01 базы ДЛ
@CNT:=VALCOUNT(@SNS); // получаем количество отобранных записей массива (переменной) @SNS базы ДЛ
if (ДЛ49#"" & ДЛ10#"" & CHECKSYMBOL(ДЛ10,"A")=0) /* первая часть выражения будет выполнена если
и поле 49, и поле 10 базы ДЛ неравны пустому значению,
а также будет проверено наличие в строке 10 базы ДЛ искомого символа "А", которое будет равно "0" */
then (ДЛ10:=ДЛ10<<"A"); /* вторая часть выражения будет выполнена если
в поле 10, обрабатываемой записи базы ДЛ, будет находится значение поля 10 базы ДЛ с индексом "А" */
if (ДЛ10="" & ДЛ49="") /* первая часть выражения будет выполнена если
и поле 10, и поле 49 базы ДЛ равны пустому значению */
then (ДЛ10:=@CNT+1) /* вторая часть выражения будет выполнена если полю 10, обрабатываемой записи базы ДЛ, будет присвоено значение переменной @CNT с шагом + 1 */
3. Вот, что получилось
Код:@SNS:=FIND("ОТ ДЛ01");
@D:=1;
@A:=1;
@CNT:=VALCOUNT(@SNS);
@I:=1
WHILE(@I<=@CNT) DO
[if (@SNS(@I)#@SYSNOMER
then (if (ДЛ49{@SNS(@I)}#"" & ДЛ10#"" & CHECKSYMBOL(ДЛ10,"A")=0)
then [ДЛ10{@SNS(@I)}:=ДЛ10<<"A"; @A:=@A+1]
else [ДЛ10{@SNS(@I)}:=@D; @D:=@D+1])
else [ if (ДЛ49#"" & ДЛ10#"" & CHECKSYMBOL(ДЛ10,"A")=0)
then [ДЛ10:=ДЛ10<<"A"; @A:=@A+1]
else [ДЛ10:=@D; @D:=@D+1]];
@I:=@I+1]
Формула вроде работает, но есть ряд проблем:
1. Если в последней записи в поле 49 проставить дату "ликвидации" ,то индекс "А" проставляется с сохранением старого порядкового номера, но как только я начинаю создавать новую запись cronos зависает.
2. Если я пытаюсь проставить в любую другую запись дату "ликвидации", то получаю зависание программы.
Я понимаю, что это не формула виновата, а мои неправильные действия.
И ещё, если можно (процетирую уважаемого Zuluss):
Если я хочу вставить новую запись в любое другое место, как при помощи формулы откорректировать все последующие номера? Т.е. при вводе проверить существует ли уже указанный номер (код) и предложить произвести пересчет последующих номеров.
Спасибо