Добрый день!!!

в террасофте установлена последняя версия интеграции. Пробую настроить простейшую выгрузку из 3 строк. Где поля содержат 3 столбца УникальныйИдентификатор, Дата, Текст. В 1С так же создана 1 таблица с 3 полями УникальныйИдентификатор, Дата, Текст. Настроил соответствия УникальныйИдентификатор = УникальныйИдентификатор, Дата = Дата, Текст =Текст. Так вот и вопрос какое значение УникальногоИдентификатора должно перенестись в 1С если в ТС было равно например "E308B781-3C5B-4ECB-89EF-5C1ED4DA488E"

Нравится

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

Всем доброго времени суток!

Есть проблема с кодировкой txt-файла. Как изменить кодировку файла, т.к. после считывания данных файла выводит "квадратики":
пример кода:

function OpenTxtTemplate(Name) {
        var Dataset = GetSingleItemByCode('ds_Files','ds_Files');
        ApplyDatasetFilter(Dataset,'Link',Name,true);
        Dataset.Open();
        if (Dataset.IsEOF) {
                ShowInformationDialog('Template not found!');
                return null;
        }
        var File = LoadFileFromDatabase(Dataset.Values('ID'),Name,true);
        var Txt = new ActiveXObject("Scripting.FileSystemObject");
        //Txt.Visible = false;
        Txt.OpenTextFile(File, 1,false);
        var TextData = Txt.GetFile(File).OpenAsTextStream(1, true).ReadLine();
        debugger;
        Dataset.Close();
        return Txt;
}

Вот данные из VS:
Visual Studio

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

Нравится

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

Здравствуйте Георгий!

В данном случае проблема в том, что FileSystemObject не поддерживает кодировку UTF8 (почему-то только UTF-16)

Поэтому есть два метода решения проблемы:

1. Изменить кодировку открываемого файла:

encoding

2. Работать с файлом через ADODB

var Stream = new ActiveXObject('ADODB.Stream');

Stream.Open
Stream.getFile(File).OpenAsTextStream(1, true).ReadLine()
Stream.CharSet = "UTF-8"

Спасибо, Анна!
Буду пробовать.

Анна, спасибо за рекомендации, немного доработал Ваш код:

function OpenTxtTemplate(File) {   	
	var Stream = new ActiveXObject('ADODB.Stream');
 	Stream.Open();
	Stream.Type = 2;
	Stream.CharSet = "UTF-8"
	Stream.LoadFromFile(File);
	var str = Stream.ReadText(-1);
}
Показать все комментарии

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

Нравится

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

Добрый день!
По Вашему запросу ведутся работы по номеру инцидент 097200.

С уважением
Белецкий Арсений
Операционный менеджер

При отправке письма из Terrasoft система формирует команду создать письмо с определенным текстом и вставить в поле [Кому] соответствующие значения. Отправка же письма происходит после открытия письма и соответственно пользователь сам может выбрать какую учетную запись использовать. Изначально, при создании письма подставляется учетная запись, отмеченная как учетная запись по умолчанию.

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

На практике, автоматическая отправка (например рассылка) выполняется от имени той учетной записи на которой он был создан.
Тоесть, если мы при формировании шаблона меняем адрес в поле [От] и сохраняем данный шаблон - то при отправке рассылки с того же компьютера, на котором формировался шаблон, отправка будет происходить от имени измененной учетной записи.

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

Отследить email-адрес, от которого отправляется письмо, вы можете с помощью свойства SenderEmailAddres объекта MailItem (который формируется в скрипте scr_OutlookUtils):

var emailFrom = Message.SenderEmailAddress;
//Message - MailItem object;

В случае же Exchange аккаунтов, тут немного другой метод: вначале нам нужно получить AddressEntry а потом SMTP Address этого объекта.

"Олейник Дмитрий" написал:Отследить email-адрес, от которого отправляется письмо, вы можете

Добрый день!

А можно ИЗМНИТЬ отправителя письма. Через MS OUTLOOK (v.14.0.7128.5000) с этим проблем нет, а вот в коде не могу понять как это сделать?

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

Посмотрите параметр Message'а - SentOnBehalfOfName:

