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

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

Нравится

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

Добрый день, Дмитрий.
Ответ на Ваш вопрос в Dataflow\General\Main Grid\scr_DataflowsGridArea.
Обработчик:

function amiRunImportOnExecute(ActionMenuItem, Sender) {
	ExecuteImport(dlData.Dataset);
}

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

switch (DataflowTypeID) {
		case (edtExcel) :
			var Workbook = System.EmptyValue;
			ExecuteImportFromExcel(DataflowID, Workbook, UpdateRecords);
			CollectGarbage();
			SendNotify(Self, 'RefreshHistoryDetail');
			break;
		case (edt1C) :
			var Attributes = GetNewDictionary();
			Attributes('IsMain') = true;	
			Attributes('IsShowError') = true;	
			scr_Dataflow1CUtils.ImportAllObject(DataflowID, Attributes);
			SendNotify(Self, 'RefreshHistoryDetail');
			break;
		default:
			ShowWarningDialog(msgDataflowTypeIsNotDefined);
			break;
	}

Таким образом, реализация Вашей задачи:
в произвольном месте раздела вызвать

    Attributes('IsMain') = true;	
    Attributes('IsShowError') = true;	
    scr_Dataflow1CUtils.ImportAllObject(DataflowID, Attributes);

Где DataflowID - ID записи настройки интеграции, узнать можно из Dataflow\General\Main Grid\sq_Dataflow. Не забудьте подключить scr_Dataflow1CUtils туда, откуда будет вызываться scr_Dataflow1CUtils.ImportAllObject(DataflowID, Attributes);

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

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

Есть задача обновить контрагенты из 1С (без добавления). Есть, например, контрагент "ООО Контрагент" с заполненным полем Code1C, но когда идет импорт, Террасофт как-будто не видит этого контрагента и создает нового (т.е. дубль). Так только с некоторыми контрагентами. В чем может быть причина? Думаю, дело может быть в том, что некоторые коды 1С в Террасофте заносились руками.

TS 3.4.0

Нравится

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

Проблема решилась. Забили прописать Object1C

Дмитрий, если будут дополнительные вопросы - обращайтесь.

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

Добрый день!
Вопрос такой: провожу импорт, затем после импорта есть необходимость обработать проимпортированные данные некоторым образом.
Влезла в скрипт Scr_DataflowExcelUtils там в функции function ExecuteImportFromExcel(DataflowID, Workbook, UpdateRecords, ServiceScriptID) определяю, что импорт мой ( if (DataflowID == 'нужныйID') ) и вот как дальше мне запустить обработку каждой проимпортированной записи?
Также уточняющий вопрос: насколько я понимаю, при импорте из Excel данные записываются напрямую в таблицу, минуя датасет, верно? Мне нужно чтобы каким-то образом сработал обработчик датасета.
Так же рассмотрю вариант прямого вмешательства в таблицу через SQL запрос :) Просто не хочется "мучить" все данные, достаточно было бы "разобраться" с только что проимпортированными, потому что объемы очень уж велики.

Нравится

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

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

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

Алена, по Вашему вопросу с функцией ExecuteImportFromExcel в scr_DataflowExcelUtils, ответ где-то здесь:

Dataflow\Library\scr_DataflowExcelUtils:

function ExecuteImportFromExcel(DataflowID, Workbook, UpdateRecords) {
 ....
    for (var i = 0; i < ItemsNode.Count; i++) {
     .....
       ImportObjects =	ImportDataByDestinationNode(Destination, Dataset,
				null, UpdateRecords);
     ....
    }
}
Показать все комментарии

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

Проблема такая: не заносятся некоторые письма в Террасофт из Аутлука, в чем причина, непонятно. Закономерность определить не удалось. Из-за чего такое может происходить? У меня на сохранение письма стоит запуск БП в функции SaveMailItem, но метод запуска БП стоит уже после сохранения письма.

Вот код функции на всякий случай:

//-----------------------------------------------------------------------------
// scr_MSOutlookLibrary
//-----------------------------------------------------------------------------

