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

Настроил Экспорт справочников, документов из Террасофт 3.5.1 в 1С 8.3.
Все экспортируется за исключением ИНН, КПП и т.п. из Платежных реквизитов и единица измерения из Продуктов.

Настраивал по разному, последний вариант для ИНН такой:

Но ИНН не хочет экспортироваться.

По Продуктам также все хорошо экспортируется кроме поля единица измерения:

Подскажите, как правильно экспортировать данные поля?

Нравится

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

ИНН, КПП хранится в том же справочнике в 1с или нет? Если в том же - некорректно указана связь, по-моему должна быть ссылка, а не родитель.
С единицами измерения: по-моему там сделано хитро. Это табличная часть и писать нужно в нее. А основной реквизит заполняется из табличной части "на лету" с признаком "основной" или как-то так.

пс: лично я делал ИНН, КПП экспорт кодом (у меня в 1-м контрагенте может быть только 1 расчетный счет) и тоже самое с ЕдИзм.

OnBeforeRecordExport:

//рассчетные счета	
	var AccountID = Dataset('ID');
	var AccBillingInfoDS = Services.GetNewItemByUSI('ds_AccountBillingInfo');
	AccBillingInfoDS.DisableEvents();
	ApplyDatasetFilter(AccBillingInfoDS, 'AccountID', AccountID, true);
	AccBillingInfoDS.Open();
	if(AccBillingInfoDS.IsEOF) {
		Select1C.ИНН = null;
		Select1C.КПП = null;
		Select1C.КодПоОКПО = null;
		Select1C.КодПоОКОНХ = null;
		Select1C.Руководитель = null;
		Select1C.ДолжностьРуководителя = null;
		Select1C.ОснованиеДействия = null;
	} else {
		Select1C.ИНН = AccBillingInfoDS('INN');
		Select1C.КПП = AccBillingInfoDS('KPP');
		Select1C.КодПоОКПО = AccBillingInfoDS('OKPO');
		Select1C.КодПоОКОНХ = AccBillingInfoDS('OKONX');
		Select1C.Руководитель = AccBillingInfoDS('FIO');
		Select1C.ДолжностьРуководителя = AccBillingInfoDS('Position');
		Select1C.ОснованиеДействия = AccBillingInfoDS('Ground');
	}

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

        var TblPartUnit = Select1C.ЕдиницыИзмерения;
	TblPartUnit.Очистить();
	var NewLine = TblPartUnit.Добавить();
	NewLine.ЕдИзм = Select1C.ЕдИзмБазовая;
	NewLine.Коэффициент = 1;

Спасибо, Дмитрий! С ИНН (КПП) с кодом получилось. ИНН грузятся в 1С, но, только в 1С подсвечены красным и в карточке надпись: Неизвестен Вид контрагента. Укажите вид Контрагента:

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

Вот тут не подскажу. У меня такого поля нет. Но явно вы не заполнили какой-то реквизит при программном создании счета. Посмотрите в модуле объекта - там должна быть явная (код) обработка этого момента, узнайте название реквизита и заполняйте его нужным значением.

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

Дмитрий, с "Юр. лицом" все получилось. Имя реквизита было неверным - поменял на правильное и все заработало.
А вот с "Единицей Измерения" не получается, выскакивает ошибка:

Настройки в ТС такие:

В Справочнике ТС tbl_Unit есть связь по UID1C:

Что ещё не хватает для экспорта ЕдиницИзмерения?

Не-не, если через код - то подчиненной сущности не нужно. Удалите её, а код должен быть в сущности "Продукты", ведь именно у него есть табл. часть, а табл. часть у табл части нет :)

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

Код у меня был в сущности Продукты в OnBeforeRecordExport.
Удалил подчиненную сущность.
Ошибка возникает там же та же: "Объект не поддерживает это свойство или метод".
Содержание Select1C:

Вот настройки сущности Продукты:

у вас точно табл. часть есть такая?

а, кажется, я опечатался, должно быть ЕдиницыИзмерения, а не ЕдиницаИзмерения.

Да, я сразу поправил на ЕдиницаИзмерения.
Посмотрел в конфигураторе, да, табличной части нету:

Её можно просто создать по аналогии?

А ну тогда все совсем просто. Удаляете тот код, и добавляете в маппинг DefaultUnitID (поле в ТС )=ЕдиницаИзмерения (реквизит в тс).
Т.е. для эксопрта единицы измерения ни подчиненной сущности ни кода вам не надо (при условии если справочник вы уже в тс загрузили,и поля UID1C и Code1C заполнены).

Единственное меня смущают UID1C - у вас они без кавычек, а должны быть такими {bla-bla-bla}.
Т.е. если не будет работать - добавьте кавычки.

Да, я в начале так и делал, но выскакивала ошибка. Сейчас посмотрел у меня реквизит в 1С был "БазоваяЕдиницаИзмерения" - это из версии 1С 8.2. Т.к. загружал метаданные из версии 8.2 потом коннектился к 8.3. При загрузке метаданных из версии 8.3 - ничего не подгружалось и все загруженное из 8.2 обнулялось.
Поменял название реквизита на "ЕдиницаИзмерения" и все заработало!
Ошибка была в некорректном названии реквизита, т.к. они у меня загружены из версии 8.2.

Можно ли загрузить метаданные из версии 8.3? А то это уже не первая ошибка, связанная с неправильным названием реквизита.

Можно. У меня проблем не возникало при загрузке метаданных из 8.3. А что у вас? Дайте скриншот.

Спасибо, Дмитрий! Разобрался. В другой теме нашел такую же проблему и Ваше возможное решение.

Дмитрий, а если мне нужно в коде заполнить СтавкуНДС для экспорта в 1С, то какое значение подставлять ID, Code1C или Name из tbl_Tax?

Select1C.СтавкаНДС = 'ID'; 
или
Select1C.СтавкаНДС = 'Code1C';
или
Select1C.СтавкаНДС = 'Name';

Перечисление НДС в 1С и Таблицы tbl_Tax в ЕС связаны по Code1C:

Если хотите кодом, то с перечислениями работаем так:

var metalink = eval('Param.Obj1C.Перечисления.ТипыКонтактнойИнформации.' + Dataset('Code1C'));
Select1C.ТипКонтактнойИнформации = metalink; 

где Dataset('Code1C') - имя элемента перечисления (_не_ синоним).

Спасибо, Дмитрий!

Обнаружил глюк при отработке скрипта синхронизации

wnd_AutoRun1CScript

Периодически (но не всегда), после отработки функции

function TimerCloseOnTimer(Timer) {
	Self.Close();
}

Террасофт зависает с таким окном ошибки:

Отловить, почему выскакивает такая ошибка не получается. Как-то все происходит через раз при одинаковых действиях.
Причем это окно ошибки не висит, а "моргает", с частотой примерно пол секунды.
Что это такое и как с этим бороться?

Это вы что делаете? Можно поподробней? Я так понимаю настроили какой-то автозапуск интеграции?

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

Попробуйте подправить wnd_Main:

//[d.oleynik
	CloseEditWindows();
	//]
	CloseMainForm();
//[d.oleynik
function CloseEditWindows() {
	var Item;
	for (var i = 0; i < WinCache_Windows.length; i++) {
		Item = WinCache_Windows[i];
		if (Item.Instance) {
			if ((Item.Instance.IsVisible)) {
				try {
					Item.Instance.Close();		
				} catch(e) {}		
			}
		}
	}	
}
//]

Запускаю стандартный автозапуск интеграции через ярлык. Скрипт wnd_AutoRun1CScript:

function wnd_AutoRun1COnPrepare(Window) {      debugger;
    var DataflowID = Connector.Attributes('Dataflow1CID');                     
	var run1Cimport = Connector.Attributes('run1Cimport');
	var run1Cexport = Connector.Attributes('run1Cexport');
	if (IsEmptyGUID(DataflowID) || (!run1Cimport && !run1Cexport)) {
		return;
	}
	var ObjectID = Connector.Attributes('Dataflow1CObjectID');
	if (run1Cimport) {
		var Param = {};
		Param.IsMain = false;
		Param.IsShowError = false;
		Param.IsShowConnect = false;
		if (IsEmptyGUID(ObjectID)) {
			ImportAllObject(DataflowID, Param);
		} else {
			ImportObject(DataflowID, ObjectID);
		}
	}
	if (run1Cexport) {
		if (IsEmptyGUID(ObjectID)) {
			ExportAllObject(DataflowID, Param);
		} else {
			ExportObject(null, DataflowID, ObjectID);
		}
	}
	scr_Dataflow1CUtils.Disconnect(DataflowID, true);
}
 
function wnd_AutoRun1COnShow(Window) {
	TimerClose.IsEnabled = true;
}
 
function TimerCloseOnTimer(Timer) {
	Self.Close();
}

