Создание док-та Реализация Товаров и Услуг программно в минус

1. olo_lo4 11.07.13 01:07 Сейчас в теме
Доброе время суток, уважаемые эксперты, используем стороннюю программу в качестве Торговой. Задача стоит выгружать данные в 1С Бухгалтерия 8.2. Момент подключения, создания документа Реализации и Поступления, а также их заполнения отработан полностью. Но при реализации (и это вполне есстественно), 1С ругается на недостаток количества. Нашел ЗагрузкаДанныхИзТабличногоДокумента.epf, так сделка заполняется даже при отсутствие номенклатуры в справочнике, хотелось бы это реализовать, но честно сказать просмотрел код внешней обработки и пока не пришел к выводу. Одно понял, при таком механизме - документ создается,заполняется шапка, проводится и уже потом обработка "добавляет" туда номенклатуру.
Может ли кто-нибудь подсказать как это реализовать ?

Вот код того, что я делаю у себя :

strokaTovar1:=unAssigned;
ManagerDocAcc:=UnAssigned;
Document1CAcc:=UnAssigned;
DOcFormAcc:=UnAssigned;
if YesLinkToVariant(s1C8_ole) then
begin
ManagerDocAcc:=s1C8_ole.Документы.РеализацияТоваровУслуг;

Document1CAcc:=ManagerDocAcc.СоздатьДокумент();
DocFormAcc:=Document1CAcc.ПолучитьФорму();
DocFormAcc.ВидОперации:=s1C8_ole.перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;
// DocFormAcc.ЗаписыватьОбъект := true;

// DocFormAcc.Отказ := false;



DocFormAcc.Открыть();
TmpDateSD:=fieldByname('date_sd').AsDateTime+time();
TmpDateVal:=fieldByname('date_val').AsDateTime+time();

end;//if YesLinkToVariant(s1C8_ole) then


DocFormAcc.Дата:=TmpDateSD;

DocFormAcc.Номер:=trim(fieldByname('num_doc').AsString);



if WideTrim(fieldByname('id_kl_in_1C').AsWideString)<>'' then
DocFormAcc.Контрагент:=s1C8_ole.справочники.Контрагенты.НайтиПоКоду(fieldByname('id_kl_in_1C').AsWideString)
else
DocFormAcc.Контрагент:=s1C8_ole.справочники.Контрагенты.НайтиПоНаименованию(fieldByname('name_kl').AsWidestring);

//если не нашли то создаем контрагента

if DocFormAcc.Контрагент.Пустая() then
begin
s1C_KONtr:=s1C8_ole.справочники.Контрагенты.создатьЭлемент();

s1C_kontr.Наименование:=fieldByname('name_kl').AsWideString;
s1C_kontr.Комментарий:=TmpStellaMark;
s1C_kontr.Записать();
DocFormAcc.Контрагент:=s1C_kontr.Ссылка;

//записываем код контрагента в 1С в стеллу

if not FreStDset1.qrTemp.Transaction.InTransaction then FreStDset1.qrTemp.Transaction.StartTransaction;
FreStDset1.qrTemp.SQL.Text:='update spr_klient kl set id_in_1C=:id_in_1C where id=:id';
FreStDset1.qrTemp.ParamByName('id_in_1c').AsWideString:=s1C_kontr.Код;
FreStDset1.qrTemp.ParamByName('id').Asinteger:=fbn('id_kl').AsInteger;
FreStDset1.qrTemp.ExecQuery;
FreStDset1.qrTemp.Transaction.CommitRetaining;
iPos:=lstInfowindow.Items.Add('['+datetimetostr(now())+'] добавляем контрагента '+s1C_kontr.Наименование+' в справочник 1C (обновляем информацию в Стелле)...');
end;//if s1C8_ole.справочники.Контрагенты.ПустаяСсылка() then


//если нашли то вносим его в карточку

s1C8_dogKl:= s1C8_ole.Справочники.ДоговорыКонтрагентов.ПолучитьФормуСписка();
//s1C8_ole.Справочники.ДоговорыКонтрагентов.ПолучитьФормуСписка();

s1C8_dogKl.ПараметрОтборПоВладельцу := s1C8_dogKl;
//s1C8_dogKl.Открыть;


//DocFormAcc.ДоговорКонтрагента:=s1C8_dogKl.НайтиПоНаименованию('Без договора');



if DocFormAcc.ДоговорКонтрагента.Пустая() then
begin
s1C8_dogKlNew:=s1C8_ole.справочники.ДоговорыКонтрагентов.создатьЭлемент();
s1C8_dogKlNew.Организация := s1C8_ole.УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(s1C8_ole.глТекущийПользователь, 'ОсновнаяОрганизация');
s1C8_dogKlNew.Владелец:=DocFormAcc.Контрагент;
s1C8_dogKlNew.Наименование:='Без договора';
s1C8_dogKlNew.ВалютаВзаиморасчетов := s1C8_ole.Константы.ВалютаРегламентированногоУчета.Получить();
s1C8_dogKlNew.ВидДоговора :=s1C8_ole.Перечисления.ВидыДоговоровКонтрагентов.Прочее;
s1C8_dogKlNew.Записать();
DocForm.ДоговорКонтрагента:=s1C8_dogKlNew.Ссылка;
end; //if not s1C8_dogKl.Пустая() then



DocFormAcc.ПодтвержденДокументамиОтгрузки:=True;

//DocFormAcc.ВалютаДокумента:=DocForm.ВалютаДокумента;


// TmpAccDocOsnovan:=DocFormAcc.ДокументыОснования.Добавить();

// TmpAccDocOsnovan.ДокументОснование:=ManagerDoc.НайтиПоНомеру(trim(DocForm.Номер)) ;//'Поступление ТМЗ и услуг №'+trim(DocForm.Номер)+' от '+DateTimeToStr(DocForm.Дата);


//запись

DocFormAcc.Комментарий:=TmpStellaMark+' ; ('+TmpMFName+') код сделки '+FBN('id').AsString;


DocFormAcc.Записать(s1C8_ole.РежимЗаписиДокумента.Проведение);
DocFormAcc.Закрыть();
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. tolyan_ekb 105 16.07.13 12:53 Сейчас в теме
(1) olo_lo4, какое отношение имеют сторонняя программа и конвертация данных?
2. пользователь 11.07.13 01:08
Сообщение было скрыто модератором.
...
4. Meson 17.07.13 20:58 Сейчас в теме
По идее надо создать документ, заполнить шапку, заполнить табличные части (где как раз и будет номенклатура), а только потом провести документ.
А зачем вот этот код:
DocFormAcc:=Document1CAcc.ПолучитьФорму();
DocFormAcc.Открыть();

Разве документ заполняется интерактивно?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот