По вопросу 1.
В таблице
Договора создаете поле
num, типа
число. Скрываете его в настройках доступа. В вычислениях таблицы
Договора создаете вычисление
if (!$line['num']) {
$sqlQuery = "SELECT max(`fXX1`) AS maxNUM FROM `".DATA_TABLE."78` WHERE (`status`<>'2' AND `f849`='" . $line['Компания']['ID'] . "')";
$result = mysql_query($sqlQuery) or user_error(mysql_error() . "<br>" . $sqlQuery . "<br>", E_USER_ERROR);
$row = mysql_fetch_assoc($result);
$line['num']=$row['maxNUM']+1;
}
Устанавливаете срабатывание вычисления -
Сохранение в таблице.
Касаемо внутренних имен полей. Каждое поле помимо названия, которое Вы ему присваиваете, имеет внутреннее имя. Посмотреть его можно, например, если войти в настройки полей таблицы. При наведении обычно внизу появляется ссылка перехода. Параметр field - это номер требуемого поля, внутреннее имя соответствует ему с буквой f в начале, т.е. f492, например. В случае, если ссылка при наведении не выводится, кликните по нему - в адресной строке все будет. Т.о., Вы определите имя поля
num, которое создали, и имя поля связи Таблицы
Контрагенты и
Договора. В стандартной конфигурации это поля называется
Компания и имеет имя в базе
f849.
Если хотите подойти глобально к структуре базы, посмотрите
здесь.
Пояснение по вычислению.
Запросом sql из таблицы
Договора выбирается запись, которая не является удаленной (`status`<>'2'), в поле связи имеет номер соответствующий номеру текущего контрагента (`f849`='" . $line['Компания']['ID'] . "') и при этом имеет максимальное значение в поле
num (SELECT max(`fXX1`)). После этого номер увеличивается на единицу и заносится в текущую запись (последняя строчка вычисления).
Далее.
Меняете тип поля
Номер на текстовое. И в вычислениях таблицы
Договора создаете еще одно:
$line['Номер']=$line['Компания'] ['ID'] . "-" . str_pad($line['num'], 3, "0", STR_PAD_LEFT);
Настраиваете срабатывание также, как и в первом случае, при сохранении в таблице.
Для удобства пользователей в настройках доступа поля снимите галочку с опции
Добавление. В этом случае при создании новой записи поле
Номер появляться не будет, что исключит неправильное его заполнение. Но при повторном открытии записи будет возможность откорректировать номер, если в этом будет необходимость.
По вопросу 2.
Нумерацию Вы можете создать по аналогичной схеме, выбирая из таблицы
Приложения запись, связанную с текущим
Договором и максимальным значением поля
num. Что касается шаблона - при его формировании в теле ставите отбор по тому же полю
num. Если равно 1 - формируете один шаблон печати, если 2 - второй шаблон и т.д. Вот только вопрос. У Вас поля для шаблонов одни и те же или для каждого свои? Ежели вариант 2 - тогда все намного
интереснее.