Есть карточка контрагента и наименование контрагента.

С карточкой работают сотрудники разных стран.

Кому-то нужно название на русском, кому-то на англ.



Как с точки зрения работы с мультиязычностью сделать так, чтобы при поиске по полю наименование в России искало по русскому названию, а в иноязычных странах – по английскому? (скрин во вложении) Изображение удалено.

Или как сюда для англоязычных пользователей автоматически подставить поле название Eng

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

Что тоже могло бы помочь в решении проблемы

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

Нравится

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

Добрый день, 

К сожалению, не отображаются скриншоты в сообщении. 

 

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

 

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

Мне необходимо переименовать AccountProfile поле "добавить" на "создать", как это можно сделать?

 

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

Нравится

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

Кроме значения локализируемой строки, обратите внимание на функцию initAddRecordButtonCaption в BaseProfileSchema:

/**
 * Initializes add record button caption.
 * @protected
 */
initAddRecordButtonCaption: function() {
	var caption = this.get("Resources.Strings.AddRecordButtonCaption");
	var editPages = this.getEditPages();
	if (editPages && editPages.getCount() === 1) {
		var editPage = editPages.getByIndex(0);
		caption = editPage.get("Caption");
	}
	this.set("AddRecordButtonCaption", caption);
},

То есть значение не всегда берётся из строки.

Чтобы отключить эту логику получить нужное Вам поведение, можно в Custom создать переопределённую AccountProfileSchema с кодом:

/**
 * Account profile class.
 * @class Terrasoft.AccountProfileSchema
 */
define("AccountProfileSchema", ["CommunicationOptionsMixin"],
		function() {
			return {
				entitySchemaName: "Account",
			methods: {              
              				/**
				 * Initializes add record button caption.
				 * @protected
				 */
				initAddRecordButtonCaption: function() {
					var caption = this.get("Resources.Strings.AddRecordButtonCaption");
					this.set("AddRecordButtonCaption", caption);
				}
            }
			};
		}
);

И в этой же схеме поменять слева значение строки AddRecordButtonCaption на «Создать контрагента».

Это тянется из ActionKindCaption таблицы SysModuleEdit (SysModuleEditLcz). Не придумал способа изящней, как сделать прямое обновление в БД. 

Update SysModuleEditLcz set ActionKindCaption=N'Создать контрагента' where id = '77FAE75C-861E-4D76-8A47-A9CE8F843D4C' -- id записи на русском языке для раздела контрагент

Поменяется и здесь и в разделе контрагенты

Алексей Следь,

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

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

Кроме значения локализируемой строки, обратите внимание на функцию initAddRecordButtonCaption в BaseProfileSchema:

/**
 * Initializes add record button caption.
 * @protected
 */
initAddRecordButtonCaption: function() {
	var caption = this.get("Resources.Strings.AddRecordButtonCaption");
	var editPages = this.getEditPages();
	if (editPages && editPages.getCount() === 1) {
		var editPage = editPages.getByIndex(0);
		caption = editPage.get("Caption");
	}
	this.set("AddRecordButtonCaption", caption);
},

То есть значение не всегда берётся из строки.

Чтобы отключить эту логику получить нужное Вам поведение, можно в Custom создать переопределённую AccountProfileSchema с кодом:

/**
 * Account profile class.
 * @class Terrasoft.AccountProfileSchema
 */
define("AccountProfileSchema", ["CommunicationOptionsMixin"],
		function() {
			return {
				entitySchemaName: "Account",
			methods: {              
              				/**
				 * Initializes add record button caption.
				 * @protected
				 */
				initAddRecordButtonCaption: function() {
					var caption = this.get("Resources.Strings.AddRecordButtonCaption");
					this.set("AddRecordButtonCaption", caption);
				}
            }
			};
		}
);

И в этой же схеме поменять слева значение строки AddRecordButtonCaption на «Создать контрагента».

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