function SaveMailItem(MailItem, Options) {
        var CanSaveInDB = true;
        var Bindings = null;
        /* MODULE INCIDENTS */
        var Incident;
        /* ENDMODULE INCIDENTS */

        var IsInsertMode = MSOutlookLibrary.MailDataset.IsEmptyPage;
       
        if (Options.AutoBinding) {
                // AutoBinding mode
               
                // Check if message allready integrated
                if (!IsInsertMode) {
                        if (Options.IsManual) {
                                if (!Options.Silent) {
                                        ShowInformationDialog("Сообщение уже интегрировано в Terrasoft");
                                }
                        }
                        return;
                }
               
                Bindings = GetBindingMailLinks(MailItem, Options.IsReceiving);
                CanSaveInDB = (Bindings.Count > 0);
                /* MODULE INCIDENTS */
                if (Options.IsReceiving) {
                        Incident = GetIncidentDataBySubject(MailItem.Subject);
                        CanSaveInDB = (Bindings.Count > 0) || (Incident != null);
                        if (Incident) {
                                Options.AddLinks = [];
                                var Link = GetMessageLink('tbl_Incident', Incident.ID);
                                if (Link) {
                                        Options.AddLinks.push(Link);
                                } else {
                                        Incident = null;
                                }
                        }
                }
                /* ENDMODULE INCIDENTS */
        } else {
                // Manual integrate mode
                if (!Options.Links) {
                        Options.Links = [];
                }
                if (!Options.AllLinks) {
                        Options.AllLinks = [];
                }
                CanSaveInDB = (Options.Links.length > 0) ||
                        (Options.AllLinks.length > 0);
                /* MODULE INCIDENTS */
                var Incident = HasLink(Options.AllLinks, 'tbl_IncidentMessage');
                /* ENDMODULE INCIDENTS */
        }
       
        if (!CanSaveInDB) {
                if (Options.IsManual) {
                        RemoveOutlookMessageProperties(MailItem, false);
                        try {
                                MailItem.Subject = MailItem.Subject;
                                MailItem.Save();
                        } catch (e) {
                        }
                }
                return;
        }
        MSOutlookLibrary.IsChangeMessageFileSize = false;
        var MaxFileSize = GetSystemParameterValueEx('MSOutlookMaxFileSize', false);    
        if (MailItem.Size/1048576 > MaxFileSize) {
                RemoveAllMailEmbeddedAttachment(MailItem);
                MSOutlookLibrary.IsChangeMessageFileSize = true;
        }
        var FileName = SaveMailItemToFile(MailItem, false);
        if (MSOutlookLibrary.IsChangeMessageFileSize) {
                MSOutlookLibrary.MessageFileSize = GetFileSize(FileName);
        }
        var MessageID = SaveMailItemToDatabase(MailItem, Options.IsReceiving);
        if (!MessageID) {
                return;
        }
       
        var ContentDataset = GetSingleItemByCode('ds_MailMessageContent');
        var ContentField = ContentDataset.DataFields.ItemsByName('MessageContent');
        ContentField.IsEnabled = true;
        ApplyDatasetIDFilter(ContentDataset, MessageID, true);
        ContentDataset.Open();
        try {
                if (!IsDatasetEmpty(ContentDataset)) {
                        ContentDataset.Edit();
                        if (ContentField) {
                                ContentField.LoadFromFile(FileName);
                                ContentDataset.Post();
                        }
                }
        } finally {
                ContentDataset.Close();
                ApplyDatasetIDFilter(ContentDataset, null, false);
        }
        if (Bindings && (Bindings.Count > 0)) {
                InsertNewLinks(Bindings, MessageID, Options.Links);
        }
        InsertAddLinks(Options.Links, MessageID);
        InsertAddLinks(Options.AddLinks, MessageID);
       
        var Session = GetMAPISession();
        var MapiMessage = Session.WrapMessage(MailItem.MAPIOBJECT);
        MapiMessage.SetSMTPHeader('X-TSMessageID', MessageID);
        var TSFlag = true;
        if (Options.AutoBinding) {
                TSFlag = !!Bindings && (Bindings.Count > 0);
        }
       
       
        //--------------------------------------------------------------------------
        //MY_WORK
        //--------------------------------------------------------------------------
        var ContactID = Connector.CurrentUser.ContactID;
        var UserID = GetDatasetFieldValueFromDatasetByUSI('ds_User', 'UserContactID', ContactID, 'ID');
        var UserInGroup = Services.GetNewItemByUSI('ds_UserInGroup');
        ApplyDatasetFilter(UserInGroup, 'UserID', UserID, true);
        UserInGroup.Open();
        var Flag2 = false;
        for (UserInGroup.GotoFirst(); !UserInGroup.IsEOF; UserInGroup.GotoNext()){
                if (UserInGroup('GroupID') == '{2858B193-8FC6-4D36-BD55-A6F80D69590B}') {
                        Flag2 = true;          
                }
        }
        UserInGroup.Close();
        Cycle = 0;
        if (Flag2 == true) {
                var RecordID = MessageID;
                var RecipientAddress = GetDatasetFieldValueByID('ds_MailMessage', RecordID, 'RecipientAddress');
                var SenderAddress = GetDatasetFieldValueByID('ds_MailMessage', RecordID, 'SenderAddress');
//для СБЕРБАНКА
                if (!!~SenderAddress.indexOf('servicedesk@mail.ca.sbrf.ru') ||
                !!~SenderAddress.indexOf('sasmolin@sberbank.ru') ||
                !!~SenderAddress.indexOf('iskonovchenko@sberbank.ru') ||
                !!~SenderAddress.indexOf('anvegorov@sberbank.ru')) {
                        CreateIncidentSB(RecordID);    
//для Х5
                } else if (!!~SenderAddress.indexOf('noreply@x5.ru')) {  
                        CreateIncident(RecordID);
//для отчетов диспетчера
                } else if (!!~SenderAddress.indexOf('oss@c-centre.ru')){
                        CreateIncidentReport(RecordID);
                }
        }  
        //--------------------------------------------------------------------------
        //END OF MY_WORK
        //--------------------------------------------------------------------------
       
       
        /* MODULE INCIDENTS */
        if (!Options.AutoBinding) {
                TSFlag = HasOtherLink(Options.AllLinks, 'tbl_IncidentMessage');
        }
        MapiMessage.SetProperty(IntegrateSDUserPropertyName, mptBoolean, !!Incident);
        /* ENDMODULE INCIDENTS */
        MapiMessage.SetProperty(IntegrateTSUserPropertyName, mptBoolean, TSFlag);
        try {
                MapiMessage.Save();
        } catch (e) {
        }
        /* MODULE INCIDENTS */
        if (Incident) {
                AddReminderByIncident(Incident);
        }
        /* ENDMODULE INCIDENTS */
        return true;
}