Если закомментировать TimerClose.IsEnabled = true, то ошибка не возникает, но окно wnd_AutoRun1C приходится закрывать вручную.

Правка wnd_Main результатов не дала.

Я делал свое окно, и проблем не возникает. Предлагаю сделать тоже самое:

1. Создайте сервис окна.
2. В невизуальных компонентах добавьте таймер.
3. В скрипте окна подключите скрипт scr_Dataflow1CUtils
3. Код примерно такой:

//-----------------------------------------------------------------------------
// wnd_AutoImportADLScript
//-----------------------------------------------------------------------------
 
 
function wnd_AutoImportADLOnPrepare(Window) {
	var DataflowID =  '{48CCFAA0-50B9-4378-8509-287ADF34599E}';
	//проверить флаг запущенной интеграции, если интеграция уже идет - не запускать повторно;
	if(GetIntegrationFlag()) {
		return false;
	}
	try {
		Activate1C();
		var Param = {};
		Param.IsMain = false;
		Param.IsShowError = false;
		Param.IsShowConnect = false;
		//установить флаг запущенной интеграци
		SetIntegrationFlag(1);
		ImportAllObject(DataflowID, Param);	
 
		ExportAllObject(DataflowID, Param);	
	} catch(e) {
		CatchError(e, arguments.callee);
	} finally { 
		scr_Dataflow1CUtils.Disconnect(DataflowID, true);
		SetIntegrationFlag(0);
	}	
}
 
function wnd_AutoImportADLOnShow(Window) {	
	Timer.IsEnabled = true;	
}
 
function TimerOnTimer(Timer) {
	Self.Close();
}
 
function GetIntegrationFlag() {
	var SQ = Services.GetNewItemByUSI('sq_GetIntegrationFlag')
	var DS = SQ.Open();
	if(DS('Flag')) {
		DS.Close();
		return true;
	} else {
		return false;
	}
}
 
function SetIntegrationFlag(IsSet){
	var UQ = Services.GetNewItemByUSI('uq_SetIntegrationFlag');
	SetParameterValue(UQ.Parameters, 'Flag', IsSet);
	UQ.Execute();
}

Спасибо, Дмитрий!
Ещё в ходе настройки интеграции возник вопрос: Как кодом работаем с справочником? К примеру нужно в Счета 1С Экспортировать Организацию. В ТС Организацию импортировал - есть ID и UID.

А вот как кодом экспортировать организацию в 1С в Счетах.

Select1C.Организация = '...';

Ниже - это как работаем с перечислением:

"Олейник Дмитрий" написал:

Если хотите кодом, то с перечислениями работаем так:

var metalink = eval('Param.Obj1C.Перечисления.ТипыКонтактнойИнформации.' + Dataset('Code1C'));

Select1C.ТипКонтактнойИнформации = metalink;

где Dataset('Code1C') - имя элемента перечисления (_не_ синоним).

Примерно так:

//[департамент
var DepartmentID = Dataset('DepartmentID');
var Departments = Param.Obj1C.Справочники.Департаменты;
var DepartmentUID1C = GetDatasetFieldValueByID('ds_Department', 
	DepartmentID, 'UID1C');
DepartmentUID1C = Param.Obj1C.NewObject('УникальныйИдентификатор', 
	DepartmentUID1C.replace('{', '').replace('}', ''));
var Department1C = Departments.GetRef(DepartmentUID1C);	

Department1C - это то, что нужно поместить в реквизит.

Попробовал:
Выдает ошибку: 1C:Enterprise 8.3.5.1517: Несоответствие типов (параметр номер '1')

эм, ну так вы пропустили строчку :)

DepartmentUID1C = Param.Obj1C.NewObject('УникальныйИдентификатор', 
        DepartmentUID1C.replace('{', '').replace('}', ''));
Показать все комментарии

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

Настраиваю синхронизацию 1С 8.3 и ТС 3.5.1.
К примеру Продукты из ТС в 1С нормально синхронизируются, если мы изначально экспортируем в 1С Продукт. Продукты связываются по UID1C-UUID (tbl_Offering).
Возможна ли обратная синхронизация - из 1С в Террасофт. К примеру мы обнулили в tbl_Offering поля связи UID1C и Object1C. В ТС и 1С есть продукты одинаковое у них название (связь по ID мы удалили). Каким образом опять получить связи по UID1C и Object1C существующих продуктов в 1С?

Нравится

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