Добрый день. Не получается загрузить Телефоны, адреса, платежные реквизиты из 1С в ТС.
Контрагент создаётся, при загрузке создаются элементы видов телефонов и адресов, а сами значения не грузятся. почему не понятно.
Настраивал на основе этого видео.
Но там как-то отрывисто рассказывается и в первый раз вообще адреса не загрузились, а потом вроде без ошибок, но результат не показали.

В итоге вроде с виду выглядит всё как надо, результата нет.
Адреса просто не создаются.
С телефонами выдаёт ошибку.
Ошибка импорта. Could not convert variant of type (OleStr) into type (Boolean). Возникла при импорте записи 1C с именем Нова ОсОО Телефон Мобильный

Ещё конечно порадовало "Добавлен новый Елемент")))

Скрины приложил.

Нравится

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

Сложно сказать о конкретных причинах, не видя Ваши 1С и Terrasoft.
Слово «елемент» можно исправить в 47 строке scr_Dataflow1CConsts. И заодно в другом сообщении в 20 строке scr_MsxmlUtils.dash2
Ошибка «Could not convert variant of type (OleStr) into type (Boolean)» говорит, что пытаетесь загрузить строку в логическое поле.

Да мне то "елемент" не мешает, исправлять это в релизе надо. а не в одной копии программы.

1С и ТС вроде у всех одинаковые. 1С УТ 10.3.35.1. Как посмотреть точную версию ТС не знаю.
От того какие там буковки в адресах и телефонах, по моему ничего не меняется.
А настройки обмена, отборы и сопоставление полей я привел на скринах. По всей видимости проблема в них, но где именно не понятно.

"Корниленко Роман Васильевич" написал: исправлять это в релизе надо. а не в одной копии программы.

Роман, разработка 3.Х прекращена, на ней больше релизов не будет.
1С и ТС вроде у всех одинаковые.

Да нет, вроде, у всех разные.

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

"Зверев Александр" написал:Роман, разработка 3.Х прекращена, на ней больше релизов не будет.

Ну ок.
"Зверев Александр" написал:Да нет, вроде, у всех разные.

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

"Корниленко Роман Васильевич" написал:Что Вы подразумеваете под разные?

В разных версиях Terrasoft для работы с разными версиями 1С могут потребоваться определённые доработки в конфигурации.

"Зверев Александр" написал:Сложно сказать о конкретных причинах, не видя Ваши 1С и Terrasoft.

"Зверев Александр" написал:В разных версиях Terrasoft для работы с разными версиями 1С могут потребоваться определённые доработки в конфигурации.
Версию 1С я написал, платформа 8.2.19.130, как посмотреть версию ТС просьба подсказать.

Версию ядра Terrasoft можно узнать в свойствах exe-файла.
Конфигурация при этом может быть как более старая, так и более новая, если какие-то доработки переносились вручную.

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

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

Здравствуйте!
В версии 3.4.0.38 появилась задача почистить дубли по контрагентам и контактам, их очень много. Читала, что в BPMonline есть возможность поиска дублей, но здесь только ручной поиск и ручное объединение записей, так как системная функция поиска находит только несколько записей (наименование у дублей могут быть на разных языках, а полное наименование заполнены по разному у одних и тех же КА например)

Подскажите пожалуйста как лучше решить данный вопрос.

Нравится

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

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

В Вашей версии 3.X Вы можете настроить, по каким полям сливать дубли, а также реализовать самостоятельно хранимую процедуру, которая ищет и/или сливает дубли и подключить её.

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

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

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

Для того, чтобы установить причину, проверьте следующее:

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

