Приветствую Вас ГостьВторник, 09.12.2025, 05:11

Каталог статей

В разделе материалов: 269
Показано материалов: 101-110
Страницы: « 1 2 ... 9 10 11 12 13 ... 26 27 »

Виртуальные таблицы регистра бухгалтерии

Регистры | Просмотров: 3146 | Добавил: leshic | Дата: 20.01.2023

Начиная с платформы 8.3.22 в запросах можно использовать новые функции и операторы:

УНИКАЛЬНЫЙИДЕНТИФИКАТОР(Ссылка) - Возвращает значение типа УникальныйИдентификатор. Если NULL, то возвращает NULL
Строка(String) – преобразует значение в примитивного типа в строку с учетом национальных установок.
Тригонометрические функции Sin, Cos, Tan, ASin, ACos, ATan (все вычисления производятся в радианах)
Exp - вычисляет результат возведения основания натурального логарифма (числа e) в степень
Log - вычисляет натуральный логарифм числа.
Log10 - вычисляет десятичный логарифм числа.
Pow -  вычисляет возведение в степень.
Sqrt – вычисляет квадратный корень.
Окр(Round) - округляет исходное число до нужной разрядности
Цел(Int) - вычисляет целую часть переданного числа, полностью отсекая дробную часть.
ДлинаСтроки(StringLength) – вычисляет длину строки.
СокрЛ(TrimL) – отбрасывает незначащие пробелы слева.
СокрП(TrimR) – отбрасывает незначащие пробелы справа.
СокрЛП(TrimAll) – отбрасывает незначащие пробелы слева и справа.
Лев(Left) – получает первые слева символы строки.
Прав(Right) – получает первые справа символы строки.
СтрНайти(StrFind) – находит первую позицию подстроки в строке (без учета регистра).
ВРег(Upper) – преобразует все символы строки в верхний регистр.
НРег(Lower) – преобразует все символы строки в нижний регистр.
СтрЗаменить(StrReplace) – заменяет все вхождения подстроки на другую подстроку (без учета регистра).
РазмерХранимыхДанных(StoredDataSize) – возвращает размер данных в байтах, которые занимают данные параметра.
АВТОНОМЕРЗАПИСИ() - возвращает номер записи в запросе. Работает только в временных таблицах.

Запросы | Просмотров: 1036 | Добавил: leshic | Дата: 19.01.2023

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

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


Для передачи таблицы значений через HTTP и WEB сервисы надо преобразовать её в строку, либо заранее описать структуру передаваемых данных, что бывает утомительно.

Есть несколько вариантов:

1. Устаревший метод:  ТЗСтрокой = ЗначениеВСтрокуВнутр(ТЗ);  ТЗ = ЗначениеИзСтрокиВнутр(ТЗСтрокой);

2. Сериализовать в XML

3. Преобразовать в JSON

 


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

Если это перечисление, то можно прописать формирование значения в событии "ПередВыгрузкой": Значение = "значение_перечисления_в_приемнике";

Если в приемнике свойство справочник, то в ПКО, которое используется для конвертации этого свойства надо, в свойствах можно поставить галку  "Получить значения из входящих данных" и заполнить структуру "ИсходящиеДанные", которое будут использованы в качестве входящих данных при выполнении ПКО. В этом случае для переменной "Значение" лучше присвоить какое-нибудь значение, например 1. Это надо для того, чтобы система поняла, что в этом свойстве что-то есть  и его надо перенести. В противном случае система может посчитать что значение пустое и перенос не требуется.

В качестве альтернативы можно переменную Значение задать как Структуру, поля которой соответствуют свойствам приемника. В этом случае мы получим как-бы объект переноса с нужными свойствами, но без УИД. Поиск по УИД надо отключит для данного ПКО, так как выйдет ошибка.

 


Если очень надо преобразовать число в строку в запросе, то можно воспользоваться таким извращенным методом:

ВЫБРАТЬ
    568093.567 КАК число
