Добрый день. Может кто сталкивался с таким вопросом о применении ES6 в проекте? Думаю, что всем известно о ситуации с поддержкой браузеров новых форматов ES. То, что IE тяжело работает с ES6 и т.д., в связи с чем возникает вопрос о использовании такой штуки, как Babel, который так сказать конвертнет в поддерживаемый синтаксис.
Пытался ли кто прикрутить Babel в проекте?
Или же может есть идеи какие-то, как сделать это?

Нравится

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

Добрый день!
E11 не поддерживает стандарт ES6.

Для того чтобы код написанный с применением фич ES6 работал, выполняются следующие приемы: добавление полифилов и транспайлинг.
Полифилы имитируют классы и дополнительные методы к существующим классам (например добавляют класс Promise).
Транспайлинг - процесс преобразования кода в формате ES6 в формат ES5 (например дает поддержку таких конструкций как лямбды, импорты, экспорты и т.д.)
В ядровой части системы (которая потом собирается в all-combined) используется библиотека полифилов corejs и транспайлинг с помощью инструмента babel. Соответственно в коде для ядра могут использоваться фичи ES6. 
В конфигурации же ситуация другая, потому что транспайлинг кода не применяется, но так как библиотека corejs уже подключена там можно использовать некоторые фичи, например такие классы как Promise (которые не видоизменяют синтаксис языка и соответственно не требуют транспайлинга).

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

В IDS Borjomi открыта вакансия Разработчика Terrasoft

Локация: Москва или удаленный формат работы
 

Основные задачи:

✅ Разработка на платформе Creatio (Terrasoft)

✅ Оценка сроков выполнения

✅ Оптимизация и настройка текущего функционала

✅ Диагностика и устранение ошибок на уровне кода

✅ Консультации и обучение пользователей

✅ Кастомизация встроенных решений Sales, Marketing

 

Мы ожидаем:

✅Опыт работы в роли разработчика на платформе Creatio (Terrasoft) от 1 года

✅Знание платформы Creatio (Terrasoft)

✅Знание JavaScript

✅Знание C#

✅Желательно знание SQL, T-SQL (или опыт работы с PostgreSQL или Oracle) на уровне написания сложных запросов, представлений и процедур

✅Умение работать с чужим кодом

✅Опыт работы с Git желателен

✅Настройка интеграции c внешними сервисами

 

Контактное лицо

Анна
Mob.: 8 (906) 098 3145

E-mail: a.mosinyan@ids-borjomi.com 

 

Нравится

Поделиться

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

Проект: Расширение функциональности сервиса обратной связи на платформе Terrasoft Service Creatio

https://clck.ru/XL4tn
 

Роль: Разработчик Terrasoft Service Creatio

Компания: Газпром нефть

Вознаграждение: 300 000 

Формат работы: гибридный

Длительность проекта: 2 месяца

 

Проект срочный - сбор откликов до 10.09!

 

Компания «Газпром нефть» разрабатывает и использует большое число решений, направленных на улучшение условий труда сотрудников. Одно из таких решений —система для организации внутренних коммуникаций, а также сбора и анализа обратной связи от сотрудников компании, сокращенно называемая СРОС. Она реализуется с помощью решения Terrasoft Creatio Service Enterprise on-site и по сути представляет собой омниканальную систему для обработки обращений, хранения и анализа результатов исследований и опросов сотрудников.

 

Мы ожидаем:

Опыт разработки крупных, масштабируемых решений

☝️ Знание технологий:

  • Advanced JavaScript
  • Advanced C#
  • NET Core
  • Advanced MS SQL
  • PostgreSQL
  • Git
  • Jenkins
  • Terrasoft Creation BPM

Анализ планов выполнения запросов и их оптимизация MVVM

 

Основные задачи:

Создание и развитие программных продуктов линейки bpm’online

Анализ существующих решений задачи, проработка и детальное описание решения задачи, участие в утверждении архитектуры

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

 

Проект размещен на платформе «Профессионалы 4.0» - зарегистрируйтесь и заполните профиль, чтобы откликнуться на проект.