Спасибо! Эту часть уже сделала, нужно было изменить фильтры для связи. Незнаю как здесь удалить опубликованные(( Тормознулась на подсчете количества, Вы мне ответили в другом топике http://www.community.terrasoft.ru/forum/topic/24760.

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

Относительно Вашего вопроса, попробуйте установить точку останова в функции PrepareSearchResults() скрипта wnd_ViewSearchResultScript и выполнить пошаговую отладку именно этой функции.

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

Добрый день.

1. Как отпраить GET-запроса на сторонний ресурс,получить ответ в формате json?
2. Отобразаить полученные данные в карточке клиента (контрагенты и контакты)?
3. Это программировать надо? Если да, то куда вписывать код?

Спасибо!

Нравится

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

Получить текст ответа сервера можно при помощи объекта MSXML2.XMLHTTP.6.0.

var webAddress = 'http://example.com/example';
var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.6.0");
xmlHttpReq.open("GET", webAddress, false);        
xmlHttpReq.send();
var MyText = xmlHttpReq.responseText;

Он возвращает текст (в Вашем случае JSON), его можно превратить в JS-объект кодом вроде:

eval('(' + MyText + ')')

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

А есть на скринах,где показывается,как внедрять код в скрипт в СРМ.
Я как понимаю,требуется написать код,внедрить его.
Я совсем новичек в системе.

Предыдущий комментарий был по 3.Х. Если у Вас 7.5, там всё иначе. Для вопросов по ней есть специальный раздел.

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

Кто-то знает этот запрос (для чего он, зачем и можно ли оптимизировать):

exec sp_executesql N'SELECT
        [vw_Account].[ID] AS [ID],
        [vw_Account].[Name] AS [Name]
FROM
        [dbo].[vw_Account] AS [vw_Account]
WHERE(EXISTS
        (SELECT
                [vw_Contact].[ID] AS [ID]
        FROM
                [dbo].[vw_Contact] AS [vw_Contact]
        WHERE([vw_Contact].[AccountID] = [vw_Account].[ID] AND
                EXISTS
                (SELECT
                        [tbl_AdminUnit].[ID] AS [ID]
                FROM
                        [dbo].[tbl_AdminUnit] AS [tbl_AdminUnit]
                WHERE([tbl_AdminUnit].[UserContactID] = [vw_Contact].[ID] AND
                        [tbl_AdminUnit].[UserIsEnabled] = @P1)))))
ORDER BY
        2 ASC'
,N'@P1 int',1

Нравится

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

Угадайка?

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

Можно exists убрать и условие ядреное, через inner join как мне кажется... только надо ли?

"Александр Кудряшов" написал:Можно exists убрать

Спасибо, Александр!
К сожалеюнию, пока нельзя убрать, так как не знаю откуда оно формируется. Но когда узнаю, то постараюсь сделать поле "IsUserAccount", в которое запихивать 1 при создании нового юзера с новым юзерКонтрагентом. тада выборка будет проще

SELECT
        [vw_Account].[ID] AS [ID],
        [vw_Account].[Name] AS [Name]
FROM
        [dbo].[vw_Account] AS [vw_Account]
WHERE IsUserAccount IS NOT NULL

Мне кажется отработает раз в 100 быстрее

SELECT
        [vw_Account].[ID] AS [ID],
        [vw_Account].[Name] AS [Name]
FROM
        [dbo].[[tbl_AdminUnit] AS [[tbl_AdminUnit]
inner join [vw_Contact] on [tbl_AdminUnit].[UserContactID] = [vw_Contact].[ID]
inner join [vw_Account] on [vw_Contact].[AccountID] = [vw_Account].[ID]
 
WHERE [tbl_AdminUnit].[UserIsEnabled] = @P1
 
ORDER BY
        2 ASC',N'@P1 int',1

формируется именно из системы, где-то сервис запроса есть, можно его переписать...

а что реально долго работает и тормозит систему???

ps почитал изыскания пытливых умов - вроде как exists в такой ситуации даже быстрее inner'а отработает

затер сообщение. был неправ :lol:

"AlexLS" написал:в которое запихивать 1 при создании нового юзера с новым юзерКонтрагентом

не правильно - надо это поле перезаписывать при изменении признака Активен любого пользователя, привязанного к этому контрагенту и выставлять в 0, если активных пользователей не осталось

"Андросов Дмитрий" написал:не правильно - надо это поле перезаписывать при изменении признака Активен любого пользователя, привязанного к этому контрагенту и выставлять в 0, если активных пользователей не осталось

Дмитрий, спасибо за ответ! Остается малое - выяснить откуда этот зловещий код выполняется!

"Александр Кудряшов" написал:а что реально долго работает и тормозит систему???

к сожалению из "самых страшных" в нашей терре он на 5 месте (остальные прорабатываю), а по частоте выполнения лидирует! То есть суммарный дюрейшен у юзеров зашкаливает!!!

а вообще это похоже на запрос для какого-то справочника типа "Контрагенты ответсвенных"
поищите UserIsEnabled с помощью GREP (у меня есть только в wnd_LicenseManagerScript, но там не то)
вот для сравнения запрос для справочника Ответсвенный (поиск по имени)

exec sp_executesql N'SELECT TOP 2
	[tbl_Contact].[ID] AS [ID],
	[tbl_Contact].[Name] AS [Name]
FROM
	[dbo].[vw_Contact] AS [tbl_Contact]
INNER JOIN
	[dbo].[tbl_AdminUnit] AS [tbl_AdminUnit] ON [tbl_AdminUnit].[UserContactID] = [tbl_Contact].[ID]
WHERE([tbl_AdminUnit].[UserIsEnabled] = @P1 AND
	[tbl_Contact].[Name] LIKE @P2 + ''%'')
ORDER BY
	1 ASC',N'@P1 int,@P2 nvarchar(4000)',1,N'слепо'

"Андросов Дмитрий" написал:но там не то

Я вот тоже не нашел :)
Похожие запросы есть в Users, LicenseManager, но вот точно такого же не было

"Андросов Дмитрий" написал:поищите UserIsEnabled с помощью GREP

к сожалению эта штука ищет только в scr_
а вот в sq_ увы...

"Александр Кудряшов" написал:Похожие запросы есть в Users, LicenseManager, но вот точно такого же не было

хехех. еще бы уметь его находить...

этот запрос выполняется перед function wnd_MainOnPrepare(Window). Как я понимаю, его и ядро юзает...

Выполняется он при старте перед:

exec sp_executesql N'SELECT
	[tbl_SystemSetting].[ID] AS [ID],
	[tbl_SystemSetting].[Code] AS [Code],
	[tbl_SystemSetting].[ValueTypeID] AS [ValueTypeID],
	[tbl_SystemSetting].[StringValue] AS [StringValue],
	[tbl_SystemSetting].[FloatValue] AS [FloatValue],
	[tbl_SystemSetting].[IntegerValue] AS [IntegerValue],
	[tbl_SystemSetting].[BooleanValue] AS [BooleanValue],
	[tbl_SystemSetting].[DateTimeValue] AS [DateTimeValue],
	[tbl_SystemSetting].[DictionaryRecordID] AS [DictionaryRecordID],
	[tbl_SystemSetting].[EnumItemID] AS [EnumItemID],
	[tbl_SystemSetting].[IsCaching] AS [IsCaching]
FROM
	[dbo].[tbl_SystemSetting] AS [tbl_SystemSetting]
WHERE([tbl_SystemSetting].[Code] = @P1)',N'@P1 nvarchar(4000)',N'UpdateActiveSessionPeriod'

Так это... раз уж во все тяжкие (с)
Дебаггер в scr_Main и по шагам идем, ждем появления в профайлере заветных строчек

"Александр Кудряшов" написал:

Так это... раз уж во все тяжкие (с)

Дебаггер в scr_Main и по шагам идем, ждем появления в профайлере заветных строчек


Александр, а есть код выполняющийся перед wnd_MainOnPrepare?

"AlexLS" написал:а есть код выполняющийся перед wnd_MainOnPrepare?

Это уже пограничная область знаний, тут То Самое Ядро может что-то вызывать. Это за пределами моих знаний:smile:
Там раньше окно авторизации и проверка лицензии как раз идет, окно авторизации вроде бы в конфигурации от греха подальше спрятали

"Александр Кудряшов" написал:Там раньше окно авторизации и проверка лицензии как раз идет

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

"Александр Кудряшов" написал:тут То Самое Ядро может что-то вызывать

Александр, вот мне кажется что ядро вызывает банальный sq_ который и поправили под собственные нужды не задумываясь, что оно где-то глобально юзается!!!

Кстати, оно же (запрос) вызывается и Outlook'ом...

"Андросов Дмитрий" написал:по всем вопросам, связанным с лицензиями все заканчивается заявлением, что механизм лицензирования закрыт и сакрален

Дмитрий, мне кажется что лицензии врядли вьюхой проверять будут, скорее всего обращались бы напрямую к tbl_Account и, так же кажется, что разработчики Террасофта, все-таки не настолько ... (тут каждый сам себе додумает), чтобы такой идиотский код. Хотя, возможно, и у них есть отдельные личности, к примеру разработчики лицензирования :smile:
В принципе, в недалекой перспективе, предполагаем переход на TSv7 и эта тайна может так и остаться не разрешенной, хотя кто знает, может на смену мне прийдут новые :biggrin: с этим же вопросом!

Кстати, очередной банальный (уж простите) вопрос: если выгрузить все сервисы в файлы и потом какой-нить утилиткой "поиск текста в xml" пройтись, тогда шансы на поиск увеличатся?

"AlexLS" написал:чтобы такой идиотский код

Ход абсолютно верен.
У простых пользователей НЕТ доступа к tbl_Account, а есть доступ только к vw_Account.
И проверка лицензии не то, ради чего стоит ломать имеющийся движок обращения к данным.

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

Да, может и так... поискал в sq_ по слову "UserIsEnabled" нашлось в sq_AdminUnit, sq_Contact, sq_ContactInTask, sq_User

Судя по Grep-поиску в скриптах и нахождению етого слова в wnd_LicenseManagerScript ... закрываю тему, благо ясно что этот код зашит

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

Добрый день!
Прошу совета по настройке интеграции контрагентов с 1С 8.
Контрагенты выгружаются в 1С только при создании счета (чтобы не засорять базу бухгалтерии).
Есть ситуация: в ТС создали контрагента (пока счета нет). В 1С создали того же контрагента.

Если использовать в качестве ключевого поля "Уникальный идентификатор 1С", то при выгрузке контрагента из ТС в 1С произойдет задвоение.

Если использовать набор ИНН+КПП, то это поле может изменится в дальнейшем (например, если клиент дал неправильные данные и потом прислал верные) и опять произойдет задвоение.

Есть вариант при первичной интеграции осуществлять поиск по ИНН+КПП (пока в ТС нет данных об UID1C). А после уже по UID1C, т.к. оно неизменно. Но не знаю есть ли возможность реализовать такой вариант.

Подскажите, пожалуйста, как можно поступить? Как вы реализовываете двустороннюю интеграцию контрагентов?

Нравится

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

Дмитрий, а если проверять по ИНН + КПП, в случае если контрагент с таким UID1C не найден?
Ведь время между созданием одного и того же контрагента в 1С и в Террасофте не должно превышать 1-2 дней, верно? Т.е. за это время, в 1С, по идее, не должны сменить ему ИНН+КПП. А уже после этого даже если сменят - уже будет проверка по UID1C.

Да, такой вариант я думаю возможен. А можно ли это реализовать используя утилиту интеграции из каталога расширений? Чтобы сначала проверял по ИНН+КПП, а в следующий раз по UID?

Я думаю необходимо как раз наоборот, сначала проверить по UID, и если соответствия не найдено (т.е. поле UID в Террасофте null) то проверять по ИНН+КПП.
По идее, можно попробовать в настройках интеграции выставить для этих трех полей соответсвующий признак - должно работать.
Но я бы порекомендовал создать скрипт интеграции, и написать код на OnBeforeRecordExport. Что-то вроде:

if(Dataset('UID1C') == null)
{
var INN = Dataset('INN');
var KPP = Dataset('KPP');
var Account1C = Param.Obj1C.Справочники.Контрагенты;
if(Account1C.НайтиПоАтрибуту('ИНН', INN) == 1 && Account1C.НайтиПоАтрибуту('КПП', KPP) == 1)
{
//return false; чтобы отменить экпорт
//либо
//Account1C.SetAttrib('Наименование') = Dataset('Name');
//и т.д.
//Account1C.Записать();
}
}

Спасибо, сейчас посмотрю.

Экспорт из ТС в 1С сделал, все нормально. Теперь думаю как реализовать импорт из 1С.
Такая же ситуация, нужно проверить по ИНН+КПП, если нет связи по UID.
Получается нужно также руками создавать контрагента и на OnBeforeRecordImport возвращать true?
Но тогда не сработают подчиненные интеграции?

У меня есть настроенная подчиненная интеграция адресов контрагента (Импорт из 1С).
Можно ли запустить подчиненную интеграцию из скрипта передав туда ID контрагента?

Получилось сделать, используя функцию ImportDetails

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

Подскажите плиз!
Наша компания предоставляет услуги телефонно-справочной службы (принцип подписки на длительное время), а также 5 печатных изданий. Поставлена задача отобрать предприятия не стоящие на телефонной справке на сегодняшний день, а также предприятия стоявшие когда либо, но отказавшиеся от этой услуги.
Заранее спасибо!

Нравится

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

Добрый день.

Для того, чтобы отобрать предприятия по какому либо признаку, необходимо изначально фиксировать в каком либо поле в карточке контрагента(либо на детали, если связь не 1 к 1, а 1 ко многим) этот самый признак. После этого, можно воспользоваться динамическими группами (папки с фильтрами).

Если будут вопросы - задавайте.

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

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

Пожалуйста, помогите решить задачку:

В справочнике Отрасли контрагентов были созданы 2 аналогичные отрасли. Как удалить одну из этих отраслей, если с ней уже созданы записи о контрагентах, при этом эта отрасль не является основной (то есть модуль фильтрации не выводит в реестр записи искомых контрагентов с данной отраслью)?

Вариант вручную перебрать все записи, естественно, не приветствуется.

Нравится

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

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

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

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

Поиск дублей для справочника - это гвозди микроскопом заколачивать.
Тут подойдёт несложный SQL-запрос, аналогичный этому.

Алина, спасибо, думаю, этот вариант подойдет.

Александр, поскольку я не владею SQL, Вашим предложением воспользоваться не смогу :smile:

Еще один момент, есть ли возможность в принципе фильтровать контрагентов по неосновным отраслям?

"Шатная Елена" написал:Александр, поскольку я не владею SQL, Вашим предложением воспользоваться не смогу

А какая используется СУБД?


Еще один момент, есть ли возможность в принципе фильтровать контрагентов по неосновным отраслям?

Можно, если доработать фильтр или создать новый.

СУБД используется, насколько я понимаю, MS SQL

Тогда примерно так. Вот адаптированный для отраслей код:

--основная отрасль
UPDATE "tbl_Account" SET "FieldID" =
     (SELECT top 1 "ID" FROM "tbl_Field" WHERE "tbl_Field"."Name" = 'Нужная отрасль')
WHERE "FieldID" =
     (SELECT top 1 "ID" FROM "tbl_Field" WHERE "tbl_Field"."Name" = 'Ненужная отрасль')
--неосновные отрасли
UPDATE "tbl_AccountIndustry" SET "FieldID" =
     (SELECT top 1 "ID" FROM "tbl_Field" WHERE "tbl_Field"."Name" = 'Нужная отрасль')
WHERE "FieldID" =
     (SELECT top 1 "ID" FROM "tbl_Field" WHERE "tbl_Field"."Name" = 'Ненужная отрасль')

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

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

После выполнения ненужную отрасль можно удалить.

Александр, большое спасибо за информацию, я обязательно передам ее нашим разработчикам.

Но вопрос хотелось решить в рамках настройки функционала пользователем, потому и задавала я его именно в форуме Вопросы по функциональности.

Исходя из вышеописанного, понимаю, что без программистов вопрос по фильтрации контрагентов по доп. отраслям мне не решить.

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

Фильтровать контрагентов по неосновным отраслям можно также начиная с версии 3.4.0 - там есть подобные фильтры в коробочной версии. Для 3.3.2 фильтры можно добавить на уровне конфигурации.

"Шатная Елена" написал:Исходя из вышеописанного, понимаю, что без программистов вопрос по фильтрации контрагентов по доп. отраслям мне не решить.

Для этого нужно в "администраторе Terrasoft" нужно сконструировать нужный фильтр. Не совсем программирование, но лучше силами программистов или поддержки.

А в чём состоит основная задача, в чистке от ненужной отрасли или в доработке для возможности фильтра по дополнительным отраслям? Ведь если настроить такой фильтр и он выдаст несколько десятков результатов, то всё равно придётся менять отрасль вручную.

Основная задача - удаление лишней отрасли. Она уже решена. Вопрос по фильтру возник, как говорится, по ходу, поэтому он не критичен :smile:

"Alimova Anna" написал:Фильтровать контрагентов по неосновным отраслям можно также начиная с версии 3.4.0 - там есть подобные фильтры в коробочной версии.

Анна, при формировании фильтра в разделе Контрагенты Отрасль = нужная отрасль (указанная как неосновная у контрагента Test) не приводит к тому, чтобы в реестре отобразился контрагент Test. Данная операция была произведена в 3.4.0.38.

Может я не там смотрю?

В группе фильтров "Контрагент" фильтр "Отрасли" даёт нужный эффект. Отдельностоящий "Отрасль" - только по карточке. Вот оно как!

Да, действительно, если указать запрос фильтра Контрагент-Отрасли (а не Отрасль, как я делала раньше :confused:), то все контрагенты с искомой отраслью отображаются. И дописывать ничего не нужно :smile:

Александр, спасибо за подсказку :smile:

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

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

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

В модуле фильтрации выбираю:

Контакт: количество контактов = 0, применить
либо Контакт: количество контактов Пусто, применить,
но контрагенты не отображаются.

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

При этом, если я указываю = 1, > 1, контрагенты отображаются в зависимости от условия.

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

Нравится

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

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

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

Да, нужны исправления в сервисе sq_Account. Пошагово ниже:

  1. Добавить в сервис sq_Account фильтр Exists Filter, в его Test Subquery для таблицы FROM указать tbl_Contact as tbl_ContactInAccount.

    В Select - tbl_ContactInAccount.ID:
    cf1.png
  2. В условие WHERE добавить Integer User Filter:
    if.png
  3. В добавленном Integer User Filter указать таблицу для выбирки данных:
    tbl_Contact as ContactInAccount
  4. В Select указать ContactInAccount.ID и Summary Type = Count:
    cf2.png
  5. В WHERE добавить фильтр сравнения: cf3.png
  6. В WHERE добавить фильтр сравнения: cf4.png

Большое спасибо за информацию :smile:

Я вот хотел утром решение написать, да постеснялся, чтобы топикстартера не напугать:smile:
Ветка то пользовательская...
По решению: приведенный вариант решения не полный
1. нужно "почистить" и штатный фильтр Контакт-Количество контактов чтобы путаницы не было с новым фильтром удалить его что-ли или переименовать
2. в примере я так понял учитывается либо указание Контрагента в карточке Контакта, либо его назначение Основным контактом; но не учтена Карьера контакта - а записи могут быть именно там, и по ней же работает штатный фильтр

Главное, что это не топикстартер тупит, и что баг поправим :wink:

Баг попра́вим или поправи́м?:smile:

Да баг надо бы на уровне коробочной версии поправлять, он во всех TS такой:smile:
Запросик на изменение добавьте плиз:confused:

Да, в четверке он тоже есть :sad:

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

Спасиба за замечания и коментарии.

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