Нравится

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

Поправка: не заносятся именно автоматически письма, в ручную заносятся.

В настройках E-mail все галки стоят

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

да есть такой контакт. Дело в том, что иногда два письма почти совершенно одинаковых (один и тот же шаблон, регулярные сообщения). Но одно занеслось, а другое нет. Проверяли так, выделили все письма за промежуток времени, и нажали "Автопривязка", он нашел из 20 где-то 5 не занесенных в Террасофт, хотя синхронизацию и террасофт не выключали. Почему-то иногда он пропускает письма. какие еще могут быть причины?

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

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

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

Синхронизируемся с Outlook, периодически выскакивает такое окно:

Можно ли это как-нибудь отключить или настроить интервал этого уведомления?

Нравится

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

Добрый день!

Для решения данной проблемы можно увеличить значение (60 мин. и более) системного параметра «UpdateActiveSessionPeriod»:

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

Настройка выполняется в разделе «Администрирование». Запрет\Разрешение можно давать как пользователям так и группам:

Необходимо перейти в меню Инструменты, раздел Администрирование, вкладка Конкурентные лицензии, меню Разрешения на продукты лицензирования.

В данном разделе Вы сможете настроить права использования лицензий.

С уважением,
Белецкий Арсений
Группа компаний Terrasoft

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

Всем привет. Необходимо вызвать TS-окно из C#-проекта, причем заменить стандартный обработчик нажатия кнопки ОК на свой. Указанный ниже код определяет свой обработчик, но по нажатию кнопки ОК срабатывает и мой обработчик, и стандартный. Как можно избавиться от стандартного обработчика?