Если указать его принудительно перед отправкой, то в сформированном письме в поле "От" можно увидеть подставленное в параметр значение:

Message.SentOnBehalfOfName = 'test1';
Message.Send();

http://i60.fastpic.ru/big/2015/0202/53/3d218290a8cab5190a0af477c4ee1553.png

"Безродный Андрей" написал:Посмотрите параметр Message'а - SentOnBehalfOfName:

Спасибо, Андрей! То что надо!!!

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

Здравствуй Коммьюнити!
Я только начал работать с TS, но есть один теоретический вопрос.

Очень интересует механизм обмена данными между двумя программами (Outlook 2003 и TSCRM 3.3.1.175).
Только не на уровне "1й вызывает API 2го, а 2й вызывает API 1го" :confused:
А то, как TS вытягивает письма из аутлук, как и куда их записывает в БД (MS SQL 2000), где, например хранятся вложения, по какому алгоритму проверяет принадлежность е-мейла к той или иной группе (именно в контексте работы с БД) и т.д. Если можно поподробнее.
Я, конечно, могу заняться реверсингом, но не вижу смысла, если есть у кого спросить.

Возможно вопрос некорректен - объясните, я пойму.

Буду очень благодарен.

А почему такой вопрос возник...
Пытаемся понять может ли связка ТС-аутлук тормозить сервер (он же SQL-server, он же файл-сервер), причем не ЦП, а где-то на уровне доступа к ФС. Взаимосвязь между зависанием и нагрузкой от ТС-аутлук просматривается, но не доказуема.

Нравится

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

Terrasoft с MS Outlook связывается посредством COM-обьектов, что позволяет получать заголовки писем. При интеграции не анализируется текст сообщения или его вложения.
Terrasoft не является e-mail клиентом и не принимает непосредственного участия в процессе отправки писем.
Схема работы интеграции писем:
В момент получения, отправки письма через MS outlook запускается скрипт автопривязки писем. Тоесть адрес письма, а также тема(для конфигурации ServiceDesk) выбираются из письма и по этим данным происходит поиск соответствия в базе данных Terrasoft.
Соответствие адреса отправителя \получателя проводится по таблице Средства связи контрагента(tbl_AccountCommunication) или контакта(tbl_ContactCommunication) по полю [Number]
Соответствие номера в теме письма и номера инцидента происходит путем сравнения темы письма с таблицей [tbl_Incident] c полем [Number].
В случае если соответствие найдено происходит загрузка письма в базу Terrasoft в таблицу [tbl_MailMessage] с последующими записями о связке данного письма с другими таблицами (Контактов, контрагентов, инцидентов, задач и т.д.). Письма копируются в Terrasoft, так что удаление их с MS Outlook не приведет к удалению из базы.
Письмо хранится в базе данных целиком, как если бы Вы сохранили его в msg-формате.
При отправке писем из Terrasoft используется все то же Com-соединение с указанием MS Outlook создать письмо с определенным адресатом и темой. Редактирование письма(в случае необходимости) и его последующая отправка производится средствами MS Outlook.

Ох! Даже не ожидал...
Спасибо большое

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

В ТС у меня есть контрагент и его деталь [Платежные реквизиты], на которой есть "Банк" и "Номер счета". В 1С у меня есть клиент, у которого в картчке указывается и основные данные, и текущие платежные реквизиты.
Каким образом мне нужно настроить экспорт из ТС в 1С контрагента и его платежные реквизиты в одну карточку клиента в 1С?
Картинка примерно следующая:
Окно настроек
Вопрос только: что указывать в поле "Поле родителя в 1С" в настройке "Платежные реквизиты(ТС)-Клиенты(1С)"?

Каким образом можно это реализовать?

Нравится

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

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

В 1С 7.7 я написала обработку переноса документа Договора в Terrasoft CRM 3.2.
Все отлично переносится, но есть одна проблема.

В договоре есть два поля, созданные администратором 1С: Договорные условия и Предмет договора. Оба они имеют тип Строка, флаги - Неограниченная длина и Многострочное поле.

В 1С информация в самом договоре выглядит так:

