Вопрос

Добрый день!

Суть такова. В системе есть справочник в который занесены номера недель и соответствующие им календарные даты. (Например: Номер недели: 3; Дата: 14.01.2019 - 18.01.2019). 

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

У меня такой же вопрос

6 комментариев
Лучший ответ

Возможность есть 

1 БП запускайте по расписанию

2 С помощью элемента формула можно получить номер текущей неделе дальше обновить или что вам нужно сделать с этой записью

По работе в формуле с датами более подробно смотри тут

Возможность есть 

1 БП запускайте по расписанию

2 С помощью элемента формула можно получить номер текущей неделе дальше обновить или что вам нужно сделать с этой записью

По работе в формуле с датами более подробно смотри тут

Накидал на C# скрипт, который выдает список с данными (неделя, начало, конец, год). осталось вызывать раз в год

var data = WeekWorker.GetYearWeekData(2019);

и данные парсить в справочник

using System;
using System.Collections.Generic;
using System.Globalization;
 
namespace TestApp
{
    public class WeekData
    {
        public int year { get; set; }
        public int week { get; set; }
        public DateTime weekStart { get; set; }
        public DateTime weekEnd { get; set; }
    }
 
    public class WeekWorker
    {
        public static List<WeekData> GetYearWeekData(int year)
        {
            var weeksdata = new List<WeekData>();
 
            int weeks = GetWeeksInYear(year);
            for (int i = 1; i <= weeks; i++)
            {
                var firstDay = FirstDateOfWeekISO8601(year, i);
                var lastDay = firstDay.AddDays(6);
 
                weeksdata.Add(new WeekData() { year = year, week = i, weekStart = firstDay, weekEnd = lastDay });
            }
 
            return weeksdata;
        }
        public static int GetWeeksInYear(int year)
        {
            DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
            DateTime date1 = new DateTime(year, 12, 31);
            Calendar cal = dfi.Calendar;
            int weeks = cal.GetWeekOfYear(date1, dfi.CalendarWeekRule, dfi.FirstDayOfWeek);
            return weeks;
        }
 
