Смекни!
smekni.com

Вычисление логических выражений в операторах встроенного языка (стр. 4 из 6)

Выбор разрядности для данных числовых типов

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

При установке формата числового типа данных, разрядность должна обеспечивать возможность хранения чисел необходимой величины. Например, если у нас реквизит "Цена" имеет формат (8.2), то при записи в него значения 10000 * 26.85 мы получим переполнение числа (99999.99).

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

Перебор объектов и групповое изменение данных

Весьма часто при разработке и внедрении конфигураций возникает необходимость в разработке алгоритма, который выполняет обход объектов информационной базы и вносит в них некоторые изменения. При реализации такого алгоритма в определенных случаях возникают ситуации, когда после изменения объекта не выполняется продолжение выборки следующих объектов. Это объясняется тем, что последовательная выборка и изменение объектов выполняются непосредственно в информационной базе. В основном проблемы возникают в тех случаях, когда при записи изменяются именно те данные, по которым собственно и происходит отбор объектов. В результате текущий объект не должен больше относиться к выборке и само продолжение выборки не выполняется системой. Например, в процессе перебора подчиненных документов, у найденного документа изменяется реквизит, в котором собственно записано значение того документа, для которого выбираются подчиненные. Ситуация осложняется тем, что при использовании методов языка разработчик конфигурации не всегда может точно определить каким способом система будет выполнять перебор объектов.

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

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

Следует заметить, что при выполнении выборки объектов информационной базы с помощью объекта "Запрос" подобных проблем не возникает, так как при обходе результатов запроса используется временный массив построенный в ходе выполнения запроса.

Ошибки базы данных и их обработка

Ошибки базы данных и их обработка. При работе системы 1С:Предприятие могут возникать ошибки базы данных. Эти ошибки могут иметь место как при работе с базой данных, представленной в формате DBF/CDX , так и с базой данных, хранимой в среде MS SQL Server . И, хотя характер ошибок в обоих приведенных случаях может различаться, процедура их обработки стандартизована в системе 1С:Предприятие. По последствиям ошибки базы данных разделяются на две группы

невосстановимые ошибки

восстановимые ошибки

Невосстановимые ошибки базы данных

Невосстановимые ошибки базы данных являются следствием значительных нарушений в работе системы 1С:Предприятие: физического разрушения базы данных, нарушения ее структуры, серьезных рассогласований во взаимодействии программы с базой данных и т. п.. В таких случаях восстановить нормальное функционирование системы 1С:Предприятие невозможно и единственно правильной реакцией является завершение работы системы. Видимым проявлением таких ошибок в случае работы с базой данных в формате DBF/CDX является появление диалогового окна, содержащего текст, начинающийся со слов "Н евосстановимая ошибка Базы Данных”, в след за которыми приводится описание ошибки. В случае работы с базой данных, размещенной в среде MS SQL Server сначала появляется окно, в котором содержится описание ошибки SQL , а затем окно, содержащее текст "Н евосстановимая ошибка базы данных!". П осле этого в обоих случаях происходит завершение работы системы. Невосстановимые ошибки базы данных не могут быть перехвачены и обработаны из встроенного языка с помощью конструкций Попытка … Исключение … КонецПопытки .

Восстановимые ошибки базы данных

Восстановимые ошибки базы данных в известном смысле ошибками не являются, а представляют собой штатные ситуации, которые так или иначе могут возникать в процессе нормальной работы системы 1С:Предприятие. К восстановимым ошибкам относятся ошибки блокировки отдельных объектов (записей) базы данных, ошибки захвата таблиц при выполнении транзакций и т. п.. Ошибками они являются в том смысле, что при этом не могут быть успешно завершены выполняемые над базой данных операции (транзакции). Но при этом не происходит каких-то фатальных нарушений в работе системы 1С:Предприятие и имеется возможность восстановления нормального функционирования. Реакция системы на восстановимые ошибки базы данных зависит от того, в какой ситуации происходит ошибка: при выполнении интерактивного действия или при выполнении модуля встроенного языка.

При выполнении интерактивной процедуры (например, при записи документа из формы при нажатии кнопки), в случае возникновения восстановимой ошибки базы данных происходит откат транзакции базы данных, а сама система 1С:Предприятие возвращается к состоянию, в котором она находилась до начала выполнения интерактивной процедуры. После этого на экран выводится диалоговое окно, содержащее вопрос: "П ри выполнении транзакции произошла ошибка! <О писание ошибки> П овторить попытку выполнить транзакцию?". В случае положительного ответа на вопрос производится повторная попытка выполнить операцию. Если повторная попытка выполнить операцию снова завершится восстановимой ошибкой, то снова будет выдан запрос на повторение операции и так далее. В случае отрицательного ответа повторная попытка выполняться не будет. В модулях встроенного языка восстановимые ошибки базы данных могут быть перехвачены и обработаны с помощью конструкции встроенного языкаПопытка … Исключение … КонецПопытки так же, как и другие ошибки встроенного языка. В случае, если обработки ошибки в модуле не предусмотрено, то будет произведен откат выполняемой в данный момент транзакции, в окно сообщений 1С:Предприятия будет выведено сообщение о произошедшей ошибке, а выполнение модуля будет прервано, как и в случае возникновения в процессе выполнения модуля любой другой ошибки. В случае работы с базой данных, размещенной в среде MS SQL Server , в окно сообщений будет выдана ошибка SQL. После возникновения восстановимой ошибки алгоритм, вызвавший ошибку, может быть вызван пользователем повторно. Если используется конструкция встроенного языка Попытка … Исключение … КонецПопытки, то повторная операции записи может быть вызвана модулем автоматически.

Использование строковых реквизитов неограниченной длины

При определении структуры справочников и документов для строковых реквизитов необходимо выбрать определенную длину или указать режим "Неограниченная длина" (кроме реквизитов табличной части). Вариант "Неограниченная длина" существенно отличается по внутреннему способу хранения.

При работе с базами данных в формате DBF/CDX реквизиты неограниченные длины хранятся в отдельной таблице блоками по 80 символов. Для пустой строки в этой таблице записи не хранятся. Разумеется, хотя само значение блока имеет длину 80 символов, дополнительные ресурсы расходуются на поддержание связи с этой таблицей. В базах данных в формате SQL для хранения реквизитов неограниченной длины используется соответствующий тип поля таблицы, который также хранит только заполненные строки. Соответственно, если в создаваемом реквизите значения будут задаваться далеко не для всех объектов, то использование реквизита неограниченной длины может существенно уменьшить количество используемого дискового пространства.

Обращение к реквизитам неограниченной длины несколько замедляет считывание объекта, если происходит обращение к этим реквизитам. Запись объекта замедляется несколько более существенно, но только если конкретное значение изменялось. Скорость записи, разумеется, зависит от количества записываемых блоков (в базах данных DBF/CDX), то есть от длины строки.

Следует учитывать, что строковые значения реквизитов неограниченной длины записываются и возвращаются без хвостовых пробелов, тогда как обычные строковые реквизиты всегда дополняются пробелами до длины соответствующей длине реквизита в метаданных.