В поле Договорные условия такой текст:

1- 03.08.11- 10,40
2- 15.08.11- 20,40
3- 12.09.11- 30,20

В поле Предмет договора такой текст:
10,40 до 15.08.11
30,00 до 15.09.11
40,00 до 25.09.11
50,00 до 15.10.11

Оба текста бухгалтером вносятся с использованием Enter для перехода на новую строку

Эти два поля мне нужно одной строкой с использованием переноса строк перенести в Terrasoft в поле Memo таблицы Contracts.

Текст программы такой:

if (EmptyValue(sqOfferingContact) = 1) then
sqOfferingContact = TS.Services.GetNewItemByUSI("sq_Contact"); //Создание экземпляра запроса
endif;

if (EmptyValue(refOffering) = 1) then
refOffering = CreateObject("Document.Договор"); //1С Документ Договор
endif;

Memo = dsOffering.DataFields.ItemsByName("Memo");
Memo.Value = ("Договорные условия:"+(refOffering.ДоговорныеУсловия))+". "+РазделительСтроки+ "Предмет договора; "+(refOffering.ПредметДоговора)));

Вот как выглядит текст в Terrasoft в поле Memo документа Contracts после этого.

1- 03.08.11- 10,402- 15.08.11- 20,403- 12.09.11- 30,20 Предмет дог

Причем если попробовать пролистать строку курсором, то после подстроки "1- 03.08.11- 10,40" он не двигается дальше, а переходит на новую строку. Весь текст просмотреть невозможно.

Как перенести его средствами языка 1С без потери форматирования, т.е. в таком же виде как он записан в документе Договор 1С, т.е. выглядел в поле Memo вот так:

Договорные условия: 1- 03.08.11- 10,40
2- 15.08.11- 20,40
3- 12.09.11- 30,20.
Предмет договора: 10,40 до 15.08.11
30,00 до 15.09.11
40,00 до 25.09.11
50,00 до 15.10.11

Заранее спасибо за помощь.

Нравится

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

Здравствуйте, Наталья!

Для того, чтобы добавить разделитель строки в Terrasoft, используйте \r\n.

В результате программный код примет следующий вид:

Memo.Value = ("Договорные условия:"+(refOffering.ДоговорныеУсловия))+". "+"\r\n" + "Предмет договора; "+(refOffering.ПредметДоговора)));

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

Строка

Memo.Value = ("Договорные условия:"+(refOffering.ДоговорныеУсловия))+". "+"\r\n" + "Предмет договора; "+(refOffering.ПредметДоговора)));

переносится в Terrasoft буквально как строка:

Договорные условия: 1- 03.08.11- 10,40 2- 15.08.11- 20,40 3- 12.09.11- 30,20.\r\nПредмет договора:

Если \r\n записать без кавычек, то 1С ругается. Потому, что такой функции в 1С нет.

Наталья, уточните, пожалуйста, код применяется в скрипте интеграции?

Еще один вариант переноса именно для 1С:

Симв(13)+Симв(10)

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

В случае, если это не поможет, необходимо будет делать замену переноса строки в 1С на стандартный для Вашей СУБД.

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

Добрый день.
В настроенной синхронизации продуктов мне необходимо также синхронизировать поле "Тип номенклатуры". В 1С 7.7 это поле является перечислением:

	 /system/files/3_19.jpg
Для этого в Terrasoft я создал таблицу tbl_OfferingType1C, запрос на выборку и датасет.
Настроил синхронизацию таблицы tbl_OfferingType1C в TS c перечислением Тип номенклатуры (1C):
/system/files/1_90.jpg
Провел импорт данных, в таблицу tbl_OfferingType1C попали записи:

SELECT EnumCode,EnumCaption,Object1C,Code1C,UID1C FROM tbl_OfferingType1C
EnumCode        EnumCaption     Object1C        Code1C  UID1C
УслугаЕНВД    Услуга (ЕНВД) Перечисление.ТипыНоменклатуры       NULL    NULL
Товар      Товар      Перечисление.ТипыНоменклатуры       NULL    NULL
***

