С импортом разобрались. Теперь дело за экспортом данных из Террасофта в 1С.
Проблема в следующем:
Если изменить любой счет или договор, которые были ранее импортированы из 1С, то при экспорте данные обновляются.
А вот если договор или счет создать в террасофте, то при экспорте возникают ошибки:
Нравится
Скорей всего при экспорте Контрагентов вы не заполняете некоторые обязательные поля в 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С, но почему вы ищете "Организацию" в справочнике "Контрагентов", а не в Справочники.Организации?