Alex, я не совсем понял. У вас уже есть база продуктов в тс и в 1с, при этом названия уникальные, и вы хотите чтобы поля UID1C и Object1C заполнились?
Если так, и если вы точно уверены что 2-х продуктов в 1с с одинаковым названием нет - отключаете в маппинге поля UID1C и Object1C как ключевые, заливаете продукты с 1с по ключевому полю "Название", а затем меняете все обратно.

Спасибо, Дмитрий! Проверил на 100% с разными названиями - все сработало, UID1C и Object1C подтянулись в ТС.
А как быть в случае, если в 1С есть одинаковые названия?

Для такого и сделан маппинг по UUID :)
Посмотрите запросом в 1с есть ли такие продукты вообще. Если нет - вам повезло. Заливайте сейчас пока не поздно все продукты из 1с в ТС по ключевому полю "Наименование", и после заливки смените на UUID.
Если есть: тогда либо обработать такие ситуацию вручную,
либо удалить все продукты в ТС и залить их из 1С по маппингу UID1C, Code1C.

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

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

Добрый день!

У нас стоит CRM Террасофт версия версия 3.3.1.163

Создали фильтр "Удалить" Он отбирает тех клиентов, которых надо удалить из базы.
Сейчас CRM не дает удалять записи, если в них содержится информация какая-либо. (см. вложенный файл).
Как можно отфильтрованные записи удалить все и сразу, а не по одному контакту?

Спасибо

Нравится

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

Добрый день!

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

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

Добрый день!

Настраиваю Интеграцию 1С для экспорта Счетов из Террасофта 3.5.1 в 1С 8.3.

Счета экспортируются, кроме поля НДС.
Насколько я понял в 1С НДС не справочник, а перечисление. Как правильно провести Синхронизацию таблицы в ТС tbl_Tax и перечисления в 1С 8.3 ставкаНДС? Кнопка Экспорт Элемента для синхронизации НДС неактивна. ПРи импорте НДС в из 1С в ТС нет связи по UUID. Непонятно по какому поля связывать НДС между 1С и Террасофт.

Как правильно экспортировать НДС из Продуктов в Счетах в Номенклатуру 1С?

Нравится

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

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

var Tax1C = null;
switch(Dataset('TaxID')) {
    case(ttNDS):
    Tax1C = Param.Obj1C.Перечисления.ТипыКонтактнойИнформации.Адрес;
    break;
    case(ttNoNDS):
    Tax1C = Param.Obj1C.Перечисления.ТипыКонтактнойИнформации.Адрес;
    break;
}
Selec1C.РеквизитСТипомПеречисление = Tax1C; 

Думаю, можно и через простой маппинг, но я не помню как это работает - нужно смотреть код.

В ТС я импортировал Перечисление НДС из 1С:

Дальше не получится связать по какому-нибудь полю tbl_Tax с СтавкойНДС? Чтобы экспортировать в 1С таким образом?

Сейчас экспортируются все поля, кроме НДС.

По импорту, простой вариант есть заполнять реквизит через скрипт интеграции:
Это импорт через скрипт в 1с?

Это скрипт интеграции, событие OnBeforeRecordExport.

пс: по идее, утилита интеграции должна брать значение из поля Code1C, и подставлять его сюда:

Param.Obj1C.Перечисления.СтавкиНДС.Code1C

Возможно у вас неправильный маппинг, и вы в поле Code1C перенесли не Имя, а Синоним?
В итоге Param.Obj1C.Перечисления.СтавкиНДС.20% - это не корректно, вот поле и не заполняется.

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

var Tax1C = null;
switch(Dataset('TaxID')) {
    case(ttNDS):
    Tax1C = Param.Obj1C.Перечисления.СтавкиНДС.НДС18;
    break;
    case(ttNoNDS):
    Tax1C = Param.Obj1C.Перечисления.СтавкиНДС.БезНДС;
    break;
}
Selec1C.СтавкаНДС= Tax1C;

Дмитрий, да, у меня в Code1C был Синоним, а не Имя по причине отсутствия в списке выбора Имя. Проставил вручную значения Имя в Code1C и все заработало!
Единственный момент при экспорте в 1С В счете в 1С по умолчанию стоит "НДС сверху". А должно быть "НДС в сумме". Когда в 1С просто создаешь Счет, то по умолчанию проставляется как надо - "НДС в сумме".
Может сталкивались с этим, как сделать, чтбы по умолчанию при экспорте в 1С в Счете стояло "НДС в сумме"?

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

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

Как запретить выделять несколько записей в гриде, с помощью ctrl или shift?

Нравится

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

