ini\global_v.dbf
Надо сдвинуть поле curr_prof со значения '20150101' на текущую дату. Вроде после этого работает нормально.
Но вообще странно.
Ладно базы, которые автоматически ночью реиндексируются. Они и 01/01/2015 реиндексировались.
Но есть много баз, которые не реиндексировались с прошлого года. Запустил сегодня реиндексацию. Часть из них как-то зацепилась за 01/01/2015, а часть нет.
Не надо забывать о контексте. Ваш плагин не единственый, кто работает с экраном.
Вы вызываете плагин из реестра. После завершения работы плагина InitList обновляет экран, затирая результат работы.
Вставьте sayandwait() после dispoutat и посмотрите на результат до его исчезновения.
В случае, если введённые значения корректны каждое само по себе, но не соблюдается некое общее условие, можно воспользоваться параметром № 20
bPostGet - блок кода выполняемый после каждого завеpшения READ,
ему пеpедается флаг сохpанения данных .T. - данные были записаны в базу
.F. - данные не были записаны в базу (выполняется после возможного
выполнения bPost ),флаг изменения данных и флаг циклического
ввода по ссылке, если его сбросить в -1 то циклического ввода не будет
Если bPostGet вернет .F., то произойдет повторный вход в редактирование
тем самым дается возможность не выпускать пользователя из режима редактирования
пока он не исправит ошибки или вообще не будет сохранять данные
Можно использовать для каких либо завершающих действий, в независимости
от того, захотел ли пользователь сохранить данные или нет (например удаления
проводок сформированных при добавлении документа и т.п.).
for nPos:=1 to len(aParam)
cVar:='head_'+alltrim(str(nPos))
private &cVar
next
2. Внутри блока макроподстановки запрещены
Можно воспользоваться функцией MemVarBlock(), которая возвращает блок чтения/присвоения значения переменной
{|x,i| bTmp:=memvarblock('head_'+alltrim(str(i))), eval(bTmp, x) }
такое выражение должно сработать
Для более сложных вариантов можно использовать функцию formulparsblock() или предварительно определить массив блоков кода в обычном цикле
Переменные, объявленные как local могут быть использованы только непосредственно, поскольку их имя не хранится в компилированном модуле
Переменные private могут быть использованы в литералах и блоках кода в пределах видимости без ограничения
local cLocalText, cVarName
private cPrivText
cLocalText:='0'
&('cLocalText'):='1' // не сработает, будет объявлена private cLocalText, которая будет перекрываться локальной
// при непосредственном обращении к cLocalText будет выводиться '0'
// при уточнении memvar->cLocalText или использовании &('cLocalText'), будет выводиться '1'
&('cPrivText'):='1' // сработает
cVarName:='cLocalText'
&cVarName:='2' // не сработает, причину смотри выше
cVarName:='cPrivText'
&cVarName:='2' // сработает
sayandwait(&cVarName) // сработает
return
Проверял на xHarbour 0.99.1, строго говоря, поведение программы может зависит от компилятора.
Обновлена версия утилиты.
Исправлены замеченные ошибки. Основное:
1. Общая сумма начислений по формам раздела 6 заполняется за весь расчётный период.
2. В РСВ-1 исправил расчёт строк 220 и далее (выплаты по доптарифу).
Вот не знаю, делать ли заполнение строк 210 (ОМС) при тарифах, исключающих начисление ОМС. Например, 07 или 13.
При проверке CheckPFR выдаёт предупреждение, если их оставить пустыми.
1. Файл импорта по указанному пути существует? Документы в файле есть?
2. В поле "Счёт", в настройке импорта указано верное значение (или поле пустое)?
Настройка основных счетов.
"Импорт из клиент-банка" - "HRB-Модуль"
"Имя описания для импорта" - "002 Формат 1С"
Нажимая Enter, доходим до конца окна. Появляется настройка импорта.
Указываем путь к папке с файлами и имя файла, выгружаемого из банка.
Остальные параметры - опционально.
В выписке банка по Ctrl-F5 файл импортируется.
Полное описание смотрите в файле NEWS\инструкции_комментарии.chm, в разделе "Расчётные и валютные счета"
break - это команда, которая вызывает прерывание в пределах операторных скобок
begin sequence - end sequence
при вызове break управление передаётся за end sequence, а если есть recover, то за recover
скобки могут быть вложены друга в друга, поэтому если в плагине нет скобок, то break передаёт управление обратно в БЭСТ, где такие скобки скорей всего есть
если скобок нет совсем, то, возможно, завершается программа
но с этим я не экспериментировал и в описании этот пункт не читал
В блоке кода можно вызвать на исполнение функции и выражения, перечисляя их через запятую. Команды использовать нельзя (return, к примеру).
Вот пример. Вас это интересовало?
aeval(aProvs, {|x| addrec(), umain->nnoper:=nOper, umain->task:='05', umain->dataoper:=act->tek_data, f_dbunlock() }))
Если Вы хотите прервать обработку, то лучше сделать полноценный цикл и поставить там exit
Или можно описать sequence и вызвать break(), хотя с aeval(, {||}) я так не делаю и не знаю точно сработает или нет.
и на этом моменте я понял, о чём Вы спрашиваете. Надо заключить выражения в круглые скобки, вот так:
aeval(aCol, {|x| if(x=4,(sayandwait("Нет такого значения"), break()), nil) })