Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Програмное создание договора контрагента из Delphi
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
magistrate
Уважаемые коллеги!

Приложению Delphi требуется экспортировать данные контрагентов и их договоров в 1С.

Экспорт и импорт контрагентов происходит без ошибок, а при экспорте договоров возникает ошибка - Не удалось записать: "Договоры контрагентов"!

Фрагмент кода примерно следующий:

procedure TForm1.BtnExportDocClick(Sender: TObject);


var
ole_Persons, ole_1C, ole_TekDoc, ole_Doc, ole_Creditor,
ole_Temp, ole_CurrentPerson: OleVariant;
I, R: Integer;
S: String;
begin
if VarIsEmpty(ole_1C) then
begin
ole_1C := CreateOleObject('V82.COMConnector');
ole_1C := ole_1C.Connect('File = d:ХХХ');
end;

if not VarIsEmpty(ole_1C) then
begin
ole_Doc := ole_1C.Справочники.ДоговорыКонтрагентов;
if not VarIsEmpty(ole_Doc) then
begin
ole_Temp := UnAssigned;
for I := 0 to Form1.SG.RowCount - 1 do // SG - некий StringGrid с данными...
begin
S := SG.Cells[0,I];
ole_Temp := ole_Doc.НайтиПоКоду(S);
if ole_1C.XMLString(ole_Temp) = ole_1C.XMLString(ole_Doc.ПустаяСсылка()) then
begin
ole_TekDoc := ole_Doc.СоздатьЭлемент();
ole_TekDoc.Код := SG.Cells[0,I];
ole_TekDoc.Наименование := SG.Cells[1,I]; // наименование Договора
ole_TekDoc.НаименованиеДляПечати := SG.Cells[1,I];
ole_Persons := ole_1C.Справочники.Контрагенты;
ole_Temp := ole_Persons.НайтиПоРеквизиту('КодПоЕДРПОУ', '12345678');
ole_TekDoc.Владелец := ole_Temp // контрагент
ole_Persons := ole_1C.Справочники.Организации;


ole_Temp := ole_Persons.НайтиПоКоду('000000001');
ole_TekDoc.Организация := ole_Temp;
ole_TekDoc.Дата := SG.Cells[6,I];
ole_TekDoc.Номер := SG.Cells[7,I];
ole_TekDoc.УстановленСрокОплаты := True;
ole_TekDoc.СрокОплаты := SG.Cells[8,I];
ole_Temp := ole_1C.Справочники.Валюты.НайтиПоКоду('980');
ole_TekDoc.ВалютаВзаиморасчетов := ole_Temp; // валюта
ole_Temp := ole_1C.Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом;
ole_TekDoc.ВедениеВзаиморасчетов := ole_Temp;
ole_Temp := ole_1C.Перечисления.ВидыДоговоровКонтрагентов.Прочее;
ole_TekDoc.ВидДоговора := ole_Temp;
ole_TekDoc.Записать(); // Здесь возникает ошибка - Не удалось записать: "Договоры контрагентов"!
end;
end;
end;
end;

Ввод договора и его реквизитов в самой среде 1С происходит при заполнении минимально необходимых параметров. При заполнении этих параметров во внешнем соединении при попытке сохранения происходит вышеупомянутая ошибка.

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

Платформа 1С 8.2.15.318

Заранее благодарен.

logist
Вставьте в 1С в запись договора вывод описания ошибки в журнал регистрации. Найдете проблему за минуту.

Как вариант лажает тут:
ole_Temp := ole_Persons.НайтиПоРеквизиту('КодПоЕДРПОУ', '12345678');
ole_TekDoc.Владелец := ole_Temp // контрагент
т.к. ничего не находит (это совсем не значит что такого кода в базе нет, возможно у него там пробел, или еще чего)
Zaval
А Контрагент к этому моменту уже записан? Или еще висит в незавершенной транзакции?

Цитата(magistrate @ 23.02.13, 16:24) необходимо зарегистрироваться для просмотра ссылки
Ввод договора и его реквизитов в самой среде 1С происходит при заполнении минимально необходимых параметров.


При интерактивном вводе учитываются настройки программы, учетная политика, значения по умолчанию и пр.
Уверены, что Договор вида "Прочее" - именно то, что нужно? smile.gif

Зря Вы на одинэснике сэкономить решили...
Vofka
magistrate, вы же не то ищете:

Цитата(magistrate @ 23.02.13, 16:24) необходимо зарегистрироваться для просмотра ссылки
ole_Doc := ole_1C.Справочники.ДоговорыКонтрагентов;


Надо

ole_Doc := ole_1C.Справочники.Контрагенты;

Цитата(Zaval @ 23.02.13, 18:33) необходимо зарегистрироваться для просмотра ссылки
Зря Вы на одинэснике сэкономить решили...

Почему сэкономить, может это и есть одинэсник smile.gif . По крайней мере по его коду видно, что в 1С он что-то соображает.
magistrate
Контрагент или уже записан или ранее внесен. Сначала экспорт контрагентов потом договоров.

Договор вида "Прочее" используется для отладки. Какой из имеющихся в 1С видов договоров будет выбран - определит пользователь в соответствующем меню. В конфигурации (Бухгалтерия для Украины, редакция 1.2) их 6 видов. Кстати интересно с точки зрения бухгалтерии к какому виду могут быть отнесены договора займа?
Vofka
Пожалуйста.
logist
Цитата(magistrate @ 23.02.13, 21:21) необходимо зарегистрироваться для просмотра ссылки
с точки зрения бухгалтерии к какому виду могут быть отнесены договора займа?

Прочий
magistrate
Цитата(logist @ 23.02.13, 17:32) необходимо зарегистрироваться для просмотра ссылки
Вставьте в 1С в запись договора вывод описания ошибки в журнал регистрации. Найдете проблему за минуту.


После вставки в отладчике под 1С ошибка выявилась. Для заполнения также обязателен реквизит ВедениеВзаиморасчетовНУ. К сожалению признаки not null в конфигураторе у реквизитов не стоят. logist-у спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.