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

Ошибка экспорта. Не удалось записать: "Договоры контрагентов"!Возникла при экспорте записи: ааааааааааааааааааааааа

'RecordID' значение атрибута не определено

Нравится

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

Скорей всего при экспорте Контрагентов вы не заполняете некоторые обязательные поля в 1С.
В настройке синхронизации Договоров у вас стоит галочка "создавать группы"?

нет, галочка не стоит. а как понять какие поля обязательные в 1С?
Еще есть проблема с экспортом счетов. Созданный счет экспортируется, но в 1С, его не видно.

1) Обязательность полей зависит от вашей конкретной конфигурации 1С.
Как вариант, попробуйте создать в новый Договор контрагента, очистить все поля и попробовать сохранить, 1С выдаст вам список полей...
2) Попробуйте открыть пункт меню: Операции - Документы - Имя вашего документа, убедитесь что у вас не стоят никакие фильтры по дате в реестре счетов.

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

Ошибка экспорта. 'СПокупателем' - определение отсутствуетВозникла при экспорте записи: Основной договор

Если поле "С покупателем", то ошибка:

Ошибка экспорта. Предполагается наличие ';'Возникла при экспорте записи: С покупателем

Пробовал после значения по умолчанию ставить ;, но все равно возникает та же ошибка:

Ошибка экспорта. Предполагается наличие ';'Возникла при экспорте записи: С покупателем

С нетерпением жду Вашего ответа

Вам нужно конкретно указать из какого перечисления:

Перечисления.ИмяПеречисления.СПокупателем

Спасибо, помогло. Часть записей обновляется при экспорте, а часть с ошибками (примерно половина). Ошибка следуюцая

Ошибка экспорта. Не удалось записать " договор займа (Договоры контрагентов)"!Возникла при экспорте записи: договор займа

при клике на ошибку:

'RecordID' значение атрибута не определено

Из-за чего это может возникать? Ведь Все эти записи были импортированы из 1С и все нужные поля должны быть заполнены?

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

1)По воводу ошибки экспорта, нужно поставить отладчик в функции OnBeforeRecordExport
и проверить заполненость всех полей:
Param.Obj1C.String(Select1C.Организация)
........................................
Выявить какие заполнены, а какие нет, потом в 1С заполнить такими же значениями карточку и попробовать сохранить, 1С при этом даст более подробное описание ошибки.

2)Экспорт табличной части.
Проблема в том, что в 1С у записей в табличных частях нет уникального идентификатора.
И при экспорте непонятно какую именно запись обновлять (признак "ключевое поле" не влияет на экспорт).
Возможно вам поможет галочка "очищать табличную часть" в карточке настройки синхронизации.
Еще вариант в качестве ключевого признака использовать порядковый номер записи в 1С, но для этого прийдется изменить некоторые скрипты...

По пункту 1, добавил код:

//Если функция вернет значение true то "Write" не произойдет
function OnBeforeRecordExport(Param, Dataset, Select1C) {
//
ShowInformationDialog(
'1. '+Param.Obj1C.String(Select1C.Код)+"\r\n"+
'2. '+Param.Obj1C.String(Select1C.Наименование)+"\r\n"+
'3. '+Param.Obj1C.String(Select1C.Владелец)+"\r\n"+
'4. '+Param.Obj1C.String(Select1C.Родитель)+"\r\n"+
'5. '+Param.Obj1C.String(Select1C.Комментарий)+"\r\n"+
'6. '+Param.Obj1C.String(Select1C.ВалютаВзаиморасчетов)+"\r\n"+
'7. '+Param.Obj1C.String(Select1C.Организация)+"\r\n"+
'8. '+Param.Obj1C.String(Select1C.ПроцентКомиссионногоВознаграждения)+"\r\n"+
'9. '+Param.Obj1C.String(Select1C.СпособРасчетаКомиссионногоВознаграждения)+"\r\n"+
'10. '+Param.Obj1C.String(Select1C.ТипЦен)+"\r\n"+
'11. '+Param.Obj1C.String(Select1C.ВидДоговора)+"\r\n"+
'12. '+Param.Obj1C.String(Select1C.УчетАгентскогоНДС)+"\r\n"+
'13. '+Param.Obj1C.String(Select1C.ВидАгентскогоДоговора)+"\r\n"+
'14. '+Param.Obj1C.String(Select1C.РасчетыВУсловныхЕдиницах)+"\r\n"+
'15. '+Param.Obj1C.String(Select1C.РеализацияНаЭкспорт)+"\r\n"+
'16. '+Param.Obj1C.String(Select1C.ВидВзаиморасчетов)+"\r\n"+
'17. '+Param.Obj1C.String(Select1C.Дата)+"\r\n"+
'18. '+Param.Obj1C.String(Select1C.Номер)+"\r\n"+
'19. '+Param.Obj1C.String(Select1C.СрокДействия)+"\r\n"+
'20. '+Param.Obj1C.String(Select1C.УстановленСрокОплаты)+"\r\n"+
'21. '+Param.Obj1C.String(Select1C.СрокОплаты)+"\r\n"+
'22. '+Param.Obj1C.String(Select1C.НаименованиеДляСчетаФактурыНаАванс)+"\r\n"+
'23. '+Param.Obj1C.String(Select1C.ПорядокРегистрацииСчетовФактурНаАвансПоДоговору)+"\r\n"+
'24. '+Param.Obj1C.String(Select1C.НалоговыйАгентПоОплате)
 
);
}

