Пытаюсь вручную из скрипта добавить ДоговорКонтрагента в 1С
Сам Контрагент благополучно создался.
А договор этого контрагента выдаёт при создании следуйщую извесную ошибку
"Не удалось сохранить Договор Контрагента!"
вот код которым пытаюсь сохранить договор:
Invoice1C.Дата = "10.09.2012";
Invoice1C.Номер = "92837482374";
Invoice1C.Организация = v8.Справочники.Организации.НайтиПоНаименованию("ТОВ \"БАРЕЛЬ\"""");
Нравится
Здравствуйте.
Есть подозрение, что какое-то из полей даты есть обязательным для заполнения, но:
Если в начале строки содержится что-то, что может быть проинтерпретировано как строковое представление даты в виде ДД.ММ.ГГ, где ГГ- две цифры года, ММ- числовое обозначение месяца (01, ..., 12), ДД- день месяца, то будет произведено соответствующее преобразование. В противном случае значение даты будет нулевым.
Здравствуйте Дмитрий,
спасибо что отозвались.
заменил
Contract1C.Дата = "10.09.2012";
на
Contract1C.Дата = "10.09.12";
Не помогло.
Что ещё могу предоставить для нахождения "граблей".
Может скриншоты Конфигуратора 1С? Какие?
Александр,
я думаю Вашего кода достаточно.
Есть еще одна идея: смотрите, здесь вы используете ссылку на объект:
Contract1C.Владелец = Invoice1C.Контрагент.Ссылка;
здесь записываете:
Contract1C.Записать();
и только потом:
Invoice1C.Записать();
Хотя здесь ссылку записываете уже после записи:
Contract1C.Записать(); Invoice1C.ДоговорКонтрагента=Contract1C.Ссылка;
Возможно ссылки до записи еще нету, и поэтому поле Contract1C.Владелец - пустое, которое в свою очередь является обязательным?
Вообще пройдите отладчиком и посмотрите корректно ли заполняются все определенные Вами поля договора, до строки записи этого договора в систему.
Дмитрий,
поставил перед Contract1C.Записать(); следующий код:
ShowInformationDialog( '1. '+Contract1C.Код+"\r\n"+ '2. '+Contract1C.Владелец.Наименование+"\r\n"+ '3. '+Contract1C.Наименование+"\r\n"+ '4. '+Contract1C.Номер+"\r\n"+ '5. '+Contract1C.ВидДоговора.Метаданные().Имя+"\r\n"+ '6. '+Contract1C.Дата+"\r\n"+ '7. '+Contract1C.ВалютаВзаиморасчетов.Наименование+"\r\n"+ '8. '+Contract1C.Организация.Наименование+"\r\n");
Update: Дата появилась после изменения:
Contract1C.Дата = '10.09.2012 0:00:00';
Но ошибка сохранения всё равно осталась.
Александр, рекомендую обратить внимание на код карточки в 1С, которая создает договор контрагента. Там хитрая штука: без основного договора нельзя создать контрагента, а без контрагента - договор. При этом если одна из записей не сохранена в базу данных, то и ссылку на нее в другой записи поставить нельзя.
Для того, чтобы скрипт корректно работал, Вам следует переписать код 1С, который решает этот логический казус, в скрипте синхронизации Terrasoft.
Здравствуйте Анна,
спасибо что отозвались на зов помощи))
без основного договора нельзя создать контрагента, а без контрагента - договор.
Дело в том что контрагент благополучно создаётся кодом:
tab2 = v8.Справочники.Контрагенты.СоздатьЭлемент(); tab2.Наименование = "ТТТ"; tab2.Записать();
Без указания основного договора.
После чего я его благополучно НахожуПоНаименованию в вышеуказанном скриншоте/коде создания ДоговораКонтрагента.
А вот то же самое со СчётНаОплатуПокупателю и ДоговорКонтрагента не получается.
Не подскажите хоть "в какую сторону бежать", я в разработке 1С не силён.
Во вложении код 1С по Форме элемента ДоговорКонтрагента.
Доброе утро, Александр!
"Швец Александр" написал:Дмитрий,
поставил перед Contract1C.Записать(); следующий код:
ShowInformationDialog(
'1. '+Contract1C.Код+"\r\n"+
'2. '+Contract1C.Владелец.Наименование+"\r\n"+
'3. '+Contract1C.Наименование+"\r\n"+
'4. '+Contract1C.Номер+"\r\n"+
'5. '+Contract1C.ВидДоговора.Метаданные().Имя+"\r\n"+
'6. '+Contract1C.Дата+"\r\n"+
'7. '+Contract1C.ВалютаВзаиморасчетов.Наименование+"\r\n"+
'8. '+Contract1C.Организация.Наименование+"\r\n");
Правильно ли я понимаю, что Contract1C.Код = ''; т.е. пусто?
"Олейник Дмитрий" написал:Правильно ли я понимаю, что Contract1C.Код = ''; т.е. пусто?
Верно, я предположил что в 1С предусмотренна автонумерация подобно СРМ.
Но даже после подстановки
Contract1C.Код = "99999999999999";
В скриншоте начал появляться присвоенный код, но ошибка сохранения осталась.
Александр, значение поля Код в 1С генерируется программно, и должно быть не просто не пустым - его формат должен соответствовать объекту.
Можно попробовать так:
Contract1C.Код = GetLeetersFromGUID(Connector.GenGUID());
Если у Вас 1С77, тогда
Contract1C.УстановитьНовыйКод();
Анна, учитывая свойства поля КОД в конфигураторе 1С(см. скриншот), по идее предложенная Вами функция должна была вернуть нечто подобное
Contract1C.Код = "000932123";
или
Contract1C.Код = "GHDEDSASW";
Ошибка сохранения осталась.
У нас 1с v.82
но предложенный
Contract1C.УстановитьНовыйКод();
Всё таки устанавливает код.
НО Ошибка сохранения осталась.
Александр, какие у Вас обязательные поля в 1С для карточки договора?
Попробуйте создать новый договор, заполнив только эти поля, и по возможности не использовать ссылки на другие еще не сохраненные записи. Т.е. вместо
Contract1C.Владелец = Invoice1C.Контрагент.Ссылка;
прописать что-то вроде этого:
Contract1C.Владелец = v8.Справочники.Контрагенты.НайтиПоНаименованию("ТТТ").Ссылка;
Дмитрий,
а подскажите пожалуйста как определить что поле обязательное, в 1С не очень силён...
Выше приводил пример текстовки модуля формы элемента ДоговораКонтрагентов
"Швец Александр" написал:
dogovorkontragenta.txt 30.71 кб
там есть некие проверки на заполненность. Этих полей достаточно? или есть где-то ещё в визуальном редакторе свойств формы чекбокс что поле обязательное?
Александр, можно попробовать установить отладчик в скрипте scr_Dataflow1CUtils_V80V81V82 в функции Prepare1CQuery и посмотрите, какой запрос в итоге уходит в 1С. Нас интересует содержимое Query.Text в самом конце функции.
Можно попробовать выполнить этот запрос непосредственно в 1С и посмотреть результат.
Анна, а как мне использовать сам Prepare1CQuery в scr_Dataflow1CUtils_V80V81V82 если я работаю напрямую с ActiveXObject и даже не подключаю данный скрипт к своему...
Какие фактические параметры передать Prepare1CQuery после подключения scr_Dataflow1CUtils_V80V81V82?
Здравствуйте! У меня получилось таким образом:
ГСЧ = Новый ГенераторСлучайныхЧисел(); Конт = Справочники.Контрагенты.СоздатьЭлемент(); Конт.Наименование = "Контрагент" + ГСЧ.СлучайноеЧисло(10000); Конт.УНП = ГСЧ.СлучайноеЧисло(100000000,999999999); Конт.Страна = Справочники.Страны.НайтиПоНаименованию("РБ"); Конт.Записать(); Дог = Справочники.Договоры.СоздатьЭлемент(); Дог.НомерДоговора = ГСЧ.СлучайноеЧисло(0,5000); Дог.Наименование = "Договор" + Строка(НомерДок); Дог.Владелец = Конт.Ссылка; Дог.ВидДоговора = Перечисления.ВидыДоговоров.Годовой; Дог.ВалютаДоговора = Справочники.Валюты.НайтиПоНаименованию("RUB"); Дог.СуммаПоДоговору = ГСЧ.СлучайноеЧисло(0,50000000); //Дог.ДатаДоговора = Дата(2009,1,1)+ГСЧ.СлучайноеЧисло(0, 60*60*24*355); Дог.Записать();
Дмитрий, Анна
спасибо большое
я разобрался.
У нас в 1С есть поле СхемаНалогообложения, которое не является обязательным, но без него 1С не сохраняет ДоговорКонтрагента.
Совет изыскателям таких же граблей - Просто в СРМ заполните абсолютно все поля договора(даже необязательные) и методом исключения поймёте чего не хватало.