Прямая ссылка для отклика на роль: https://clck.ru/XL4tn

 

Контактное лицо:

Катерина Неделина

Nedelina.es@gazprom-neft.ru  

Нравится

Поделиться

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

Газпром Нефть приглашает системных аналитиков BPM Terrasoft

Локация: Санкт-Петербург

Вознаграждение: 300 000 ₽ за проект

Длительность проекта: 2 месяца

Формат работы: на территории заказчика

Занятость: полная - 100%

 

Проекты размещены на платформе "Профессионалы 4.0"

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

 

Проект: Расширение функциональности сервиса обратной связи на платформе Terrasoft Service Creatio

Основные задачи:

Провести интервью с бизнес-аналитиком, чтобы уточнить функционально-технические требования и требования к интеграции СРОС с другими системами

Разработать техническое описание информационной системы

Сформировать и согласовать с лидером проекта задачи на доработку функциональности силами штатного разработчика компании

Самостоятельно создавать и отлаживать бизнес-процессы в системе для реализации необходимой функциональности, если они не требуют участия разработчика (no-code и low-code)

 

Детали проекта и отклики по ссылке: https://clck.ru/Wjrbe

 

Проект: Тестирование интеграции сервиса обратной связи на платформе Terrasoft Service Creatio

Основные задачи:

Оценить трудозатраты на доработку функциональности и интеграцию с другими системами (до 3 систем)

Разработать частное техническое задание (ЧТЗ) на интеграцию с другими системами

Разработать тест-кейсы по новой функциональности

Протестировать новую функциональность в тестовом контуре разработки.

 

Детали проекта и отклики по ссылке: https://clck.ru/Wjrxo

 

Мы ожидаем:

Опыт проведения интервью и анализа бизнес-требований 

Опыт описания пользовательских сценариев для BPM-систем

☝️ Опыт разработки функциональных требований и пользовательских сценариев к программным системам, а также ТЗ на разработку ПО

☝️ Опыт разработки тест-кейсов

☝️ Отличное знание платформы Terrasoft Service Creatio и опыт реализации решений на этой платформе

 

Контактное лицо

Катерина Неделина

E-mail: nedelina.es@gazprom-neft.ru 

Tg: @KateNedelina
Fb: www.facebook.com/catherine.nedelina/

Нравится

Поделиться

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

Коллеги, добрый день. Столкнулись с проблемой переноса данных из системы Terrasoft 3x в Creatio, необходимо перенести данные поля описание из системы Terrasoft 3x, которое имеет тип image, в ленту или примечание в Creatio. Может кто-то сталкивался с подобной проблемой переноса и смог её решить?

Нравится

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

Добрый день

На сколько я помню там html. Тут нужно реализовать утилиту, которая будет читать из 3.х и сохранять в Creatio. Для удобства переноса между базами можно реализовать Clr assembly для SQL сервера

 

Проблема в том, что в Creatio данные хранятся как текст в html, а в Terrasoft 3x, при конвертировании данных из blob выходит непонятный формат. Хотелось бы узнать, что это за формат хранения текста.

Евгений, прямой конвертации не будет. 

Описание типа Image:

https://docs.microsoft.com/ru-ru/sql/t-sql/data-types/ntext-text-and-image-transact-sql?view=sql-server-ver15

Сравнение типов Image и varbinary(max):

https://sqltutorialtips.blogspot.com/2016/11/image-vs-varbinarymax.html

Если грубо, то Image это уже устаревший формат и скоро он будут исключен. Это просто массив байт. И даже сейчас можно без приведения типов сделать insert select из типа Image в varbinary(max).

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

 

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

Доброго времени суток, коллеги.

Есть ТеррасофтCRM 3.3.2.311. 

Пытаюсь добавить на форму компонент PivotTableControl. В результате получаю ошибку: "Класс не зарегистрирован". Переустановка не помогла, ошибка проявляется и на Windows 7 и на 10. 

Кому-нибудь приходилось работать со сводными таблицами в TerrasoftCRM?

Нравится

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

Добрый день!
Очень похоже на проблему, которую описывали в этом посте:
https://community.terrasoft.ru/articles/podderzka-ms-office-x64-v-terra…

