Практический опыт

НайтиПоСсылкам

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


НайтиПоСсылкам(Ссылки) {(1)}: Ошибка при вызове метода контекста (НайтиПоСсылкам): У пользователя недостаточно прав на исполнение операции над базой данных.

В процессе обновления информационной базы произошла критическая ошибка.


В процессе обновления информационной базы произошла критическая ошибка.
по причине:
Попытка вставки неуникального значения в уникальный индекс:
Microsoft OLE DB Provider for SQL Server: Cannot insert duplicate key row in object 'dbo._InfoRg22299NG' with unique index '_InfoR22299_ByPeriod_TRRNG'.
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=E, native=2601, line=1

Одна из причин медленного группового проведения в УПП

Встала проблема медленного группового проведения УПП.
Что в итоге нашли:

Изначально проведение периода 01.08.2009-05.08.2009 23:59:59 заняло 9:51:59-10:43:13=51м14с.

После выгрузки и загрузки (через конфигуратор) в чистую sql Базу проведение периода 01.08.2009-05.08.2009 23:59:59 заняло 14:18:40-15:00:36=41м56с быстрее на 18% (маловато будет, но не помешает).

Включение РАУЗ существенного выигрыша в проведении не дает.

Мастер корректировки записей регистров

Обработка помогает создать и заполнить документ "Корректировка записей регистров". Обработка будет полезна в тех случаях когда необходима правка какого-либо документа в закрытом периоде. В табличном поле загружена информация из выбранного документа. Значения в таблице нужно редактировать, т.е. внести необходимые корректировки и изменения. Исправленное значение можно восстановить с помощью кнопки справа от таблицы. Там же находится кнопка для маркировки\снятия маркировки ячеек таблицы. По маркированным ячейкам будет выполняться отбор записей регистров документа для сторнирования и изменения.

Удаление пустых колонок в таблице значений.

Процедура УдалитьПустыеКолонкиТЗ(ТЗ)
   
МассивВозможноПустыхКолонок=Новый Массив;
    Для Каждого
ТекКолонка Из ТЗ.Колонки Цикл
       
МассивВозможноПустыхКолонок.Добавить(ТекКолонка.Имя);
   

Определить что мы находимся в фоновом задании

Функция ЭтоФоновоеЗадание() Экспорт
   
НС=НомерСоединенияИнформационнойБазы();
   
мСоединения=ПолучитьСоединенияИнформационнойБазы();
    Если
мСоединения<>Неопределено Тогда
        Для Каждого
С Из мСоединения Цикл
         

Ключевое слово РАЗРЕШЕННЫЕ в запросе.

Использование слова РАЗРЕШЕННЫЕ в запросах на проверку может привести к логической ошибке.
Если нам, например, нужно при вводе документа Заказ проверить наличие уже введенного документа и запретить ввод второго, то в запросе проверке нельзя использовать слово РАЗРЕШЕННЫЕ. Т.к. на первый документ у нас может не быть прав и результат запроса будет пустой, что повлечет ошибочное разрешение на ввод второго документа. Таким образом правильное решение это проверять наличие первого документа без слова РАЗРЕШЕННЫЕ и в Попытке, при возникновении исключения запрещать ввод второго документа.

Округление в запросе

При использовании конструкции

ВЫРАЗИТЬ(КоличествоКоробокДоОкругления КАК Число(19,0))

для округления можно наступить на грабли.
А именно все что >=0.5 округляется до 1.
Всё что <0.5 округляется до 0.

Допустим мы расчитываем заказ на склад в коробках, т.е. требуемое кол-во делим на кол-во штук в коробке получаем КоличествоКоробокДоОкругления. Что расчитать в запросе требуемый заказ в целых коробках и не заказать лишней коробки нужно писать так:

ВЫРАЗИТЬ(КоличествоКоробокДоОкругления+0.4999999999999999999 КАК Число(19,0))

,а не

Запуск команды системы без выскакивающего черного окна оболочки

Допустим мы хотим из 1С послать сообщение нашему пользователю vasya_pupkin:

net send vasya_pupkin Привет!

Если написать так:

ЗапуститьПриложение("net send vasya_pupkin Привет!");

то на экране мигнет черное окно оболочки.

Чтоб сделать "красиво" используем такой код:

Ком = Новый COMObject("wScript.Shell");
Ком.Run("net send vasya_pupkin Привет!",0,Ложь);

Второй параметр метода Run по данным сайта Microsoft(пока не перевел):

0 Hides the window and activates another window.
1

Объект не найден или не доступен по RLS.

Для любой ссылки всего три варианта существования объекта.
1) объект существует
2) объект не найден
3) объект существует, но к нему нет доступа по RLS
По мнению коллег наилучший способ определить для ссылки к какому из трех вариантов она относится это
в попытке выполнить запрос на получение данных ссылка на которые равна проверяемой.
Если результат пустой, то объект не найден. Если есть результат, то объект существует.
Если произошло исключение, то система RLS не дает доступ.
Пока ничего не проверял, если у кого есть комментарии прошу написать.

Справочники

Документы

Отчеты

Обработки

RSS-материал