ПОМЕСТИТЬ втЧисло
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    //исходное число
    втЧисло.число КАК число,
    
    //разбор по символам для наглядности
    ВЫРАЗИТЬ(втЧисло.число / 100000 - 0.5 КАК ЧИСЛО(10, 0)) КАК Поле1,
    (ВЫРАЗИТЬ(втЧисло.число / 10000 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число / 100000 - 0.5 КАК ЧИСЛО(10, 0))) * 10 КАК Поле2,
    (ВЫРАЗИТЬ(втЧисло.число / 1000 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число / 10000 - 0.5 КАК ЧИСЛО(10, 0))) * 10 КАК Поле3,
    (ВЫРАЗИТЬ(втЧисло.число / 100 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число / 1000 - 0.5 КАК ЧИСЛО(10, 0))) * 10 КАК Поле4,
    (ВЫРАЗИТЬ(втЧисло.число / 10 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число / 100 - 0.5 КАК ЧИСЛО(10, 0))) * 10 КАК Поле5,
    (ВЫРАЗИТЬ(втЧисло.число / 1 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число / 10 - 0.5 КАК ЧИСЛО(10, 0))) * 10 КАК Поле6,
    "." КАК Поле7,
    (ВЫРАЗИТЬ(втЧисло.число * 10 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число * 1 - 0.5 КАК ЧИСЛО(10, 0))) * 10 КАК Поле8,
    (ВЫРАЗИТЬ(втЧисло.число * 100 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число * 10 - 0.5 КАК ЧИСЛО(10, 0))) * 10 КАК Поле9,
    (ВЫРАЗИТЬ(втЧисло.число * 1000 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число * 100 - 0.5 КАК ЧИСЛО(10, 0))) * 10 КАК Поле10,
    
    //преобразование в строку
    ПОДСТРОКА("0123456789", (ВЫРАЗИТЬ(втЧисло.число / 100000 - 0.5 КАК ЧИСЛО(10, 0))) + 1, 1) 
    + ПОДСТРОКА("0123456789", (ВЫРАЗИТЬ(втЧисло.число / 10000 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число / 100000 - 0.5 КАК ЧИСЛО(10, 0))) * 10 + 1, 1) 
    + ПОДСТРОКА("0123456789", (ВЫРАЗИТЬ(втЧисло.число / 1000 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число / 10000 - 0.5 КАК ЧИСЛО(10, 0))) * 10 + 1, 1) 
    + ПОДСТРОКА("0123456789", (ВЫРАЗИТЬ(втЧисло.число / 100 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число / 1000 - 0.5 КАК ЧИСЛО(10, 0))) * 10 + 1, 1) 
    + ПОДСТРОКА("0123456789", (ВЫРАЗИТЬ(втЧисло.число / 10 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число / 100 - 0.5 КАК ЧИСЛО(10, 0))) * 10 + 1, 1) 
    + ПОДСТРОКА("0123456789", (ВЫРАЗИТЬ(втЧисло.число / 1 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число / 10 - 0.5 КАК ЧИСЛО(10, 0))) * 10 + 1, 1) 
    + "." 
    + ПОДСТРОКА("0123456789", (ВЫРАЗИТЬ(втЧисло.число * 10 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число * 1 - 0.5 КАК ЧИСЛО(10, 0))) * 10 + 1, 1) 
    + ПОДСТРОКА("0123456789", (ВЫРАЗИТЬ(втЧисло.число * 100 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число * 10 - 0.5 КАК ЧИСЛО(10, 0))) * 10 + 1, 1) 
    + ПОДСТРОКА("0123456789", (ВЫРАЗИТЬ(втЧисло.число * 1000 - 0.5 КАК ЧИСЛО(10, 0))) - (ВЫРАЗИТЬ(втЧисло.число * 100 - 0.5 КАК ЧИСЛО(10, 0))) * 10 + 1, 1) 
    + "" КАК ЧислоСтрокой
ИЗ
    втЧисло КАК втЧисло

Запросы | Просмотров: 558 | Добавил: leshic | Дата: 06.12.2022 | Комментарии (0)

У элемента динамического списка есть свойство "ИзменятьСоставСтрок". Если поставить его равным Ложь, то в форме нельзя создать ни элемент ни группу. Внешне это похоже на то, что у пользователя нет прав на создание, но на самом деле ограничение устанавливается свойством

Формы | Просмотров: 400 | Добавил: leshic | Дата: 30.11.2022 | Комментарии (0)

Источник: https://infostart.ru/1c/articles/980323/

Предложенная автором форма запроса по его словам сокращает время выполнения запроса на 25 процентов

Запросы | Просмотров: 357 | Добавил: leshic | Дата: 29.11.2022 | Комментарии (0)

Когда выгружается Ссылка и если не стоит в ПКО свойство "Не Запоминать Выгруженные Объекты", то выгруженный объект загружается в структуру выгруженных объектов (тип Соответствие). В этом случае, если встречается ссылка на данный объект, то он не выгружается повторно, а подставляется значение из этой структуры. В файле выгрузки это выглядит так: <Ссылка Нпп="3"><Свойство Имя="Наименование" Тип="Строка"> <Значение>Пересечения</Значение>...</Ссылка>. Здесь Нпп - это ключ в соответствии ЗагруженныеОбъекты, из которого определяется ссылка на ранее созданный объект при загрузке, без дополнительного поиска.

А вот когда выгружаем не ссылочный тип в приемник ссылочного типа, например таблицу значений в справочник, то соответствие выгруженных объектов не заполняется и при появлении в выгрузке ссылки на ранее выгруженные данные, записывается узел для повторного поиска/создания объекта. Чтобы этого избежать, надо в методе "Перед выгрузкой" правила конвертации объекта установить значение параметров:

  • КлючВыгружаемыхДанных  = уникальному значению для данного объекта
  • ЗапоминатьВыгруженные = Истина

 


Прогресс-бар в управляемых формах можно вывести с помощью метода Состояние()

Пример использования:

Состояние(СтрокаДоговор, КоличествоОбработанных/КоличествоВсего*100,"формирование печатной формы",БиблиотекаКартинок.ВывестиСписок);

Формы | Просмотров: 548 | Добавил: leshic | Дата: 20.09.2022 | Комментарии (0)


Вход на сайт
Поиск
Категории раздела
СКД [53]
Регистры [7]
Формы [50]
Администрирование [55]
Запросы [11]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [57]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0