Поле Code1C осталось пустым, так как его нельзя было выбрать в настройке соответствия полей.
Добавил на карточку продукта новое поле с типом номенклатуры и создалл несколько тестовых записей.
В настройку синхронизации продуктов добавил соответствие полей Тип номенклатуры:
	 /system/files/2_45.jpg
и провел экспорт продуктов в 1С. Но в 1С поле тип номенклатуры осталось незаполненным.
Подскажите, пожалуйста, как в этом случае правильно выполнить настройку синхронизации Типа номенклатуры. Насколько я понял у перечисления нет поля Code1C. По какому же полю тогда в 1С происходит отбор нужной записи из tbl_OfferingType1C?

Нравится

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

"Сидоров Павел" написал:Поле Code1C осталось пустым, так как его нельзя было выбрать в настройке соответствия полей.

Перезапустите ТС, это поле появится.
Обязательно укажите его в настройке "синхронизация таблицы tbl_OfferingType1C в TS c перечислением Тип номенклатуры" как EnumCode = Code1C

Спасибо за ответ,Максим.

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

Добрый день.
В карточке продукта(номенклатура) в 1С 7.7 находится поле ставка НДС

	 /system/files/1_89.jpg
Это справочник, который содержит следующие поля:
	 /system/files/2_44.jpg
В Terrasoft я создал таблицу, запрос на быборку и датасет для хранения ставки НДС:
	 /system/files/3_18.jpg
Провел синхронизацию(импорт из 1С) этой созданной в TS таблицы с вышеописанным справочником СтавкаНДС из 1С.В результате в таблицe tbl_StavkaNDS поппала необходимые записи 18%, 10% и Без НДС как и в 1С и главное заполнилось поле Code1C, теми же значениями что и в 1С:

SELECT ID,Name,Stavka,Code1C FROM tbl_StavkaNDS

BB566896-2B86-4FC0-B438-5D50656EEADE    10%     10.0000 3
D61137E2-4323-4D0C-AE55-B537A92FD821    18%     18.0000 1
C1409CC5-09E0-4B16-B3B2-20C6DCA220E6    Без налога НДС      0.0000  2

Добавил в справочник продукты соответствующее поле StavkaID и теперь на карточке продукта доступна для выбора ставка НДС:
/system/files/4_6.jpg
В настройку интергации добавил соответствие полей:
/system/files/5_2.jpg
Но при попытке импорта продуктов стал получать ошибку:
"Исключение брошено, но не поймано"

Отладчик останавливается на строках скрипта scr_Common:

function CheckAssigned(Object, ObjectName) {
        if (!Assigned(Object)) {
                var ErrorMgs = FormatStr(ObjectNotAssignedError, ObjectName);
                throw ErrorMgs; // ERROR
        }
}

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

Нравится

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

"Сидоров Павел" написал:function CheckAssigned(Object, ObjectName)

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

Проверьте существует ли фильтры Code1C, Object1C (с такими названиями по одноименным полям) в sq_StavkaNDS

В function CheckAssigned(Object, ObjectName)
Object = null
ObjectName = "Parameter"
ObjectNotAssignedError - "объект '%1' не присвоен"

"Кривонос Максим" написал:Проверьте существует ли фильтры Code1C, Object1C (с такими названиями по одноименным полям) в sq_StavkaNDS

Да, такие фильтры существуют

Павел, Вам необходимо к Продуктам привязать справочник кодов 1С, и использовать его при интеграции.

Порядок действий следующий:

1) создаете подчиненную запись;

2) указываете соответствие справочников в Terrasoft и 1C;

3) запускаете синхронизацию.

"Alimova Anna" написал:Павел, Вам необходимо к Продуктам привязать справочник кодов 1С, и использовать его при интеграции.

Спасибо за совет,Анна. Попробую и таким способом.
Например при интеграции счетов была похожая ситуация - нужно было перенести ответственных из счета в TS в счет 1С.
Там я действовал аналогичным образом - сначала синхронизировал справочник Контактов в TS и Сотрудников в 1С, чтобы ответственные получили значение Code1C и затем уже не требовалось создавать никаких подчиненных объектов, просто устанавливал соответствие Ответственный менеджер в 1С = Ответственный(OwnerID) в TS, и это прекрасно работало.
В этом случае я проделал абсолютно аналогичные действия.

