Добрый день.
Подскажите как в рассылках выводить полное название контрагента в Emaile

Сейчас туда выводится поле для для отображения. Т.е. Контрагент
скриншот
http://clip2net.com/s/72izzh

Нравится

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

Здравствуйте, Константин Игоревич!

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

1) В запросе для макросов, который используется в шаблоне сообщения рассылки, вытянуть колонку "Полное название":

http://i59.fastpic.ru/big/2014/0318/a7/608eae23a23da4fb6a01b5a22084ada7.png

2) Отредактировать шаблон сообщения и вытащить появившийся макрос "Полное название" в тело письма, после чего сохранить шаблон сообщения.

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

Мне в теле письма не надо выводить. Мне надо выводить в адресе отправки.
Адрес для рассылки как я понял формируется в функции

function GetEmailFromDatasetFields(EmailField, ContactNameField) {
	var EmailAddress = EmailField.DisplayValue;
	if (IsEmptyStr(EmailAddress)) {
		return EmptyStr;
	}
	var ContactName = ContactNameField.DisplayValue;
	if (!IsEmptyStr(ContactName)) {
    		EmailAddress = ContactName + '<' + EmailAddress + '>';
   	}
	return EmailAddress;
}

Как для контактов так и для контрагентов. Скрипт scr_MailCommon

Константин Игоревич, для того, чтобы это реализовать, необходимо:

1) В сервисе sq_AccountCommunicationInMassMail создать колонку OfficialAccountName и заполнить ее следующим образом:

1

2) В сервисе ds_AccountCommunicationI

 

nMassMail создать колонку OfficialAccountName и заполнить ее следующим образом:

2

3) В сервисе wnd_MassMailGridAreaScript добавить переменную и подставить ее в качестве параметра функции:

3

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

Для некоторых клиентов карточки стали неактивны. Свойство IsEnabled для элементов, которые нельзя корректировать = true. Попытался сравнить записи, поля в которых доступны для редактирования, удаления и те, в которых недоступны. Особых различий не нашел. Сравнил свойства однотипных элементов из редактируемой и нередактируемой карточки. Отличается только свойство Color.
Что это может быть?
Карточка в прикрепленном файле.
Как ее хотя бы сделать активной, если нельзя сказать, почему она стала неактивной?

Нравится

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

Если бы дело в IsEnabled, то и названия были бы серые. А так получается что поля только для чтения. Скорее всего, что-то не так с правами, посмотрите различия на детали "Доступ".

Да, скорее всего нет доступа на конкретные поля. Т.е. не контрол задизейблен,а поле датасета.

Господа, всем доброго времени суток!
Возникает вопрос, а как снять запрет на поле набора данных, если в настройках ds на поле отключена галка "Только для чтения".
А у самого набора данных все опции включены ("Редактирование", "Добавление", "Удаление" и т.д.)

Добрый день.

Тут, скорее всего, проблема в правах доступа. Проверьте:

а) есть ли доступ для тек. пользователя на ваше поле в разделе "администрирование-доступ к полям"
б) посмотрите на детали "Доступ" в нужном Вам разделе, выделив "проблемную" запись под "проблемным" пользователем. Возможно у пользователя доступ только на чтение на эту конкретную запись.

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

А пользователь - Supervisor (если не ошибаюсь он вообще полный доступ иметь должен)

Если он админ - да.

Программно также можно... В функции OnPrepare Скрипта нужного Вам окна необходимо добавить проверку:

if(Connector.CurrentUser.UserContactID == 'ID какого либо контакта') {
      edtMyField.IsEnabled = false;
} else {
      edtMyField.IsEnabled = true;
}
Показать все комментарии

Добрый день.
У меня такой вопрос, можно ли в деталь "Элементы" раздела "Процессы" вывести контрагента по которому запущен данный процесс?

Нравится

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

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

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

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

Восстановил из *.bak-файла базу данных. Развернул на другой машине - все работает, кроме разделов Контакты и Контрагенты. При попытке сохранить dataset вылетает обшибка 'list index out of bounds (0)'

Продукт Terrasoft Sales, версия 3.4.0.53
База данных бекапилась на MS SQL 2005. Восстанавливали и на 2005 и на 2008 - результат одинаковый.
Все остальное работает. Ошибка выскакивает в момент сохранения в скрипте:

function SaveChanges(BaseDBEdit, Window) {
        var AddNewRecordOnPage = (BaseDBEdit.Dataset.State == dstInsert);
        Window.Attributes('IsAppend') = (BaseDBEdit.Dataset.State == dstInsert);
        Window.Attributes('RecordID') = BaseDBEdit.RecordID;
        var PostResult = BaseDBEdit.Dataset.Post();
        Window.Attributes('AddNewRecordOnPage') =
                (AddNewRecordOnPage && PostResult > 0);
        var Result = ((PostResult == 1) || (BaseDBEdit.RecordAlreadySaved));
        return Result;
}

на строке var PostResult = BaseDBEdit.Dataset.Post();выкидывает сразу в исключение
catch (e) {
                System.MessageDialog(e.message, mdtError, mdbOK, 0);
                Result = false;
        }

        return Result;

функции SaveChangesWithCheck(Window, BaseDBEdit, DoNotSendNotify).
Каким образом это можно исправить?

Нравится

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

Проблему решил сам, хватило лишь выполнить запрос

sp_change_users_login 'auto_fix', 'fkeys'

возможно кому-то поможет

Либо может еще отработать скрипт:
sp_change_users_login 'Update_one', 'fkeys', 'fkeys'

Арсений Белецкий
Техническая поддержка Terrasoft

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

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

1. В нужном разделе выбрать деталь Web

2. Нажать на значок линзы:

/system/files/1_62.png

3. В открывшемся окне выбрать текущий раздел и нажать на кнопку «Добавить»:

/system/files/2_41.png

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

http://maps.yandex.ua/?text=#Address#

где Address – имя поля в наборе данных (Dataset текущего раздела).

/system/files/3_23.png

Нравится

Поделиться

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

Иногда возникает необходимость "нумеровать" контрагентов (по аналогии с "масками" в других разделах). Для реализации можно рассмотреть следующий вариант.

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

Для такой возможности следует:

1. Зайти в системные настройки:

/system/files/1_55.png

2. Добавить новую настройку:

/system/files/2_38.png

3. Ввести следующие параметры:

/system/files/3_21.png

4. Создать еще одну настройку с такими параметрами:

/system/files/4_14.png

5. Далее открыть функцию ds_AccountOnDatasetBeforePost в скрипте scr_Account и добавить в ней строку:

SetAccountNumber(Dataset);

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

function SetAccountNumber(Dataset) {
var AccountNumber = Dataset.Values('AccountCode');
if (IsEmptyValue(AccountNumber)) {
SetItemSystemNumber('Account', Dataset, 'AccountCode');
}
}

Где – 'AccountCode' название поля «Код» в конфигурации.

Сохраните изменения и проверьте работоспособность.

/system/files/6_1_0.png

Поле «Код» после сохранения будет заполняться автоматически.

/system/files/6_2_0.png

Нравится

Поделиться

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

Здравствуйте Террасофт!

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

Нравится

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

Нужно на событие OnPrepareSelectWindow лукапа выбора поставщика повесить обработчик вроде:

function edtSupplierOnPrepareSelectWindow(LookupDataControl) {
	var LookupDataset = LookupDataControl.DataField.LookupDataset;	
	var TypeID = atOur;//константа с GUID, описать в scr_Consts
	ApplyDatasetFilter(LookupDataset, 'TypeID', TypeID, true);
}

Содержание константы - ID записи в tbl_AccountType с текстом "Наша компания".

Опробовал предложенный метод, при нажатии на поиск в поле поставщика, появляется ошибка - что-то вроде: "не нравится atOur". Прошу рабочее решение?
В начале темы выразился не корректно:
На данный момент в поле поставщика по умолчанию стоит контрагент "Ваша компания", мне требуется сделать так, что бы по умолчанию было пусто и что бы отображал в поиске только контрагентов с типом "Наша компания".

"Березин Игорь Викторович" написал:"не нравится atOur". Прошу рабочее решение?

Нужно посмотреть значение поля ID в записи в таблице tbl_AccountType с текстом "Наша компания". Это можно сделать в СУБД или нажатием кнопки "предпросмотр" и затем "выполнить SQL" на sq_AccountType.

Потом в скрипт scr_Consts внести строку вроде:

//Наша компания
var atOur= '{12B90989-C863-42D4-A90B-DDD6024A7FED}';

Тогда заработает. Только значение константы может быть другим.

