Расчет АВС в СКД агрегатная функция

Начиная с версии 8.3 платформы 1С в СКД появилась агрегатная функция КлассификацияABC (ClassificationABC). Для конфигурации должен быть установлен режим совместимости не ниже 8.3.3.

Синтаксис:

КлассификацияABC(Значение, КоличествоГрупп, ПроцентыДляГрупп, ИмяГруппировки)

Параметры:

  • Значение – тип Строка.  по которому нужно рассчитывать классификацию. Строка, в которой указано выражение;
  • КоличествоГрупп — тип Число. Задает количество групп, на который нужно разбить;
  • ПроцентыДляГрупп — тип Строка. Столько, на сколько групп нужно разбить минус 1. Через запятую. Если не задано, то автоматически;
  • ИмяГруппировки– тип Строка. Имя группировки, в которой нужно вычислять группировку обработки. Если не указано, то вычисление происходит в текущей группировке. Если вычисление идет в таблице и параметр содержит пустую строку, или не указан, то значение вычисляется для группировки – строки. Компоновщик макета при генерации макета компоновки данных заменяет данное имя на имя группировки в результирующем макете. Если группировка не доступна, то функция будет заменена на значение NULL.

Результатом работы функции будет номер класса, начиная с 1, который соответствует классу A.

Пример: КлассификацияABC(«Сумма(ВаловаяПрибыль)», 3, «60, 90″)

  • Добавить в вычисляемые поля — поле Класс (назвать как угодно)
    ПоляДляАВСКлассификации
  • В ресурсах прописать руками функцию  КлассификацияABC(«Сумма(ВаловаяПрибыль)», 3,,»Номенклатура»)
    РесурсыДляАВСКлассификацииВ приведенном примере АВС классификация будет рассчитываться по группировке Номенклатура, если последний параметр функции не заполнять, то классификация будет рассчитываться для текущей группировки.
Рубрика: Без рубрики | Комментарии отключены

Регламентные и фоновые задания в файловом режиме (начиная с версии 8.3.4)

Начиная с версии платформы 1С предприятия 8.3.4 появился механизм фоновых и регламентных заданий работающих в файловом режиме скрыто от пользователя.
Раньше если в файловом режиме запускалось регламентное задание то оно блокировало работу пользователя под которым запустилось до того момента пока не будет закончено
Теперь регламентные задания запускаются в отдельном процессе, на работу пользователя не влияют и окон не выводят — в общем как будто выполняются на сервере.

Условия работы нового механизма:

  • Конфигурация должна иметь режим совместимости не меньше чем 8.3.4

    Выбор режима совместимости

    Выбор режима совместимости

  • Клиент 1С предприятия должен запускаться с ключом AllowExecuteScheduledJobs. Запускать можно указывая ключ в командной строке, но проще указать в настройках запуска базы. Например так:

    Запуск в режиме обработки регламентных заданий

    Запуск в режиме обработки регламентных заданий

  • Код который прямо или косвенно будет выполняться в регламентных заданиях должен быть написан как для сервера, т.е. те функции которые недоступны на сервере будут блокировать выполнение регламентных заданий. Например: Функция ОткрытьФорму() или ЗавершитьРаботуСистемы() вызовут ошибку компиляции при запуске регламентного задания о которой оно отпишется в стандартный журнал регистрации
    ОшибкаЖурналаРегистрации
Рубрика: Статьи | Комментарии отключены

Полезные приемы для управляемых форм

Привет всем, кто недавно взялся за управляемые формы 1С.

Хоть идея заложенная в управляемых формах и весьма интересна, однако после толстого клиента возникает несколько вопросов — решение которых весьма нетривиально.

Содержание:

Начнем с простого:


Как получить Макет внешнего отчета/обработки?

ОбъектТМП = РеквизитФормыВЗначение("Объект");
Макет = ОбъектТМП.ПолучитьМакет("МойМакет");


Как сохранить настройки формы отчета или обработки? 

То что раньше мы делали функциями (толстый клиент)

СохранитьЗначение("Имя", Значение);
Значение = ВосстановитьЗначение("Имя");

Теперь делается так (тонкий клиент/управляемые формы):

ХранилищеПользовательскихНастроекДинамическихСписков.Сохранить("ИмяПараметра", "ИмяНастройки", Значение);
Значение=ХранилищеПользовательскихНастроекДинамическихСписков.Загрузить("ИмяПараметра", "ИмяНастройки")

