Техническое описание
Встроенные функции, язык описания проводок, отчетов, печатных форм, документов и аналитических справочников.

Данный текст предназначен для тех, кто занимается установкой и настройкой программы ("внедрением"), подключением нестандартных справочников, групповых и сложных проводок и т.п. Описание работы с программой приведено в документе "Руководство пользователя".

Проектирование форм справочников и документов
Описатели объектов для экранных форм
Встроенные функции и константы
Проектирование печатных форм
Печать в Microsoft Word и Excel
Директивы принтера
Задание проводок
Аналитическая расчетная ведомость
Специальная настройка программы
Особые функции программы
Примеры
Практикум (проблемы и решения)


Описатели экранных форм
Экранные формы представления и редактирования аналитических справочников и документов задаются в файлах-описателях, которые можно редактировать любым текстовым редактором или изменять при помощи программы "Генератор форм". "Главбух" работает со справочниками и документами исключительно через файлы описаний. Благодаря такому подходу легко разрабатываются и подключаются новые документы и аналитические справочники, становиться возможным учитывать требования Заказчиков к составу полей справочников и т.п.
Подключение описателей справочников
Описатели справочников в инсталляции содержатся в каталоге FORM. При подключении нового справочника, в зависимости от выбранного пользователем типа, подключаются следующие описатели:
 
тип справочника описатель
организации orgdef.txt
мат.ценности matdef.txt
курсы валют valdef.txt
сотрудники sotrdef.txt
простой onedef.txt
основные средства osndef.txt
товары tovdef.txt
Для других типов справочников имя файла описателя нужно задавать вручную. Описатели ищутся в каталоге, заданном в настройках программы, закладка "Админист", параметр "Описатели", что дает возможность при настройке отдельных рабочих мест сослаться на общие описатели, установленные, например, на сервере.
Подключение описателей документов
Список документов содержится в файле DOCUMS.TXT. При запуске программа вначале пытается найти этот файл в текущем каталоге, и, если он не найден, ищет его в каталоге, указанном в настройках (закладка "Админист", параметр "Описатели"). Поэтому для рабочих мест с собственным перечнем документов этот файл должен быть расположен в их собственном каталоге, а в общем каталоге будет список документов, доступных всем рабочим местам.
Структура файла DOCUMS.TXT:
Каждый документ описывается отдельной строкой, содержащей следующие параметры: Например:
книга продаж=form\prod.txt,prod.dbf,R

Код документа должен быть уникальным. Это всегда один символ, большая буква или цифра. Коды документов используются при формировании проводок непосредственно от документов, минуя базу операций (директива  %MAKETRAN) и для указания документа-приемника при экспорте документов (директива I). Три значения кода зарезервированы для реестров документов товарно-материального блока:

V - расходные накладные,
U - приходные накладные,
T - реестр счетов.
В настройках документов из поставки приняты следующие коды:
R- книга продаж,
A- платежное поручение,
G- платежное требование,
B- приходный кассовый ордер,
C- расходный кассовый ордер,
D- счет-фактура,
E- накладная.
В имени файла можно задать маски для месяца и года, разбив таким образом реестр документов по месяцам или годам. Например, F:\DATA\NAK|M|Y.DBF задает в каталоге F:\DATA набор баз вида NAK0999.DBF, NAK1299.DBF и т.п., при открытии реестра программа выберет базу, соответствующую текущему месяцу и году.
Структура файла описания
Строки файла описания содержат объявления или комментарии. Строки с комментариями начинаются со знака "/" Первый символ каждой строки - ключевой, он определяет объект на форме редактирования или списка, или задает директиву.
Описатели объектов
Объект описывается одной строкой, первый символ которой задает тип объекта, затем задается смещение левого верхнего угла слева, сверху, затем ширина, содержание объекта, после чего могут быть указаны необязательные параметры: тип значения и указатели по автозаполнению при создании нового объекта. Все параметры разделяются запятой, смещения задаются в пикселах.
 
визуальные объекты директивы
код
назначение
код
назначение
L надпись, метка
M
количество записей загрузки
E редактирование поля 
O
обработка изменения поля
V просмотр переменной или поля
S
определение ключей поиска
B
выбор из списка значений
R
описание колонки реестра
A
вызов справочника
%
CREATE - создание поля
D
рисунок, изображение
%
DOUBLE- 2 экземпляра 
F
размеры формы
%
CHILDBASE -подчиненная база
C
цвет формы
P
определение печатной формы
J
логическое поле
G
задание вариантов группировки
W
размеры реестра
T
определение ввода операции
N
текст в длинном поле
%
MAKETRAN проводки
Q
колонки сортировки
H
экспорт в другую базу
I
экспорт в другой документ
%
IMPORTFILE импорт из файла
%
CLASSIFIER классификатор
%
UNIQUE уникальное поле
%
CB директивы импорта (Клиент-Банк)
%
EXTERNAL внешняя программа справочника
%
TOVCODES, %TOVLABELS настройки для накладных ТМЦ
%
SELMODE параметры для выбора из больших справочников

L
L - подпись. Задается текст надписи:
L,100,80,40,номер
-здесь задано создание объекта типа "подпись" (Label), расположенного на 100 точек вправо от левого края формы  и в 80 точек от верхнего, длиной 40 точек, с текстом "номер". Сразу после символа L можно задавать символы стиля подписи: B - подпись жирным шрифтом, I - текст подписи курсивом, U - текст подчеркнут. Например:
LB,100,80,40,сумма заказа
текст подписи будет выделен жирным шрифтом: сумма заказа
LBI,100,96,60,всего
текст подписи будет выделен курсивом и жирным шрифтом: всего

E
E -  редактирование. Задается имя поля в базе или переменной:
E,150,80,160,NUM
- здесь задано создание объекта для редактирования поля базы данных NUM. Редактирование производится в прямоугльнике с координатами левого верхнего угла 150 (слева) и 80 (сверху) длиной 160. Допустимы также модификаторы B, I, U, управляющие стилем шрифта в окне редактирования (см. описание L). Дополнительные возможности:
E,150,80,160,SUMC,X
- редактируется поле SUMC, в котором хранится число с плавающей запятой в машинном представлении (8 байт). Возможные типы данных:
C - обычный символьный тип (по умолчанию)
X - число с плавающей точкой в машинном представлении
D - дата (8 байт)
N - числовой тип в DBF-файлах
I - двухбайтное целое число (1..65535)
Для автоматического заполнения поля новыми значениями при вводе новой записи используются директивы, начинающиеся на "AUTO...". Например,
E,150,80,160,NUM,AUTONUM
здесь редактируется поле NUM базы данных, при создании новой записи содержимое этого поля генерируется автоматически: берется значение этого поля в последней записи в базе данных и прибавляется единица (автонумерация). Возможные варианты автоматического заполнения:
AUTONUM автоматическая нумерация данного поля; применимо к полям типа C и N.
AUTODATE заполнение текущей датой (для полей типа D)
AUTODAY заполнение текущим днем (поля типа C)
AUTOMONTH заполнение текущим месяцем цифрами (поля типа C)
AUTOYEAR заполнение текущим годом (поля типа C)
AUTOMONNAME  заполнение текущим месяцем буквами (поля типа C)
AUTODEFAULTVALUE значение - заполнение значением по умолчанию

N
N - редактирование текста в длинном поле (как E, но на экран выводится не одна, а несколько строк текста из поля). Задаются координаты, размеры окна редактирования и имя поля:
N,150,80,160,80,NOTE
здесь редактируется поле NOTE в прямоугольнике шириной 160 и высотой 80 пикселов (может поместиться от 3 до 4 строк текста).

J
J - редактирование логического поля. Формирует экранный элемент, который может находится в двух положениях: отмеченном и неотмеченном. Отмеченное положение означает, что соответствующее поле в базе данных принимает значение "T" (истина), неотмеченное - " " (пробел, означающий "ложь"). Перед именем поля задается наименование элемента:
J,180,161,138,товар с НДС,WITHPDV
дополнительный параметр MARK позволяет использовать этот описатель для показа полей, в которых отмечается, что с документом сделаны проводки или производился экспорт в другой документ. В этом случае в поле пишется символ "*", что воспринимается как отмеченное значение и пробел в противном случае. Такой элемент может быть изменен только программой, поэтому он показывается как неактивный (пользователь не может его вручную изменить даже в режиме редактирования). Например:
J,180,161,138,документ проведен,CODE,MARK

V
V - просмотр значения поля в базе или переменной. Задается аналогично "Е", но только для просмотра содержимого поля без возможности его изменения.

Если на какое-то поле нужно ссылаться в формулах вычислений, но его содержание не должно выводиться на экран, его следует описать с нулевой длиной.

В описанной таким образом переменной можно показать результат вычисления выражения. После имени переменной ставится запятая, затем знак "@", затем выражение, которое может включать любую встроенную функцию, имя поля и т.п., начинаться со знака "=". В формах редактирования аналитических справочников можно дополнительно использовать функции выборки из аналитических остатков:

AFUNC_S(счет; месяц; документ)    -    остаток на данном счете для текущего объекта
AFUNC_SD(счет; месяц; документ)    -    дебетовое сальдо
AFUNC_SC(счет; месяц; документ)    -    кредитовое сальдо
AFUNC_S2(счет; месяц; документ)    -    остаток по сумме-2
AFUNC_K(счет; месяц; документ)    -    количественный остаток по объекту
AFUNC_SUMS(счет; месяц; документ)    -    себестоимость объекта (сумма остатка/количество)
и функции выборки из проводок:
AFUNC_D(счет; месяц)    -    дебет по заданному счету для текущего объекта
AFUNC_C(счет; месяц)    -    кредит
AFUNC_I(счет; месяц)    -    количество по приходу
AFUNC_O(счет; месяц)    -    количество по расходу
во всех функциях первый параметр (счет) - обязателен, остальные параметры - необязательны. По умолчанию ищутся остатки за текущий месяц по всем номерам документов. Все параметры могут быть выражениями (например, счет может браться из поля базы данных, для вычисления месяца можно писать что-то вроде =@M-1, номер документа тоже можно брать из поля базы данных). Порядок задания объектов в файле описания имеет значение. Необходимо следить, чтобы в выражениях использовались только те объекты, описание которых предшествует строке с выражением.

Например, в карточке основного средства можно вывести остаточную стоимость объекта:

V,10,20,0,UCHSUM,@ AFUNC_S(SHET)            - учетная стоимость на счете из поля SHET (невидимо)
V,10,20,0,AMSUM,@ AFUNC_SC(131)            - начисленная амортизация на счете 131 (невидимо)
V,10,20,80,UCHSUM,@ =UCHSUM-AMSUM    - разница (остаточная стоимость объекта)
В карточке товара можно показать текущие остатки и цену хранения на складе:
V,100,120,80,KOL,@ AFUNC_K(281)        - количество остатка
V,100,150,80,PRC,@ AFUNC_SUMS(281)    - цена (себестоимость) товара

B
B - выбор из списка значений поля или переменной. Задается имя поля в базе где хранится индекс и описание списка выбора.
B,150,80,160,GRUPPA,1-я группа,2-я группа,3-я группа,4-я группа
- здесь в указанном месте формы будет создан объект для выбора одной позиции из четырех в списке. При выборе первой позиции в поле базы данных GRUPPA запишется "1", второй - "2" и так далее. Если после имени поля перед первым фиксированным значением поставить знак "!", то в базу будет записан не номер выбранной позиции (индекс), а само значение. Например,
B,150,80,160,SHET,!,103,104,105,106,107
Здесь при выборе второй позиции в поле базы данных SHET будет записан текст "104".
Вместо списка выбора может быть ссылка на справочник или автоменю из содержания поля:
B,150,80,160,GRUPPA,#A
- в этом случае список для выбора будет создан из всех объектов справочника с кодом A. При выборе объекта из списка в поле будет скопирован номер соответствующего объекта;
B,150,80,160,GRUPPA,@
- список выбора будет сформирован из всех возможных значений поля GRUPPA, уже имеющихся в базе. При выборе объекта в поле будет скопировано значение строки выбора (а не ее номер), список выбора последнего типа пользователь может пополнять.

A
A - вызов справочника. Задается код справочника и указания по копированию полей из базы справочника в текущую базу данных.
A,306,88,23,#1,NAME=>ORGNAME,ACCOUNT_1=>ACCN
- на форме создается кнопка шириной 23 пиксела с координатами 306 пикселов слева и 88 сверху. При нажатии пользователем на эту кнопку вызывается справочник с кодом "1". При выборе из справочника объекта, из базы справочника считывается соответствующая запись и содержимое поля NAME из нее копируется в поле ORGNAME редактируемой записи, аналогично поле ACCN заполняется значением поля ACCOUNT_1 из справочника. Курсор ввода при этом перемещается в окно редактирования последнего поля в списке копирования (в данном случае ACCN). Существует специальная функция @OBJNUM, возвращающая код выбранного из справочника аналитического объекта, который можно сохранить в соответствующем поле: ...,@OBJNUM=>ANUM
Для вызова справочника, прикрепленного к счету, который пользователь задает в отдельном поле документа (справочника) вместо кода справочника задаются коды Fимя_поля_счета (вызов справочника по первой аналитике) или Sимя_поля_счета (справочник по второй аналитике), например:
A,300,90,23,FSHET,=>STNAME,@OBJNUM=>STCODE
Здесь создана кнопка вызова справочника с координатами 300, 90 и шириной 23 пиксела. При нажатии на кнопку вызовется первый аналитический справочник, прикрепленный к счету, который пользователь должен занести в окно редактирования поля SHET (это поле обязательно должно быть описано в форме директивой E). После выбора объекта из справочника его название скопируется в поле STNAME, а код (номер записи в базе справочника) - в поле STCODE.
Надпись на кнопке задается сразу после кода справочника, отделяясь от нее знаком ";", например:
A,8,208,120,#1;организации,NAME=>ORG


D
D - картинка, задаются координаты левого верхнего угла и размеры картинки (ширина и высота),затем - имя файла с картинкой:
D,360,36,124,80,em.bmp
Для вывода динамических картинок (своя картинка для каждой записи базы документов или справочника) перед именем поля базы, в котором должно храниться имя файла с картинкой, нужно написать знак "%". После имени через пробел можно задать строку параметров, в которую могут входить знаки A - автоматическое выравнивание размеров картинки, S - растягивать картинку до заданных размеров. Например:
D,360,36,200,300,%PICTURE S
в этом примере предполагается, что в базе есть поле PICTURE, в котором хранится имя файла с изображением (поддерживаются форматы .BMP и .JPG), это поле должно быть описано также директивой E (с нулевой длиной, если не нужно видеть имя файла). Размер вывода 200х300, картинка всегда будет растягиваться, вписываясь в эти размеры.

F
F - форма, задаются размеры формы: ширина и высота
F,500,300

W
W задает ширину окна реестра аналитических объектов или документов в пикселах. По умолчанию для справочников это 292, для документов - 604, однако может быть иным, если в настройках установлено сохранять расположение и размеры окон. Второй параметр (необязательный) задает высоту окна:

        W 400,400

Директива WC задает ширину окна классификатора (если он присутствует). По умолчанию она равна 169 пикселам. Например:

WC 200

M
M - задает максимальное количество записей, которое может быть считано в справочник или в реестр документов
M 100
По умолчанию это число равно 300. Если в справочнике записей меньше, то в список выбора будут скопированы все записи из справочника. Если число записей больше, то для выбора из справочника нужно сделать запрос к базе данных. Для документов, если число записей в базе документов больше 300, в реестр будут считаны последние 300 записей из базы.

%SELMODE параметры
Задает параметры выбора объекта из "большого" справочника (число объектов в котором больше величины, заданной параметром M). Для выбора объекта вводится запрос (код объекта, первые буквы наименования и т.п.), после чего производится поиск всех записей в базе справочника, удовлетворяющих запросу. Если в строке параметров присутствует буква E (латинская), опция запроса "искать по точному совпадению" будет выставлена по умолчанию (это удобно при выборе по коду объекта, например, по номенклатурному номеру товара). Если в строке параметров присутствует буква A (латинская), то, если в результате запроса был найден один единственный объект, он автоматически будет выбран (оператору не нужно дополнительно нажимать Enter или кнопку выбора). Пример:
%SELMODE AE

O
O - задает реакцию на изменение пользователем какого-то поля в окне ввода. Задается имя поля, при выходе из редактирования которого нужно реагировать, и, через запятую - выражение.
O MFO_1,"MFO_1=>BNK_2
- здесь при изменении поля MFO_1 значение этого поля будет скопировано в поле BNK_2.
O SUM,=SUM/6=>NDS
- здесь при выходе из окна редактирования поля SUM (например, сумма накладной), в поле NDS будет помещена 1/6 суммы (сумма НДС). Текстовые выражения начинаются с двойных кавычек, числовые - со знака =. Если поле "реагирования" не задано, указанное выражение будет выполняться каждый раз при выводе карточки на экран или смене объекта (до начала редактирования):
O ,=SUM+NDS=>ALLSUM
в этом примере предполагается, что в базе справочника или документа есть поля SUM и NDS, но отсутствует поле ALLSUM (для которого, тем не менее, задана форма вывода оператором "V"). В этом случае ALLSUM будет выполнять роль переменной, значение которой не сохраняется в базе данных, но может быть вычислено и выведено на экран при показе (редактировании) формы. Если вместо поля "реагирования" стоит знак "*", то выражение будет вычисляться при выходе из любого поля формы. Например,
O *,=SUM1+SUM2+SUM3+SUM4+SUM5=>SUM
в этом случае сумма полей SUM1..SUM5 будет вычисляться и помещаться в поле SUM при каждом переходе из поля в поле. При вычислении выражений может оказаться полезной функция @ROUND(выражение,точность), вычисляющая результат с округлением с заданной точностью. Например:
O KOEF,@ROUND(SUM/KOEF,4)=>REZ1
здесь в поле REZ1 будет записан результат деления значения полей SUM и KOEF с 4-мя знаками после десятичной точки.
В качестве поля-приемника может выступать сообщение на экране для пользователя, для чего используется обозначение ShowMessage. Например:
O NDS,@IF(SUM/6-NDS>0.01;НДС вычислен неправильно!;)=>ShowMessage
при выходе из редактирования поля NDS программа вычисляет выражение SUM/6-NDS и, если оно превышает 1 копейку, выводит сообщение "НДС вычислен неправильно!", в противном случае ничего не происходит (пустое сообщение не выводится).
O PDVSEL,@IF(PDVSEL=0;"ПДВ+=SUM/6;PDV)=>PDV
O PDVSEL,@IF(PDVSEL=1;"Без ПДВ;PDV)=>PDV
В данном примере на экранной форме создан селектор PDVSEL (объект создан при помощи описателя B и может не иметь соответствующего поля в базе данных), который имеет два положения: "С НДС" и "Без НДС". Если пользователь активизирует селектор и выбирает "С НДС", в поле PDV вставляется текст "ПДВ " и значение поля SUM, деленное на 6 (НДС по ставке 20%), если пользователь выбрал "Без НДС", в поле PDV вставляется текст "Без ПДВ".
    Чтобы добавить результат в конец поля-приемника, можно написать так:
O PDVSEL,@IF(PDVSEL=0;PDV+"ПДВ+=SUM/6;PDV)=>PDV
    И, наконец, имеется возможность добавить результат в любое место уже существующего текста. Для этого нужно поставить в этом месте курсор, а затем выбрать нужное положение селектора. Для этого используется дополнительная приставка @PASTE, организующая вставку результата в позицию курсора заданного поля через буфер обмена. Например:
O PDVSEL,@PASTE @IF(PDVSEL=0;"ПДВ+=SUM/6;)=>NOTE
Кстати, при этом в буфере обмена остается результат вычисления выражения. В качестве поля приемника можно использовать специальную функцию @EDITFLD, которая соотвествует полю, в котором находился курсор непосредственно перед вызовом данного обработчика. Например:
O SPRAV, @PASTE SPRAV=>@EDITFLD
Здесь используется объект SPRAV (также созданный описателем B), при выборе значения которого текст селектора вставляется в положение курсора того поля карточки документа, в котором находился курсор непосредственно перед тем, как пользователь нажал кнопку выбора селектора SPRAV.
 
C
C - задает цвет формы
C $02DCD89B
Число для задания цвета формы состоит из 4-х разделов по 2 шестнадцатеричные цифры. Первый разряд рекомендуется всегда задавать 02, следующие три разряда кодируют интенсивности цветов - синий, зеленый, красный.

S
S - задания ключей для поиска. Можно задать до 4-х вариантов поиска в базе - название ключа поиска и номер поля в базе (поля нумеруются от 1).
S организация, 2
- здесь вариант поиска называется "организация", при его выборе поиск заданной пользователем подстроки будет производиться в поле номер 2 базы данных.
S код ОКПО, 10
- при выборе этого варианта строка поиск заданной строки будет производиться в поле номер 10.
Может быть задано несколько (до 4) полей поиска (через запятую). Например,
S примечание, 8,9,10
поиск в примечании будет вестись по содержанию трех полей базы данных: 8,9,10.

R
R - описание колонки для реестра документов или списка объектов справочника. Задается заголовок колонки, ее ширина в пикселах, способ выравнивания, имя поля в базе данных. Способ выравнивания задается знаком:
<  выравнивание влево
>  выравнивание вправо
-  выравнивание по центру.

R номер, 44, -, NUME

- здесь описана колонка реестра с заголовком "номер", шириной 44 пиксела, с выравниванием по центру, колонка заполняется строками из поля NUME базы данных
R сумма, 72, >, SUM
- колонка с шапкой "сумма" шириной 72 пиксела с выравниванием вправо и задающим полем SUM
Дополнительным параметром можно задать тип поля, например
R дата, 72, -, DAT1,D
здесь описано поле типа "дата". Возможные типы полей: В настоящий момент используются следующие специальные функции (только в блоке ТМЦ для справочника товаров или материалов):
 
REST остатки по товару на складе
RESERV остатки по товару на складе с учетом выписанных счетов
COST учетная стоимость за единицу товара
EDIZ единица измерения товара
Например, описание колонки справочника с остатками товара на складе выглядит так:
R остатки, 60, >, REST, U

%CREATE
%CREATE - задание описателя поля базы данных. Эти описатели необходимы для создания новой базы данных. Для каждого поля задается 4 параметра: имя поля, тип, длина и точность. Точность необходимо задавать для всех полей базы. Тип поля задается символом:
%CREATE NAME , C, 40, 0
- здесь описано поле NAME символьного типа длиной 40 знаков
%CREATE SUM, N, 16,2
- поле SUM числового типа длиной 16 знаков с двумя знаками после десятичной точки.
Описатели используются только при отсутствии базы справочника (документа) при первом обращении к ней; если необходимо изменить структуру уже существующей базы, необходимо внести изменения в описатель и перекодировать базу следующим образом. Для базы документов нажать Ctrl-Alt-D и выбрать нужный документ. Для базы аналитического справочника зайти в список справочников и выбрать из контекстного меню по нажатию правой кнопки мыши пункт "перекодировать базу справочника".

%DOUBLE  (только для документов)
%DOUBLE - разрешает для печатной формы возможность печати двух экземпляров на одном листе бумаги А4. После директивы (без пробела) может стоять знак + или -, определяющий, будет ли по умолчанию отмечен селектор печати двух экземпляров. Например, %DOUBLE- позволяет печатать два экземпляра (выводит на экран селектор выбора - 1 или 2 экземпляра), но по умолчанию будет печататься один.

P  (только для документов)
P - определение печатной формы (для документа). Задается наименование печатной формы и имя задающего файла. Имя нужно указывать полностью (включая подкаталог).
P платежное поручение = FORM\platwin.txt
- здесь описана печатная форма с названием "платежное поручение" и задающим файлом platwin.txt из каталога FORM. Если задано печатных форм задано две или больше, пользователь их может выбрать из меню.

G (только для аналитических справочников)
G - задание вариантов группировки данных. Задается название варианта и номер поля, по значениям которого производится группировка. Дополнительно могут быть заданы варианты расшифровки значений поля: списком или ссылкой на справочник.
G по городам, 8
- здесь описан способ группировки с названием "по городам", группировка производится по значениям поля номер 8 базы данных справочника.
G по назначению, 4, ?; производственные; непроизводственные
- описан способ группировки с названием "по назначению". Группировка производится по значениям поля номер 4, при этом записи со значением "1" в этом поле группируются с названием "производственные", записи со значением "2" - "непроизводственные". Если в поле стоит пробел или "0", то эти записи при выводе на экран будут сгруппированы с названием "?".
G по кодам, 3, #K
- группировка с названием "по кодам" осуществляется по полю с номером 3. В этом поле хранятся коды (номера записей), которые расшифровывуются из справочника с кодом "K". Например, все записи, у которых в поле 3 текущего справочника стоит число 5, будут сгруппированы в группу с названием пятого объекта в базе данных справочника с кодом "K".
Для группировки по уровню прикрепленного к справочнику классификатора нужно после номера поля написать знак "|" и (необязательно) количество уровней, например:
        G по классификатору, 2, |
или
        G классификатор, 2, |3
в первом примере будут группироваться записи по значению первого (верхнего) уровня классификатора, во втором примере - по комбинации всех трех уровней.
    Специальный вариант группировки может применяться в отчете аналитическая ведомость по счету. Группировка производится по подстроке примечания к аналитическому объекту (не документу!, т.е. учет на счете должен вестись без учета номера документа или во всех примечаниях к данному объекту в заданной подстроке должен быть введен один код). Например:
    G по кодам ответственных,2,%7;3
Группировка (и фильтр) производятся по подстроке длиной 3 знака с 7-го символа примечаний к остаткам, в которых должны быть записаны коды ответственных за возникновение остатка. Такая группировка позволяет просмотреть остатки на счете в разрезе ответственных за их возникновение (погашение).

T  (только для документов)
T - определение для ввода операции по документу. Перечисляются поля, содержащие день операции (месяц - текущий), сумму, объект аналитического справочника, номер документа, примечание, отметку о совершении проводки,код журнала операций.
T DAY,SUM,NAME,NUM,NOTE,CODE,2
в этом примере при нажатии на кнопку "ввод операции" появляется окно для ввода операции и проводок, заполненное информацией из текущего документа: день из поля DAY, сумма операции - из поля SUM, номер документа - из поля NUM, примечание - из поля NOTE. При вводе проводок, при выборе аналитического объекта из справочника, программа попытается найти в справочнике объект с именем из поля NAME и установить на нем курсор для выбора. Если операция будет сделана, в поле CODE запишется отметка (знак "*"). Сделанная операция будет помещена в журнал операций с кодом "2". Дополнительно (также через запятую) могут быть заданы настройки для генерации проводок в таком порядке: сумма (выражение для вычисления суммы, которое может включать константы и имена полей), количество (выражение), проводка (задается также, как и в дереве). Можно задать несколько проводок. Например,
T DAY,SUM,NAME,NUM,NOTE,,,SUM,50 %KSHET
здесь поле отметки и код журнала операций не заданы (будут использованы значения по умолчанию), но задана одна проводка, в качестве суммы которой берется значение поля SUM, счет дебета "50", счет кредита берется из поля KSHET.
Пример настройки генерации проводок для приходного кассового ордера:
T DAY,SUM,NAME,NUM,KORG+NAME+OPER,TRANZ,0,SUM,,50[V,%KODNAZN] %KSHET
здесь в полях базы документа содержится: DAY - день, SUM - сумма операции, NAME - имя подотчетного лица или организации, которые внесли деньги, NUM - номер ордера, KORG - код лица (табельный номер) или код ОКПО организации, OPER - наименование операции, TRANZ - поле отметки о сделанных проводках, KODNAZN - содержит код назначения из справочника, подключенного к счету 50, KSHET - содержит корреспондирующий счет (62, 71 и т.п.). В окне редактирования имеется описатель
A,290,66,20,#V,@OBJNUM=>KODNAZN,NAME=>NOTE
организующий выбор из аналитического справочника видов платежей и сохраняющий код вида в поле KODNAZN и название вида в поле NOTE. Аналогичным образом можно было бы организовать передачу аналитической информации для корреспондирующего счета.
При вводе операции по такому документу появляется окно с заполненными полями примечаний, дня, суммы и номера документа, а также с одной уже подготовленной проводкой, причем уже прописана аналитика для счета 50. Пользователь может отредактировать эту проводку или ввести ее заново, а может принять одним единственным нажатием кнопки, что значительно ускоряет ввод типовых проводок. Подробнее об описании проводки можно почитать здесь.

%BAN разрешить_редактировать; разрешить_добавлять; разрешить_удалять
Только для документов. Определяет дополнительные ограничения на права пользователя на изменение данных в реестре документов, разрешая или запрещая редактирование записей, добавление новых и удаление ненужных документов. В качестве условий можно задавать константы TRUE, FALSE или список (через запятую) кодов операторов, которым будет разрешена соответствующая функция (должен быть включен режим идентификации оператора в настройках товарного блока).

%MAKETRAN,
%MAKETRANF
задание параметров для системы ввода проводок от документа. В отличие от описанного выше ключа "T" организует не передачу данных из документа в журнал операций и создание проводок от полученной операции, а непосредственное создание проводок от документа. Сделанные документом проводки можно просмотреть (клавиша F10), удалить (специальная клавиша на панели), отредактировать (повторное нажатие клавиши ввода проводок). При расшифровке проводок можно увидеть как краткую расшифровку (какой документ сделал проводку), так и весь документ полностью. Таким образом, база документов превращается в базу операций.
Этой функцией нельзя пользоваться для баз документов, количество записей в которых превосходит 65000. Описатель %MAKETRAN пишет проводки в обычную базу проводок BK_??_??.DBF, а описатель %MAKETRANF пишет проводки в специальную базу проводок UK_??_??.DBF, используемую, например, для резервирования товаров.
Перечисляются поля, содержащие дату операции (обязательно поле типа "дата", месяц операции также берется из этого поля), сумму, объект аналитического справочника, номер документа, примечание (оно будет показываться в расшифровке проводки), поле отметки о совершении проводки, поле с номером проводки в базе проводок (необязательно, но рекомендуется для ускорения работы). Например:
        %MAKETRAN DATE,SUM,NAME,NUM,POS1,OTMETKA,NUMTRAN
в этом примере при нажатии на кнопку "ввод операции" появляется окно для ввода проводок за месяц из поля DATE. При вводе проводок, при выборе аналитического объекта из справочника, программа попытается найти в справочнике объект с именем из поля NAME и установить на нем курсор для выбора. Если операция будет сделана, в поле OTMETKA запишется отметка (знак "*"), а в поле NUMTRAN - номер первой проводки в базе данных. Дополнительно (также через запятую) могут быть заданы настройки для генерации проводок в таком порядке: сумма (выражение для вычисления суммы, которое может включать константы и имена полей), количество (выражение), проводка (задается также, как и в дереве). Можно задать несколько проводок, аналогично как и для ключа "T". Для приведенного выше примера необходимо чтобы поля NUMTRAN и OTMETKA были описаны в экранной форме хотя бы ключем "V" (если их не нужно показывать, сделайте длину вывода 0, тогда поле будет невидимо). Если в базе документе присутствует поле с именем OPERATION, в нем будет записано название операции, собранное из выбранного пути в дереве проводок (то, что в обычных операциях пишется в поле "операция"). Это должно быть символьное поле произвольной длины, описанное в экранной форме ключем "E" или "V".

Q
Q - задание номеров колонок для сортировки данных. Задается номер колонки в реестре, намерация с единицы. Можно задать два номера колонки (через запятую). Колонки по умолчанию сортируются как строки. Если колонка в реестре описана типом "N", данные сортируются как числа, т.е. получим (1,2,10) а не (1,10,2). Ширина колонок такого типа не должна превышать 32 знаков. Например,
Q 3,1
строки в справочнике будут отсортированы по значениям в третьей колонке (для справочника курсов валют это дата). Если значения в третьей колонке совпадут, они будут отсортированы согласно значениям в первой колонке.
При работе с большими справочниками (более 2000 записей при условии, что параметр M установлен так, что на экран выводятся все записи справочника) время загрузки и вывода справочника на экран может быть неприемлимо большим за счет медленной сортировки. Для отключения сортировки нужно установить параметр сортировки 0.

H  (только для документов)
H - задание функции пользователя (для выполнения операции экспорта из базы документов в произвольную базу пользователя). Формат задания:
H имя_пункта_меню;вид;путь_к_базе;поле_отметки;список_соответствия_полей
где Пример:
H передача оплаты;AL;\work\kassa.dbf;CODE1;NAME=>NAME,SUM=>SUM,CODE=>CODEID
Для экспорта в другой документ можно также вызывать внешний DLL. Например:
H передать данные на оплату;AL;
@CALL k3exp.dll,ExpOpl;CODE;
NUM=>F_CODE_DOC,KORG=>F_CODE_ORG,SUM=>F_SUM,KSHET=>F_CRED,"30/1"=>F_DEB
(все в одну строку). Здесь вызывается функция ExpOpl из динамической библиотеки k3exp.dll, которой передается набор строк вида имя_поля_приемник = значение_поля_источника. Например, для записи, в которой значения полей равны:
NUM="125"
KORG="6548"
SUM="54.21"
KSHET="63/1"
в DLL-файл будет передан набор строк:
F_CODE_DOC="125"
F_CODE_ORG="6548"
F_SUM="54.21"
F_CRED="63/1"
F_DEB="30/1"

I  (только для документов)
I - задание параметров для передачи из текущей базы документов в другую базу документов (используется, например, для выписки накладной по уже выписанному счету и т.п.). Формат задания:
I код_документа, признак, список_соответствия_полей
код_документа - уникальный для каждой базы документов код, задается в docums.txt. В товарном блоке можно экспортировать в расход (V), приход (U), счета (T), для экспорта в базу следующего месяца нужно ставить знак "+" сразу после кода, например, V+ - экспорт в реестр расходных товарных накладных следующего месяца. В этом параметре можно также задать директиву экспорта во внешний текстовый файл (см. описание дальше). Внутри параметра, после знака ";", может присутствовать имя поля, в котором будет делаться отметка об экспорте для предотвращения повторного экспорта. По умолчанию отметка делается в поле EXPORTED (если оно, конечно, присутствует в базе данных и содержится в описателе документа).
признак - если это "X", то после редактирования нового документа база, в которую производился импорт, закрывается, в противном случае она остается на экране. В этом же параметре можно задать свое название для операции передачи документа (например: Xпередача в книгу продаж или _передача на оплату)
список соответствия полей - разделенные запятыми пары полей, которые должны переходить друг в друга при импорте. По умолчанию все одноименные поля переходят друг в друга. Пример:
I B,X,NUM=>NOTE,DAY=>,MONTH=>
в этом примере при нажатии кнопки "экспорт в другой документ" создается новый документ из базы документов с кодом "B", все поля активного документа переписываются в одноименные поля документа в базе "B", за исключением трех полей: содержимое поля NUM перепишется в поле NOTE, а поля DAY и MONTH в новом документе или останутся незаполеннными, или заполнятся по умолчанию, если в настройках присутствуют команды типа AUTODAY или AUTOMONTH.
После списка соответствия полей через знак "|" может быть задан список обратного экспорта (квитанции) в таком же виде: поле из базы, в которую делался экспорт =>поле в текущей базе. Например, в качестве квитанции об экспорте в книгу продаж можно в текущей базе записать номер налоговой накладной.
В одном документе можно описать несколько директив экспорта (в разных строках), что дает возможность экспортировать документ в разные реестры. При нажатии на кнопку эксопрта в этом случае появится меню из названий документов-приемников.
При успешном экспорте в поле исходного документа EXPORTED (или другом, заданном пользователем в параметре код_документа после знака ";", и при условии существования такого поля в документе), прописывается отметка. При экспорте из документов товарного блока отметка прописывается независимо от того, сохранил ли пользователь экспортируемый документ. При повторном экспорте проверяется, имеется ли отметка об экспорте и при необходимости выводится запрос на подтверждение.
Экспорт во внешний текстовый файл
Для задания экспорта во внешний текстовый файл необходимо: для обычных документов параметр код_документа задать как %путь_и_имя_файла, а для документов товарного блока, для передачи всех позиций накладной, задать T%путь_и_имя_файла. Например, для обычного документа строка
I %D:\EXP\DATA.TXT;OTM,Xэкспорт в текстовый файл,DAY=>,MONTH=>
создает в меню экспорта пункт с названием "экспорт в текстовый файл", при выборе которого значения всех полей документа сохраняются в файле D:\EXP\DATA.TXT в виде имя_поля=значение, причем поля DAY и MONTH очищаются. В документе в поле OTM делается отметка об экспорте, и когда пользователь пытается вторично экспортировать документ, выводится соответствующее предупреждение. Данные всегда добавляются в конец файла, в качестве разделителся документов вставляется символ прогона страницы и перевода строки. Экспорт во внешний текстовый файл может использоваться как для передачи данных документов в другие задачи, так и для последующего экспорта другими документами (например, из другого рабочего места).

%IMPORTFILE (только для документов)
%IMPORTFILE имя_файла, параметры
Если задан файл импорта, в контекстном меню по правой кнопке мыши в реестре документов появляется пункт "ввод данных из файла" (который также можно вызвать комбинацией клавиш Ctrl-F12). При выборе этой функции данные из текстового файла с заданным именем в формате имя_поля=значение используются для автоматического заполнения нового документа текущего реестра. Подобный файл может быть получен, например, при помощи директивы экспорта во внешний текстовый файл. Строка параметров может содержать символы (в любой последовательности): A - производить автоматический импорт всех документов, содержащихся в файле (иначе импорт производится по одному документу), D - по окончании операции удалить файл, из которого осуществлялся импорт. Например:
%IMPORTFILE d:\exp\data.txt,DA
Здесь из внешнего файла D:\EXP\DATA.TXT осуществляется импорт всех записей в текущий реестр документов, по окончании работы исходный файл удаляется. Данная директива будет работать и для документов товарного блока (при условии, что экспорт в файл производился с включением номенклатуры накладных), но при этом не поддерживается автоматический импорт всего списка - для каждого документа необходимо явно выбрать проводку при сохранении.

%CHILDBASE  (только для документов)
%CHILDBASE имя_базы, ключевое_поле
задает дочернюю базу, связанную с основной по значению ключевого поля. В основной базе значение ключевого поля уникально, в дочерней может быть сколько угодно записей с таким значением поля. Например, основная база - реестр накладных, а дочерняя - позиции накладной (товары), ключевое поле - номер документа. В настоящее время записи дочерней базы используются только при распечатке документа. В задающем файле печатной формы нужно пользоваться директивой $LOOP, для ссылки на номер очередной дочерней записи - @NUMLINE, внутри цикла можно прямо писать имена полей дочерней базы, а если имена пересекаются с основной, нужно писать @CHILD(имя_поля) для явной ссылки на поле в дочерней базе. Общее количество выбранных записей в дочерней базе выдаст @STRINGSNUM.

%CLASSIFIER имя_базы_классификатора, поле_классификатора
задает связь с базой классификатора. В базе классификатора в первом поле хранится классификационный код. Это поле типа "C" длиной 2*n байт, где n - количество уровней классификатора (до 64 уровней). Во втором поле хранится название уровня.
Если база не существует, она создается с 3-мя уровнями классификатора и длиной названия 40 символов. В базе справочника должно быть поле классификации такой же длины, как первое поле классификатора. Это поле и указывается в качестве второго параметра директивы. Используя классификатор, можно отфильтровать справочник по заданной вершине дерева классификатора (просмотреть только те объекты, которые соответствуют заданной вершине классификационного дерева). Классификатор используется для справочника товаров, однако различные классификаторы можно прикреплять к любым справочникам - организациям, основным средствам и т.п.
Директива классификации должна быть первой в описателе справочника. Для просмотра и редактирования классификационного кода в карточке должно присутствовать поле_классификатора (с директивой редактирования E).

%UNIQUE поле, наименование_поля
задает поле в базе данных, содержание которого должно быть уникальным для каждой записи (например, номер документа для накладной, код ОКПО для организации и т.п.)
При попытке пользователя сохранить запись с незаполненным полем или со значением поля, уже встречавшимся в базе, выдается предупреждение о неверном заполнении поля "наименование_поля" и запись не сохраняется. Например:
%UNIQUE NNUM, номер документа

%EXTERNAL имя_DLL_файла     (только для справочников)

директива вызова внешнего модуля для работы со справочником. Указывается имя внешней динамической библиотеки (DLL-файла), внутри которого должна быть экспортирована функция  SELECT(integer):double; stdcall. Эта функция принимает текущее положение объекта (входной параметр - номер записи в базе) и возвращает номер записи, выбранной пользователем. Если пользователь отказался от выбора, функция возвращает ноль.

%TOVCODES код_организаций, код_менеджеров, код_прайсов        (только для форм блока ТМЦ)
задаются коды для справочников организаций, менеджеров (ответственных за сделку) и прайс-листов, которые будут использоваться при работе со счетами, приходными и расходными накладными товарно-материального блока. Директива может присутствовать в файлах t_fac.txt (счет), t_prih.txt (приходная накладная) или t_ras.txt (расходная накладная). Если директива отсутствует, или в ней заданы не все справочники, коды справочников берутся по умолчанию ("2" - организации, "3" - менеджеры, "P" - прайс-листы). Дополнительно (четвертый, пятый и шестой параметры) также можно задавать коды объектов по умолчанию (номера записей в соответствующих справочниках): код склада, код покупателя (получателя), код поставщика.
%TOVLABELS список_подписей     (только для форм блока ТМЦ)
задание списка подписей к экранным элементам счета, приходной или расходной накладной в подсистеме товарно-материального учета "Главбуха". В списке подписей через запятую перечисляются наименования экранных элементов формы. Пропуск (но не пробел) означает, что используется подпись по умолчанию. В тексте подписи нельзя использовать знак запятой. Порядок подписей понятен из примера, который устанавливает те же самые подписи, что и "прошиты" в самой программе:
%TOVLABELS Номер док-та, партия №, прайс, поставщик (откуда), менеджер, получатель (куда), примечание, срок оплаты, получил, доп.расходы, скидка, налог.накл.
Если вместо элемента стоит знак "X" (большая латинская буква X), соответствующая подпись вместе с ее элементом редактирования будет скрыта от пользователя.
Дополнительно могут быть заданы параметры (следующие элементы, разделенные запятыми):
признак видимости селектора организации/склады, ширины колонок таблицы (разделитель ";"), номер путевого листа, автопредприятие, автомобиль, водитель.

Директивы импорта из внешних текстовых файлов

Директива %CB используется для описания операторов программы связи с системами "Клиент-Банк". Формат описания:
%CB команда
где "команда" - команда на специальном языке описания алгоритма импорта выписки банка. Выписка банка читается строчка за строчкой, функциями выборки из текущей строки заполняются поля документа и проверяются условия окончания документа и завершения выписки. Пример программы приведен ниже (или, целиком файл настройки документа "выписка банка").
 
команда
описание команды
%FILENAME=имя_файла задать имя файла с выпиской банка или шаблон для выбора из списка файлов
%CODETABLE=параметр выбор кодировки файла. По умолчанию - кодировка Windows 1251. Для ДОС-кодировки по украинскому ГОСТ параметр = DOS
%ABSOLUTE=поле, строка, функция заполнение поля документа, общего для всех импортируемых записей (например, дата выписки в шапке файла). Задаются: имя поля документа, номер строки в выписке банка, имя функции вырезки данных из строки
%START=текст позиционироваться на заданной строке для начала работы (например, выбор валюты в выписке по мультивалютному счету)
%SHIFT=смещение пропустить заданное количество строк перед первым документом
%ENDSTRINGPOS=текст признак конца группы документов, приводит к окончанию работы импорта
%NEXTLINE чтение следующей строки выписки
имя поля=функция заполнение полей документа функциями выборки из текущей строки выписки
%APPEND поле=функция добавление к значению поля результата функции выборки из текущей строки
%IFEMPTY(функция) команда Если результат функции есть пустая строка, будет выполнена следующая команда
%IFNOSUBSTR(текст) команда Если в текущей строке нет заданного текста (подстроки), будет выполнена следующая команда
%IFEXP(условие) команда Если условие выполнено, будет выполнена следующая команда
%MONEY(поле) преобразование текста в числовом поле (убирает разделители тысяч и т.п.)
%MONEY100(поле) то же самое, только сумма делится на 100 (когда в сумме нет разделителей копеек)
%SKIP текущий документ не будет включен в реестр (пропущен)
%FINDAN(параметры) поиск аналитического объекта в справочнике по коду (поиск организации по коду ОКПО). Задаются следующие параметры: код_справочника, поле_документа_с_кодом_ОКПО, поле_справочника_с_кодом_ОКПО, поле_документа_с_названием, поле_справочника_с_названием, поле_документа_с_аналитическим_кодом. Например: %FINDAN(2,OKPO,MFO_2,NAME,NAME,ANUM). Последний параметр не обязателен.
%FINDADDAN(параметры) поиск аналитического объекта в справочнике по коду (поиск организации по коду ОКПО). Если объект не найден, справочник автоматически пополняется.
%CHECKNEWDOC условие Если условие выполняется, начинается обработка нового документа (управление передается в начало программы, следующие операторы игнорируются)
%NEWDOC Начало нового документа (управление передается в начало программы)

Функции выборки из текущей строки выписки

Функция
описание
WORD(номер) взять слово с заданным порядковым номером (слова разделяются пробелами)
ITEM(символ,номер) в строке с разделителем "символ" взять вхождение с заданным номером (по сути, то же, что и WORD, но с произвольным разделителем)
CHAR(номер) взять символ с заданным номером
SUBSTR(смещение,длина) вырезать подстроку с заданной позиции заданной длины
STRING возвращает всю текущую строку выписки

Условия

пример
описание
CHAR(1)#SPACE первый символ текущей строки - не пробел
WORD(6)=КРЕДИТ шестое слово в строке - "КРЕДИТ"
ПРИХОД<SUBSTR(10,80) в подстроке с 10 символа длиной не более 80 знаков встречается слово "ПРИХОД"

Пример программы чтения выписки банка

%CB %FILENAME=a_*.txt 
%CB %START=980   Українська гривня 
%CB %SHIFT=6 
%CB DATE=WORD(1) 
%CB NUM=WORD(3) 
%CB %IFEMPTY(SUBSTR(31,16)) SUM=SUBSTR(54,70) 
%CB %IFEMPTY(SUBSTR(31,16)) TYP=1 
%CB %IFEMPTY(SUBSTR(54,70)) SUM=SUBSTR(31,16) 
%CB %IFEMPTY(SUBSTR(54,70)) TYP=2 
%CB %MONEY(SUM) 
%CB %NEXTLINE 
%CB %IFEMPTY(SUBSTR(2,6)) %NEXTLINE 
%CB %NEXTLINE 
%CB NAME=WORD(2)+WORD(3)+WORD(4)+WORD(5) 
%CB %NEXTLINE 
%CB %IFNOSUBSTR(ЕГРПОУ) %APPEND NAME=STRING 
%CB %IFNOSUBSTR(ЕГРПОУ) %NEXTLINE 
%CB OKPO=WORD(2) 
%CB %FINDADDAN(2,OKPO,MFO_2,NAME,NAME,ANUM)
%CB %NEXTLINE 
%CB NOTE1=STRING 
%CB %NEXTLINE 
%CB %CHECKNEWDOC CHAR(1)#SPACE 
%CB NOTE2=STRING 
%CB %NEXTLINE 
%CB %CHECKNEWDOC CHAR(1)#SPACE 
%CB NOTE3=STRING 
%CB %NEXTLINE 
%CB %NEWDOC 
%CB %ENDSTRINGPOS=Обороти за день
Иногда выписка клиент-банка приходит в виде DBF-файла, который формируется за каждый банковский день. Программа поддерживает чтение таких выписок, при этом вместо имени функции выборки нужно просто писать имя поля из базы выписки банка. В этом случае также можно использовать дополнительный условный оператор %IF(имя_поля=значение). Пример программы чтения выписки в виде DBF-файла приведен ниже:
%CB %FILENAME=C:\KLIENT\EXIT\*.dbf
%CB %CODETABLE=DOS
%CB DATE=DATA
%CB NUM=ND
%CB SUM=S
%CB %IF(DK=0) TYP="1
%CB %IF(DK=1) TYP="2
%CB %MONEY(SUM)
%CB NAME=KL_NM_K
%CB OKPO=KL_OKP_K
%CB %FINDADDAN(2,OKPO,MFO_2,NAME,NAME,ANUM)
%CB NOTE=TEXT1
%CB %NEWDOC


Функции и операторы программы

 
AFLD #LIST @SUBST
APRC @LINKFVAL @SUMP
ARKM #LOOP SET
ARNM @M SETN
ARNQ @MONTHOF SUM1 .. SUM99
ARS2 @MFOBANKTOWN SETS2
@ANFVAL @MONTHNAME @TAX
ADDSUM @MONTHNAMS @YEAR
SUMOP @MFOBANKNAME @YEAR2
C @NOMEXEMP @YEAROF
CLEARAN @OBJFVAL @YEAROF2
D @OBJECTNUM ?
@DAYOF @Q @
#DISTRIB @ROUND %
@DATA @RATE @CONT
@DATEOF S @LINE
@FVAL SD @VLINE
@IF SC @RECT
@INT @STRINGSNUM @CLASSNAME
@TCOL @CLEAR @PICTURE
@TCOLS @UPDATE @RARE
@TOV @OBJNUM ShowMessage
@TOVSUMS #REST* @CALL
@TOVCLASS @WRKH @WRKD
SUMR SUMS SUMPDV
SUMT QUANT @BOX
@A2CEX @A2OBJ @A2SLD
@CURDATE @CURTIME  @CURDATETIME
#ALL @SLICE @CENT
@SELECTDOC @TODATE @EXTSPRFLD
@DAYSFROM @MONTSFROM @YEARSFROM
@DEBSKLAD @SRD @SETVAR
@GETSHET @GETSUBSHET ABS
@AF_???

@TAX( выражение )
вычисление подоходного налога из суммы, определяемой выражением. Шкала налога берется из настроек (В главном меню: "Настройки" - "Установки", закладка "Константы").

@RATE( код_справочника , код_валюты , +)
функция определения курса валюты. Например:
        @RATE(Q,USD,+)
здесь в справочнике с кодом "Q" (это должен быть справочник типа "курсы валют") ищется запись о курсе валюты с кодом "USD" на нужную дату (месяц и день в операциях, текущее число активного месяца программы в других режимах). Если третий параметр "+", справочник валют выводится на экран и пользователь может сам уточнить курс. Если третий параметр отсутствует, курс подставляется автоматически, без вывода справочника на экран. Этой функцией следует пользоваться для выбора курсов валют из нескольких справочников, поскольку поддерживается и старый способ ссылки на курс по коду валюты, которая ищет код валюты в первом справочнике типа курсов валют.

@IF( выражение сравнение выражение ; выражение1 ; выражение2 )
условный оператор. Условие задается знаком "сравнение", который может быть одним из следующих: < > = #. Если условие выполняется, значением оператора становится результат выражения1, в противном случае - выражение2. Например,
        @IF(SUM<1000,SUM*0.02,20)
если значение поля SUM меньше 1000, результатом будет 2% от значеня SUM, для больших значений SUM результат равен 20. Оператор IF не может быть вложенным. Выражения могут быть как числовыми, так и символьными. Если выражения в условии текстовые, после скобки нужно поставить двойную кавычку (типа @IF("SHET=23/10;...). В символьных выражениях для сравнения с пустой строкой нужно писать две одинарные кавычки, например: @IF("X(4)='';...) - обратите внимание, здесь перед выражением двойная кавычка, а после знака "равно" - две одинарных.
Для сложных выражений отсутствие вложенности можно компенсировать дополнительной формулой. Например, в печатной форме документа можно написать:
        10      10      0        =@if(@A2<150;@A2*0.01;@A2*0.02),A3
        10      20      40      =@if(@A2<1000;@A3;20)
первая строка на экран (печать) не выводится (длина вывода равна 0), результат запоминается в переменной A3. В результате вывода второй строки будем иметь результат, вычисляемый по формуле: 1% для сумм до 150, 2% для сумм от 150 до 1000 и 20 грн для сумм свыше 1000.
    В условии оператора можно использовать операторы .AND., .OR. и .XOR. Например:
@IF(KOL>6.AND.KOL<11;KOL;)
Здесь условие выполняется, если значение поля KOL лежит в интервале от 6 до 11.

@M
текущий месяц (активный в программе). Возвращает номер месяца 1..12.

@YEAR
текущий год. Возвращает 4 цифры года: 1998, 1999, 2000...

@YEAR2
Возвращает 2 последние цифры текущего года, например 99.

@Q
текущий квартал. Возвращает 1..4.

@WRKD(месяц)
возвращает количество рабочих дней в заданном месяце текущего года. Месяц задается константой или выражением (например, @M-1). Для работы функции необходимо, чтобы пользователь задал календарь рабочих дней (хранится в файле CALEND00.TXT (в конце последние две цифры года) и редактируется через меню "справки"-"календарь", кнопка "раб.дни". Имя файла календаря и путь к нему могут быть изменены параметром CalPath в файле настроек GBW.SES).

@WRKH(месяц)
возвращает количество рабочих часов в заданном месяце текущего года. Месяц задается константой или выражением (например, @M-1). Задание календаря рабочих часов производится так же, как и количество рабочих дней для функции @WRKD

@DAYSFROM(выражение или имя поля)
возвращает число дней от даты, определяемой выражением, до даты ввода операции (проводки). Может использоваться при начислении амортизации ОС в зависимости от даты ввода ОС в эксплуатацию.

@MONTHSFROM(выражение или имя поля)
возвращает число полных месяцев от даты, определяемой выражением, до последнего дня месяца, предшествующего месяцу ввода операции (проводки). Может использоваться при начислении амортизации ОС в зависимости от даты ввода ОС в эксплуатацию.

@YEARSFROM(выражение или имя поля)
возвращает число полных лет от даты, определяемой выражением, до последнего дня месяца, предшествующего месяцу ввода операции (проводки). Используется в групповых проводках при начислении амортизации ОС в зависимости от даты ввода ОС в эксплуатацию.
ABS(выражение)
@ABS(выражение)
возвращает абсолютное значение (модуль) числа, определяемого выражением

@INT(выражение)
возвращает целую часть результата вычисления выражения в скобках (в виде строки). Выражение надо начинать со знака "=", т.к. оно должно иметь тип "число". Например, @INT(=SUM/6) вернет целую часть значения поля SUM, деленного на 6.

@CENT(выражение)
возвращает дробную часть (копейки) результата вычисления выражения в скобках. Выражение задается также, как для функции @INT.

@ROUND(выражение,точность)
вычисляет выражение и возвращает результат с заданном количеством знаков после десятичной точки.
Например, в печатной форме товарного блока необходимо цену за единицу товара выводить с тремя знаками после десятичной точки. Этого можно достичь комбинацией функций:
        %PREC(3)
        100     93      25      =@ROUND(@TCOL(5),3)         >
        %PREC
Вначале устанавливается точность вывода 3 знака, затем число округляется до 3 знаков, затем восстанавливается стандартная точность вывода.

@STRINGSNUM
- для документов - возвращает количество заполненных строк из документа (позиций, в которых в полях с именем SUM1, SUM2 и т.д. не ноль);
- для накладных, счетов и др. документов подсистемы материального учета - возвращает количество позиций в документе.
- для отчетов из журналов-ордеров типа конструктор - возвращает количество строк в отчете (включая строку с итогами).
Эту функцию можно использовать для того, чтобы не выводить на печать пустые (незаполненные) позиции при распечатке стандартных документов (счет, накладная, налоговая накладная), не связанных с блоком ТМЦ. Для этого в документ вводится строка определения переменной, например, с именем NP:
        190     52      0       @STRINGSNUM     NP
(длина вывода равна нулю, поэтому на печать значение не выводится). В дальнейшем, при выводе на печать какого-либо поля проверяется условие:
        33      140     100     @IF(@NP>3;POS4;)
поле POS4 будет печататься только в том случае, если число заполненных строк больше трех. Для числовых полей нужно писать так:
        252     145     40      @IF(@NP>4;=SUM5;)               >

@YEAROF(выражение)
возвращает номер года из выражения типа "дата"

@YEAROF2(выражение)
возвращает две последние цифры номера года из выражения типа "дата"

@MONTHOF(выражение)
возвращает номер месяца из выражения, которое должно иметь тип "дата" (например, имя поля в базе данных типа "дата")

@DAYOF(выражение)
возвращает день (число) из выражения типа "дата"

@MONTHNAME(выражение)
название месяца, определяемого выражением. Возвращает строку: январь..декабрь

@MONTHNAMS(выражение)
название месяца в родительном падеже. Возвращает строку: января..декабря

@DATEOF(выражение)
возвращает дату словами (например, "28 ноября 1999") из выражения типа "дата"

@TODATE(выражение)
преобразует дату в формате DBF (годмесяцдень) в день-месяц-год. Например, запись в базе данных вида 20010724 будет выведена как 24-07-2001

@CURDATE
возвращает текущую дату (а не дату операции или документа). Используется для впечатывания в распечатываемый документ.

@CURTIME
возвращает текущее время. Используется для впечатывания в распечатываемый документ времени распечатки.

@CURDATETIME
возвращает текущую дату и время. Используется для впечатывания в документ даты и времени распечатки.

@SUBST(имя_файла)
возвращает текст из файла, который может содержать числа, текст или формулы для дальнейшего расчета. Может также применяться в описателе синтетических журналов-ордеров по группе счетов для задания списка счетов, не помещающегося в поле ввода

@FVAL(имя_поля)
возвращает значения поля с заданным именем для текущей записи (функция определена в печатных формах документов)

@ANFVAL(поле_аналитики, имя_поля)
Эта функция определена в печатных формах документов (справочников) и возвращает значение поля "имя_поля" для объекта аналитического справочника, определенного значением "поле_аналитики". Для текущего объекта вычисляется
значение "поля_аналитики", представляющего собой код справочника и номер записи в справочнике (длиной 3 или 5 символов), после чего определяется значение заданного "имя_поля" для указанного объекта.

@LINKFVAL(поле_связи_1,поле_связи_2,имя_связ_базы,имя_поля)
функция определена в печатных формах документов и возвращает значение поля в связанной базе. Для текущего объекта вычисляется значение поля "поле_связи_1", затем в базе с именем "имя_связ_базы" ищется запись, имеющая в поле "поле_связи_2" такое же значение. Если такая запись найдена, возвращается значение поля "имя_поля" для этой записи.

@OBJFVAL(код, поле_объекта, имя_поля)
возвращает значение поля "имя_поля" в базе справочника с кодом "код" для объекта с кодом, содержащемся в поле "поле_объекта" для текущей записи. Функция определена для аналитических справочников, документов и аналитических журналов-ордеров с ручным заданием. Если поле_объекта имеет тип C, значения предполагаются в машинном виде; для обычных числовых данных поле должно иметь тип N.

@OBJECTNUM(поле_аналитики)
возвращает номер аналитического объекта из поля аналитики (3 знака, код справочника и 2 байта номера объекта в машинном представлении)

@CLASSNAME
возвращает строку классификации текущего аналитического объекта (используется при формировании и печати аналитической расчетной ведомости и документов, если подключен классификатор). В аналитической расчетной ведомости можно указать детализацию (количество уровней классификации), например, @CLASSNAME(2)

@SUMP(выражение)
сумма прописью для гривни. Вид написания и язык выбираются из настроек, закладка "общие". В печатных формах после этой функции через пробел может следовать дополнительный текст, например
        @SUMP(SUM) в т.ч. НДС +=SUM/6
в результате получится строка, содержащая сумму прописью значения поля SUM, текст "в том числе НДС " и значение поля SUM, деленное на 6. Вся эта строка будет обрабатываться последующими операторами @CONT (если это
необходимо).
        Расширенный вариант функции позволяет явно задавать вид суммы прописью:
        @SUMP(SUM;2)  - сумма прописью вида 2 (для гривни)
        @SUMP(NUM;M)  - сумма прописью без наименования денежной единицы и без копеек, мужского рода (удобно для количества);
        @SUMP(NUM;W)  - то же самое женского рода

    Имеется возможность определить функцию суммы прописью и для других валют. При вызове функции суммы прописью для других валют вторым параметром передается трехзначный код валюты, например:

@SUMP(SUM1;RUR)
язык суммы прописью и вид написания суммы прописью определяется настройками (закладка "общие", селекторы "сумма прописью" и "язык"). Программа поддерживает три наиболее популярные валюты: USD - доллары США, DEM - немецкие марки, RUR -  российские рубли. Для других валют необходимо задать описание в специальном файле с именем VALNAMES.TXT в формате:
код_валюты;род_валюты;описатели_на_русском;описатели_на украинском
где
род_валюты - литера M для валют мужского рода (рубль, доллар), W для валют женского рода (гривня, марка),
описатель - название валюты в разных склонениях в виде: сокращенное_наименование;наименование_копеек;склонение_1;склонение_2;склонение_3.
Например, для российского рубля получим:
RUR;M;руб.;коп.;рубль;рубля;рублей;руб.;коп.;рубль;рубля;рублів;

@MFOBANKNAME(мфо,счет)
функция по МФО банка возвращает его название (для банков Украины). Первые два параметра входные - имена полей МФО и расчетного счета. Если поле "название_банка" (в которое идет копирование) уже заполнено чем-то,
функция не выполняется. Второй параметр - поле с расчетным счетом. Функция также проверяет контрольную
сумму МФО и расчетного счтета и выдает предупреждение, если контрольная сумма неверна

@MFOBANKTOWN
возвращает город банка, определенный предварительно вызванной функцией @MFOBANKNAME

@SELECTDOC(код, поле_фильтра, значение_фильтра, поле_возврата)
функция вызывает на экран реестр документов с кодом "код", отфильтрованный по заданному полю (в качестве значения фильтра можно задавать выражение или имя поля текущего документа). Пользователь выбирает двойным щелчком нужный документ из списка, после чего функция возвращает значение поля "поле_возврата" выбранного документа. Например, следующая строка при заполнении поля наименования клиента в платежном поручении вызывает книгу покупок, отфильтрованную по выбранному клиенту, и после выбора документа его номер впечатывается в поле примечания NOTE_4:
O POL_1, @SELECTDOC(P,NAME,POL_1,NUM)=>NOTE_4

@SLICE(выражение_строка; начало_вырезки; длина_вырезки)
функция вырезки из строки заданной длины. Строка может быть задана выражением (не содержащим знаков ";"), начало и длина задаются константами. Например:
@SLICE(@MFOBANKNAME;1;10)
 - возвращает первые десять символов названия банка, вычисленного функцией @MFOBANKNAME.

GETSHET(выражение)
GETSUBSHET(выражение)
из выражения, возвращающего счет (например, результат функции @DET_SHCRED и т.п.) вырезает и возвращает соответственно счет (без субсчета) или субсчет. Если счет не имеет субсчетов, функция GETSUBSHET вернет пустое значение
Функции вычисления итогов Главной Книги
S(счет, месяц)   - сальдо
SD(счет, месяц)  - сальдо дебетовое
SC(счет, месяц)  - сальдо кредитовое
D(счет, месяц)   - дебет
C(счет, месяц)   - кредит
A(счет_дебета,счет_кредита,месяц) - обороты по заданной корреспонденции
функции синтетических итогов. Вместо параметра "месяц" может стоять выражение, например M-1 (ссылка на предыдущий месяц). Параметр месяца может отсутствовать, в этом случае берется текущий месяц. Для функций оборотов вместо месяца можно задать интервал месяцев, например "1,6" - будут браться результаты за полугодие, с января по июнь.
Примеры:
        S(52)       - сальдо счета 52 на конец текущего месяца
      C(48,@M-1)   - кредит счета 48 в предыдущем месяце
      SC(76,9)    - кредитовое сальдо счета 76 на конец сентября
       A(31,36,1,@M) - приход на расчетный счет от покупателей нарастающим итогом с начала года до текущего месяца (обороты в дебет 31-го счета с кредита 36-го с 1-го и до текущего месяца)

@SRD(счет, день, месяц)
функция возвращает синтетический остаток на заданном счете на начало заданного дня заданного месяца текущего года. День и месяц могут быть заданы выражениями. Например, в печатной форме кассовой книги (из аналитического журнала с ручным заданием) можно сослаться на остаток в кассе на начало отчетного периода:
110    41    20    =@SRD(301,@DAYFROM,@M)

Функции вычисления аналитических данных @AF_???
Эти функции возвращают аналитические остатки и обороты по счетам для конкретно указанного кода аналитики. Функции используются при составлении отчетов или в формулах для распределения затрат на проекты или продукцию. Это функции остатков:
@AF_S  остаток на данном счете для текущего объекта
@AF_SD дебетовое сальдо
@AF_SC кредитовое сальдо
@AF_S2 остаток по сумме-2
@AF_K  количественный остаток по объекту
@AF_SUMS себестоимость объекта (сумма остатка/количество)
и функции выборки из проводок (работают медленнее):
@AF_D  дебет по заданному счету для текущего объекта
@AF_C  кредит
@AF_I  количество по приходу
@AF_O  количество по расходу
Функциям передаются до 4 параметров, первые два из которых обязательны. Параметры разделяются запятой:
1 - счет
2 - объект (номер записи в аналитическом справочнике)
3 - месяц (по умолчанию берется текущий)
4 - 1 или 2 аналитика (по умолчанию 1)
Например,
@AF_S(109,1595)  - сумма остатка на счете 109 для аналитического объекта с внутренним кодом 1595
@AF_D(79,1,@M-1) - оборот по первой (по номеру в базе) статье справочника доходов на счете 79 в предыдущем месяце
@AF_S(281,3,,2) - общая стоимость товаров (сч.281) на третьем складе в текущем месяце (2 - вторая аналитика, будет взята база подразделений или МОЛ и показаны остатки для третьей записи в ней)

? текст запроса
запрос на ввод информации (коэффициент, сумма и т.п.). Можно также задать значение по умолчанию, которое пользователь может скорректировать:
? текст запроса %% выражение
где выражение - выражение для расчета суммы, которая предлагается в запросе по умолчанию. Например,
? введите НДС по накладной %% SUM1/6

SUM1 .. SUM99      (только для операций)
ссылки на суммы, введенные или вычисленные на предыдущих уровнях дерева проводок. Например, если сумма операции была 100, то в результате
        расчет
           |--=20 40
           |--=@ SUM1*0.1
                |--=@ SUM2+SUM1
                   |--=18 41
будут сделаны проводки:
100.00  д-т 20 к-т 40
110.00  д-т 18 к-т 41

AFLD(код_справочника, имя_поля)    (только для операций)
возвращает значение имя_поля из базы данных, определенной кодом аналитического справочника (первый параметр) для аналитического объекта, выбранного пользователем. Например, если в справочнике товаров с кодом "T" в поле REALS хранится продажная цена, то функция
        AFLD(T,REALS)
вызовет на экран справочник товаров, а когда пользователь выберет нужный товар, вернет продажную цену выбранного объекта.

APRC(код_справочника, счет)         (только для операций)
возвращает стоимость выбранного аналитического объекта (за единицу) из остатков на счете, заданном вторым параметром. Необходимо, чтобы на счете велся аналитический учет по заданному справочнику. Для выбранного пользователем объекта берется сумма остатка на текущий месяц и делится на количество; если количество равно нулю, возвращается сумма остатка. Например,
        APRC(1,41)
выведет на экран справочник товаров (с кодом "1") и возвратит учетную стоимость выбранного пользователем товара.

ARKM(код_справочника, счет)        (только для операций)
возвращает сумму остатка на заданном счете по выбранному из справочника аналитическому объекту на текущий момент (конец месяца). Например,
        ARKM(O,01)
выведет на экран справочник основных средств (код "О") и вернет учетную стоимость (на 01 счете) выбранного пользователем объекта.

ARNM(код_справочника, счет)         (только для операций)
возвращает сумму остатка на начало текущего месяца на заданном счете по текущему аналитическому объекту из справочника с заданным кодом (объект должен быть выбран пользователем или определен в контексте групповых проводок).

ARNQ(код_справочника, счет)         (только для операций)
аналогично предыдущим функциям, возвращает аналитический остаток на начало текущего квартала.

ARS2(код_справочника, счет)         (только для операций)
аналогично предыдущим функциям, возвращает аналитический остаток на текущий момент (конец месяца) для второй суммы в проводке (этот параметр может использоваться для хранения суммы проводки в валюте).

@A2SLD(счет)    (только для операций)
возвращает остаток на счете с двойной аналитикой. Первый аналитический объект выбирается пользователем или определяется контекстом групповых проводок, второй определяется автоматически из остатков (например, если первый объект - товар, то будет взят остаток товара на первом складе, где он есть). После выполнения функции становятся определенными результаты функций @A2OBJ и @A2CEX, возвращающих соответственно код аналитического объекта для первого и второго справочников для остатков, определенных функцией @A2SLD. Эта функция может использоваться, например, для автоматизации перемещения основного средства от одного мат.ответственного другому. Вот как выглядит ветка дерева проводок для решения этой задачи:
перемещение
   |----=@ ADDSUM(@A2SLD(01))
          |----=01 01{@A2OBJ,@A2CEX}
          |----=@ 0-@A2SLD(02)
                 |----=02 02{@A2OBJ,@A2CEX}
Пользователю не нужно вводить сумму операции и не нужно знать, на ком числится основное средство. Он просто выбирает основное средство из справочника и указывает ответственного, на которое его нужно переместить. Программа автоматически перемещает балансовую стоимость (01 счет) и начисленный износ (02 счет). При необходимости выдается запрос на пересчет файла остатков, или остатки пересчитываются автоматически (при установленной опции).

CLEARAN
эта функция возвращает ноль, но при этом она "очищает" список использованной аналитики, в результате чего для следующих проводок вновь будут вызываться справочники. Например, выполнить переброску с одной организации на другую можно таким образом:
        =00 76
        |-----=@ SUM1+CLEARAN
                |-----=76 00
без применения функции во втором случае на 76 счет прописалась бы та же организация, что была выбрана в первой проводке. Впрочем, эту функцию может заменить опция "однократный вызов аналитического справочника" в настройках программы (меню "настройка"-"установки", закладка "общие").

SETN(выражение)                     (только для операций)
возвращает результат вычисления выражения в скобках; от обычных скобок отличается тем, что результат выражения в дальнейшем помещается в поле "количество" для следующих проводок. Например,
        =@ setn(?введите количество:)*SUM1
        |--- =41 60
здесь на экран выводится запрос "введите количество", введенная сумма помещается в поле количество проводки, а в поле сумма помещается результат умножения количества на сумму операции (SUM1)

SETS2(выражение)                     (только для операций)
возвращает результат вычисления выражения в скобках; результат выражения в дальнейшем помещается в поле второй суммы в следующих проводках. Это поле обычно используется для хранения суммы проводки в валюте для операционного учета. Например,
        =@ SETS2(?сумма операции в валюте:)*0+SUM1
        |--- =51 60
здесь на экран выводится запрос "сумма операции в валюте", введенная сумма помещается в поле второй суммы проводки, а в поле сумма помещается сумма операции (SUM1)


SET(выражение)                      (только для операций)
возвращает результат вычисления выражения в скобках. Используется для объединения в одном выражении нескольких запросов, например
        SET(?процент комиссии)*SET(?сумма договора)/100+SET(?налог)

ADDSUM(выражение)                   (только для операций)
возвращает результат вычисления выражения в скобках; при этом полученная сумма прибавляется к общей сумме операции. Если первоначально общая сумма операции не была заполнена (равна 0.00), то при завершении операции она будет заменена на вычисленную в результате применения оператора ADDSUM и LOOP. В нижележащих ветвях дерева можно обратится к текущему значению этой суммы при помощи функции SUMOP. (SUM1 вернет сумму, введенную пользователем, без учета "добавок"). Используется, в основном, в групповых проводках и проводках для товарного блока.

#LOOP(код_справочника,выражение)   (только для операций)
Один из операторов генерации группы проводок, организующий цикл для выбора объектов из аналитического справочника. Блок проводок, отходящих от вершины с LOOP, будет выполнен столько раз, сколько пользователь выберет объектов из аналитического справочника "код_справочника" (пока он не нажмет "отказ"). Для каждого объекта
будет вычислен результат выражения, заданного вторым параметром. Например:
        =#LOOP(3,set(?стоимость за единицу)*setn(?количество))
        |------=(5/6)12 60
        |------=(1/6)68/3 60
Здесь будет выполняться такой сценарий ввода проводок: пользователь выбирает из справочника малоценки (с кодом "3") объект, после чего у него запрашивается стоимость за единицу объекта и количество объектов, вычисляется
общая сумма и делается две проводки (при этом счет 12 предполагается аналитическим по справочнику "3" с ведением количественного учета), поле количества в проводке заполняется количеством, введенным пользователем. Затем снова вызывается справочник малоценки, снова запрашивается цена и количество и т.д., пока пользователь не откажется от выбора объекта из справочника, нажав "отказ". Если счет 60 аналитический по справочнику с
кодом, отличным от "3", то выбор из него будет производиться только один раз. Если сумма операции первоначально не заполнялась, она будет заменена на общую стоимость всех объектов, выбранных пользователем.

#DISTRIB(счет,вид,сумма)                         (только в операциях)
вид групповой проводки, выполняющий распределение заданной суммы (может быть выражение или запрос) пропорционально группе уже сделанных проводок. Параметр "счет" задает счет, по которому будут отбираться проводки в группу. Распределение будет производиться по аналитическим объектам для этого счета. Параметр "вид"
задает способ распределения:
   1 - пропорционально сумме проводки, счет = счет дебета
   2 - пропорционально сумме проводки, счет = счет кредита
   3 - пропорционально количеству проводки, счет = счет дебета
   4 - пропорционально количеству проводки, счет = счет кредита
   5 - пропорционально сумме-2 проводки, счет = счет дебета
   6 - пропорционально сумме-2 проводки, счет = счет кредита
(в сумме-2 проводки может храниться стоимость реализации в товарном учете, при этом в сумме проводки хранится себестоимость). Например, пусть после группы проводок по оприходованию товаров (при помощи оператора #LOOP или #LIST) следует:
        =#DISTRIB(41,1,set(?транспортные расходы))
        |-----=41 76
в результате будет запрошена сумма транспортных расходов, в уже подготовленных проводках будет отобрана группа проводок в дебет 41-го счета, сумма транспортных расходов будет распределена пропорционально суммам в отобранной группе и с этими суммами будут сделаны проводки (столько же, сколько в отобранной группе) в дебет 41, кредит 76. Поле "количество" в проводках равно нулю, поэтому изменится только учетная стоимость.

#LIST                              (только для операций в материальном блоке)
организация цикла для позиций из подготовленной накладной (счета). Нижележащий блок проводок будет выполнен для каждой строки накладной, при этом можно пользоваться дополнительными функциями:
Суммой по умолчанию для расхода считается SUMR. Например:
        =#LIST
        |-----=62 46                   (1)
        |-----=(0.2)62 68/3             (2)
        |-----=@ SUMS
                |-----=46 41            (3)
в первой  проводке списывается продажная цена товара (без НДС), во второй проводке начисляется НДС (предполагается, что все товары облагаются НДС по ставке 20%, поэтому нет необходимости использовать функцию SUMPDV), и в третьей проводке списывается учетная цена (себестоимость) отпущенных товаров.
Для аналитического объекта, являющегося тарой, SUMS и SUMR всегда ноль, а функция SUMT возвращает учетную стоимость. Для прочих объектов SUMT всегда ноль. При вводе проводок по количественным счетам при использовании функции SUMT (при наличии тары в номенклатуре) необходимо пользоваться условием ~, запрещающим ввод проводок с нулевой суммой и ненулевым количеством во избежание ситуаций списания двойного количества товара.
Ветвь с LIST может сочетаться с обычной веткой, которая будет выполнятся один раз на документ. Это может быть, например, запрос на сумму таможенных услуг и тому подобное. Полученную сумму иногда нужно распределить на все проводки по материальным ценностям. Для этого используется следующая запись:
        приход
        |-----=#LIST
        |       |-----.... здесь выполняются проводки для каждой строки документа
        |-----=#DISTRIB(41,1,set(?стоимость дополнительных затрат))
                |-----=41 76
в результате будут сделаны проводки для каждой строки документа, после чего выведен запрос для ввода суммы дополнительных затрат, которая будет распределена по всем уже имеющимся проводкам по дебету 41-го счета пропорциально сумме проводки. Чтобы для выбора организации по 76 счету заново вызвался справочник организаций (если он уже вызывался для выбора покупателя), можно воспользоваться функцией CLEARAN.
В нижележащих ветках после оператора #LIST также можно обращаться к функциям SUMR, SUMS, SUMPDV, SUMT. В этом случае они возвратят общие суммы по документу (соответственно: общая продажная стоимость по накладной, общая учетная стоимость, сумма НДС в целом по накладной, общая стоимость тары по накладной).

@DATA(имя_поля)     (для числовых данных)
возвращает значение поля базы данных в виде числа. Функция может использоваться в групповых проводках (в принципе, можно просто написать имя поля, но через функцию @DATA будет чуть быстрее, и исключаются конфликты при совпадении имени поля с именем переменной или функции).

@CALL(имя_DLL_файла,имя_функции,параметр)
вызов функции пользователя из внешнего DLL-файла. Указывается имя (и путь) DLL-файла, имя функции, которую нужно вызвать и параметр (например, имя поля, месяц, счет и т.п), который нужно передать. Функция должна принимать параметр типа Variant. Параметры передаются по значению (ByVal) слева направо (stdcall). Функция возвращает результат в виде
числа с плавающей точкой двойной точности (8 байт, Double).

@имя_переменной     (кроме операций)
ссылка на переменную в генераторе отчетов или печатной форме

%имя
ссылка на параметры из настройки, определяющие реквизиты организации (закладка "константы" в установках). Возможные значения:
 
%НАИМЕНОВАНИЕ название организации
%ОКПО код ОКПО
%ГОРОД город
%БАНК название банка
%РАСЧ_СЧЕТ расчетный счет
%МФО МФО
%БАНК2 название банка для 2-го счета
%РАСЧ_СЧЕТ2 расчетный счет номер 2
%МФО2 МФО для 2-го счета
%НАЛОГ_КОД код плательщика НДС
%НОМЕР_СВИД номер свидетельства плательщика НДС
%АДРЕС адрес
%ТЕЛЕФОН телефон
%ДИРЕКТОР ФИО директора
%БУХГАЛТЕР ФИО главного бухгалтера

@TCOL(номер колонки)
эта функция используется только внутри цикла $LOOP и возвращает значение текущей строки в заданной колонке таблицы (колонки нумеруются от нуля). Функцию можно использовать в печатных формах аналитических расчетных ведомостей и в печатных формах товарно-материального блока.

@TCOLS(номер колонки)
возвращает значение общей суммы (итога) по заданной колонке таблицы.

@TOV(имя_поля)
функция используется внутри цикла $LOOP в печатных формах товарно-материального блока и возвращает значение заданного поля для текущей товарной позиции.

@TOVCLASS(количество_уровней)
функция используется внутри цикла $LOOP в печатных формах товарно-материального блока и возвращает классификационную строку для текущей товарной позиции. В скобках можно задать необязательный параметр - количество уровней классификации, до которых нужно ограничить полную классификацию товара.

@TOVSUMS
функция используется внутри цикла $LOOP в печатных формах товарно-материального блока и возвращает стоимость хранения (учетную стоимость) объекта для методов учета "по среднему" и "по карточке"

Константы

В выражения могут входить также любые константы (числовые или строковые), описанные в окне "другие константы" закладок "константы" в установках программы. Константы описываются в формате имя = значение. Значением может быть и выражение, например, можно описать константу
        BLACK = RATE(V,USD)
Если в выражении вычисления суммы проводки встретится выражение
        BLACK*SUM1
то будет взят курс валюты USD на дату ввода операции из справочника курсов валют с кодом V и без уточнения пользователем умножен на сумму операции.

Печать отчетов:

Строки файла-описателя отчета (печатной формы документа, реестра или журнала-ордера) содержат директивы управления принтером и координаты, длину и содержание строки вывода. Директивы начинаются со знаков % или $, остальные строки должны начинаться с координат вывода на листе бумаги (в мм): смещение слева, сверху, длина, затем задание выражения (текстовые начинаются с двойных кавычек, числовые - со знака =, выражения могут включать функции, константы, имена полей и т.п.), затем имя переменной (через которое в последующих выражениях можно сослаться на результат вычисления выражения), затем способ выравнивания (< влево, - по центру, > вправо). Все параметры разделяются символами табуляции (символ с кодом ASCII 09). Для текстовых значений двойные кавычки в начале можно опускать. Параметры имя переменной и способ выравнивания не обязательны.
Примеры:
        33      38      90      %НАИМЕНОВАНИЕ
в указанных координатах печатается название организации
        $SPACEON
        41      92      80      @SUMP(SUM)
        41      96      80      @CONT
        $SPACEOFF
в двух строках печатается сумма прописью (число берется из поля SUM базы данных)
        %DECIMALPOINT ,
        167     56      25      =SUM            >
число из поля SUM печатается в заданном месте листа, выравнивается к правому краю, в качестве разделителя копеек используется знак ",".
Для документов (и пользователей!), требующих особой точности позиционирования, отдельные строки могут задаваться с точностью до 0.1 мм. Такая строка начинается со знака "!" и значения всех координат и длин в ней при печати будут разделены на 10. Например:
    !120    1225    100    название
Здесь строка "название" будет выведена на листе со смещением 12 мм слева, 122.5 мм сверху, длина вывода 10 мм.
 

Печать через Microsoft Word

Имеется возможность передать данные из "Главбуха" в заранее настроенный файл (шаблон) Microsoft Word. Для этой цели используется механизм Automation (OLE Automation). Необходимо, чтобы на компьютере пользователя был установлен MS Word (MS Office) 97 или 2000.

Настроечный файл печатной формы (отчета) должен начинаться с директивы

$MSWORD
Обязательно должна присутствовать одна из следующих директив:
$TEMPLATE=имя_шаблона (создает новый файл на основании заданного шаблона (template))
$DOCUMENT=имя_документа (открывает подготовленный документ)
Могут быть использованы следующие директивы:
$SHOW - показать окно программы MS Word (иначе оно будет невидимым)
$PRINT - автоматически начать печатать документ
$PREVIEW - автоматически вызвать предварительный просмотр печатной формы документа
$CLOSE - закрыть документ Word без запроса на сохранение файла (напр., после печати)
$READONLY - если открывается существующий файл, он будет открыт только для чтения
Пример файла настройки для печати текста договора (может вызываться из реестра документов "договоры"):
$MSWORD
$TEMPLATE=DOGOVOR
$SHOW
При нажатии на кнопку печать вызывается программа Microsoft Word, в ней создается новый документ по шаблону DOGOVOR.DOT, в который подставляются данные из текущей записи (договора), текст документа выводится на экран для редактирования, сохранения, распечатки.
В шаблоне DOGOVOR.DOT в нужные места текста должны быть вставлены текстовые поля (находятся на панели инструментов "Формы"). В свойствах текстового поля, в ячейке "текст по умолчанию", можно писать функции "Главбуха" или имена полей из базы документа (в данном случае договора). В поставке программы имеется несколько примеров dot-файлов.
Передача данных в Word возможна в любом отчете "Главбуха", для которого можно задать файл настройки печати. Например, это можно сделать из документов, сводных отчетов, аналитической расчетной ведомости.
Внутри файла настройки могут быть описаны переменные (как если бы это был файл настройки для печати в встроенном генераторе), на которые можно ссылаться в шаблоне Word'а.

Печать таблиц с переменным количеством строк

Для печати таблиц с переменным количеством строк (например, из аналитических журналов-ордеров с ручным заданием, или печать накладных и счетов товарно-материального блока, или печать только заполненных строк в документах) используется директива LOOP и ей подобные. При этом в соответствующем шаблоне или файле Word должна присутствовать таблица, во второй строке которой должны быть заданы текстовые поля с формулами, на основании которых будут вычислены и подставлены значения для всех строк отчета (документа), удовлетворяющего условию цикла. Программа сама добавит нужное количество строк. Если в таблицу должна входить нижняя строка с итогами, необходимо в настроечный файл включить директиву
$TABSUMMARY
В файле Word такая таблица будет иметь три строки: в первой будут заголовки колонок, во второй - формулы для заполнения строк данных (эта строка будет размножена нужное количество раз) и в третьей строке задаются формулы для вывода окончательных итогов по отчету. При печати таблиц обязательно должна быть включена директива $SHOW. По умолчанию всегда используется первая таблица, найденная в шаблоне или документе. Если в шаблоне имеются несколько таблиц, номер нужной таблицы (в которую подставляются данные отчета) можно задать директивой
$TABNUM=порядковый_номер_таблицы_начиная_с_1
Пример настроечного файла для печати отчета по амортизации основных средств из журнала с файлом задания osjur.txt:
$MSWORD
$DOCUMENT=d:\reports\OSN.DOC
$SHOW
$TABSUMMARY
$TABNUM=1
$LOOP
$END
В каталоге FORM приведен пример файла OSN.DOC, путь к которому нужно задать в директиве $DOCUMENT.

Замечание 1. Поскольку здесь в качестве отчета подключен не шаблон, а документ MS Word, необходимо помнить, что пользователь не должен сохранять отчет после его формирования, или сохранять его под другим именем (выбирать пункт меню "сохранить как"). В противном случае невозможно будет построить такой отчет повторно, т.к. вместо формул пропишутся результаты отчета. Чтобы избегнуть такой ситуации, можно сохранить этот файл в качестве шаблона и соответственно заменить директиву $DOCUMENT на $TEMPLATE.

Замечание 2. Поскольку для каждой строки отчета Word добавляет новую строку в таблицу и вычисляет значения в каждой колонке, отчеты с большим количеством строк (больше 1000) будут формироваться долго. Такие отчеты можно печатать используя стандартный генератор печатных форм "Главбуха" или копировать через буфер обмена в программы типа MS Excel.
 

Печать через Microsoft Excel

При помощи механизма OLE Automation возможна также передача данных в таблицу Excel с последующей распечаткой или сохранением файла.

Настроечный файл печатной формы (отчета) должен начинаться с директивы

$MSEXCEL
Обязательно должна присутствовать одна из следующих директив:
$TEMPLATE=имя_шаблона (создает новый файл на основании заданного шаблона (template))
$DOCUMENT=имя_таблицы (открывает подготовленный файл электронной таблицы)
$NEW                        (создает новую чистую таблицу для вывода данных)
Могут быть использованы следующие директивы:
$SHOW - показать окно MS Excel (иначе оно будет невидимым)
$PRINT - автоматически начать печатать документ
$PREVIEW - автоматически вызвать предварительный просмотр печатной формы документа
$CLOSE - закрыть таблицу без запроса на сохранение файла (напр., после печати)
$RUNMACRO имя_макроса - выполнить макрос с заданным именем
В тексте файла настройки в строках описания вывода в таблицу координаты имеют такое значение: первая цифра или буква - номер колонки (как в Excel : A -первая колонка, B -вторая, C -третья и т.д.), вторая цифра - номер строки, третья (длина вывода) служит для указания выводить результат в Excel или не выводить: 0 - не выводить, любое другое число - выводить. Можно использовать почти все директивы стандартного генератора печатных форм, циклы, команды смещеня $WRLN, $SHIFT и т.п. (смещение указывается в строках). Дополнительно введены директива $WRCL количество (смещение на заданное количество колонок вправо) и функции @ALLTABLEWITHTITLE и @ALLTABLE, которые можно использовать только в печатных формах аналитических журналов-ордеров с ручным заданием, и которые служат для вывода всего отчета (таблицы журнала). Задаются координаты левого верхнего угла, начиная с которого будут вставлены данные, соответственно с названиями колонок или без.

Пример файла настройки для печати отчета из журнала-ордера с ручным заданием:

$MSEXCEL
$NEW
A 1 1 ведомость инвентаризации
A 2 1 название
B 2 1 остаток
$LOOP
A 3 1 X(0)
B 3 1 =X(4)
$WRLN 1
$END
A 3 1 итого
B 3 1 =XS(4)
$PREVIEW
$CLOSE
При нажатии кнопки "печать" открывается пустая таблица MS Excel. Треться строка в клетке A1 печатает название отчета, четвертая и пятая строки в клетках A2 и B2 задают названия колонок таблицы. В цикле печатаются значения первой и пятой колонки журнала (в первой (A) и второй (B) колонках таблицы), начиная с третьей строки. Девятая строчка переводит вывод следующей строки журнала на одну строчку ниже в таблице. По окончании цикла печатаются итоги и выводится окно предварительного просмотра перед печатью. Пользователь нажимает печать и выходит из режима просмотра, при этом Excel автоматически завершает работу благодаря последней строке. Если необходимо напечатать отчет так, как он есть, вместо строк с 4 по 12 можно было написать одну строчку
A 2 1 @ALLTABLEWITHTITLE
Если необходимо полученный отчет сохранить в виде таблицы Excel, вместо последних двух строк нужно написать
$SHOW
Тогда Excel с таблицей остаются на экране и пользователь может вносить изменения, сохранять и распечатывать документ.

Директивы принтера

%PREC $SPACEON $SHIFT
%ROUND $SPACEOFF $LSHIFT
%DECIMALPOINT $BLANKON $WRLN
$LANDSCAPE $BLANKOFF $PAGE
$PORTRAIT $PAUSE $TITLE
$FONTSIZE $NEWPAGE $TITLE OFF
$FONTSTYLE $NOPRINTZERO $FOOT
$FONTNAME $PRINTZERO $LOOP, $LOOPR
$NO1000SEPARATOR $PAGENUM $END
$COLSHIFT $BACKGRND $SETPAGENUM

%PREC(число)   (для генератора отчетов и печатных форм)
определяет количество цифр после десятичной точки, которые будут выводится на экран для числовых значений. Например:
        %PREC(2)
все числа после этой директивы (до следующей) будут вычисляться и выводится на экран и печать с двумя знаками после десятичной точки. %PREC без параметров восстанавливает стандартную точность вывода, которая задана в общих настройках программы.

%ROUND(число)
определяет число, до которого производится округление при вычислениях. Например, после директивы
        %ROUND(0.01)
до следующей директивы этого типа все результаты вычислений будут округляться до 0.01 (до копейки).

%DECIMALPOINT знак
устанавливает знак разделителя целой и дробной части в числах (вместо десятичной точки). Если знак не указан, устанавливается стандартный знак из установок Windows (по умолчанию).

$LANDSCAPE
$PORTRAIT
директивы установки ориентации принтера: пейзаж или портрет. Эти директивы обязательно должны быть первыми в файле настройки и могут встречаться только один раз. Если ни одна из директив не присутствует, документ будет печататься с ориентацией, которая установлена в окне настроек принтера.

$FONTSIZE размер
изменение размера шрифта

$FONTSTYLE стиль
изменение стиля шрифта. Стиль задается буквой:
B - жирный
I - курсив
без параметра - обычный.

$FONTNAME имя_шрифта
изменение имени шрифта

$SPACEON
включение режима разбивки длинных строк до первого пробела (или точки, запятой...)

$SPACEOFF
выключение режима разбивки до пробела. Если строку не предполагается переносить, желательно использовать эту директиву.

$NO1000SEPARATOR
эта директива действует на весь документ, если она присутствует, во всех распечатываемых денежных суммах не будет присутствовать разделитель разрядов (тысяч), который по умолчанию присутствует

$BLANKON
включение режима бланка. Все следующие за этой директивой описания считаются элементами формы бланка и печатаются только в том случае, если в управляющем окне не указано печатать "только текст".

$BLANKOFF
отключение режима бланка, следующие описания печатаются независимо от отметки в окне "только текст".

$PAUSE
директива отладки, останавливает заполнение печатного документа и выводит информацию о предшествующей строке файла настройки (значение и результат формулы)

$PAUSE имя_переменной
директива отладки, останавливает заполнение печатного документа и выводит значение заданной переменной


$NEWPAGE
начинает печать новой страницы. После этой директивы прогоняется лист бумаги и последующие объекты будут выводиться на следующем листе бумаги.

$NOPRINTZERO
$PRINTZERO
соответственно запрещают и разрешают печать нулевых значений, т.е. значений вида "0", "0.0", "0.00" и т.д.

$SHIFT смещение
задает дополнительное смещение сверху от края страницы. Все следующие объекты будут печататься дополнительно смещенными вниз на заданную величину (в мм).

$LSHIFT смещение
задает дополнительное смещение слева от края страницы. Вместе с предыдущей директивой может использоваться для быстрой подгонки формы под конкретный принтер. Смещения могут быть со знаком минус. В качестве смещения можно задать выражение, например:
$LSHIFT @NUMP*10
При печати в цикле каждая следующая строчка печатается со сдвигом 10 мм от предыдущей

$COLSHIFT смещение_вправо, смещение_вниз, число_колонок
используется внутри цикла для печати объектов цикла в несколько колонок (например, для печати наклеек, этикеток, карточек). Смещение вправо (в мм) задает расстояние между левыми границами колонок, смещение вниз - промежуток между строками, аналогично $WRLN, число колонок можно не задавать, по умолчанию оно равно двум. Если в цикле задана директива $COLSHIFT, директиву $WRLN задавать не нужно. Например:
$COLSHIFT 100,5,2

$PAGENUM
включение режима нумерации страниц. Номер проставляется вверху страницы.

$WRLN значение
увеличить дополнительное смещение на заданную величину в мм. Может использоваться в циклах или для упрощения описания (можно не вычислять смещение сверху для каждой строки отчета, а просто после окончания строки вставлять эту директиву)

$PAGE значение
задание длины печатной области страницы (в мм). Если в результате выполнения директивы $WRLN дополнительное смещение оказалось больше значения, заданного этой директивой, будет начата печать новой страницы.

$BACKGRND числовое_значение
определение цвета фона для печати следующего текста. Используется для выделения отдельных строк документа. На черно-белых принтерах цвет имитируется серой маской, плотность которой зависит от числового значения цвета. Цвет задается числом, которое формируется также, как и цвет для экранной формы. Кроме того, используются следующие фиксированные значения для задания цвета фона: 0 - белый фон (никакого фона), -1, -2, ..., -6 (разные чистые цвета).

$SETPAGENUM число_или_выражение
устанавливает начальный номер страницы для функции определения номера текущей страницы @PAGENUM. Используется в случаях, когда нумерацию страниц в распечатке надо начинать не с единицы, а с другого числа, например, для периодически допечатываемых документов, в которых нумерация страниц ведется с начала года (типа кассовой книги).

$TITLE
$TITLE OFF
директивы описания заголовка, который будет повторяться при печати документа на нескольких страницах. Операторы вывода заголовка обрамляются директивами $TITLE:
        $TITLE
        10     10      20      номер
        ...
        90      10      30      @RECT(8)
        $WRLN 9
        $TITLE
В дальнейшем, при печати документа, при выполнении директивы $WRLN проверяется текущее смещение сверху листа и длина страницы (задается директивой $PAGE). Если смещение больше, выполняется переход на начало новой страницы, на которой будет повторена печать операторов, обрамленных $TITLE.
После окончания печати таблицы, если в дальнейшем тексте используются директивы $WRLN, повтор заголовка необходимо исключить. Для этого используется директива $TITLE OFF.
Замечания по применению: при описании заголовка смещение сверху нужно задавать, как если бы заголовок печатался в самом верху страницы. Если на первой странице есть еще текст перед таблицей, перед описанием заголовка нужно задать смещение директивой $SHIFT. Внутри заголовка обязательно должна присутствовать директива $WRLN.

$FOOT
директива описания сноски (того, что печатается внизу страницы). Смещения сверху задаются в абсолютных значениях (SHIFT не учитывается). Например:
        $FOOT
        10      270     7       стр.
        17      270     10      @PAGENUM
        $FOOT
В результате в конце каждой страницы отчета будет печататься (10 мм слева, 270 мм сверху) строка
     стр. <номер страницы>

$LOOP условие
$LOOPR условие
директива цикла. Условие может отсутствовать, в этом случае цикл выполняется для всех строк отчета. Следующие после этой директивы строки (до директивы конца цикла $END) будут выполнены для каждой строки отчета (удовлетворяющей условию). Директива цикла может также использоваться в формах печати реестра документов. В печатных формах реестров документов рекомендуется использовать директиву $LOOPR. Например, для форм документов с дочерними базами $LOOP задает цикл по записям дочерней базы, а $LOOPR - цикл по списку отмеченных документов. Условие может содержать логические выражения, разделенные операторами .AND., .OR. и .XOR.
 
$END
директива конца цикла.

Пример:
        10     10      5       N/N
        15      10      25      фамилия
        40      10      20      сумма
        10      15      60      @LINE
        $WRLN 5
        $LOOP
        10      10      4      @NUMP
        15      10      25      X(0)
        40      10      20      =X(4)
        10      10      60      @LINE
        $WRLN 5
        $END
        15      10      25      итого
        40      10      20      =XS(4)

вначале описывается шапка таблицы, затем в цикле по всем строкам отчета (условие не задано) печатается номер по порядку, фамилия из 0-вой колонки и сумма из 4-й колонки, линия подчеркивания. Затем позиция вывода смещается
на 5 мм вниз и печатается следующая строка таблицы. После окончания цикла печатается итоговая строка.

$LOOPX условие
Специальный цикл, применяемый в реестрах товарных документов для объединения позиций (номенклатуры) всех выделенных документов. Может использоваться, например, для печати общей налоговой накладной для нескольких отмеченных расходных накладных (см. пример в файле Pnaktovx.txt). Программа создает специальный буфер - таблицу, в которую включаются строки для каждой номенклатуры из всех отмеченных документов. В первых колонках каждой строки повторяются данные из "шапки" документа - те, которые вынесены в реестр документов и видны в колонках в верхнем окне заголовков накладных. В следующих колонках помещаются данные номенклатуры, видимые в нижнем окне позиций накладной. Для ссылки на колонку внутри цикла используется функция @BUF(номер_колонки). Например, в шапке документа описаны: номер документа, дата, сумма, получатель. В окне товарных позиций показаны: код, название, единица измерения, количество, цена, стоимость, НДС, общая сумма. Пользователь выделил для печати два документа, в первом 3 товарных позиции, во втором - 4. В результате применения оператора $LOOPX будет напечатано 7 строк. Функция @BUF(1) для первых трех строк вернет номер первого документа, для следующих четырех строк - номер второго документа. Функция @BUF(6) будет возвращать название товара для каждой из семи товарных позиций. Очевидно, что при задании других колонок в реестре накладных нумерацию в @BUF нужно изменять.

Дополнительные функции, которые могут встретиться только в печатных формах

@CONT
продолжает печать строки, которая не поместилась в результате выполнения предыдущей команды печати. Удобно использовать для переноса на несколько строк длинной строки суммы прописью. Для разбивки строки по пробелам
необходимо предварительно задать директиву $SPACEON

@LINE
печать горизонтальной линии одинарной ширины в точке с указанными координатами заданной длины

@VLINE
печать вертикальной линии одинарной ширины в точке с указанными координатами и высотой, определяемой параметром "длина"

@RECT(высота)
печать прямоугольной рамки

@BOX(высота; текст)
печать текста в прямоугольной рамке заданной высоты. Текст не может быть выражением или функцией. Если длина текста больше ширины вывода, он автоматически разбивается на несколько строк, при этом строки выравниваются в соответствии с директивой выравнивания.

@NOMEXEMP
печатает номер экземпляра ("1" или "2") для документов, позволяющих печатать два экземпляра на одном листе А4. (см. %DOUBLE)

@PICTURE(имя_файла)
печать картинки из заданного файла типа BMP. Левый верхний угол картинки будет расположен в заданных координатах смещения слева и сверху, параметр "длина" задает ширину на листе (высота масштабируется автоматически). Имя файла может быть задано выражением (например, может браться из поля в базе данных)

@CLEAR(имя_переменной)
очищает значение заданной переменной. Следует применять перед циклом, в котором заданная переменная используется рекурсивно

@SETVAR(имя_переменной;выражение)
вычислить выражение и присвоить переменной его результат. Значение переменной вычисляется выражением по месту описания переменной. Данная функция позволяет присвоить переменной результат другого выражения. Такая функция может понадобится в печатных формах журналов-ордеров для вычисления промежуточных итогов. Ниже приведен пример печати промежуточных итогов для одинаковых значений колонки 1 аналитического журнала-ордера с ручным заданием. В переменной VAL запоминается предыдущее значение этой колонки, при его несовпадении с текущим значением печатается строка итога.
 
X Y L выражение переменная - примечание
1 1 0 @CLEAR(SUBTOTAL) очистить промежуточную сумму
1 1 0 @UPDATE(@SETVAR(VAL;"X(1))) установить начальное значение VAL на 
первую строку столбца изменений
$LOOP начало цикла
70 33 40 @IF("@VAL#X(1);итого по +@VAL;) при изменении значения 1-го столбца предыдущее значение VAL будет отличаться от нового X(1) и тогда будут выполнены эти операторы
110 33 20 @IF("@VAL#X(1);=@SUBTOTAL;) >
1 1 0 @IF("@VAL#X(1);@CLEAR(SUBTOTAL);) очищаем промежуточную сумму
1 1 0 @IF("@VAL#X(1);$WRLN 5;) - заканчиваем вывод итога переводом строки
36 33 60 X(3) < печатаем данные строки
96 33 14 "X(1) VAL - здесь определяется VAL, обновляем ее значение
110 33 20 =X(4) SUM > сумма (для этой колонки вычисляются промежуточные итоги)
1 1 0 =@SUM+@SUBTOTAL SUBTOTAL накапливание промежуточных итогов
$WRLN 5 перевод строки
$END конец цикла
70 33 40 @UPDATE(итого по +@VAL) итоги для последних значений
110 33 20 @UPDATE(=@SUBTOTAL) >
$WRLN 5

@UPDATE(выражение)
пересчитывает выражение в скобках. Используется при выводе переменных, значения которых были изменены во время цикла. В "Главбухе 2" вначале производится расчет всех формул, потом начинается печать. Во время выполнения цикла некоторые переменные могут менять свое значение, их пересчет производится автоматически. После окончания цикла формулы, использующие эти переменные, автоматически не пересчитываются и для обновления их результатов и необходимо использовать @UPDATE. Для примера см. расчет итогов по колонкам в настройке pnaktov.txt.

@RARE(выражение)
результат выражения (переменная, имя поля, функция и т.п.) будет напечатан "вразрядку" (для впечатывания в табличку, например, для кода ОКПО в некоторых формах)

Описание проводок

Проводка описывается вершиной дерева:
=условие(выражение_коэффициента)счет_дебета счет_кредита
Например:
=51 76 (д-т 51 к-т 76)
=50 51 (д-т 50 к-т 51)
=(0.2)68/3 60 (д-т 68/3 к-т 60, сумма проводки составляет 20% от введенной суммы операции)
условие и (или) выражение_коэффициента могут отсутствовать.
Условие задается знаком "+" или "-". Если задан "+", проводка делается только в случае положительной суммы, если "-" - отрицательной (в последнем случае сумма проводки инвертируется):
        =+81 52
        =-52 80
(из двух заданных проводок будет сделана только одна, в зависимости от знака суммы).
Еще одно условие используется при вводе проводок в товарном блоке. Знак условия "~" позволяет запретить делать проводку для нулевой суммы. По умолчанию проводка с нулевой суммой и ненулевым количеством выполняется. Например,
=~41 60
такая проводка будет сделана только в случае ненулевой суммы (для счета 41 ведется количественный учет и количество, скорее всего, не равно нулю). Такое условие необходимо применять при задании проводок для приходования или списания материальных ценностей с использованием встроенных функций типа SUMS и SUMT. Например, для тары функция SUMS вернет ноль, но количество товара останется ненулевым. Аналогично для обычного товара SUMT вернет ноль, но количество будет ненулевым и проводка без условия "~" будет сделана, что приведет к двойному списанию количества.
Для автоматического перехода к ручному вводу проводок можно проводку не задавать, оставив один единственный знак "=".

Параметр "выражение_коэффициента" может быть:

описатели счетов дебета и кредита могут быть:
Вычислимые проводки имеют вид:

=@ выражение

отходящие от них вершины выполняют проводки с суммой, определенной заданным выражением. Для ссылки на результаты предшествующих вычислимых проводок используются переменные SUM1..SUM99

Операторы, порождающие группу проводок (групповые проводки):

        =#ALL(код_справочника)
        |----? условие1 .OR. условие2
        |----? условие3
        |----= выражение
        |----=20 70
        ...
все ветки отходят от основной вершины задания операции. Может быть задано несколько условий; условия в разных вершинах объединяются условием "И" (AND), условия в одной вершине - "ИЛИ". В примере выше групповые операции
выполняются для тех объектов, для которых выполнено условие 3 и одно из условий 1 или 2. Условия начинаются со знака "?" (а не "=") и должны быть заданы подряд. Вершины с условиями могут отсутствовать, в этом случае групповые проводки выполняются для всех объектов справочника. В условиях можно использовать значения полей из справочника объектов и выражения из остатков на счетах для текущего аналитического объекта.
Первая после условий вершина воспринимается как задающая выражение расчета суммы для текущего аналитического объекта. Следующие вершины (и подвершины, в отличие от ДОС-версии), задают проводки для текущего объекта. Вычисленные для объекта суммы будут просуммированы в общую сумму операции.
Оператор #ALL определяет цикл по всем объектам аналитического справочника. Для работы с остатками на счетах с двойной аналитикой (когда одни остатки ведутся в разрезе других, например, товары в разрезе складов), используется оператор #REST для цикла по всем остаткам заданного счета. Есть три варианта оператора:

#RESTK(счет) - остатки по счету на конец текущего месяца
#RESTN(счет) - остатки по счету на начало текущего месяца
#RESTQ(счет) - остатки по счету на начало текущего квартала
для ссылки на значения остатков (и оборотов) используюся специальные функции:
A2S сумма остатка A2K количество остатка
A2D дебет за месяц A2P приход (кол-во) за месяц
A2C кредит за месяц A2R расход (кол-во) за месяц
для ссылки на остатки (обороты) двойной аналитики текущего объекта на другом счете после имени функции в скобках указывается нужный счет. Пример начисления амортизации при ведении двойной аналитики на 01 счете (основные и подразделения):
        =#RESTQ(01)
        |----? GROUP=1
        |----? NAZNACH=1
        |----=  (A2S+A2S(02))*0.1/4
        |----=20 02
это пример для 1-й группы, назначение производственные (10 % в год, расчет раз в квартал). Для каждого остатка на 01-м счете (объект плюс подразделение) вычисляется сумма остатка по нему на 01 и 02 счете (балансовая стоимость), от которой и считается сумма проводки. По счету 02 проводка делается сразу по двум аналитикам.

Аналитическая расчетная ведомость

описатели колонок
функции выборки данных
команды описания
специальные функции
отчет по проводкам
Описатель аналитической расчетной ведомости (журнал-ордер типа "конструктор") позволяет сформировать множество различных отчетов, не прибегая к программированию. Для задания ведомости используется несколько команд для задания кода справочника, способа сортировки, периодов выборки данных, а также задаются описатели колонок таблицы, которые должны входить в отчет.

Описатели колонок имеют вид:
знак    описание        заголовок       ширина  комментарий
(разделитель -знак табуляции ASCII(9)). Имеется три типа колонок: колонки с данными из проводок (остатков), колонки с именами (полями из базы справочника), колонки, значение которых вычисляется.
Например,
        =A(60,51)       оплата пост.    86
описана колонка шириной 86 пикселов с заголовком "оплата пост.", в которой по каждому объекту из заданного справочника будут выведены проводки в дебет 60 счета с кредита 51.
        "NAME  название        140
колонка шириной 140 пикселов с заголовком "название", в которой для каждого объекта будет выведено содержимое поля NAME в базе справочника.
        =@ X(1)*1.2     сумма с НДС
в этой колонке отражается содержимое колонки номер 1, умноженное на 1.2 (нумерация колонок ведется с нуля, нулевую колонку рекомендуется задавать имя объекта). В выражениях можно использовать стандартные функции и оператор @IF.
Поле комментария может быть использовано для задания точности представления чисел (для числовых колонок), для этого в этом поле должна присутствовать директива %PREC(число_знаков_после_точки), например:
        =@ X(4)/X(3)    цена    90    %PREC(5)
Здесь в колонке с надписью "цена" установлена точность расчета и вывода на экран 5 знаков после десятичной точки.
В поле комментария можно также задать специальный тип строки - дата. Это имеет значение при сортировке, тогда данные колонки сортируются не как строки, а как даты. Например:
        "DATEOPL    дата опл.    90    %DATE
Здесь в колонке отображается значение поле DATEOPL аналитического справочника (должно иметь тип "дата" (D)) и сортировка в этой колонке будет производится от более ранних дат к более поздним.

Функции для выборки данных:
 

R(счет) свернутое сальдо по счету на начало периода
RD(счет) дебетовое сальдо на начало периода
RC(счет) кредитовое сальдо на начало периода
S(счет) свернутое сальдо на конец периода
SD(счет) дебетовое сальдо на конец периода
SC(счет) кредитовое сальдо на конец периода
D(счет) дебет по счету за период
C(счет) кредит по счету за период
N(счет) количество на счете на начало периода
K(счет) количество на счете на конец периода
I(счет) общее количество дебетового оборота по счету за период (приход)
O(счет) общее количество кредитового оборота по счету за период (расход)
A(счет1,счет2) обороты в дебет счет1 с кредита счет2 за период
D2(счет) оборот второй суммы по дебету счета за период 
C2(счет) оборот второй суммы по кредиту счету за период 
I2(счет) приход второго количества по счету за период
O2(счет) расход второго количества по счету за период
A2(счет1,счет2) обороты в дебет счет1 с кредита счет2 по сумме-2 за период
R2(счет) свернутое сальдо по счету по сумме-2 на начало периода
E(счет1,счет2) обороты в дебет счет1 с кредита счет2 по количеству за период
E2(счет1,счет2) обороты в дебет счет1 с кредита счет2 по количеству-2 за период
B включает в отчет все записи из аналитического справочника
KR(счет) количество с учетом резервирования на конец периода
(работает только совместно с директивой @2AN#)
NR(счет) количество с учетом резервирования на начало периода
(работает только совместно с директивой @2AN#)
В таблицу попадают аналитические объекты, для которых хотя бы в одной колонке найдено ненулевое значение функции выборки данных (кроме функции B, включающей в отчет все записи из справочника).
По умолчанию периодом является текущий месяц, однако можно установить в качестве периода текущий квартал или интервал с начала года до текущего месяца.

Команды задания аналитической расчетной ведомости
 

#
код справочника
M
период формирования отчета
$
проводки, которые будут делаться из журнала
S
колонка сортировки
P
печатная форма
X
ссылка на значения другой колонки
XS
ссылка на итоговое значение колонки с заданным номером
F
фиксированные колонки
E
разрешить редактирование данных колонки
L
задание списка исключений (номера объектов второго справочника, обороты по которым будут исключены из отчета)
H
задание параметров поиска в отчете
I
интерфейс (чередование строк: выделение четных)
G
группировка по первым 1 или 2 колонкам при печати
NEWTECH
включение режима "быстрый отчет"
FILTER
задание фильтра в режиме "быстрый отчет"
USERCALC описать функцию расчета пользователя
#код_справочника
задается код аналитического справочника, по объектам которого будет строиться ведомость. Если вместо кода справочника задать символ "?", будет построена синтетическая ведомость (в отчете будет всего одна строка). Если задать код справочника "?" и заказать колонку с номером документа, будет построен отчет по номерам документов из проводок (в одну строку сольются проводки с одним номером документа). Если задать вместо кода справочника символ "*", будет построен отчет, в строки которого попадут все проводки, удовлетворяющие условиям выборки. Используя функции @NDOCUM, @NDATE, @DET_... можно построить расшифровки проводок и журналы специального вида, например, кассовую книгу.
 
M код_периода
задает период по умолчанию. Коды периодов: M - месяц; Q - кваратал; Y - с начала года. Можно задать несколько директив M, в этом случае пользователь получит возможность изменять период непосредственно из отчета. Если задан код периода D или T, то пользователь сможет задать в качестве периода интервал дней текущего месяца, при этом для кода D отчет по умолчанию строится за весь месяц (с дальнейшим уточнением пользователя), а для кода T отчет формируется только за один (текущий) день и также может быть уточнен пользователем.
Если задан код периода P, пользователь сможет построить отчет в заданном интервале месяцев.

Описание проводок:

$ X(5)  67/2 62/1
с суммой из колонки номер 5 для каждого объекта (каждой строки таблицы, в которой в 5-й колонке не ноль) будут сделаны проводки в дебет 67/2 с кредита 62/1. После знака $ может следовать выражение, после которого через символ табуляции задается проводка (см. описание задания проводки в дереве операций). Дополнительно, через знак "|", можно задать выражение для вычисления количества в проводке, например: $ X(5)|X(6)  46 41 - здесь задаются проводки с суммой из колонки 5 и количеством из колонки 6.
Описанию проводок может предшествовать задание текста примечания:
        $ OPERATION     коррекция НДС   по остаткам     31
При нажатии кнопки "операции" для всех заданных проводок будет сделана операция с названием "коррекция НДС", с примечанием "по остаткам", за 31 число текущего месяца. Название операции, текст примечания и день можно
корректировать.
        $ PERSONAL      коррекция       по остаткам     31
В этом случае операции будут сделаны для каждого объекта (строки таблицы). Текст названия и примечания не редактируется.
Секций $ OPERATION может быть несколько. В этом случае при нажатии кнопки ввода операций пользователь получит меню в виде списка названий операций и сможет выбрать нужный вариант. Например:
$ OPERATION     операция-1       31
$ ... проводки для операции - 1
$ OPERATION     операция-2       31
$ ... проводки для операции - 2

S номер колонки

задается колонка, по которой будут сортироваться строки в таблице. Можно задать несколько (до пяти) колонок для сортировки:
S 3,4
В этом случае данные будут отсортированы по третьей колонке (считая от единицы); строки, в которых значения третьей колонки совпадают, будут отсортированы по четвертой колонке. Сортировку таблицы пользователь может задавать сам в процессе работы с отчетом из меню по правой кнопке мыши.
P название=имя_файла
задается форма распечатки таблицы. Задающий файл строится по типу печатных форм в документах и отчетах, но может содержать дополнительные директивы и функции. Может быть задано несколько печатных форм. Ниже приведено описание дополнительных функций и директив для печатных форм аналитической расчетной ведомости.
 
X(номер)
значение колонки с заданным номером (считая от нуля) для выделенной строки или переменной цикла
 
XS(номер)
итоговое значение колонки с заданным номером
 
F число
задает количество колонок отчета, которые будут фиксированы (всегда видимы)
 
E номер_колонки, имя_базы
задает номер колонки, данные которой пользователь может редактировать. Имя_базы - необязательный параметр, если он присутствует, введенные пользователем данные сохраняться в базе данных и будут восстановлены при следующем запуске журнала. Можно редактировать только числовые колонки (начинающиеся со знака "="), не рекомендуется редактировать колонки с функциями выборки данных. Для входа в режим редактирования нужно установить курсор на нужную клетку таблицы и нажать F4. Закончив ввод числа, нужно нажать Enter, чтобы таблица пересчиталась и для сохранения данных в базе. Например:
=@ 100    процент    70    X4 - процент выполнения плана
E 4
здесь в четвертой колонке во всех строках по умолчанию всегда проставляется 100, но пользователь может изменять эти числа, при этом введенные значения не сохраняются при следующем запуске
E 4,KALD
введенные при редактировании четвертой колонки данные будут сохранены в базе данных KALD.DBF и при следующем входе в журнал-ордер будут восстановлены
E 4,CLD|M|Y
данные будут сохранены в файлах, имя которых зависит от текущего месяца и года и имеет вид CLD<месяц><год>.DBF (например, CLD0299.DBF для февраля 1999). Это дает возможность сохранять введенные пользователем данные для каждого месяца отдельно. Невозможно использовать команду E одновременно с директивой @2AN# для вывода информации в разрезе двух аналитических справочников.
Если вместо имени базы написать специальный идентификатор %SELF, станет возможным сохранять введенные пользователем значения в поле текущего аналитического справочника. Например,
E 4,%SELF,KOEF
в этом пример пользователь редактирует значения четвертой колонки, которые затем записываются в поле KOEF текущего аналитического справочника. Эта возможность удобна для табличной корректировки значений справочника, например, окладов, или для корректировки цен товаров (для прайс-листа).
H вариант_поиска_1;вариант_поиска_2;...;вариант_поиска_N
Задание параметров поиска - в каких колонках отчета пользователь может искать данные при нажатии на клавишу  (или Ctrl-F). Вариант_поиска состоит из названия варианта и, через запятую, номера колонки в отчете (нумерация с нуля), в которой будет производится поиск. Например:
H документ,1;ФИО,3;примечание,6
Здесь при вызове кнопки поиска пользователю будет предложено три варианта поиска нужной строки в отчете: по документу (искать в колонке 1), по ФИО (колонка 3) или по примечанию (в колонке 6). По умолчанию поиск производится по значениям первой (0-вой) колонки и, если присутствует, в колонке с номером документа.
L? список_кодов_объектов
Задание списка исключений по второй аналитике. В списке через запятую указываются коды (номера записей) объектов второй аналитики, обороты по которым должны быть исключены из отчета. Например:
L 12,15,20,202,158
Используются следующие варианты оператора L:
L0 - исключаются объекты из второй аналитики кредита (расходы с этого цеха)
L1 - исключаются объекты из второй аналитики дебета (приходы в этот цех)
L2 - исключаются объекты из второй аналитики и дебета, и кредита (весь оборот по цеху)
L - то же самое что и L0
UNITE номер_колонки
После построения отчета и сортировки вызывается процедура объединения данных в колонке с заданным номером.
GROUP номер_колонки
После построения отчета и сортировки вызывается процедура группировки данных в колонке с заданным номером.
 
NEWTECH
Включение режима "быстрый отчет". Если режим включен, отчет формируется значительно быстрее. Для больших отчетов (порядка 10000 строк) ускорение составляет 3-4 раза. Однако, в этом режиме невозможно пользоваться группировками по значениям полей аналитического справочника или классификатору. Если такая группировка необходима, колонку со значением нужного поля или классификатора нужно включить в отчет и выполнить группировку из контекстного меню по нажатию правой кнопки мыши.
FILTER выражение фильтра
Задание дополнительного фильтра на данные отчета. Работает только при включенном режиме "быстрый отчет" (NEWTECH). Фильтр накладывается после выборки данных перед выводом на экран. Например, пусть в отчете о складских запасах в колонке 5 выведено количество, а в колонке 6 - стоимость товаров. Тогда фильтр вида
FILTER X(5)#0.AND.X(6)/X(5)>100
выведет на экран только позиции с ценой за единицу более 100.
USERCALC название позиции меню; описатель функции
добавляет в контекстное меню по нажатию правой кнопки мыши дополнительный пункт с заданным названием. При выборе этой позиции меню производится расчет значения колонки таблицы согласно описателя функции. Описатель функции выглядит так: Xномер_колонки = выражение расчета. Например,
USERCALC рассчитать распределение средств; X5=X(2)*S(31)/XS(2)
в этом примере в контекстное меню по правой кнопке мыши добавляется дополнительный пункт "рассчитать распределение средств". При выборе этой позиции меню пятая колонка таблицы заполняется новыми значениями, которые распределяют текущий остаток на расчетном счете (сальдо счета 31) пропорционально весам, взятым из второй колонки таблицы.
USERCALC рассчитать пропорционально количеству строк; X5=S(31)/(@STRINGSNUM-1)
здесь сумма остатка на расчетном счете делится на количество строк в отчете и результат прописывается в каждой строке пятой колонки таблицы.
В описателе функции можно использовать специальную функцию распределения @DISTRIB, позволяющую распределить нужную сумму пропорционально весам из заданной колонки таким образом, чтобы не оставалось остатка, вызванного ошибками округления. Например,
USERCALC рассчитать распределение средств; X5=@DISTRIB(X2,?введи сумму затрат)
здесь при выполнении функции вызывается запрос на ввод суммы затрат, которая распределяется пропорционально весам из второй колонки таблицы. Результат помещается в пятой колонке, общая сумма значений пятой колонки будет в точности равна введенной сумме затрат, возможная ошибка округления будет добавлена в последней строке таблицы.

Специальные функции аналитической расчетной ведомости.

Этими функциями можно пользоваться в печатных формах для аналитических расчетных ведомостей. Некоторые функции также можно применять для описания колонок отчета.
 
@NDOCUM @NAME @DAYFROM
[] @NDATE @DAYTO
@NUMLINE @GROUPNAME @PAGENUM
@NUMP @FILTERNAME @PAGELINES
@2AN# @ANRESTNOTE @ANRESTDATE
@ANRESTTERMIN @PLACEMENT @DET_OPNAME
@DET_OPNOTE @DET_OPDOK @DET_AN1DEB
@DET_AN1CRED @DET_AN1ALL @DET_AN2DEB
@DET_AN2CRED @DET_AN2ALL @DET_SHDEB
@DET_SHCRED @DET_SHCORR @JURNAME
@EXTSPRFLD

@NDOCUM
номер документа (из проводки). Если такая колонка задана, отчет формируется с
учетом номера документа. Номер документа должен быть задан в текстовой колонке.

[имя_поля]
значение заданного имени поля для объекта в выделенной строке или для
переменной цикла

@NUMLINE
номер строки в отчете.
для реестров документов - количество документов в реестре.

@NUMP
номер по порядку в распечатке. При распечатке всех данных эта функция
аналогична предыдущей, но при распечатке части данных (цикл с условием)
может отличаться. Результат не может быть присвоен переменной.

@NAME
наименование объекта аналитического справочника. При группировке возвращает
имя группы.

@NDATE
дата первой проводки по данному документу (используется совместно с @NDOCUM для
оборотов, т.е. допустима только при использовании функций выборки A, D или C)

@ANRESTNOTE(счет)
примечание к остатку по объекту из строки по заданному счету (берется из остатков по счету, которые ведутся в аналитическом отчете по счету)

@ANRESTDATE(счет)
дата возникновения остатка по объекту (берется из примечаний к остаткам по заданному счету)

@ANRESTTERMIN(счет)
срок оплаты (погашения задолженности) по объекту (берется из примечаний к остаткам по заданному счету)

@JURNAME
название журнала-ордера, заданное пользователем в настройках журналов-ордеров

@GROUPNAME
при группировке возвращает название способа группировки, иначе -пустая строка

@FILTERNAME
при выборке (просмотре ведомости для выбранной группы объектов) возвращает
название группы, иначе - пустая строка.

@DAYFROM
@DAYTO
возвращают соответственно день начала и день конца периода, за который
сформирован отчет. Использование этих функций корректно только если задан
период "D" (директива M D ).

@PAGENUM
возвращает номер текущей (последней) страницы. Используется только в печатных
формах, на результат этой функции нельзя сослаться (присвоить переменной).

@PAGELINES
возвращает номер текущей (последней) строки, определяемой оператором $WRLN. С
начала каждой новой страницы нумерация начинается сначала. Используется только
в печатных формах, на результат нельзя ссылаться (нельзя присвоить переменной).
Используется для подсчета числа строк на текущей странице отчета.

@2AN# код_справочника
описывает колонку для вывода второй аналитики по заданному коду справочника. Например, для отчета по справочнику товаров (первый описатель #T) для вывода колонки с названиями складов, на которых находится товар, нужно написать
"@2AN# 8      склад        120
(код справочника подразделений "8"). При этом в окно вариантов группировки добавляется вариант "склад", позволяющий сгруппировать и (или) отфильтровать остатки и обороты товаров по складам. Если в качестве основного кода задать "8", а для кода второй аналитики "T", то можно получить обратный отчет: остатки и обороты складов в разрезе товаров (можно выбрать нужный товар и посмотреть на каких складах он есть).
При показе оборотов иногда возникает ситуация, когда справочник второй аналитики прикреплен и к счету дебета, и к счету кредита. Чтобы показывать только те объекты второй аналитики, которые проходят в оборотах по дебету, нужно после кода справочника через запятую написать символ D, только по кредиту - символ C. Например: "@2AN# 8,D
При использовании этой функции возможна ситуация, когда для некоторых строк в отчете вторая аналитика будет неопределена. Например, учет основных средств ведется с двойной аналитикой на счете 10 (1-я аналитика - основные средства, 2-ая - материально-ответственные лица), в то время как амортизация ведется только с одной аналитикой основных средств. При формировании отчета проводки с амортизацией добавят новые строки с незаполненным полем МОЛ. Чтобы этого не произошло, необходимо включить в отчет строку
IGNOREEMPTYAN2
которая объединит строки с незаполненной второй аналитикой с соответствующими им строками по первой аналитике (т.е. по тому же основному средству).

@PLACEMENT(список_счетов_остатков)
выводит колонку со значениями второй аналитики в остатках по заданному счету на конец отчетного периода. Например, при учете основных средств одно ОС (первая аналитика) может числиться только на одном материально-ответственном лице (вторая аналитика). В этом случае в аналитическом отчете по справочнику основных средств функция @PLACEMENT для счета ОС может заполнить колонку "место хранения", или "материально-ответственное лицо". Например:
"@PLACEMENT(103,104,105,106,107,108)
не следует применять этот описатель в случаях, когда один и тот же аналитический объект может храниться на нескольких складах (у разных материально-ответственных) или может находиться в остатках по нескольким счетам из списка. В этом случае будет показано первое найденное местонахождение (значение второй аналитики). Также как и для функции @2AN#, по значениям колонки можно делать группировки и фильтры из селектора группировки. Нельзя в одном журнале использовать одновременно функции @2AN# и @PLACEMENT.

@DET_OPNAME
@DET_OPNOTE
@DET_OPDOK
функции для выборки информации из расшифровки проводок. Используются только для журналов-ордеров с неопределенным аналитическим справочником (#?) и если в отчете присутствуют колонки с датой проводки и номером документа (@NDATE и @NDOCUM). В этом случае в строках отчета будут показаны суммы проводок, сделанных в данный день по данному документу. Функции расшифровки показывают для первой такой проводки (если их несколько), соответственно: @DET_OPNAME - название операции; @DET_OPNOTE - примечание к операции; @DET_OPDOK - номер операции (может отличаться от номера проводки).

@DET_AN1DEB
@DET_AN1CRED
@DET_AN1ALL
функции выборки первой аналитики из расшифровки проводок. Используются только для журналов-ордеров с неопределенным аналитическим справочником (#?) и если в отчете присутствуют колонки с датой проводки и номером документа (@NDATE и @NDOCUM). Функции расшифровки аналитики показывают для первой проводки с нужной датой и номером, соответственно: @DET_AN1DEB - первую аналитику по счету дебета; @DET_AN1CRED - первую аналитику по счету кредита; @DET_AN1ALL - оба объекта из первой аналитики (если они есть).

@DET_AN2DEB
@DET_AN2CRED
@DET_AN2ALL
функции выборки второй аналитики из расшифровки проводок. Действуют аналогично функциям, описанным выше, но для объектов второй аналитики. 
@DET_SHDEB
@DET_SHCRED
@DET_SHCORR(счет)
функции выборки счета из проводки. Используются только для журналов-ордеров с неопределенным аналитическим справочником (#?) и если в отчете присутствуют колонки с датой проводки и номером документа (@NDATE и @NDOCUM). Выводят соответственно счет дебета, счет кредита и корреспондирующий счет для заданного.

@EXTSPRFLD(код_справочника,выражение_или_код_объекта,поле_в_справочнике)
эта функция возвращает заданное поле из справочника с заданным кодом. В отличие от функции @OBJFVAL, второй параметр задает не поле в базе аналитического справочника, а выражение, в т.ч. и произвольную колонку в таблице (X()), что дает возможность в отчетах по проводкам корректно отображать единицу измерения, как показано в примере ниже:
"@DET_AN1DEBFLD(EDIZ1)  0                          // эту колонку не показываем; ее номер 5
"@EXTSPRFLD(Z,X(5),EDIZ) ед..изм 80            // вытаскиваем единицу измерения


 

Отчет по проводкам

Специальный вид отчета, который строится на основе файла задания аналитической расчетной ведомости, но использует другой способ выборки данных. В первой строке задающего файла, где обычно задается код аналитического справочника, помещается строка
#PROV функция_выборки
Функция выборки задает какие именно проводки будут выбраны для построения отчета: дебет заданного счета, кредит счета, обороты по заданному счету, обороты с дебета одного счета в кредит другого (например, соответственно: D(63/1), C(36), O(70), A(20/1,63/1)).
    Во второй строке может быть задано выражение фильтра, которое определяет дополнительный фильтр на выбираемые проводки, например, первая аналитика счета дебета - не пустая (#EXCLUDE DET_AN1DEB). В этой строке может быть сравнение "=" или "#" (например, чтобы исключить перемещение, исключаем проводки, где счет дебета и кредита одинаков: #EXCLUDE @DET_SHDEB=@DET_SHCRED).
    В третьей строке можно задать транзитный счет, например: #TRANSIT 23/5. Транзитный счет может быть использован в проводках для списания материалов с одновременным приходованием готовых изделий, причем по счету готовых изделий также ведется товарно-материальный учет; в этом случае материалы списываются на промежуточный (транзитный) счет, и в этой же операции приходуются готовые изделия с кредита промежуточного счета. Такой сложный порядок вызван тем, что в каждой проводке по списанию материалов указывается количество списываемых материалов, а в проводке по оприходованию изделия - количество готовых изделий. Однако, при составлении отчетов, часто нужно показывать в качестве корреспондирующего не транзитный счет, а собственно счет оприходования готовых изделий. Для этого и используется строка #TRANSIT ... - вместо промежуточного счета подставляется счет из другой проводки от этой же операции.
    Колонки отчета задаются по общим для настраиваемого журнала-ордера правилам, но для выборки данных можно пользоваться только следующими функциями выборки информации из проводок:
 
@DET_OPNAME название операции, от которой сделана проводка
@DET_OPNOTE примечание к операции, по которой сделана проводка
@DET_OPDOK номер документа операции
@DET_OPSUM сумма операции
@DET_OPWRKPLACE название рабочего места, сделавшего операцию
@DET_AN1DEB аналитическая информация дебета (первая аналитика)
@DET_AN1CRED аналитическая информация кредита (первая аналитика)
@DET_AN1ALL аналитическая информация (первая аналитика) -объединение
@DET_AN2DEB вторая аналитика дебета
@DET_AN3DEB третья аналитика дебета (из документа - примечание к операции)
@DET_AN2CRED вторая аналитика кредита
@DET_AN3CRED третья аналитика кредита (из документа - примечание к операции)
@DET_AN2ALL вторая аналитика - объединение
@DET_SHDEB счет дебета
@DET_SHCRED счет кредита
@DET_SHCORR(счет) корреспондирующий счет к заданному (ищется в проводке)
@DET_AN1DEBFLD(имя_поля) значения поля из справочника аналитики дебета (первая аналитика)
@DET_AN1CREDFLD(имя_поля) значения поля из справочника аналитики кредита (первая аналитика)
@DET_SUM сумма проводки
@DET_KOL количество проводки
@DET_SUM2 сумма - 2 (в ТМЦ блоке - цена продажи)
@DET_KOL2 количество - 2
@DET_NDOK номер документа проводки
@DET_DATE дата проводки
@DET_ITEM экземпляр задачи
@DET_TASK код задачи
@DET_NUMOP внутренний код (физический номер) операции, сделавшей проводку
В функциях выборки по первой аналитике можно задать список справочников, из которых брать аналитику. Если в проводках описана аналитика из другого справочника, будет возвращена пустая строка. Например: @DET_AN1DEB(123) - будут показаны аналитические объекты из первой аналитики дебета, если они находятся в справочниках с кодами 2, 3 и 1.
Как и в обычном отчете, здесь можно описывать свои печатные формы, задавать свою сортировку колонок и т.п.
Например, построим отчет о поступлении материалов на склады от поставщиков. Известно, что поступления оформляются проводками вида д-т 20/1 к-т 63/1, 20/2 - 63/1  и т.п., причем поставщик прописывается в первой аналитике счета 63/1, материал - в первой аналитике счетов 20/1, 20/2 и т.д., а склад - во второй аналитике этих же счетов (ситуация, типичная для учета материалов в ТМЦ-блоке программы). Вот как выглядит текст файла задания:
 
#PROV C(63/1)      
#EXCLUDE @DET_AN1DEB      
"@DET_AN2DEB цех-получатель 142  
"@DET_AN1CRED поставщик 136  
"@DET_AN1DEB материал 150  
=@DET_KOL количество    
"@IF(X(3)#0;=X(5)/X(3);)  цена   %PREC(3)
=@DET_SUM сумма    
"@DET_SHDEB кор.счет 60  
F 0 
S 1,2,3 
G 2 
M P
     
В первой строке отбираются проводки для отчета: все проводки в кредит счета 63/1, кроме тех, в которых первая аналитика дебета не заполнена (например, проводки с суммами НДС). Следующие семь строк описывают семь колонок отчета: цех-получатель (вторая аналитика дебета), поставщик (первая аналитика кредита, т.е. 63/1), материал (аналитика дебета), количество, цена (вычисляется как сумма делить на количество), сумма поставки и счет корреспонденции (т.е. счет дебета).
В следующих строках задается вид отчета: отменяются фиксированные колонки, задается порядок сортировки: по цеху-получателю (первая колонка), внутри него - по поставщику (вторая колонка), затем - по материалу (3-я колонка). G 2 определяет печать с группировкой по двум уровням (по первым двум колонкам), M P - задает возможность строить отчет за произвольный интервал месяцев.
Как видно, данные в таблице отсортированы по цеху-получателю, поставщику и материалу. Если теперь нажать левую кнопку мыши в колонке "материал" и выбрать функцию "объединить...", то строки с одинаковыми материалами, полученными от того же поставщика в тот же цех, будут объединены. Если вначале отсортировать таблицу по колонке "материал", а потом объединить данные, то будут объединены строки с одинаковым материалом, возможно, поступавшем в разные цеха от разных поставщиков. Печать такого отчета с функцией группировки может быть неприемлемой; чтобы исправить ситуацию, необходимо переформировать отчет заново.
    Расширенная функция выборки из проводок #EXTPROV позволяет задать набор условий, по которым необходимо отбирать проводки для анализа. Например:
#EXTPROV A(23/1,20/1);A(23/2,20/1);A(23/1;20/2)
Здесь будут отобраны проводки в дебет 23/1 или 23/2 с кредита 20/1 и проводки в дебет 23/1 с кредита 20/2. В остальном описание отчета такое же, как и для #PROV. В расширенном режиме можно использовать дополнительный фильтр, накладываемый на данные перед выводом на экран. Его можно задать директивой FILTER (условия задаются в терминах колонок, типа X(6)=0 (в числовой 6-й колонке ноль), "X(1)#'' (в строковой 1-й колонке не пустое значение; в этом примере первый символ - двойная кавычка, после знака "не равно" идут две одинарные кавычки, задающие пустую строку) и т.п.)

Специальные параметры GBW.SES

Файл GBW.SES содержит данные конфигурации и основные настройки конкретного рабочего места программы "Главбух". Права пользователя, пароль для входа, реквизиты организации и т.п. определяется содержимым этого файла, который программа всегда считывает из рабочего каталога. Практически все параметры изменяются из экранного меню, но есть несколько специальных, которые можно изменить только вручную редактируя файл GBW.SES.
 
параметр значение описание
cfgA
+ или -
+ : пользователю будет доступен пункт меню "специальные функции" для доступа к утилитам, в частности, к BKMaster
- : пункт меню "специальные функции" будет недоступен
cfgVersion
0,1,2
0 : режим совместимости с "Главбухом для ДОС" (двойная аналитика отключена)
1 : режим совместимости с "Главбухом для ДОС" для крупных предприятий (двойная аналитика также недоступна, однако есть дополнительная аналитика по подразделениям)
2 : стандартная версия программы (двойная аналитика, аналитика по документам и т.п.)
OldPlan
+ или -
+ : программа будет использовать старый План Счетов (для ДОС-версии Главбуха)
- : стандартная версия, доступны все возможности
cfgRights
0,1,2
0 : права "Главный бухгалтер" (можно все)
1 : права "Бухгалтер" (можно вводить данные и смотреть отчеты)
2 : права "Только для просмотра данных" (нельзя редактировать и вводить данные)
cfgOpCopyAnManual
+ или -
+ : при ручном вводе проводок названия выбранных аналитических объектов будут копироваться в поле примечания к операции
- : не будут копироваться
AskRecalcAn
+ или -
+ : при необходимости пересчета аналитических остатков по какому-либо счету будет выводиться соответствующий запрос с возможностью отказаться от пересчета (для ускорения работы);
- : пересчет осуществляется автоматически
TrReadBlock
+ или -
читать проводки блоком (+) - при работе в сети может значительно ускорить работу программы
DosFileName
+ или -
+ : использовать имена файлов ДОС (8+3), может потребоваться при работе в сетевой операционной системе, не поддерживающей длинные имена файлов (при этом будут ограничения на номера счетов, на которых может вестись аналитический учет)
CalPath
путь
путь к базе календаря рабочих дней и часов 
SpecMenu
+ или -
включает или выключает настройки спецменю, позволяющие исключить из меню для данного рабочего места различные функции программы:
SMOp - операции, SMDoc - документы, SMSklad - склады, SMImport - импорт данных, SMArc - архивирование данных, SMOborot - оборотный баланс, SMJur - журналы, SMBal - баланс, SMSwod - сводные отчеты, SMGraf - графики и диаграммы, SMErr - поиск ошибок, SMPlan - план счетов, SMTree - справочник проводок, SMAns - список справочников, SMClsM - закрытие месяца, SMRecalc - пересчет Главной Книги, SMYearEnd - конец года (перенос остатков), SMPrgName - название программы.
PrnDosPaperWidthA4
80
ширина бумаги в знаках при печати в ДОС-режиме для формата А4
PrnDosPaperWidthA3
120
ширина бумаги в знаках при печати в ДОС-режиме для формата А3
aF10NotChangeNote
+ или -
в аналитических ведомостях задает режимы работы клавиши F10 (автозаполнение примечаний к остаткам для случая, когда примечание к данному объекту уже было создано, но остаток закрывался и теперь открывается  вновь):
+ - обновляется только дата возникновения остатка
- - обновляются все поля примечания
aF10changeAll
+ или -
в аналитических ведомостях задает режим работы клавиши F10 (автозаполнение примечаний к остаткам), когда дата и текст примечания обновляются данными из расшифровки проводок всегда, независимо от даты возникновения остатка (при начении параметра +)
tovRecalcNextTran
+ или -
если +, то при пересчете цены списания из отчета об остатках и движении по складу программа будет пытаться изменить сумму следующей проводки после расхода товара, если счет кредита в ней такой же, как и счет дебета в проводке по расходу (только для товарного блока)
tovFactureMonth
+ или -
включает/выключает помесячное ведение реестров счетов для блока ТМЦ
tovAllReestrMonth
+ или -
включает/выключает помесячное ведение реестров приходных/расходных накладных для блока ТМЦ
tovSepReestr
+ или -
включает-выключает режим разделения реестра документов, когда видны только те документы, которые вводились с данного рабочего места. Для этого необходимо также включить идентификацию оператора в настройках товарного блока. Только для ТМЦ.
tovNDokShow
+ или -
если включено, в расходных документах ТМЦ блока появляется поле задания номера документа для проводки. Если оно заполнено, в качестве номера документа в проводку пишется значение поля, а не номер расходной накладной. По умолчанию выключено.
cfgShortYear
+ или -
если включено, в датах показывается две цифры для года, если выключено (по умолчанию) - четыре
tovRestCexPrihod
+ или -
если включено, при приходе ТМЦ при вызове справочника остатки товаров показываются не по всей организации, а по текущему складу (подразделению)
tOrgPriceFld
имя
имя поля в справочнике организаций, в котором хранится номер прайс-листа, по которому будут отпускаться товары данному покупателю
tovPrihodParty2NDok
+ или -
если "+", в приходных накладных ТМЦ в проводку будет прописываться не номер накладной, а номер партии

Особые функции программы