Рекомендую ознакомиться с ним. Вероятно необходимо использовать 32 битный Office или же обновить приложение до  3.4.1.

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

Заружал пакет, который при загрузке выдал сообщение о том, что не может загрузиться, в логах сказали обращаться за более подробной инфой в конфу, зашел в конфу нажал скомпилировать и выдало ряд ошибок, который не совсем понимаю с чем связаны(скриншот)

Нравится

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

Добрый день, Дмитрий!

 

Для решения возникших ошибок вам стоит обратится в техническую поддержу. 

 

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

Коллеги, добрый день!

 

Вопрос скорее к Террасофт. Скажите, а почему убрали возможность выгрузки печатной формы в pdf? Чем продиктовано такое решение? Было очень удобно формировать счета, например.

Нравится

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

Добрый вечер.

 

Мне служба поддержки ответила следующее: 

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

Добрый вечер.

 

Мне служба поддержки ответила следующее: 

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

 

 

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

Мда, понять бы какие именно будущие версии подразумеваются. со времен 7.14 достаточно много времени прошло( А пользователям-то вынь, да положь)

 

Сидоров Александр Валерьевич пишет:
со времен 7.14 достаточно много времени прошло

С тех пор добавился механизм отчётов FastReport, они как раз выгружаются в pdf.

Зверев Александр,

fastreport же всегда был. Ну и использовать его для формирования счета - странная идея на мой взгляд. Был простой и понятный инструмент. Зачем тратить силы на то, чтобы его выпилить?)

Сидоров Александр Валерьевич пишет:
fastreport же всегда был.

Только в 3.Х. 

Зверев Александр,

 

Я думаю, что Александр Сидоров имеет ввиду, что механизм настройки отчета в Word в разы проще, чем в FastReport.

 

Опять таки очень мало информации с различными примерами о том, как настраивать отчет в FastReport.

Сидоров Александр Валерьевич,

Это все, чтоб жизнь малиной не казалась)))

Алла, вероятно, всё дело в ограничениях на сторонние компоненты, вроде того же Aspose.

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

да, с fastreport она точно не шоколад)

Если стандартная выгрузка в Word выводит в нужном виде и не хватает только преобразования в pdf, то можно локально на компьютере преобразовывать, есть виртуальные pdf-принтеры.

 

Также в маркете есть несколько других движков печатных форм, в том числе есть и PDF Generator connector, интегрирующийся со сторонней платформой.

Зверев Александр,

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

Сидоров Александр Валерьевич,

Поделитесь, как решали такую задачу, когда нужно сгенерировать некую печатную форму по шаблону и приложить к письму для отправки?

Зверев Александр пишет:
Если стандартная выгрузка в Word выводит в нужном виде и не хватает только преобразования в pdf, то можно локально на компьютере преобразовывать

Часто стоит именно такая задача, чтобы сразу выгружать в pdf, особенно касается документов с подписями и печатями (чтобы не вносились изменения пользователем непосредственно в документе).

 