Здесь стоит пояснить пару нюансов:

  1. Пример приведен для конфигурации Управление торговли 11.х. В УТ 11.х есть несколько стандартных хранилищ. Стандартные хранилища не требуют дополнительного кода т.е. можно пользоваться «КАК ЕСТЬ». Нюанс в том что не все из этих хранилищ будут делать то что вам нужно :) — просто подберите то которое будет работать:
    1. ХранилищеПользовательскихНастроекДинамическихСписков
    2. ХранилищеНастроекДанныхФорм
    3. ХранилищеОбщихНастроек
    4. ХранилищеПользовательскихНастроекОтчетов
    5. ХранилищеСистемныхНастроек
  2. В УТ 11 есть также стандартное хранилище ХранилищеВариантовОтчетов — для него в конфигурации уже написан спец обработчик который требует определенной структуры параметров. Если есть желание — можете разобраться с ними самостоятельно.
  3. Есть также объект ХранилищеНастроек — он предназначен для разработки собственных хранилищ. Здесь нюанс в том, что этот объект сам по себе ничего не делает он предоставляет несколько обработчиков (пустых) в которых надо написать код для сохранения переданных значений. Куда и как сохранять дело сугубо личное, каждого кто решил с этим связаться.


Произвольный отбор в управляемых формах.

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

Итак:

  1. Заводим реквизит формы типа КомпоновщикНастроекКомпоновкиДанных (или реквизит обработки, кому как нравится) — назовем его НовыйОтбор (для примера)
  2. Если развернуть крестиком НовыйОтбор, то внутри мы увидим свойство Настройки, а внутри Настройки увидим Отбор — хватаем отбор мышкой и тащим на форму — в результате увидим форму стандартного отбора как в старые добрые …
  3. Инициализация отбора — просто так заполнить отбор элементами не выйдет. Для этого нужно сделать два шага
    1. Создать макет схемы (пример) — для тех кто в курсе как делать схемы СКД поясню простой принцип (кто не в курсе — смотрим пример): Делаем элементарный запрос (в СКД схеме) вида
      ВЫБРАТЬ
        Номенклатура.Ссылка КАК Номенклатура,
        Номенклатура.Производитель КАК Производитель,
        Склады.Ссылка КАК Склад
      ИЗ
        Справочник.Номенклатура,
        Справочник.Склады
      

      По запросу, СКД определит поля доступные для отбора. Если мы хотим чтобы в отборе были уже какие-то поля добавлены автоматически — идем на закладку Настройки (в СКД) -> Отбор и добавляем там поля в левую часть (не забываем устанавливать значения по умолчанию). Если непонятно — смотрим пример.
      Схему добавляем в макеты обработки/отчета.

    2.  Выполнить код (на сервере — функция с модификатором &НаСервере):
        //Получим схему из обработки
        ОбъектТМП = РеквизитФормыВЗначение("Объект");
        СхемаКомпоновки = ОбъектТМП.ПолучитьМакет("МояСхемаКомпоновкиНастроек");//Ваша схема может называться как угодно
        
        //Берем настройки по умолчанию из схемы
        НастройкиКомпоновки = СхемаКомпоновки.НастройкиПоУмолчанию;
        
        //Инициализируем наш отбор
        Адрес = Новый УникальныйИдентификатор();
        URLСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновки, Адрес);
        ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСхемы);
      
        НовыйОтбор.Инициализировать(ИсточникНастроек);
        НовыйОтбор.ЗагрузитьНастройки(НастройкиКомпоновки);
      

      Код можно запихать например в функцию ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

  4. Использование отбора — Все элементы отбора находятся здесь:
    НовыйОтбор.Настройки.Отбор.Элементы

    Это коллекция, поэтому обходим её стандартным образом

    Для каждого Элемент ИЗ НовыйОтбор.Настройки.Отбор.Элементы Цикл
      //Строка(Элемент.ЛевоеЗначение) - это то что стоит слева   в отборе (например Номенклатура или Склад.Наименование)
      //Элемент.ПравоеЗначение - это значение отбора (например   реальная группа номенклатуры или склад)
      //Элемент.Использование - Истина - если стоит галка на ст  роке отбора
      //Элемент.ВидСравнения - поле типа ВидСравнения (Например  ВидСравнения.Равно)
    КонецЦикла;

 

PS Статья написана для обычных программистов, чтобы облегчить их жизнь. У кого жизнь и так легкая — завидую.
Будут еще плюшки — допишу в статью.
Будут вопросы пишите в почту: info@agency-sd.ru (не гарантирую что отвечу — работы много, но шанс есть)

Рубрика: Статьи | Метки: , , , | Комментарии отключены