Здравствуйте. Нет, к сожалению это функционал визуального компонента (ядро). Можно только дописать пост обработку - к примеру в базовом реестре (wnd_BaseGridArea) для компонента grdData обработать OnClick или другие доступные события.
А бизнес задача какая?

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

Добрый день!
Помогите справится с этой ошибкой. У нас есть 2 ноутбука работающих удаленно с базой Terrasoft так вот там сейчас поставили Windows 8.1 английскую версию и перестал работать CRM. До этого стояла Win 7 русская и все работало. Когда настраиваешь программу то тест дает успешный а пытаешься войти дает ошибку "Eror opening configuration. Разрушительный сбой"
Что это может быть?

Нравится

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

Ставьте отладчик в Wnd_Main в функции OnPrepare(). Мне кажется, что проблема с часовыми поясами.

А подробнее можно? Пожалуйста!

1. Поставьте себе на этот ПК Visual Studio (в идеале) либо MS Script Debugger.
2. В реестре включаете отладчик (JitDebug = 1)
3. В ТС Администраторе в сервисе wnd_Main находите function wnd_MainOnPrepare(Window) { и в самом начале этой функции набираете
debugger;
4. Сохраняетесь и входите в ТС Клиент. Должен открыться отладчик, и там можно пройтись построчно по коду, и посмотреть где конкретно ошибка.

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

Последний вопрос! в реестре это там где ветка windows script/seting

Здравствуйте.
[HKEY_CURRENT_USER\Software\Microsoft\Windows Script\Settings]

Добрый день!
Не получается на удаленном ноуте войти ТС Администратор то же дает ошибку "Eror opening configuration. Разрушительный сбой"

Проверил в локальной версии все работает! Правда я новый файл создал TS.
А с существующей базой которая находится в Украине весит 16 гб не хочет пишет все время эту ошибку! Да не написал, сам ноут находится в Литве.

Здравствуйте.
Однозначно ответить сложно. Можно предположить, что проблема в несовпадении набора перечислений в сервисе enm_TimeZone и часовых поясов в системном реестре ОС: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
Если в реестре есть недостача по сравнению с конфигурацией, можно попробовать импортировать нужные ветки с альтернативной машины. Как вариант, установить значение системной настройки UseServerTimezone = 0.

Ок! Спасибо за ответ! Но смогу проверить только в понедельник!

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

Здравствуйте,
используем Terrrasoft CRM 3.3.2.. в связке с Oktell. У ряда пользователей есть права на лицензии Terrasoft Oktell Call Centre Operator 3.X. И при входе таких пользователей в систему появляется сообщение:
"Ошибка открытия конфигурации. Лицензия модуля 'call' не найдена". Запустить систему не получается.

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

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

Нравится

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

Добрый день, Анна!

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

Здравствуйте, Валерий. Спасибо за разъяснения.

1. Что касается прав.
- У группы "Все пользователи" есть права на чтение таблиц tbl_Contact и tbl_Account
- У группы "Все пользователи" есть права на чтение абсолютно всех контактов системе, в том числе и контактов пользователей. В подтверждение следующий запрос возвращает 0 строк.

select * from tbl_Contact c 
where not exists (select cr.ID from tbl_ContactRight cr
join tbl_AdminUnit au on au.ID=cr.AdminUnitID
where c.ID=cr.RecordID and au.Name = 'Все пользователи' and cr.CanRead=1)

- У группы "Все пользователи" есть права на чтение абсолютно всех контрагентов системы, в том числе и контрагентов, привязанным к контактам пользователей. В подтверждение следующий запрос возвращает 0 строк.

select * from tbl_Account a 
where not exists (select ar.ID from tbl_AccountRight ar
join tbl_AdminUnit au on au.ID=ar.AdminUnitID
where a.ID=ar.RecordID and au.Name = 'Все пользователи' and ar.CanRead=1)

- Кроме того все пользователи системы включены в группу "Все пользователи"

Может быть я что то еще упустила при проверке прав?

2. Дело в том, что поломка лицензий произошла после обновления таблицы tbl_Contact. Было добавлено новое поле. При этом сначала конкурентные лицензии перестали работать у пользователей С правами администратора. Затем после перезапроса лицензий получилась противоположная ситуация, и лицензии перестали работать у пользователей БЕЗ прав администратора.

Попробовала:
- Откатить сервис tbl_Contact на версию до изменений - не помогло
- Восстановила базу для теста из старого бэкапа, сделанного до внесения изменений в таблицу и снова пересохранила таблицу . Т.е. попробовала сделать другие изменения в таблице, а не добавление конкретного поля. Лицензии также перестали работать.

Каким образом обновление таблицы могло повлиять на лицензии ? Отмечу, что ранее таблица tbl_Contact уже изменялась и таких проблем не наблюдалось.

Здравствуйте, Анна.
Ситуация требует более тщательного анализа, чем обсуждение на Community. Благодарим за предоставленную базу. Вопросом занимается мой Коллега. По результату сразу сообщим.

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

добрый день,у меня возникла проблема с модулем интеграции терасофта с 1С,всё делал по инстукциям из этого топика : https://community.terrasoft.ru/catalog/3796?page=1#comment-52232
но у меня вылетает ошибка : Ошибка выполнения метода 'amiImportSingleOnExecute'. OLE error 80020102 «Call Stack»
как её исправить ?

Нравится

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

Эм, сложно что-то конкретное сказать.
Попробуйте закрыть Террасофт, почистить кеш (удалить папку по пути %appdata%\Terrasoft\версия\Cache) и попробовать снова.
Если ошибка опять возникнет: значит вы не правильно настроили сущность интеграции. Вижу что вы жмете на кнопку "Импортировать". Что именно вы импортируете? Какие настройки? Скриншоты в студию :)