А ещё такая константа может быть изначально, попробуйте вместо atOur написать так:

 var TypeID = OurCompanyAccountType;

И ничего смотреть в БД не понадобится.

"Березин Игорь Викторович" написал:мне требуется сделать так, что бы по умолчанию было пусто

См. аналогичное решение здесь.

Не работает!
Версия Террасофта 3.3.2.107 - ни какой реакции.
Версия Террасофта 3.3.2.262 - ошибка, появляется дебагер.
В итоге такой скрипт получился:

function edtSupplierOnPrepareSelectWindow(LookupDataControl) {
	//TODO
	var LookupDataset = LookupDataControl.DataField.LookupDataset;  
    var TypeID = '{12B90989-C863-42D4-A90B-DDD6024A7FED}';//константа с GUID, описать в scr_Consts
    ApplyDatasetFilter(LookupDataset, 'TypeID', TypeID, true);
}

Александр вы случаем не представитель компании Террасофт?
Когда вы отвечаете, мне почему то 7 сообщений подряд на почту приходит.
Не знаю куда сообщить о данном баге?

А так:

function edtSupplierOnPrepareSelectWindow(LookupDataControl) {
         var LookupDataset = LookupDataControl.DataField.LookupDataset;  
         var TypeID = OurCompanyAccountType;
         ApplyDatasetFilter(LookupDataset, 'AccountTypeID', TypeID, true);
}

Сообщения приходят при каждой правке комментария.

Ситуация со скриптом не изменилась.
OurCompanyAccountType - присутствует в scr_Consts.

По сообщениям понятно, спасибо.

"Березин Игорь Викторович" написал:Ситуация со скриптом не изменилась.

А какое сообщение об ошибке возникает?

Здравствуйте, Игорь!

Откройте MS SQL Management Studio и выполните следующий запрос:

select * from tbl_AccountType where Name = 'Наша компания'

1

После этого измените функцию следующим образом:

function edtSupplierOnPrepareSelectWindow(LookupDataControl) {
         var LookupDataset = LookupDataControl.DataField.LookupDataset;  
         var TypeID = '{12B90989-C863-42D4-A90B-DDD6024A7FED}';
         ApplyDatasetFilter(LookupDataset, 'AccountTypeID', TypeID, true);
}

В случае возникновения ошибки, пожалуйста, укажите здесь её текст.

"Березин Игорь Викторович" написал:По сообщениям понятно, спасибо.

Как я вас понимаю...:smile:

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

Дмитрий выполнил запрос к бзае, код у меня такой же как и у вас с Александром. Сделал вставку вашего кода, проверил и ни каких изменений не произошло.
Версия Террасофта 3.3.2.107 - ни какой реакции.
Версия Террасофта 3.3.2.262 - ошибка, появляется дебагер.

Здравствуйте, Игорь!

Для того чтобы в списке контрагентов, при выборе поставщика в счете, отображались только контрагенты с типом "Наша компания" необходимо:

1) Запустить Terrasoft Administrator;
2) Открыть сервис sq_Account и добавить входящий параметр AccountTypeID типа уникальный идентификатор:
1
3) В этом же сервисе в блоке "Where" добавить фильтр сравнения AccountTypeID:
2
4) На событие OnPrepareSelectWindow лукапа выбора поставщика повесить обработчик:

function edtSupplierOnPrepareSelectWindow(LookupDataControl) {
         var LookupDataset = LookupDataControl.DataField.LookupDataset;  
         var AccountTypeID = '{12B90989-C863-42D4-A90B-DDD6024A7FED}';
         ApplyDatasetFilter(LookupDataset, 'AccountTypeID', AccountTypeID, true);
}

5) Сохранить изменения и перезапустить клиентское приложение Terrasoft .

"Олейник Дмитрий" написал:Открыть сервис sq_Account и добавить входящий параметр AccountTypeID типа уникальный идентификатор:

Неужели этот фильтр не существует "в коробке" изначально? Удивительно.

Ура заработало!

Всем спасибо за помощь.

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

Видимо, новосозданный фильтр AccountTypeID стал включенным. Надо снять галку у него.

Открыл ds_Account нашел "Поле фильтрации" и убрал галку. Ни каких изменений не произошло.
Александр возможно вы имели ввиду другую галку, в другом месте?

