Программирование

Поиск объектов имеющих все заданные значения свойств.

//am+
//Поиск объектов имеющих все заданные в табл. значений СвойстваИЗначения
//значения свойств.
//
//Формат колонок таблицы СвойстваИЗначения:
//    "Значение", тип Характеристика.СвойстваОбъектов
//    "Свойство", тип ПланВидовХарактеристикСсылка.СвойстваОбъектов
//Можно задать Владельца объекта, для поиска в пределах подчинения
//Например ищем характеристику номеклатуры с заданными св-ми для заданной номеклатуры.
//

Добавление пользовательских группировок в отчет Продажи (УниверсальныйОтчет, Построитель)

Давайте разберем один пример работы с универсальным отчетом.

Продажи с группировкой по грузополучателю.Продажи с группировкой по грузополучателю.

Еще вопрос новичку на собеседовании

Как получить ссылку на еще не созданный новый объект?

Вот учебный пример:


//получим новый УИД для будущей ссылки
НовыйУИД = Новый УникальныйИдентификатор;
//получаем новую ссылку на еще не созданный объект
НоваяСсылка = Справочники.Контрагенты.ПолучитьСсылку(НовыйУИД);
//создаем новый объект и привязываем его к новой ссылке
НовКонтр = Справочники.Контрагенты.СоздатьЭлемент();

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

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


НайтиПоСсылкам(Ссылки) {(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

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

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

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

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

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

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

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

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

ВЫРАЗИТЬ(КоличествоКоробокДоОкругления КАК Число(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

Справочники

Документы

Отчеты

Обработки

RSS-материал