Результаты вывода для 4 записей. Записи в красной рамке вызывают ошибку. И естественно, что при добавлении в 1С с такими данными "Договор" добавляется.

Все четыре записи обновляют существующие в 1С Договоры?

Попробуйте с помощью отладки найти точную строку где происходит ошибка.
Если это строка Select1C.Write() [можно поставить перед ней debugger] то следовательно данные, которые передаются, не удовлетворяют условиям 1С.

Да, ошибка в строке Select1C.Write()
Все эти записи сначала были импортированы, а потом пробовал экспортировать.
Попробовал убрать значение по умолчанию для 1С "ВидДоговора". После этого стало всё экспортироваться, кроме созданных в TS записей.
Посему назрел такой вопрос. Что такое Param, Select1C в функциях обработчиках события экспорта/импорта? И как можно установить необходимые значения для полей в 1С, ведь не все они берутся из Dataset (откуда? например "ВалютаВзаиморасчетов")?

Select1C - СправочникОбъект
Предназначен для модификации элементов справочника. Позволяет изменять значения реквизитов элемента справочника и записывать его.
Важно! У всех событий этого объекта назначены предопределенные процедуры-обработчики. Имена процедур соответствует именам событий. Процедуры должны располагаться в модуле справочника.

Param - параметр типа "объект" содержащий в своих свойствах различные информационные сведения об импортируемой сущности(в основном все то, что мы указываем в карточке настройки синхронизации), а также ссылку на СОМ-объект 1С - Param.Obj1C с помощью которого мы создаем все остальные сущности 1С.

Пример использования:

Select1C.ВалютаВзаиморасчетов = Param.Obj1C.Справочники.Валюты.НайтиПоКоду("687")

сделал так, для экспорта договоров

function OnBeforeRecordExport(Param, Dataset, Select1C) {
	if (Param.Obj1C.String(Select1C.ВалютаВзаиморасчетов) != 'руб.') {
 
		Select1C.ВидДоговора = Param.Obj1C.Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
		Select1C.ВалютаВзаиморасчетов = Param.Obj1C.Справочники.Валюты.НайтиПоКоду("643");
		Select1C.Организация = Param.Obj1C.Справочники.Контрагенты.НайтиПоКоду("000000036");
		ShowInformationDialog(Param.Obj1C.String(Select1C.ВалютаВзаиморасчетов));
		ShowInformationDialog(Param.Obj1C.String(Select1C.ВидДоговора));
		ShowInformationDialog(Param.Obj1C.String(Select1C.Организация));
	}
}

При этом Select1C.Организация остается пустым. И собственно не хочет добавлятся в 1С запись. В чем может быть проблема. Остальные поля устанавливаются нормально.

С нетерпением жду Вашего ответа.

Очень сильно жду Вашего ответа

Я конечно не знаю вашу конфигурацию 1С, но почему вы ищете "Организацию" в справочнике "Контрагентов", а не в Справочники.Организации?

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