Здравствуйте! У меня не типовая/самописная конфигурация 1С. В Creatio  создан не типовой специальный объект TiServiceDesk_Base, который содержит наряды TiWorkOrder подрядчиков Account.  Мне необходимо по запросу из 1С считать массив нарядов за месяц по конкретному подрядчику. Связываюсь по протоколу ODATA3. Коннектится все нормально, но когда делаю запрос, то код ошибки получаю 301. Видимо сам запрос некорректен.

Прошу помощи в виде примеров запроса через ODATA3 к таблицам Creation. В переписке видел, что есть ert-обработка на 1С с примером идентификации и запроса к базе. Можете мне ее выслать?

Сам SQL запрос выглядит так:

 

SELECT * FROM "TiWorkOrder"

LEFT JOIN "Account" ON "TiWorkOrder."TiContractorid"="Account"."Id"

WHERE "Account"."Cod" = 123456 AND "TiWorkOrder"."TiFactEndDate" > '2024-01-01' AND "TiWorkOrder"."TiFactEndDate" < '2024-02-01'

Нравится

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

Добрый день.



Вы можете найти примеры запросов Odata в документации:



https://documenter.getpostman.com/view/10204500/SztHX5Qb?version=latest

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platfor…

Cherednichenko Nikita,

Не лучше ли выложить в community готовый пример 1С аутентификации и запросов GET, POST, который будет полезен всем последующим программистам 1С ? Команда Creatio заинтересована в дальнейшем развитиии проекта и последующих интерегациях с 1С?

Показать все комментарии

Доброго вечора, підкажіть, будь ласка, як можна реалізувати автоматичне натискання (лівою кнопкою миші) на "Мобільний телефон" у "Засобі зв'язку" - картка "Продажі".

У бізнес-процесі через "Завдання-сценарій"

Дуже буду вдячний за допомогу.

Нравится

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

Доброго дня,

Аби викликати дзвінок зі скрипт таски в ній необхідно відправити вебсокетне повідомлення "CallCustomer".

З клієнтського коду такий виклик виглядає так:

this.sandbox.publish("CallCustomer", {
					number: number,
					customerId: customerId,
					entitySchemaName: entitySchemaName
				});

Де number - номер телефону, customerId - Id контакту до якого дзвонимо, entitySchemaName - просто Contact.

Приклад як відправляти подібні повідомлення з скрипт таски ви можете знайти тут.

Показать все комментарии

Вітаю! Стикнулись з проблемою при переході на новий інтерфейс.

Робимо застосунок для відображення картки Дзвінки на Freedom UI, щоб поступово перейти на новий інтерфейс. При створені обираємо використовувати існуючий об’єкт (Call).

Колись давно в об’єкт Call додавали нові поля і довідники відповідно є заміщення в пакеті Custom. Коли ми на сторінку Phone call form page виводимо колонку яка була створена користувачем і потрапила в пакет Custom - отримуємо помилку «Помилка під час збереження залежностей пакетів». Чи правильно я розумію, що потрібно об’єкт Call з Custom перемістити в пакет нового застосунку який ми створили? Чи не впливає перенесення заміщуючого об'єктів на роботу системи? Чи можуть бути якісь проблеми після перенесення такого об’єкту? Як перенести об’єкт  Call, якщо застосунок створив вже новий заміщуючий об'єкт Call у своєму пакеті?

 

Заздалегідь вдячний за допомогу.

Нравится

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

Добрий день,

 

Помилка виникає через те, що в схемі FormPage та\або ListPage використовуються колонки, які було додано в об'єкт в пакеті Custom. Справа в тому, що схеми FormPage та ListPage створюються в автогенерованому пакеті (виду UsrApp...), який по ієрархії завжди розташовано вище від пакету Custom (якщо дивитись по діаграмі залежностей пакетів (іншими словами, пакет Custom залежить від пакету UsrApp, а не навпаки).

 

Переносити об'єкт Call з Custom в пакет UsrApp - як варіант, але він може бути неможливий, якщо в пакеті UsrApp вже є заміщення об'єкту Call. Більш вірогідний варіант з переносом схем(и) FormPage\ListPage в пакет Custom з пакету UsrApp. При такому сценарії менш вірогідний сценарій отримання помилок різного роду при роботі з розділом. Однак прошу про всяк протестувати цей підхід на якомусь тестовому середовищі перед використанням його на проді.

Показать все комментарии

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

Нравится

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

Добрый день!



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

После опубликовать объект.

Показать все комментарии

Здравствуйте! Подскажите, пожалуйста, как правильно работать с тестами которые взаимодействуют с бд. И если есть, то тесты взаимодействующие с базовыми веб-сервисами