var wnd = (TSWindowLibrary.Window) _tsConnector.Services.GetNewItemByUSI("someWnd");

var button = (TSWindowLibrary.Button) wnd["btnOK"];
button.OnClick += control =>
      {
            MessageBox.Show("Работает!");
      };

wnd.Prepare();
wnd.ShowModal();

Нравится

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

Здравствуйте, Олег.

Так не пойдет?

button.OnClick = control =>
      {
            MessageBox.Show("Работает!");
      };

Нет, "The event 'OnClick' can only appear on the left hand side of += or -=".

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

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

Или, пойти с другой стороны, отписаться от базового события функцией конфигурации:

UnsubscribeFromEvent(ObjectID, ObjectMethodName);

(см. функцию function SetObjectEventDispatcher(ScriptableService, ObjectInstance, ObjectID, ObjectMethodName, ScriptMethodName, только вместо EventsDispatcher.SubscribeForEvent - EventsDispatcher.UnsubscribeFromEvent(ObjectID, ObjectMethodName);).

Спасибо, помогла функция EventsDispatcher.UnsubscribeFromEvent().

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

В dll террасофта наблюдаю дублирующиеся интерфейсы название> и Iназвание> (например, Connector и IConnector в TSObjectLibrary). Есть ли разница, какой из них использовать под .Net?

Нравится

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

Добрый день!

Часть I - означает интерфейс. Собственно, какой вариант заработает - тот можете и использовать :smile:

Советую ознакомится со следующей статьей:
http://www.community.terrasoft.ua/forum/topic/6829

Жалко у нас нельзя лайков на комментарии ставить

"Гакало Игорь Александрович" написал:Собственно, какой вариант заработает - тот можете и использовать

+1

Ага, причем работают-то оба :)

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

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

Вопрос по синхронизации с MS Outlook. Заметили тут, что письма синхронизируются с Террасофтом только из папки Входящие, а что если письма сваливаются в другую папку? Можно ли это как-нибудь поправить?

Нравится

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

Дмитрий, приветствую!

Дело в том, смотря как у Вас письма попадают в другую папку.
Если стоит признак в настройках пользователя - [Автопривязка принимаемых сообщений], то при поступлении письма в папку Входящие - оно должно привязываться.

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

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

С уважением,
Белецкий Арсений
Группа компаний Terrasoft

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

Версии продуктов: тестировал на 3.4.0.138, у клиента 3.4.0.54
Автопривязка принимаемых сообщений включена.

В Outlook делал так: создал папку с именем Test --> пришло письмо --> правой кнопкой по письму, создать правило --> поставил фильтрацию по адресу отправителя, поставил галку "переместить в папку" и выбрал свою папку. Теперь все письма с этого адреса попадают в эту папку, но не попадают в Террасофт, причем, другие письма, попадающие в папку "Входящие", в Террасофт попадают без проблем.

Дмитрий, я протестировал у себя на 3.4.0.148 - работает.
Мне кажется, что то письмо, которое Вы присылаете изначально не может привязаться в систему.

Проверьте адрес отправителя, сможет ли по нему письмо попасть в систему?
Также, если добиться результата так и не получиться, то прошу направить на support@terrasoft.ru ссылку на скачивание базы для тестирования.

С уважением,
Белецкий Арсений
Группа компаний Terrasoft

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

Можете подсказать как определить, как называется справочник "Контрагенты" в таблице БД Oracle?

Нравится

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

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

Таблица раздела контрагент называется tbl_Account.

Определить названия можно либо в TS Admin, либо в Toad:

1

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

Стоит задача периодического переноса записей определенного типа (содержимого) из БД сайта Drupal на хостинге в локальную базу Terrasoft.
Возможно кто-то сталкивался с подобной задачей?

Я представляю такое решение:
1. сервис на сервере, который по запросу клиента делает выборку нужных данных БД и сериализует результат;
2. клиент, который обращается к сервису, десериализует результат и вставляет в локальную БД.

Если ли модули Drupal для серверной части и Terrasoft для клиентской, в которых реализовано что-то подобное?

Нравится

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

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

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

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