Имя: Пароль:
1C
1С v8
Создание док-та Реализация Товаров и Услуг программно в минус
0 jiny007
 
10.07.13
13:55
Доброе время суток, уважаемые эксперты, используем стороннюю программу в качестве Торговой. Задача стоит выгружать данные в 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.Закрыть();
1 Пеппи
 
10.07.13
13:59
Проблема лишь в том что 1с ругается на недостаточное количество при проведении документов?
2 НаборДанных
 
10.07.13
14:01
(0)В чем именно затык? Из вашего кода видно, что не заполняете табличную часть товары. Заполняйте ее так же как заполняете договор, т.е. поиск номенклатуры по артикулку, например, и а = тч.добавить(), а.номенклатура = моянайденная.
Если не нашли, создаете и добавляете.
3 jiny007
 
10.07.13
14:08
я не включил сюда заполнение табличной части, т.к. упомянул, что с этим проблем нет, если номенклатуры нет, то она создается , либо ищется по коду в 1С, стопор в том, что при реализации 1С ругается на недостаточное количество при проведении, как это сделать так, как реализовано в обработке ЗагрузкаДанныхИзТабличногоДокумента ?
4 jiny007
 
10.07.13
14:08
Поступления садятся отлично
5 НаборДанных
 
10.07.13
14:17
(3)Объясните задачу по-человечачьи, реализация создается, но вас не устраивает, что программа ругается на то, что у вас на складе нет товара, который вы продать хотите? Включите возможность списания в минус и радуйтесь интересным цифиркам, или что? Поступление делайте раньше реализации по времени, тогда и ругаться не будет, если конечно номенклатура на склад будет поступать нужная и в нужном количестве.
6 НаборДанных
 
10.07.13
14:19
В ЗагрузкаДанныхИзТабличногоДокумента вы данные грузите тупо в тч, документ не проводится и т.д., так в чем вопрос? Заполняйте документ своим кодом и из режима записи РТИУ уберите проведение, получите заполненный НЕ проведенный документ в 1С.
7 Жан Пердежон
 
10.07.13
14:22
(4) дата поступления должна быть меньше даты реализации
8 jiny007
 
10.07.13
14:26
объясняю по человечески ))) торговля идет совершенно в другой программе, и дело не в том, что мы хотим продать, товар уже продан в другой программе, назовем ее условно : "Стелла".
Бухгалтер требует, чтобы данные продаж попадали в 1С Бухгалтерию, для того, чтобы вести Бух и Налоговый учет в 1С Бухгалтерия, т.к. Стелла - это чисто торговая программа + учет операций по кассе и банку. Программа написана для сети аптек, т.к. стандартная "1С Аптека для Казахстана" заказчика не устраивает. Вобщем, раньше делали экспорт в 1С через операции, проводками, но заказчика не устраивали акты сверки, которые в результате этого получались, но проблем с количеством не было, ему необходимо выгружать именно накладными, чтобы потом ориентироваться по номерам накладных. Выгружается в двух вариантах : 1) одной строкой в каждой сделке "Медикаменты в ассортименте", далее количество 1 и цена = сумма накладной, 2) по каждому наименованию, где указывается реальное количество и цена по накладной. Как будет выгружать заказчик меня не волнует, главное предусмотреть оба варианта. С датой поступления уже пробовали, но всегда найдется медикамент, которого нет на остатке в данный момент.
9 jiny007
 
10.07.13
14:29
для Набора данных : в том то все и дело, что в ЗагрузкаДанныхИзТабличногоДокумента идет загрузка в уже проведенный документ, и после загрузки он так же остается проведенным, уже проверено, правда при повторном проведении, 1С уже не дает этого сделать, но это уже не суть, никто не будет перепроводить автоматически созданные документы
10 zladenuw
 
10.07.13
14:30
(9) при загрузке просто записывай документ. после добавление товаров проводи.
11 НаборДанных
 
10.07.13
14:30
Едрит мадрид, то, что документ проведен, потом в тч добавили товары не означает, что по добавленным строкам будут отражены движения в БД 1с, так понятно? Проводить все равно придется.
12 Пеппи
 
10.07.13
14:32
(9) это в Бухгалтерии чтоли не проводится? Странно. А что говорит, какая ошибка?
13 НаборДанных
 
10.07.13
14:33
Если хочется просто видеть значок проведенного документа, без проводок, поставь его и все дела, но потом кого-то могут покарать)))
14 НаборДанных
 
10.07.13
14:33
(12)Видимо, что товара нет на складе)
15 jiny007
 
10.07.13
14:35
(11) видимо, тут ты прав....
16 НаборДанных
 
10.07.13
14:38
Ответ в(9), но можно еще сделать так, гемморно, но можно, отключаешь контроль остатков, работаешь месяц радостно, в конце месяца ставишь назад, перепроводишь доки, вычисляешь позиции, по которым не достает количества, решаете, что с этим делать и т.д. Но вообще странно, тут надо сам складской учет ваш перепродумать. Видимо документы поступления в "той" программе вводятся после получения документов от поставщика, а не по факту поступления? Если так, то вы еще наипетесь...
17 jiny007
 
10.07.13
14:39
(16) имхо, гемор, уж проще через Операции проводками вставлять, как и было...
18 jiny007
 
10.07.13
14:41
(16) тем более, что контроль остатков по другим позициям в номеклатуре (по тем, что через 1С бухгалтерию покупается : ручки бумага и т.д.) должен быть.
19 jiny007
 
10.07.13
14:59
(16) документы поступления попадают в Стеллу с фактическим товаров, и уже потом распределяются по филиалам. "Стелла" не позволяет делать расход в минус, просто они уже год работают, до этого переносили данные сделок еще более коряво, чем я предложил, по предположительным цифрам. Т.е. этим я хотел сказать, что начальные остатки в 1С не попадали, хотя... надо попробать выгрузить начальные остатки по складам и попробовать. Условно 1 филиал - 1 склад, их 10 + офис = 11 складов.... Представляю, что меня и их ждет. ежедневные корректировки остатков на складах....
20 jiny007
 
10.07.13
15:05
может сделать так : перед добавлением кокретного товара делать корректировку остатка по данному товару (автоматически), на 01 число учетного периода остаков, затем пускать в расход, со временем остатки в 1с сойдутся с данными стеллы ... как такой вариант ? тогда и проводки будут сажаться нормально
21 НаборДанных
 
10.07.13
19:20
Сделать инвентаризацию уже, выправить остатки в обеих БД. В стелле у тебя ведется склад, проблем после выправления ровным счетом нуль. Выгружать данные каждый день и получать объективные данные ежедневно. Профит.