Создание док-та Реализация Товаров и Услуг программно в минус
Доброе время суток, уважаемые эксперты, используем стороннюю программу в качестве Торговой. Задача стоит выгружать данные в 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.Закрыть();
Может ли кто-нибудь подсказать как это реализовать ?
Вот код того, что я делаю у себя :
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.Закрыть();
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот