CбИС++ «БИТ»
   О ПРОГРАММЕ   
   О КОМПАНИИ   
   ЗАГРУЗИТЬ   
   ДОКУМЕНТАЦИЯ   
   · Руководство пользователя 
   · СБиС news
   · Статьи
   · Функции
   ПРАЙС-ЛИСТ   
   ВАКАНСИИ   
   АВТОМАТИЗАЦИЯ ТОРГОВЛИ   
СБиС news №50 от 03.08.01

Содержание

Окончательный выпуск 1.9

Скорее всего, очередная сборка СБиС++ версии 1.9 под номером 1.9.009, вышедшая 03.08.2001, будет последней, в которой делались изменения функциональности программы. В следующих сборках в программе будут только исправляться ошибки.

Под конец же было решено существенно переделать две функции – «Константа» и «Диалог», о них и пойдёт речь.

Изменения функции «Константа»

Начиная с версии 1.9.009, для создания и изменения значений констант должна использоваться функция «СохранитьКонстанту», а функция «Константа» позволяет теперь только получать значения констант.

Функция «СохранитьКонстанту» позволяет теперь создавать не только сами константы (это было и раньше), но и создавать разделы констант, причём можно указать и короткое и полное имя создаваемых констант/разделов. Возможны два вида вызова этой функции.

Простой вызов «СохранитьКонстанту»

СохранитьКонстанту(Переменная);

Переменная – имя переменной (без кавычек).

В результате вызова функции будет сохранена константа с именем указанной переменной, а значением константы будет значение этой переменной, например:

Директор ="Иванов И.И.";
...
СохранитьКонстанту(Директор);

Если такой константы ещё не было, то она будет создана в корне справочника «Константы». Причём в поле «Полное имя» будет также занесено имя переменной.

Расширенный вызов «СохранитьКонстанту»

Синтаксис более полного варианта вызова функции «СохранитьКонстанту» выглядит следующим образом:

СохранитьКонстанту(Имя,Значение
                   [,ПолноеИмя][,Дата]);

Имя (текст) – имя константы. Может быть указано не только просто имя константы, но и путь (имена разделов справочника констант) до данной константы. Имена разделов указываются перед именем константы через точку. Например, имя «ОТЧЕТЫ.НАЛИМУЩ.ИМУЩСРСТОИМ» означает, что в разделе с именем «ОТЧЕТЫ» ищется подраздел «НАЛИМУЩ» и в нём константа с именем «ИМУЩСРСТОИМ». Путь до константы требуется только в том случае, если константы с таким именем в справочнике не найдено. В этом случае будет создаваться новая константа и помещаться как раз по указанному пути. Причём, если каких-то разделов, упомянутых в пути, не найдено, они также будут созданы.

Значение (текст) – значение, присваиваемое константе.

ПолноеИмя (текст) – полное имя константы (то, что указывается в поле «ПолноеИмя» справочника констант). Так же как и в параметре «Имя» в параметре «ПолноеИмя» могут быть указаны через точку полные имена разделов до данной константы. Этот параметр можно не указывать, фактически он требуется только для случая создания константы. Если полное имя не указано, то в поле «Полное имя» заносится короткое имя константы (раздела).

Дата (дата) – дата, на которую будет сохранено указанное значение. Может быть не указана, тогда, если у данной константы нет истории значений, просто изменится её поле «Значение», иначе в историю значений будет внесена новая запись с указанным значением на текущую дату.

Примеры вызова «СохранитьКонстанту»

СохранитьКонстанту("ЕСН.88НЕРПРИБ","88-5",
   "КОНСТАНТЫ ДЛЯ ЕДИНОГО СОЦИАЛЬНОГО НАЛОГА.
   Счет нераспределенной прибыли");
СохранитьКонстанту("ОТЧЕТЫ.НАЛИМУЩ.ИМУЩСРСТОИМ",Сумма,
   "КОНСТАНТЫ ДЛЯ ПОДГОТОВКИ ОТЧЕТНОСТИ.
   РАСЧЕТ НАЛОГА НА ИМУЩЕСТВО И СРЕДНЕГОДОВОЙСТОИМОСТИ ИМУЩЕСТВА.
   Средняя стоимость имущества для расчета налога",
   Дата);

А можно и так, если известно, что константа уже существует:

СохранитьКонстанту("ИМУЩСРСТОИМ",Сумма,Дата);

Функция «Константа»

Как и раньше, для получения значения некоторой константы на определённую дату, используется функция:

Константа(Дата,Имя);

Изменения функции «ПроверитьКонстанту»

В связи с изменением функции «Константа» и появлением функции «СохранитьКонстанту» была изменена и пользовательская функция «ПроверитьКонстанту», которая находится в файле «otchet.prg». Эта функция, как и прежде, проверяет существование константы с заданным именем, а в случае отсутствия таковой создает её, спрашивая значение у пользователя (предлагая при этом некоторое значение по умолчанию). Возвращаемые значения: «0» – константа ранее не существовала, «1» – константа ранее существовала. Формат вызова функции таков:

ПроверитьКонстанту(Имя,ПолноеИмя,Значение
      [,ИмяРаздела[,ПолноеИмяРаздела]]);

Имя (текст) – имя константы (без имён разделов).

ПолноеИмя (текст) – полное имя константы  (без полных имён разделов).

Значение (текст) – значение константы, устанавливаемое по умолчанию.

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

ПолноеИмяРаздела (текст) – то же самое, что и «ИмяРаздела», только указывается полное имя раздела. Параметр не обязателен и требуется только при создании раздела констант. Указывать его имеет смысл только при первом вызове функции «ПроверитьКонстанту» (имеется в виду в рамках одного отчёта и при условии работы с одной группой констант), поскольку для следующих вызовов уже можно гарантировать наличие раздела.

Примеры использования функции

В следующем примере сначала проверяется наличие константы «Руководитель», при этом если нет группы с именем «ОТЧЕТЫ» и с полным именем «КОНСТАНТЫ ДЛЯ ПОДГОТОВКИ ОТЧЕТНОСТИ», то она будет создана. А в последующих вызовах функции «ПроверитьКонстанту» полное имя раздела констант уже не указывается, поскольку известно, что после выполнения первой строки эта группа обязательно будет существовать.

ПроверитьКонстанту("Руководитель",
   "Руководительпредприятия","","ОТЧЕТЫ",
   "КОНСТАНТЫ ДЛЯ ПОДГОТОВКИОТЧЕТНОСТИ");
ПроверитьКонстанту("Бухгалтер",
   "Фамилия главногобухгалтера","","ОТЧЕТЫ");
ПроверитьКонстанту("Исполнитель",
   "Должностьисполнителя","бухгалтер","ОТЧЕТЫ");

Или вот более сложный пример вызова функции:

ПроверитьКонстанту("ИМУЩСРСТОИМ",
   "Средняя стоимость имущества длярасчета налога",
   Сумма,
   "ОТЧЕТЫ.НАЛИМУЩ",
   "КОНСТАНТЫ ДЛЯ ПОДГОТОВКИОТЧЕТНОСТИ.
   РАСЧЕТ НАЛОГА НА ИМУЩЕСТВО И СРЕДНЕГОДОВОЙ СТОИМОСТИИМУЩЕСТВА");

Новая функция осталась совместимой со старым форматом, поэтому нет острой необходимости изменять все формы и отчеты, в которых она использовалась.

Сергей Макаров (smak@tensor.ru)
Дмитрий Новиков (demon@tensor.ru)

Изменения функции «Диалог»

В версии 1.9.009 была удалена функция «Диалог», а  вместо неё сделаны функции «СоздатьДиалог» и «ВыполнитьДиалог». Вместе они выполняют фактически то же самое, что делала раньше функция «Диалог», но, благодаря такому делению, появилась возможность работать с полями связи. Впрочем, об этом чуть позже, а пока о самих новых функциях.

Функция «СоздатьДиалог», как и её предшественница, принимает имя окна диалога и загружает его из файла ресуров. Но в отличие от функции «Диалог», она не открывает сразу диалог на экран, а конструирует объект, содержащий все поля загруженного диалога. Этот-то объект и возвращается функцией «СоздатьДиалог». Чтобы установить поля диалога, достаточно присвоить нужные значения соответствующим полям созданного объекта.

А вот выполняется (открывается на экран) созданный диалог функцией «ВыполнитьДиалог», которой в качестве параметра как раз и передаётся объект, сконструированный функцией «СоздатьДиалог». Функция «ВыполнитьДиалог» возвращает «1», если пользователь нажал в диалоге кнопку «Сохранить» (<Enter>), или «0», если была нажата «Отменить» (<Esc>). После выполнения диалогового окна можно считать введённые пользователем данные из соответствующих полей объекта.

Чтобы всё стало понятно, приведём новую схему выполнения диалога, как она будет выглядеть в общем случае:

# создаём диалог
объект Д = СоздатьДиалог("Имя диалога");

# присваиваем значения нужным полям
Д.Поле1 = Значение1;
Д.Поле2 = Значение2;
...

# даём пользователю поработать с диалогом
Если( ВыполнитьДиалог(Д) )
{
   # извлекаем значения
   Сумма = Д.Поле1 + Д.Поле2;
   ...
}

Обратите внимание, что если раньше функция «Диалог» брала все доступные одноимённые значения, то теперь есть чётко объект и, если надо, именно полям этого объекта нужно присваивать значение. Причём регистр букв в имени важен, то есть «поле1» и «Поле1» – два различных имени.

Как уже говорилось, основная цель такого разделения – дать возможность работать с полями связи. Теперь, если в диалоговом окне есть поле связи, то для его установки можно воспользоваться функцией «Связать», а после выполнения диалога можно получить связанный объект. В качестве примера покажем, как установить и считать поле «Наша организация» в окне «Конфигурация системы»:

объект Д = СоздатьДиалог("Конфигурация системы");
Связать(Д.Лицо1,Лицо("7601000463"));
Если( ВыполнитьДиалог(Д) )
{
   объект О = Д.Лицо1;
   Сообщить(О.Название);
}

И ещё один нюанс – теперь, в общем-то, можно один и тот же диалог выполнять несколько раз, например, пока не будет соблюдено какое-то условие:

объект Д = СоздатьДиалог("Мой диалог");
Продолжим = 1;
Пока( Продолжим )
{
   Если( ВыполнитьДиалог(Д) )
   {
      Если( Д.Сумма==0 )
         Сообщить("Укажите сумму!");
      иначе
      {
         Сумма = Д.Сумма;
         Продолжим = 0;
      }
   }
   иначе
      Продолжим = 0;
}

Дмитрий Новиков (demon@tensor.ru)


<<< Предыдущий выпуск | Архив выпусков | Следующий выпуск >>>