"Alimova Anna" написал:Павел, Вам необходимо к Продуктам привязать справочник кодов 1С, и использовать его при интеграции.

Порядок действий следующий:

1) создаете подчиненную запись;

2) указываете соответствие справочников в Terrasoft и 1C;

3) запускаете синхронизацию.


Данный подход не подойдет в данной ситуации. Так как создать подчиненный элемент Ставка НДС можно для объекта синхронизации Продукт, но установить поле родителя для таблицы в TS tbl_StavkaNDS не получится, так как его просто нет. В этой таблице нет поля OfferingID, оно по смыслу там не должно быть, так как в этой таблице всего 3 записи( без НДС, 10% и 18%), если бы там было поле OfferingID, то записей в ней было бы столько же сколько продуктов, для каждого по одной - но этого совершенно не требуется. По сути таблица tbl_StavkaNDS является перечислением.
Поэтому необходимо настроить корректную работу соответствия полей(СтавкаНДС -- StavkaID) именно в главном объекте продукт.
Постараюсь путем отладки найти более конкретную причину ошибки, описанной в начале темы.

Причина проблемы нашлась.
Искать нужно было именно в том направлении, в котором посоветовал проверить Максим.
В в sq_StavkaNDS отсутствовал фильтр по параметру ID, как только его добавил, поле Ставка НДС корректно проэкспортировалась в 1С.
Спасибо всем за советы.

Фильтр по ID добавляю "на автомате" во все sq_* поэтому даже не вспомнил о нем =)

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

Внезапно банальная задача не решилась "в лоб".

Задача стоит таким образом - создаем счет в ТС, экспортируем его в 1С, потом надо счету в ТС присвоить номер, который ему прикрутила 1С.

Сначала настроил интеграцию Счетов, табличных частей - все ок, счета улетают в 1С. Но при импорте из 1С (другая интеграция, связь та же, настроено соответствие только полей номеров). Разнообразные пляски с бубном не помогли.

Решил сделать еще проще - в скрипте интеграции в функции OnBeforeRecordImport тупо прописал:

var InNumber = Select1C[QueryLink].НомерДок;
//Log.Write(1, InNumber);
Dataset('InvoiceNumber') = InNumber;

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

В итоге появилось несколько вопросов - если синхронизация записей осуществляется по полям Code1C, Date1C, Object1C - то что происходит при экспорте в 1С с полями Code1C и Date1C? По идее, ведь в них и при экспорте должны сразу загоняться значения из 1С, иначе повторный экспорт не увидит связи между записями?

Нравится

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

Уже стало приметой - стоит после того, как что-то не получается, решиться таки напрячь саппорт, как через 15 минут все решаешь сам :-)

Все решилось просто:

function OnAfterRecordExport(Param, Dataset, Select1C) {
var InCode = Dataset('Code1C');
Dataset.Edit();
Dataset('InvoiceNumber') = InCode;
Dataset.Post();

}

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

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

Реализовать экспорт/импорт при помощи ярлыка удалось, добавив в объект ярлыка соответствующие данные:
/cfg=TS_PT /usr=Supervisor /pwd=*** /wnd=wnd_AutoRun1C /Dataflow1CID="{B58A5A01-345F-4E6B-B928-301C5BF16594}"
/run1Cexport=1

/cfg=TS_PT /usr=Supervisor /pwd=*** /wnd=wnd_AutoRun1C /Dataflow1CID="{B58A5A01-345F-4E6B-B928-301C5BF16594}"
/run1Cimport=1

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

Нравится

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

Здравствуйте Павел,
Предлагаю вам ознакомится со статьей "Running an exe or program as SQL Server Job"
http://sushantp.wordpress.com/2008/05/05/running-an-exe-or-program-as-s…
и последовать указанным рекомендациям, и запускать TSClient с ключами которые описаны в вашем посте. Ключевая идея задать шаг job'а "Operating system (CmdExec)"
1
Если возникнут, какие, либо трудности обращайтесь

Алексей,спасибо за ответ.

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