        public static DateTime FirstDateOfWeekISO8601(int year, int weekOfYear)
        {
            DateTime jan1 = new DateTime(year, 1, 1);
            int daysOffset = DayOfWeek.Thursday - jan1.DayOfWeek;
 
            // Use first Thursday in January to get first week of the year as
            // it will never be in Week 52/53
            DateTime firstThursday = jan1.AddDays(daysOffset);
            var cal = CultureInfo.CurrentCulture.Calendar;
            int firstWeek = cal.GetWeekOfYear(firstThursday, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
 
            var weekNum = weekOfYear;
            // As we're adding days to a date in Week 1,
            // we need to subtract 1 in order to get the right date for week #1
            if (firstWeek == 1)
            {
                weekNum -= 1;
            }
 
            // Using the first Thursday as starting week ensures that we are starting in the right year
            // then we add number of weeks multiplied with days
            var result = firstThursday.AddDays(weekNum * 7);
 
            // Subtract 3 days from Thursday to get Monday, which is the first weekday in ISO8601
            return result.AddDays(-3);
        }
    }
 
}

 

Григорий Чех пишет:

Возможность есть 

1 БП запускайте по расписанию

2 С помощью элемента формула можно получить номер текущей неделе дальше обновить или что вам нужно сделать с этой записью

По работе в формуле с датами более подробно смотри тут

Расскажите, пожалуйста, подробнее про то как построить такой БП, а то я не понимаю какие элементы там должны присутствовать.

Все доступные в дизайнере элементы процесса описаны в руководстве.

Если Вы хотите заказать разработку такой логики полностью «под ключ», лучше будет заказать её у одной из компаний, зарегистрированных в маркете в каталоге услуг

Добавить комментарий

Зверев Александр пишет:

Все доступные в дизайнере элементы процесса описаны в руководстве.

Если Вы хотите заказать разработку такой логики полностью «под ключ», лучше будет заказать её у одной из компаний, зарегистрированных в маркете в каталоге услуг

Мало ли кто-то из комьюнити уже реализовывал схожий процесс и поделится опытом на безвозмездной основе. За деньги вообще, мне кажется, все связанное с CRM можно решить.

Поделились же, в первом и втором комментарии.

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

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день,

 

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

есть Справочник улиц (Street) у которого соответственно есть принадлежность к выше стоящим элементам(Городам, Районам, Регионам и др.) 

Выглядит примерно следующим образом

╔══════════════╤═════════════════════╤══════════════════════════════════════╤══════════════════════════════════════╤══════════════════════════════════════╤══════════════════════════════════════╗
║ Name         │ TerritorialObjectId │ LocalityId                           │ DistrictId                           │ RegionId                             │ CountryId                            ║
╠══════════════╪═════════════════════╪══════════════════════════════════════╪══════════════════════════════════════╪══════════════════════════════════════╪══════════════════════════════════════╣
║ ул. Королёва │ NULL                │ NULL                                 │ NULL                                 │ B0FDED10-AEE0-4F1B-9C8D-198F7C154257 │ 5A1FEFDA-56A4-48A2-BC77-E40C71EEC73B ║
╟──────────────┼─────────────────────┼──────────────────────────────────────┼──────────────────────────────────────┼──────────────────────────────────────┼──────────────────────────────────────╢
║ ул. Ф.Торо   │ NULL                │ 967FC3D7-EBBA-4B76-AEDD-FE1CA5B48157 │ 7B11D4CE-D3E2-487F-BE03-A620015FB4FA │ EED82307-32D6-47EF-BDD8-FA64FE399614 │ 5A1FEFDA-56A4-48A2-BC77-E40C71EEC73B ║
╚══════════════╧═════════════════════╧══════════════════════════════════════╧══════════════════════════════════════╧══════════════════════════════════════╧══════════════════════════════════════╝

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

Бизнес правило по улице заполнено следующим образом

"Street": {
	"FiltrationStreetByTerritorialObject": {
		ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,
		autocomplete: true,
		autoClean: true,
		baseAttributePatch: "TerritorialObject",
		comparisonType: Terrasoft.ComparisonType.EQUAL,
		type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
		attribute: "TerritorialObject"
	},
	"FiltrationStreetByLocality": {
		ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,
		autocomplete: true,
		autoClean: true,
		baseAttributePatch: "Locality",
		comparisonType: Terrasoft.ComparisonType.EQUAL,
		type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
		attribute: "Locality"
	},
	"FiltrationStreetByDistrict": {
		ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,
		autocomplete: true,
		autoClean: true,
		baseAttributePatch: "District",
		comparisonType: Terrasoft.ComparisonType.EQUAL,
		type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
		attribute: "District"
	},
	"FiltrationStreetByRegion": {
		ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,
		autocomplete: true,
		autoClean: true,
		baseAttributePatch: "Region",
		comparisonType: Terrasoft.ComparisonType.EQUAL,
		type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
		attribute: "Region"
	},
	"FiltrationStreetByCountry": {
		ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,
		autocomplete: true,
		autoClean: true,
		baseAttributePatch: "Country",
		comparisonType: Terrasoft.ComparisonType.EQUAL,
		type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
		attribute: "Country"
	}
}

Проблема в том, что при выборе улицы из справочника не подтягиваются автоматически ее выше стоящие элементы, как например город, район и т.д.

Я что то упускаю?

У меня такой же вопрос

4 комментария
Лучший ответ

Сериков Асхат Кайратович,

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

Это решается также через другое свойство атрибута - dependencies.

Подробнее можно почитать здесь и посмотреть пример вот здесь.

Насколько мне известно, такой код работать не будет.

Реализация Вашей задачи, когда нужна фильтрация по нескольким условиям, выполняется через настройку lookupListConfig. Подробнее об этом можно почитать в статье на Академии.

Алла Савельева,

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

autocomplete: true,

должен был выполнять

Сериков Асхат Кайратович,

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

Это решается также через другое свойство атрибута - dependencies.

Подробнее можно почитать здесь и посмотреть пример вот здесь.

Алла Савельева,

Спасибо, так и делаю на данный момент, думал может я что то упустил поэтому не работает автоматическое заполнение

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Всем привет!

В разделах лиды и продажи при создании новой записи сразу ставится начальная стадия кейса. Теперь хочется сделать подобный функционал и для своего кастомного раздела.

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

В голову приходит подобный код

if (this.isAddMode() || this.isCopyMode()) {

this.set("UsrStatus", значение справочника)

}

Но ничего подобного я не обнаружил в исходниках страницы продаж или лидов.

Внимание вопрос, можно ли делать так делать, может быть есть другой, более правильный способ установки первичной стадии?

Вопрос два, как установить значение справочного поля через set? 

Знаю, что качестве второго аргумента в set нужно передавать конструкцию {value: "Guid",
                                              displayValue: "Caption" }

Как правильно получить guid, зная только название справочного поля? Напрямую писать guid это слишком костыльно выглядит.

У меня такой же вопрос

6 комментариев

1) На уровне объекта у колонки св-во: "значение по умолчанию". смотрим на какое справочное поле биндится полоска стадий, ну и соответственно ему задаём значение.
2) this.loadLookupDisplayValue(guid, #колонка_объекта_в_которую_надо_установить_значение#, callback, scope)

Спасибо. Оказалось все очень просто

Варфоломеев Данила, а можно еще пример работы с методом loadLookupDisplayValue?

К примеру мне нужно получить установить значение "Подписан" в справочной поле Состояние договора, название схемы ContractState, название поля на карточке usrContractState. Что нужно выполнить?

Трефилов Павел Сергеевич пишет:
пример работы с методом

this.loadLookupDisplayValue("UsrContractState", "d7e40d7c-1fa4-49cb-a0d5-57a936f9a463"); //подменить на id значения "Подписан". Метод установит значение.
 
//или, если нужен коллбек:
 
this.loadLookupDisplayValue("UsrContractState", "d7e40d7c-1fa4-49cb-a0d5-57a936f9a463", function() {
    //сюда провалимся после того, как система установит значение. Удобно, когда надо дальше работать со значением UsrContractState.
}, this)

 

Варфоломеев Данила,

Понятно, по сути не сильно это отличается от установки через set.

 this.set("UsrContractState", {value: "d7e40d7c-1fa4-49cb-a0d5-57a936f9a463", displayValue: "Подписан"});

Единственный бонус, что можно работать с колбеком.

Трефилов Павел Сергеевич пишет:
Единственный бонус, что можно работать с колбеком.

Не только. К UsrContractState через lookupListConfig/columns вы можете подгружать допполя. Так вот в случае вызова loadLookupDisplayValue, функция их подгрузит, через set - нет.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добавил несколько категорий активностей и заполнил им поле описание. Потом решил поменять им поле описание для большей информативности и я вижу, что оно отображается как будто поменялось, но в базе старые значения. Это как???!!!

У меня такой же вопрос

3 комментария

Алексей, здравствуйте!

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

Если у Вас значения полей в приложении и в БД все же отличаются, напишите о проблеме на support@terrasoft.ru для более детального анализа (необходим будет доступ к БД и к приложению).

Одеяненко Юлия, я сервер перезагрузил - оно так и осталось!

Алексей, в таком случае необходим более детальный анализ кейса. Напишите о проблеме на support@terrasoft.ru, необходим будет доступ к БД и к приложению

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день.

Есть задача. Нужно связать 2 справочника - значение в одном должно точно соотноситься со значением во втором. Вопрос не в фильтре, а в том, как сделать автоматическое заполнение второго справочника при выборе значения в первом. Можете подсказать как это реализовать (желательно бизнес процессом, т.к. в программировании не силен)?

Заранее благодарен.

У меня такой же вопрос

3 комментария

Добрый день, Станислав!

Опишите на примере ваш кейс. Насколько я понимаю это будет 2 разных справочника с разными значениями, так ? 

Игорь, в одном справочнике значение на одном языке во втором его эквивалент на другом.

Станислав, первое что приходит на ум это при создании справочника добавить поле, которое будет связующим. Например
1) Слово, код слова
Во втором справочнике так же
2) Слово, код слова