Нравится

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

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

 

По поводу тестов с веб-сервисами - увы, примеров нет.

 

А вот по поводу тестов с БД: 

1) Развернуть на SQL сервере БД.

2) Настроить проект тестов например Base.UnitTests

 

а.В проекте открыть файл Integration.config

если такового у вас в проекте нет то необходимо добавить ссылку на Integration.config из проекта UnitTest. Сделать это можно посредством Visual Studio, либо добавив конфиг через файл проекта:

&lt;None Include="..\UnitTest\Integration.config"&gt;
 &lt;Link&gt;Integration.config&lt;/Link&gt;
 &lt;CopyToOutputDirectory&gt;Always&lt;/CopyToOutputDirectory&gt;
&lt;/None&gt;

b. прописать путь к базе данных в connectionString

&lt;connectionStrings&gt;
&lt;add name="mssqlUnitTest" connectionString="Data Source=server_name; Initial Catalog=db_name; Persist Security Info=True; MultipleActiveResultSets=True; Integrated Security=SSPI; Pooling = true; Max Pool Size = 100; Async = true" /&gt;
&lt;/connectionStrings&gt;

3) В файл App.config тестового проекта добавить (если ее нет) 

&lt;appSettings&gt;
    &lt;add key="ConfigurationRuntimeDirectory" value="_путь_к_папке_Terrasoft.WebApp" /&gt;
&lt;/appSettings&gt;

пример значения "_путь_к_папке_Terrasoft.WebApp" - "C:\Projects\Autocheckout\Creatio\TSBpm\Src\Lib\Terrasoft.WebApp.Loader\Terrasoft.WebApp" для примера, привожу файл App.config полностью

&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;configuration&gt;
    &lt;startup&gt;
        &lt;supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" /&gt;
    &lt;/startup&gt;
    &lt;runtime&gt;
        &lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&gt;
            &lt;dependentAssembly&gt;
                &lt;assemblyIdentity name="Common.Logging.Core" publicKeyToken="af08829b84f0328e" culture="neutral" /&gt;
                &lt;bindingRedirect oldVersion="0.0.0.0-3.4.1.0" newVersion="3.4.1.0" /&gt;
            &lt;/dependentAssembly&gt;
            &lt;dependentAssembly&gt;
                &lt;assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral" /&gt;
                &lt;bindingRedirect oldVersion="0.0.0.0-3.4.1.0" newVersion="3.4.1.0" /&gt;
            &lt;/dependentAssembly&gt;
            &lt;dependentAssembly&gt;
                &lt;assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" /&gt;
                &lt;bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" /&gt;
            &lt;/dependentAssembly&gt;
        &lt;/assemblyBinding&gt;
    &lt;/runtime&gt;
    &lt;appSettings&gt;
        &lt;add key="ConfigurationRuntimeDirectory" value="C:\Projects\Autocheckout\Creatio\TSBpm\Src\Lib\Terrasoft.WebApp.Loader\Terrasoft.WebApp" /&gt;
    &lt;/appSettings&gt;
&lt;/configuration&gt;

4) Создать класс в тестовом проекте с учетом Name Convention

5) Создаем класс с тестом (кейс показывает возможность работы) будем через наш Entity создавать запись с константным именем и email контакта и проверять по email что такой контакт создался в базе.

[TestFixture, Category("Integration")]
public class ContactDataTests : BaseConfigurationTestFixture
{
 
    private const string ContactEmail = "testemail@test.com";
    private const string ContactName = "David";
 
    protected override IEnumerable&lt;Type&gt; GetRequiringInitializationSchemas() {
        EntitySchemaManager.AddCustomizedEntitySchema("Contact",
            new Dictionary&lt;string, string&gt; {
                { "Name", "MediumText"},
                { "Email", "MediumText"}
            });
        return new List&lt;Type&gt;();
    }
    [Test]
    public void SaveContactEmail_EmailSaved_EmailCorrect() {
        var contactSchema = UserConnection.EntitySchemaManager.GetInstanceByName("Contact");
        var contact = contactSchema.CreateEntity(UserConnection);
        contact.SetColumnValue(contact.Schema.GetPrimaryColumnName(), Guid.NewGuid());
        contact.SetColumnValue("Email", ContactEmail);
        contact.SetColumnValue("Name", ContactName);
        contact.SetDefColumnValues();
        contact.Save(false);
        var select = new Select(UserConnection)
                            .Column("Name")
                        .From("Contact")
                        .Where("Email").IsEqual(Column.Const(ContactEmail)) as Select;
        using (DBExecutor dbExec = UserConnection.EnsureDBConnection()) {
            using (IDataReader reader = dbExec.ExecuteReader(select.GetSqlText(), select.Parameters)) {
                if (reader.Read()) {
                    Assert.AreEqual(ContactName, reader.GetColumnValue&lt;string&gt;("Name"));
                }
            }
        }
    }
}