В sq_Account фильтр сравнения AccountTypeID должен быть отключён по умолчанию и включаться только когда надо.

Заработало!
Спасибо Александр.

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

Коллеги, прошу вас совета:

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

Делаю я это так - в карточке контрагента обрабатываю сообщение OnKeyUp, пока код клавиши не равен Enter (13), и тогда, если нажат "Enter", из содержимого в поле создаю новый контакт, добавляю его в базу и подвязываю его к контрагенту.

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

Нравится

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

Здравствуйте Дмитрий,
Можете, пожалуйста уточнить пару моментов:
1) Вы поменяли контрол для поля PrimaryContactID с LookUpDataControl на TextDataControl в карточке контрагента?
2) Уточните версию Terrasoft пожалуйста.

1)Прошу прощения. Действительно на PrimaryContactID установлен контрол LookUpDataControl.
Я не обратил на это внимание.
2) Версия 3.3.2.251

Именно для LookUpDataControl нужна такая функциональность, при которой он, если поле пустое, работал, как TextDataControl (при нажатии Enter выполнял скрипт), если же нет, то как LookUpDataControl (открывал справочник)

Дмитрий, скорее всего, запретить показ выбора в LookUpDataControl, предлагаю вам использовать TextDataControl, и рядом с ним разместить Button, для вызова окна выбора

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

Добрый день!

Подскажите, в подробном описание, как и куда вставить скрипт из этой темы: https://community.terrasoft.ru/forum/topic/6990 из сообщения #6 Alimova Anna.

Требуется закрытие поля ответственный контрагента от редактирования для пользователей, но при этом что бы сохранялся и было видно ответственного создавшего контрагента?

Далее то же самое требуется в карточке контакта, думаю это будет по аналогии с контрагентом?

Нравится

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

Здравствуйте, Игорь!

в скрипте карточки есть обработчик события OnPrepare. Для карточки Контрагент это функция function wnd_AccountEditOnPrepare(Window) в скрипте scr_AccountEdit

В конец данной функции требуется вставить вызов процедуры IsOwnerAvailable();

onprepare

А саму процедуру можно дописать в конец скрипта.

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

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

Возможно, поэтому у Вас не получается произвести тестирование.

Обратил внимание на скрин-шот функции приведенной вами, она отличается от нашей, на всякий случай ниже пример функции, которая работает у нас:

function wnd_AccountEditOnPrepare(Window) {
    //IsOwnerAvailable();
	Initialize();
   	wnd_BaseDBEditOnPrepare(Window);
/* PRODUCT XRM */
   	InitializeNowBalance(Window);
   	InitializePostponementPayment(Window);
/* ENDPRODUCT XRM */
   	InitAccountInfo();
   	IsOwnerAvailable();
/* PRODUCT XRM */
   	UpdateAccountBasicCurrencyCaptions();
/* ENDPRODUCT XRM */
}

тестирую под пользователем.

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

да и про админов, мне так и нужно, что бы только админы могли редактировать это поле.

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

Добрый день!

Скрипт до сих пор не работает, кто поможет?

Здравствуйте, Игорь!

Скрипт работает следующим образом:

делает недоступным для редактирования поле Ответственный в карточке.

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

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

"Березин Игорь Викторович" написал:
Проблема не решена, видимо в процедуре необходимо изменить данные под себя?

Что конкретно не работает? Поле остается доступным для редактирования? Или является недоступным всегда, и ответственный не подставляется?

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

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

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

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

Анна ну как там дела с нашим скриптом?

Игорь,

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

edtOwner.IsEnabled = Connector.CurrentUser.IsAdmin; 

вместо вызова функции IsOwnerAvailable();

Анна огромное вам спасибо!
Все заработало, решение оказалось проще чем я мог предположить.
Вы очень помогли еще раз благодарю.
Это мое первое обращение к вам, систему тех. поддержки понял, за ответ на почту отдельное спасибо, буду продолжать осваивать вашу систему и задавать вопросы.

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

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

Нравится

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

Попробуйте почистить кэш и перезапустить Terrasoft

Напомните пожалуйста как?:smile:

Пуск -> Выполнить -> %appdata% . В папке Terrasoft зайти в Вашу версию продукта и удалить содержимое каталога Cache

видимо еще данный Контрагент указан где-то в Карьере одного из Контактов... см деталь Контакты в разделе Контрагенты

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