Где "код слова" буде одинаковым в обоих справочниках.

 

Далее с помощью бизнес процесса выполнить заполнение поля.

БП будет состоять примерно из следующих элементов: 

1) Сигнал на изменение объекта/колонки объекта

2) Чтение данных

3) Изменение данных

4) Завершение БП

Либо выполнить необходимое заполнение с помощью фильтрации

https://academy.terrasoft.ru/documents/technic-sdk/7-11/primenenie-filt…

https://academy.terrasoft.ru/documents/technic-sdk/7-11/primer-primenen…

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

У меня такой же вопрос

1 комментарий

Здравствуйте, Станислав!

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

https://academy.terrasoft.ru/documents/technic-bpms/7-10/element-processa-udalit-dannye

Примечание: базовые значения справочника удалять нельзя, так как это может привести к возникновению ошибок при работе со справочниками (нарушится базовая логика приложения).

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

Подскажите, пожалуйста, как переносить между приложениями

  1. настройки колонок реестра у разделов, справочников, деталей
  2. сами справочники. Объект переносится решением, но сам справочник нет

также возникла проблема с настройкой колонок справочника в рамках одного приложения:

  1. пользователь1 настроил колонки кастомного справочника
  2. нажал на кнопку "Сохранить для всех пользователей"
  3. Пользователь2 очистил кеш и перезашел в систему.
  4. Настройка пользователя1 у него не отобразилась.

почему настройки первого пользователя не отобразились у второго?

Используем BPM'Online 7.10.0.1742

У меня такой же вопрос

5 комментариев

"Zaitova Liubov" написал:настройки колонок реестра у разделов, справочников, деталей

переносом данных таблицы SysProfileData
"Zaitova Liubov" написал:сами справочники. Объект переносится решением, но сам справочник нет

переносом данных таблицы Lookup

"Zaitova Liubov" написал:почему настройки первого пользователя не отобразились у второго?

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

вот тут
для вас будет много полезной информации, в т.ч. смотрите там комментарии от пользователя Андросов Дмитрий

"Максим Шевченко" написал:
Zaitova Liubov пишет:

настройки колонок реестра у разделов, справочников, деталей

переносом данных таблицы SysProfileData

Zaitova Liubov пишет:

сами справочники. Объект переносится решением, но сам справочник нет

переносом данных таблицы Lookup

Zaitova Liubov пишет:

почему настройки первого пользователя не отобразились у второго?

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


Спасибо!

"Максим Шевченко" написал:
Zaitova Liubov пишет:

настройки колонок реестра у разделов, справочников, деталей

переносом данных таблицы SysProfileData

Zaitova Liubov пишет:

сами справочники. Объект переносится решением, но сам справочник нет

переносом данных таблицы Lookup

Zaitova Liubov пишет:

почему настройки первого пользователя не отобразились у второго?

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


Спасибо!

"Севостьянов Илья Сергеевич" написал:

вот тут
для вас будет много полезной информации, в т.ч. смотрите там комментарии от пользователя Андросов Дмитрий


спасибо!

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

Можно ли открыть доступ к справочникам другим группам пользователей, а не только системным администраторам?

У меня такой же вопрос

2 комментария

Здравствуйте!

Доступ к справочникам ограничивается системной операцией с кодом CanManageLookups. Для решения задачи необходимо предоставить доступ к этой операции для нужной роли.

Подробно с системными операциями можно ознакомиться по ссылке.

"Демьяник Алексей" написал:

Здравствуйте!

Доступ к справочникам ограничивается системной операцией с кодом CanManageLookups. Для решения задачи необходимо предоставить доступ к этой операции для нужной роли.

Подробно с системными операциями можно ознакомиться по ссылке.

Спасибо большое!

Войдите или зарегистрируйтесь, чтобы комментировать
Идея
Было бы неплохо добавить поле порядковый номер в справочники, по аналогии например со стадиями Продажи.В таком случае отображение значений справочника могло бы осуществлять в соответствии логикой отличной от алфавитной Пока для этих целей мне приходится добавлять цифры в начало названий значений справочника
Ревью
3 комментария

Добрый день!

Для добавления дополнительного поля в справочник Вы можете используя следующую инструкцию:

1. В разделе Управление конфигурацией создайте замещающий объект необходимого справочника (на примере справочника "Состояние изменения") http://prntscr.com/ds7si2
2. Установите родительский объект замещающего объекта http://prntscr.com/ds7ud7
3. Добавьте в замещенный объект новую колонку "Номер" http://prntscr.com/ds7vh8
4. Укажите свойства колонки http://prntscr.com/ds7wpx
5. Сохраните и опубликуйте изменения
В результате в необходимом Вам справочнике будет возможность вывести колонку "Номер" и заполнить колонку необходимыми значениями (пронумеровать значения согласно Вашей логике) http://prntscr.com/ds7xp8

Спасибо. Но все же это далеко от пользовательского функционала.
было бы удобно, если б это можно было настраивать через функционал управления справочниками

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

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Как можно открыть справочник с кнопки на отдельно взятой странице, не из меню ?
пытался открыть вот так:
var wnd = Services.GetNewItemByUSI('wnd_BranchesGridArea');
wnd.Prepare();
wnd.ShowModal();
так нельзя, окно открывается, но данных нет в нем и ошибки лезут.

У меня такой же вопрос

2 комментария

Вашу задачу можно решить несколькими способами:
1. Свой вариант

	var wndContactsGridArea =  Services.GetNewItemByUSI('wnd_ContactGridArea');
	wndContactsGridArea.Prepare();
	var Dataset = wndContactsGridArea.ComponentsByName('dlData').Dataset;
	RefreshDataset(Dataset);
	wndContactsGridArea.ShowModal();

Результат:

2. Стандартный вариант

	var Dataset = Services.GetNewItemByUSI('ds_Contact');
    var SelectDataWindow = GetSingleItemByCode('wnd_SelectData', 'Contacts');
	SetAttribute(SelectDataWindow, 'Dataset', Dataset);
	SetAttribute(SelectDataWindow, 'DisplayFieldNames', 'Name;AccountID;ContactTypeID');
	SetAttribute(SelectDataWindow, 'SearchFieldNames', 'Name;AccountID');
	SetAttribute(SelectDataWindow, 'KeyFieldName', 'ID');
	SetAttribute(SelectDataWindow, 'SearchFieldName', 'Name');
	SetAttribute(SelectDataWindow, 'NotifyObject', Self);
	SetAttribute(SelectDataWindow, 'IsReadOnly', true);
	SelectDataWindow.Prepare();
	SelectDataWindow.Show();

Результат:

3. Использовать функцию ShowSelectDataWindow из сервиса scr_WindowUtils
4. Свой вариант решения. Где создается свое окно выбора, со своей логикой работы.

спасибо!

Войдите или зарегистрируйтесь, чтобы комментировать