Ну, и странно то, что был бесплатный базовый функционал, который это делал, а сейчас ты предлагаешь платную утилиту(

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

а я, честно говоря, и не помню. Разработчики как-то делали, я не вникал в детали. Но это было давно, еще в 7.12 или около того

Алла Савельева пишет:
бесплатный базовый функционал

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

Aspose - американская компания, Террасофт - российская, чтобы быть ближе к полностью российской перевели библиотеки на российские. FastReport - российская

Всё оказалось проще, но за отдельную плату (от 99$).

Информация от devlabs:

Мы выпустили маркетплейс пакет, который позволит клиентам конвертировать ПФ в PDF:

Aspose.PDF connector for Creatio

Клиентам с версии 7.16.1 и новым справочником ПФ, кому нужна печать файлов в PDF, можно смело рекомендовать установить пакет.

Сам пакет бесплатный, но использование сервиса конвертации стоит денег. Цены перечислены тут: https://purchase.aspose.cloud/pricing + есть бесплатный триал.

Руслан Хасанов, Украинская компания, просто офис продаж есть в России

Александр Тыра,

Может быть. Я смотрел здесь - 

https://reestr.minsvyaz.ru/request/165716/?sphrase_id=446874
российская коммерческая организация, имеющая в цепочке владения иностранных лиц

Проблема всех таких облачных третьих решений - это отсылка своих данных неизвестно куда. 

Не все клиенты могут себе это позволить, потому хочется иметь инструмент для генерации pdf 100% on-site

И сюда же Preview приложенных файлов (pdf хотя бы) 100% on-site

Владимир, в настоящее время стандартный в системе механизм отчётов FastReport генерирует их в пределах сайта. Вы можете включить в настройках тестовый отчёт «Знаменательные события контакта (пример)» и сгенерировать pdf-файл для любого контакта.

По высказанным в теме предложениям уже есть идеи: о необходимости функции конвертации word в pdf в продукте, о предпросмотре для файлов тех форматов, для которых его ещё нет (pdf, doc, xls, tiff, ...) и заодно о предпросмотре печатных форм в FastReport.

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

Доброго времени суток! Подскажите, пожалуйста, как добавить CheckBox в средства связи. Для средства связи добавил в объекте логическое значение, например с названием "UsrIsMain".

Нравится

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

Мягко говоря не тривиальная задача, посмотрите как в BaseCommunication формируются конфиги для элементов управления для существующих в короюке типов комуникации и по аналогии для своего (добавленного) логического типа создайте конфиг для контрола. 

Мягко говоря не тривиальная задача, посмотрите как в BaseCommunication формируются конфиги для элементов управления для существующих в короюке типов комуникации и по аналогии для своего (добавленного) логического типа создайте конфиг для контрола. 

Григорий Чех,

В принципе мне понятно, как конфиг строится. Добавлял TextEdit поле, Lookup поле. А вот CheckBox не получается, выбрасывает ошибку следующую:
 

message: Cannot read property 'changeEvent' of undefined 
 date: Thu Jun 13 2019 11:01:45 GMT+0300 (Москва, стандартное время)
moduleId: CardModuleV2_########GUID###########_ContactPageV2_detail_ContactCommunication
moduleName: DetailModuleV2

Строил сам CheckBox вот так:
{
                        className: "Terrasoft.CheckBoxEdit",
                        id: "CheckBoxEditId",
                        classes: {
                            wrapClass: ["communication-detail-edit-user-class", "communication-additional-edit-label-wrap"]
                        },
                        value: {
                            bindTo: "UsrIsMain"
                        },
                        change: {
                            bindTo: "changeIsMainFlag"
                        }
  };

Сама функция changeIsMainFlag объявлена в ViewConfig'е.

 

Григорий Чех,

Вообще видел уже два поста в коммьюнити, которые тоже не понимали, как CheckBox вставить в Средства связи. Ответа там так и не было.

В детали средств связи контакта в пакете MarketingCampaign есть такое поле «Не актуальный» (NonActual) у каждого средства связи. Посмотреть на реализацию можно в схеме ContactCommunicationDetail.

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

Приветствую. Проблема с созданием Join'а.

Имеется вот такой SelectQuery.

SELECT
    [tbl_OfferingInMovement].[ID] AS [ID],
    [tbl_OfferingInMovement].[OfferingMovementID] AS [OfferingMovementID],
    [tbl_OfferingInMovement].[OfferingID] AS [OfferingID],
    [Offering].[Name] AS [OfferingName],
    [Offering].[Code] AS [OfferingCode],
    [Unit].[Name] AS [UnitName],
    [OfferingMovement].[StoreID] AS [StoreID],
    [tbl_Store].[Store] AS [Store],
    [tbl_OfferingInMovement].[Quantity] AS [Quantity],
    [tbl_OfferingInMovement].[BasicPrice] AS [BasicPrice],
    [tbl_OfferingInMovement].[BasicAmount] AS [BasicAmount],
    [tbl_OfferingInMovement].[SignedQuantity] AS [SignedQuantity],
    [tbl_OfferingInMovement].[SignedAmount] AS [SignedAmount],
    [tbl_OfferingInMovement].[Description] AS [Description],
    [OfferingMovementType].[ID] AS [OfferingMovementTypeID],
    [OfferingMovementType].[Name] AS [OfferingMovementType],
    [tbl_OfferingInMovement].[PlanQuantity] AS [PlanQuantity],
    [tbl_OfferingInMovement].[PlanAmount] AS [PlanAmount],
    [OfferingMovement].[StatusID] AS [OfferingMovementStatusID],
    [tbl_OfferingInMovement].[Price] AS [Price],
    [tbl_OfferingInMovement].[Amount] AS [Amount],
    [OfferingMovement].[CurrencyID] AS [CurrencyID],
    [tbl_Currency].[Currency] AS [Currency],
    [OfferingMovement].[CurrencyRate] AS [Rate],
    [tbl_OfferingInMovement].[ConsignmentID] AS [ConsignmentID],
    [Consignment].[Number] AS [ConsignmentNumber],
    [Offering].[OfferingChargeMethodID] AS [OfferingChargeMethodID],
    [OfferingMovement].[Number] AS [OfferingMovementNumber],
    [tbl_OfferingInMovement].[TZR] AS [TZR],
    [tbl_OfferingInMovement].[PrimeCost] AS [PrimeCost],
    [tbl_OfferingInMovement].[PrimeAmount] AS [PrimeAmount],
    [Offering].[Volume] AS [Volume],
    [Offering].[Weight] AS [Weight],
    [Offering].[BasicPrice] AS [OfferingBasicPrice],
    [tbl_OfferingInMovement].[TZRAmount] AS [TZRAmount],
    [tbl_OfferingInMovement].[DocumentID] AS [DocumentID],
    [tbl_OfferingInMovement].[ContractID] AS [ContractID],
    [tbl_OfferingInMovement].[InvoiceID] AS [InvoiceID],
    [tbl_Document].[Title] AS [DocumentNumber],
    [tbl_Contract].[Title] AS [ContractNumber],
    [tbl_Invoice].[InvoiceNumber] AS [InvoiceNumber],
    [tbl_OfferingInMovement].[PurchaseID] AS [PurchaseID],
    [tbl_Purchases].[Number] AS [PurchaseNumber],
    [OfferingMovement].[SupplierID] AS [SupplierID],
    [tbl_OfferingInMovement].[Date] AS [Date],
    [OfferingMovement].[ModifiedOn] AS [ModifiedOn],
    [OfferingMovement].[DateOfShipment] AS [DateOfShipment],
    [AccountBillingInfoItelon].[Name] AS [ItelonName],
    [AccountBillingPayerInfo].[Name] AS [PayerName]
FROM
    [dbo].[tbl_OfferingInMovement] AS [tbl_OfferingInMovement]
LEFT OUTER JOIN
    [dbo].[vw_Offering] AS [Offering] ON [Offering].[ID] = [tbl_OfferingInMovement].[OfferingID]
LEFT OUTER JOIN
    [dbo].[tbl_Unit] AS [Unit] ON [Unit].[ID] = [Offering].[DefaultUnitID]
LEFT OUTER JOIN
    [dbo].[vw_OfferingMovement] AS [OfferingMovement] ON [OfferingMovement].[ID] = [tbl_OfferingInMovement].[OfferingMovementID]
LEFT OUTER JOIN
    [dbo].[tbl_OfferingMovementType] AS [OfferingMovementType] ON [OfferingMovementType].[ID] = [OfferingMovement].[TypeID]
LEFT OUTER JOIN
    [dbo].[tbl_Store] AS [tbl_Store] ON [tbl_Store].[ID] = [OfferingMovement].[StoreID]
LEFT OUTER JOIN
    [dbo].[vw_OfferingMovement] AS [Consignment] ON [Consignment].[ID] = [tbl_OfferingInMovement].[ConsignmentID]
LEFT OUTER JOIN
    [dbo].[tbl_Currency] AS [tbl_Currency] ON [tbl_Currency].[ID] = [OfferingMovement].[CurrencyID]
LEFT OUTER JOIN
    [dbo].[vw_Document] AS [tbl_Document] ON [tbl_Document].[ID] = [tbl_OfferingInMovement].[DocumentID]
LEFT OUTER JOIN
    [dbo].[vw_Contract] AS [tbl_Contract] ON [tbl_Contract].[ID] = [tbl_OfferingInMovement].[ContractID]
LEFT OUTER JOIN
    [dbo].[vw_Invoice] AS [tbl_Invoice] ON [tbl_Invoice].[ID] = [tbl_OfferingInMovement].[InvoiceID]
LEFT OUTER JOIN
    [dbo].[vw_Purchases] AS [tbl_Purchases] ON [tbl_Purchases].[ID] = [tbl_OfferingInMovement].[PurchaseID]
LEFT OUTER JOIN
    [dbo].[tbl_AccountBillingInfo] AS [AccountBillingInfoItelon] ON [AccountBillingInfoItelon].[ID] = [OfferingMovement].[InfoItelonID]
LEFT OUTER JOIN
    [dbo].[tbl_AccountBillingInfo] AS [tbl_AccountBillingInfoPayer] ON [tbl_AccountBillingInfoPayer].[ID] = [tbl_OfferingInMovement].[PayerID]

Предпоследний Join(AS [AccountBillingInfoItelon]) создан мною. Работает отлично.

Вот его код. Заранее извиняюсь за синтаксис VBA.

    Set oTable = TSConnector.Services.GetNewItemByUSI(AccountBillingInfoTableName)
    Set oJoin = oSelectQuery.Items(0).Joins.Items(4).CreateCopy
    oJoin.UID = TSConnector.GenGUID
    oJoin.RightField = oJoin.RightField.ParentFields.Items(40)
    oJoin.LeftField = oTable.Fields.ItemsByName("ID")
    oJoin.LeftTableAlias = "AccountBillingInfoItelon"
    oJoin.JoinType = jtLeftOuter
    oSelectQuery.Items(0).Joins.AddItem oJoin
    oSelectQuery.Items(0).Joins.Items(oSelectQuery.Items(0).Joins.Count - 1).CanDisable = False

Последний создаётся не правильно.

    Set oJoin = oInvoiceSelectQuery.Items(0).Joins.Items(0).CreateCopy
    oJoin.UID = TSConnector.GenGUID
    oJoin.LeftField = oTable.Fields.ItemsByName("ID")
    oJoin.LeftTableAlias = "tbl_AccountBillingPayerInfo"
    oJoin.RightField = TSConnector.Services.GetNewItemByUSI(InvoiceTableName).Fields.Items(31)
    oJoin.JoinType = jtLeftOuter
    oSelectQuery.Items(0).Joins.AddItem oJoin
    oSelectQuery.Items(0).Joins.Items(oSelectQuery.Items(0).Joins.Count - 1).CanDisable = False

Проблема с RightField. Поле верное, то что нужно [PayerID]. Но мне надо чтобы оно доставала его именно из [tbl_Invoice]. А она же в SQL подставляет [tbl_OfferingInMoment]. Где можно изменить таблицу в Join'е или ещё где-то в SelectQuery. Целую неделю мучаюсь не могу понять.

Нравится

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

В коробке в скрипте wnd_IWTGraphWizardScript есть функция:

function GetPathByColumn(Column) {
	var Result = Column.Field.ParentFields.ParentTable.UID + snpFields + Column.Field.UID;
	var ParentJoin = Column.ParentJoin;
	while (ParentJoin) {
		Result = ParentJoin.RightField.ParentFields.ParentTable.UID +
			snpFields +
			ParentJoin.RightField.UID +
			jtLeft +
			ParentJoin.LeftField.ParentFields.ParentTable.UID +
			snpFields +
			ParentJoin.LeftField.UID +
			snpSegment +
			Result;
		ParentJoin = ParentJoin.ParentJoin;
	}
	return Result;
}  

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

 

О, спасибо Александр! Не думал что достучусь на этот форум. laugh Завтра с утра буду пробовать. Спасибо ещё раз. Отпишу что да как. 

Не получилось записывать название таблицы в Join. Что за связь используется так и не получилось выяснить. Я пользуюсь редактором VBA непосредственно в EXCEL. За Visual Studio еще не садился.

Воспользовался oSubSelectColumn. Отличная штука. Всё что хотел, получилось.

    Set oSubSelectColumn = oSelectQuery.Items(0).Columns.CreateSubSelectColumn
    Set oTable = TSConnector.Services.GetNewItemByUSI(AccountBillingInfoTableName)
 
    Dim oSQLFilter As CustomSQLFilter
    Dim oSelect As TSObjectLibrary.Select
    Set oSelect = oSelectQuery.CreateItem
    oSelect.FromTable = oTable
    oSelect.FromTableAlias = "AccountBillingInfo"
    Set oGeneralColumn = oSelectQuery.Columns.CreateGeneralColumn
    oGeneralColumn.Field = oTable.Fields.ItemsByName("Name")
    oGeneralColumn.ColumnAlias = "Name"
    oSelect.Columns.Add oGeneralColumn
    Set oSQLFilter = oSelect.Filters.CreateCustomSQLFilter
    oSQLFilter.SQLText = "[AccountBillingInfo].[ID] = [OfferingMovement].[InfoItelonID]"
    oSelect.Filters.Add oSQLFilter
    oSubSelectColumn.ColumnSelectQuery.Add oSelect
    oSubSelectColumn.ColumnAlias = "AccountBillingInfoItelon"
    oSelectQuery.Items(0).Columns.Add oSubSelectColumn
    oSelectQuery.Items(0).Columns.Items(oSelectQuery.Items(0).Columns.Count - 1).IsEnabled = True

 

В редакторе VBA тоже есть отладка. Не знаю, показывает ли структуру объектов, но вроде бы должен.

Можно и через SubSelect. Когда-то в базе на Orcacle упирались в лимит Join-ов и приходилось в дизайнере переделывать в sq часть колонок на колонки-подзапросы.

Зверев Александр, есть, да, структура объектов.

Если видно структуру, можно посмотреть, как устроен нормальный join. Ну, или использовать подзапросы.

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

Решил вернуться к Join'ам. smiley

Решение к проблеме в самом низу этого сообщения.

Пошёл по вашему совету, Александр. Решил сравнивать структуры созданного мною нового Join'а и уже готового Join'а из другого готового SelectQuery.

Задача была поставлена аналогична упомянутой выше: прикрепить таблицу(создать join) к запросу(SelectQuery). При этом из прикрепленной таблицы(join'а) должны выбираться те строки, значения ключевых полей которых равны значениям полей не из исходной таблицы, на основе которой сформирован запрос(SelectQuery), а из таблицы, прикрепленной ранее (уже прикрепленного join'а). Всё тоже самое, что и в предыдущей задаче. Выражаясь кратким языком, присоединить join к уже имеющемся join'у в SelectQuery.

На следующей картинке представлен SQL текст уже (упомянутого в первом сообщения топика) готового запроса "sq_OfferingInMovement", сформированный на основе таблицы "tbl_OfferingInMovement" и нескольких прикрепленных таблиц к нему. В этом тексте можно увидеть, что к запросу прикреплена таблица(join), к заранее прикрепленному (join'у). В этом запросе всё правильно.

Синим выделены строки, означающие что к запросу прикреплено представление(если не понятно что такое представление, можно прочесть как "таблица") "[vw_Offering], у которого значение ключевого поля "[ID]" равняется значению поля исходной таблицы  "[tbl_OfferingInMovement].[OfferingID]". Этому присоединенному представлению присвоен псевдоним(alias) "[Offering]".

Красным выделены строки, означающие что к запросу прикреплена таблица "[tbl_Unit]", у которого значение ключевого поля "[ID]" равняется значению поля не исходной таблицы, а значению поля прикрепленного (синим выделено) представления [Offering].[DefaultUnitID].

В этом примере всё отлично.

Проблема заключалась в том, что при создании нового собственного прикрепления (join'а), которое должно было крепиться к уже имеющемуся прикреплению (join'у), в SQL тексте отображалось что новое прикрепление (join) крепиться не к уже имеющемуся прикреплению, а к исходной таблице. То есть, если взять пример выше, и прикрепление, которое выделено красным, было бы создано мною, то там вместо [Offering].[DefaultUnitID] было бы [tbl_OfferingInMovement][DefaultUnitID], что было бы неверным и, естественно, выдавало бы ошибку. Так как в [tbl_OfferingInMovement] нет поля [DefaultUnitID] и вообще это не то что мне нужно.

В ходе сравнения join'ов выяснилось, что у объекта Join, оказывается, есть параметр ParentJoin, которому необходимо присваивать тот Join, к которому будет необходимо прикреплять новый join.

Вот код правильно созданного Join'а и необходимого нам столбца из него.

Создание нового прикрепления (join'а) к исходной таблице запроса.

 
//Таблица, строки которой будем крепить. 
   Set objTSTable = objTSConnector.GetService(strAssemblingInTaskTableName)
 
   Set objTSAssemblingInTaskJoin = objTSSelect.Joins.CreateItem
   objTSAssemblingInTaskJoin.ParentJoins = objTSSelect.Joins
   objTSAssemblingInTaskJoin.LeftField = objTSTable.Fields.ItemsByName("ID")
   objTSAssemblingInTaskJoin.RightField = 
   objTSSelect.FromTable.Fields.ItemsByName("AssemblingInTaskID")
   objTSSelect.Joins.Add objTSAssemblingInTaskJoin

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

    Set objTSColumn = objTSSelect.Columns.CreateGeneralColumn
    objTSColumn.ParentColumns = objTSSelect.Columns
    objTSColumn.ParentJoin = objTSAssemblingInTaskJoin
    objTSColumn.ParentParametriticQuery = objTSSelectQuery
    objTSColumn.Field = objTSTable.Fields.ItemsByName("TaskID")
    objTSColumn.DependsOn.CommaText = objTSTable.SQLName
    objTSSelect.Columns.Add objTSColumn
    objTSColumn.IsEnabled = True

Теперь добавляем ещё одно прикрепление (join) к уже созданному выше прикреплению.

    'Таблица нового прикрепления.
    Set objTSTable = objTSConnector.GetService(strTaskTableName)
 
    Set objTSTaskJoin = objTSSelect.Joins.CreateItem
 
    'Вот здесь обязательно указать то прикрепление, к которому будем крепить это.
    objTSTaskJoin.ParentJoin = objTSAssemblingInTaskJoin
 
    objTSTaskJoin.ParentJoins = objTSSelect.Joins
    objTSTaskJoin.LeftField = objTSTable.Fields.ItemsByName("ID")
    objTSTaskJoin.RightField = objTSAssemblingInTaskJoin.LeftField.ParentFields.ItemsByName("TaskID")
    objTSSelect.Joins.Add objTSTaskJoin

Ну и добавляем обязательно столбец из этого прикрепления. Без него join не включиться, если не указать параметр у Join'а CanDisable = False. Без особой причины CanDisable можно не трогать. Достаточно просто добавить столбец из этого join'а, как его параметр IsEnabled сразу же станет True.

    Set objTSColumn = objTSSelect.Columns.CreateGeneralColumn
    objTSColumn.ParentColumns = objTSSelect.Columns
    objTSColumn.ParentJoin = objTSTaskJoin
    objTSColumn.ParentParametriticQuery = objTSSelectQuery
    objTSColumn.Field = objTSTable.Fields.ItemsByName("StatusID")
    objTSColumn.DependsOn.CommaText = objTSTable.SQLName
    objTSSelect.Columns.Add objTSColumn
    objTSColumn.IsEnabled = True

Всё.

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

Если есть какие-то замечания, то обязательно напишите.

Можно и так. Всё ли правильно, по коду сказать сложно. Если в результате в профайлере идёт нужный SQL-запрос, то нормально.

По поводу свойства ParentJoin, в SDK о нём есть, но очень кратко. Лучше смотреть примеры использования поиском по скриптам конфигурации.

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