Обязательно указать категорию Integration для класса тестов [TestFixture, Category("Integration")]

6) Запускаем тест стандартными средствами студии или Resharper. Результат запуска:

Oscar Dylan,

BaseConfigurationTestFixture с какого пространства имен? 

Подскажите подробнее про Integration.config

Какой name давать connectionStrings если работаем с Postgre?

Показать все комментарии

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

 

Спасибо!

Нравится

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

Добрый день,

 

Если пройти по базовой реализации, то цепочка такая:

 

1) CtiPanelModelUtilities

 

onChangeCurrentCallNumber

 

2) CtiPanelIdentificationUtilities

 

identifySubscriber -> identifySubscriberCallback -> fillSubscribersCollection

 

3) CtiPanelModelUtilities

 

onIdentifiedSubscribersChanged -> onIdentifiedSubscriberKeyChanged ->onSubscriberIdentified

 

4) CommunicationHistoryItem

 

onConnectedRecordAttributeChanged -> getConnectedRecordData -> updateCallWithConnectedRecordData -> updateCallCallback -> updatePanelByConnectedRecord

 

Передача контакта в панель (как на скриншоте)

происходит в методе onIdentifiedSubscribersChanged в строке

 

this.set(identifiedSubscriberKeyPropertyName, subscriberKeys[0]);

 

Если Вам нужно сделать это в кастомной логике, то нужно идти по аналогии с этой цепочкой.

Показать все комментарии

Добрый день!

У меня есть следующая задача, нужно создать страницы для раздела и записи в FreedomUI для уже существующего раздела в ClassicUI.

Подскажите пожалуйста, в правильном ли направлении я двигаюсь, есть статья на академии (https://academy.creatio.com/docs/8.x/no-code-customization/customizatio…). Мне нужно создать замещающий объект для уже существующего и уже для него создавать страницу раздела? То есть следовать алгоритму в прикрепленном скриншоте (без первых двух шагов)? 

Прикрепленные файлы

Нравится

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

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



Если у вас уже есть существующий раздел в ClassicUI, то вам не нужно создавать замещающий объект. 



Для решения данной бизнес-задачи нужно выполнить следующие шаги:

  1. Открыть центр приложений (Application Hub).
  2. Создать страницу и добавьте необходимый источник данных для нужного объекта.



Orkhan,

Спасибо вам за ответ! Хотел бы также уточнить, то есть мне нужно создать две страницы (для раздела и записи) данным способом и уже в объекте в разделе страницы назначить ему созданные FreedomUI страницы?

Не могу назначить объекту созданную FreedomUI страницу:

Показать все комментарии

Добрый день! Появилась ли возможность создавать групповые задачи для выбранных по условиям фильтра записей? Например, отобраны фильтром лиды, требуется создать однотипную задачу одному ответственному. Как это можно сделать? Спасибо!

Нравится

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

Добрый день!



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

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

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

Михайло Зеленюк пишет:

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

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

 

Показать все комментарии

Как с помощью конструктора мастера разделов в объекте ContactProfile заменить предустановленное поле? В мастере разделов объект ContactProfile не доступен для моделирования.

Изображение удалено.

Нравится

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

Добрый день,



К сожалению базовыми методами редактировать карточку ContactProfile/AccountProfile возможности нету, поскольку данные схемы реализованы кодом.



Для того чтобы добавить или удалить поля, необходимо заместить схему "ContactProfileSchema" и в блоке diff прописать нужные операторы для редактирования поля.



Похожая проблема обсуждалась в других постах на Community:



https://community.creatio.com/questions/customize-customer-box-under-ba…



https://community.creatio.com/questions/add-multi-line-text-contactprof…



Также обращаем внимание, что в новом интерфейсе FreedomUI, возможостей по кастомизации полей значительно больше, ознакомиться с функционалом работы нового дизайнера можно на нашей Академии:

https://academy.creatio.com/docs/8.x/no-code-customization/category/ui-…



С Уважением, 

Павел!

Показать все комментарии

After login

Изображение удалено.

Нравится

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

F12 -> Application. Правой кнопкой мыши по Кукам (того сайта который не открывается) и выбрать Очистить.

F12 -> Application. Правой кнопкой мыши по Кукам (того сайта который не открывается) и выбрать Очистить.

Показать все комментарии