как я уже сказал всё в точности по инструкциям из выше приведённого топика

Николай, установка утилиты (для поддержки 8.2) и импорт уже настроенной сущности (работа с утилитой) это вообще абсолютно разные вещи.
Вы даете линк на тему с установкой утилиты для поддержки интеграции с 8.2, а ошибка у вас при нажатии на кнопку "Импорт". Чтобы что-то импортировать, нужно вначале всё настроить. Тот топик к настройкам интеграции не имеет никакого отношения.

после чистки клинером синхронизация заработала,вот только не происходит импорт элементов (

Николай, предполагаю где-то есть ошибка.

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

Скриншот с настройками конкретной сущности в интеграции (которая зависает), её настройки маппинга полей, для начала.

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

У нас реализована раздельная автоматическая нумерация счетов и документов для разных юр.лиц нашей компании. То есть, если юр. лицо Xxx, то по маске для Xxx документам и счетам присваивается присваиваются соответствующие номера с префиксом X. Если Yyy - то с префиксом Y.
Для счетов в src_InvoiceEditScript по событию OKClick обрабатываем функцию btnOKOnClick(), где в зависимости от значения поля 'SupplierID' (поставщик) вызываем SetItemSystemNumber() с разными значениями.

function btnOKOnClick(Control) {
        var Dataset = dlData.Dataset;
        var DefaultValues = GetAttribute(Self, 'DefaultValues');
        var WorkflowItemID = Dataset.ValAsStr('WorkflowItemID');
        if (Dataset.State != dstInsert) {
                if (!ClearVises('InvoiceVises', 'InvoiceID', Dataset('ID'))) {
                        return;
                }
        }
    var oDate = new Date();
    var DYear = oDate.getYear();
    DYear = DYear - 2000;
    var SYear = DYear.toString();
        if (Dataset.Values('InvoiceNumber') == null) {         
                if (Dataset.Values('SupplierID') == '{7F8B1E5C-C450-47C6-B770-1AF0CBCAF591}') {
                //ShowConfirmationDialog(Dataset.Values('SupplierID'));
            SetItemSystemNumber('InvoicePro', Dataset, 'InvoiceNumber');
            } else
                if (Dataset.Values('SupplierID') == '{933958B9-E358-4A98-8A02-5BAD9AC869A8}') {
            SetItemSystemNumber('InvoiceIp', Dataset, 'InvoiceNumber');
            } else
            if (Dataset.Values('SupplierID') == '{61773DB2-980C-49F2-881D-8BD59EC1A0AA}') {
            SetItemSystemNumber('InvoiceTch', Dataset, 'InvoiceNumber');
            } else
            if (Dataset.Values('SupplierID') == '{006B2B81-D597-40E9-A4EC-73171D224F5C}') {
            SetItemSystemNumber('InvoiceBLD', Dataset, 'InvoiceNumber');
            } else
                if (Dataset.Values('SupplierID') == '{084FA6BB-4421-4E23-9641-1E8D11D407C8}') {
                SetItemSystemNumber('InvoiceGms', Dataset, 'InvoiceNumber');
            } else {
            SetItemSystemNumber('Invoice', Dataset, 'InvoiceNumber');
            }
            var GeneratedNumber = Dataset.Values('InvoiceNumber') + '/' + SYear;
                  Dataset.Values('InvoiceNumber') = GeneratedNumber;
        }      
        InvoiceEdit.IsCompleting = true;
        if (CheckItemNumberDuplicate('Invoice', Dataset, 'InvoiceNumber',
                "Счет")){
                if (!scr_BaseDBEdit.btnOKOnClick(Control)) {
                        return;
                }
        }
        var IsCreatedByDocumentID = Self.Attributes('IsCreatedByDocumentID');
        if (IsCreatedByDocumentID) {
                if (ShowConfirmationDialog("Перейти к созданному счету?") == wmrYes) {
                        GotoWorkspace('wnd_InvoicesWorkspace', BaseDBEdit.RecordID);
                }
        }
        if (Self.IsVisible) {
                return;
        }
        ProcessWorkflowItem(WorkflowItemID);
}

Аналогичным реализована работа с названиями для документов в src_DocumentEditScript:

function dlDataOnDatasetBeforePost(Dataset, DoPost) {
    var oDate = new Date();
    var DYear = oDate.getYear();
    var DMonth = oDate.getMonth()+1;
    var DDate = oDate.getDate();
    DYear = DYear - 2000;    
    var SYear = DYear.toString();
    if (DMonth10)
     {
      var SMonth = '0' + DMonth.toString();
     }
    else {
          var SMonth = DMonth.toString();
         }
        if (DDate10)
         {
          var SDate = '0' + DDate.toString();
         }
        else {
          var SDate = DDate.toString();
         }  
    var DocumentTypeID = Dataset('DocumentTypeID');    
        if (Dataset.Values('DocumentNumber') == null) {
            if (DocumentTypeID == '{D8525E18-F8FE-4583-9E54-CA43A7129C45}' || DocumentTypeID == '{DE983B1A-6CF3-4A79-AF34-DCB6A2D0DB76}') /* Акт и Торг12 */
             {
                  var InvoiceID = Dataset.Values('InvoiceID');
              if (InvoiceID != null) {
                        var InvoiceDataset = Services.GetNewItemByUSI('ds_Invoice');
                    ApplyDatasetFilter(InvoiceDataset, 'ID', InvoiceID, true);
                    InvoiceDataset.Open();
                    var InvoiceSupplierID = InvoiceDataset('SupplierID');
                    InvoiceDataset.Close();
                  }
                  else {
                        MessageBox("Нет привязанного счета!");
                  }
                  if (InvoiceSupplierID == '{7F8B1E5C-C450-47C6-B770-1AF0CBCAF591}') {
                SetItemSystemNumber('DocumentPro', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              } else
                  if (InvoiceSupplierID == '{006B2B81-D597-40E9-A4EC-73171D224F5C}') {
                SetItemSystemNumber('DocumentBLD', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              } else
                  if (InvoiceSupplierID == '{933958B9-E358-4A98-8A02-5BAD9AC869A8}') {
                SetItemSystemNumber('DocumentIp', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              } else
              if (InvoiceSupplierID == '{61773DB2-980C-49F2-881D-8BD59EC1A0AA}') {
                SetItemSystemNumber('DocumentTch', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              } else
              if (InvoiceSupplierID == '{084FA6BB-4421-4E23-9641-1E8D11D407C8}') {
                SetItemSystemNumber('DocumentBgm', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              } else {
                SetItemSystemNumber('Document', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              }
             }    
            else if (DocumentTypeID == '{584720AE-7F93-461B-BE79-AFA15A4D85D4}') /* Входящий */
             {
              SetItemSystemNumber('DocumentVI', Dataset, 'DocumentNumber');
              var ii = 0;
              var array = Dataset.Values('DocumentNumber').split("");
              for(var i = 0; i array.length; i++)
               {
                if (array[i] == '№')
                 {
                  var ii = 1;
                 }
                   }
              if (ii != 1)
               {
                var GeneratedNumber = 'ВХ-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;    
               }
             }
            else if (DocumentTypeID == '{EFFB172C-B755-4E77-BFC8-3B121140C74F}') /* Исходящий */
             {
              SetItemSystemNumber('DocumentVI', Dataset, 'DocumentNumber');
              var ii = 0;
              var array = Dataset.Values('DocumentNumber').split("");
              for(var i = 0; i array.length; i++)
               {
                if (array[i] == '№')
                 {
                  var ii = 1;
                 }
                   }
              if (ii != 1)
               {
                var GeneratedNumber = 'ИСХ-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;    
               }
             }
            else if (DocumentTypeID == '{DD6B6F0E-FD7B-42EF-95D0-486A2EFC02B3}') /* Счет-фактура */
             {
                  var InvoiceID = Dataset.Values('InvoiceID');
              if (InvoiceID != null) {
                        var InvoiceDataset = Services.GetNewItemByUSI('ds_Invoice');
                    ApplyDatasetFilter(InvoiceDataset, 'ID', InvoiceID, true);
                    InvoiceDataset.Open();
                    var InvoiceSupplierID = InvoiceDataset('SupplierID');
                    InvoiceDataset.Close();
                  }
                  else {
                        MessageBox("Нет привязанного счета!");
                  }
                  if (InvoiceSupplierID == '{7F8B1E5C-C450-47C6-B770-1AF0CBCAF591}') {
                        SetItemSystemNumber('DocumentIF', Dataset, 'DocumentNumber');
                var GeneratedNumber = 'СФ-БПР-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;
              } else
                  if (InvoiceSupplierID == '{933958B9-E358-4A98-8A02-5BAD9AC869A8}') {
                        SetItemSystemNumber('DocumentIF', Dataset, 'DocumentNumber');
                var GeneratedNumber = 'СФ-ДНБ-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;
              } else                                                                      
                  if (InvoiceSupplierID == '{006B2B81-D597-40E9-A4EC-73171D224F5C}') {
                        SetItemSystemNumber('DocumentIF', Dataset, 'DocumentNumber');
                var GeneratedNumber = 'СФ-БЛД-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;
              } else                                                                      
              if (InvoiceSupplierID == '{61773DB2-980C-49F2-881D-8BD59EC1A0AA}') {
                        SetItemSystemNumber('DocumentIF', Dataset, 'DocumentNumber');
                var GeneratedNumber = 'СФ-ТЧК-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;
              }                                                                          
              if (InvoiceSupplierID == '{084FA6BB-4421-4E23-9641-1E8D11D407C8}') {
                    SetItemSystemNumber('DocumentIfBgm', Dataset, 'DocumentNumber');
                var GeneratedNumber = 'СФ-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;
              }                                                                          
              else {
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              }    
             }
            else {
              SetItemSystemNumber('Document', Dataset, 'DocumentNumber');
              var GeneratedNumber = Dataset.Values('DocumentNumber');
             }
             var GeneratedNumber = Dataset.Values('DocumentNumber') + '/' + SYear;
             Dataset.Values('DocumentNumber') = GeneratedNumber;
     }
}

Так было заведено несколько юр. лиц и для них всё замечательно работало. Сейчас я добавил ещё одно юр. лицо. Раздельная автоматическая нумерация с нужным префиксом по маске работает замечательно, но в отчётах по документам и счетам (ТОРГ-12, счет-фактуры, счтеа и др.) выводится только футер (там только одно статическое поле memo не связанное не получающие никаких данных ни из каких датасетов).

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

Нравится

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

что-то я не уловил связи между нумерацией и отчетами


но в отчётах по документам и счетам выводится только футер

И? Тоже не понял в чем проблема. В отчетах номер не выводится вообще или как?

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

Здравствуйте.
Нужна помощь, в реализации следующего функционала:
В разделе Счета формируется отчет, и сохраняется в БД на деталь "Файлы в продажах", ID нового файла есть. Нужно открыть новый файл (и подписаться на его изменение) из детали "Файлы в продажах" находясь в разделе Счета, т.е. сразу после формирования и сохранения отчета не переходя в другой раздел.
С открытием проблем нет (wnd_FilesDetailGridArea.grdData.grdDataOnDblClick - тут все понятно), но подписаться не получается нужно "находиться" в scr_FilesGridArea (fnFiles.SubscribeFileEvents(FileName, RecordID);).
Получается нужно послать сообщение детали в другом разделе и обработать в нем код аналогичный grdDataOnDblClick, но как получить wnd_FilesDetailGridArea из другого раздела и в случае если его еще не разу не открывали проинициализировать раздел и деталь?

Возможно есть более простое решение, подскажите.
Спасибо.

Terrasoft CRM 3.4.0.130

Нравится

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

делал что-то похожее, подписывался из совсем другого места так:

var Self = Services.GetNewItemByUSI('wnd_FilesDetailGridArea');
	var fnFiles = Self.ComponentsByName('fnFiles');
	fnFiles.UnsubscribeFileEvents(FileID);
	fnFiles.SubscribeFileEvents(FileName, FileID);	
Показать все комментарии