7.7 из расходной накладной в счетфактуры

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Kugelfangg, 18 мар 2008.

  1. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    Помогите пожалуйста, 2-ой день над ней бьюсь.
    Обработка должна делать доки СЧЕТФАКТУРЫ на Основании доков РАСХОДНАЯНАКЛАДНАЯ за указанный период. Помогите пожалуйста, 2-ой день над ней бьюсь.
    Код:
     
    //*******************************************
    Процедура ПереносСФ()    
    Перем Д;    
    ДокС=СоздатьОбъект("Документ.СчетФактура");
    
    Док=СоздатьОбъект("Документ.РасходнаяНакладная");
    Док.ВыбратьДокументы(НачДата, КонДата);
    Пока Док.ПолучитьДокумент()=1 Цикл
    докр=док.текущийдокумент();
    Докс.Новый();              
    Докс.ДатаДок=докр.датадок;
    Докс.номердок=докр.номердок;
    //    Докс.Записать();  
    Докс.ДокументОснование="Отгрузка товаров, продукции"+Докр.номердок;
    ДОкс.Контрагент=Докр.Контрагент; 
    Прав(Докр.Договор,6);
    Докс.Договор=Докр.Договор;           
    Докс.Грузоотправитель=Докр.Грузоотправитель;
    Докс.Грузополучатель= Докр.Грузополучатель; 
    Докс.Договор=Докр.Договор;  
    Докс.Счет=СчетПоКоду("90.3");       
    Докс.Записать();
    
    Докр.ВыбратьСтроки();
    Пока Докр.ПолучитьСтроку()=1 Цикл  
    
    //     НазначитьВид(Справочник.номенклатура,типтовара);
    
    
    
    Докс.НоваяСтрока();
    Докс.товар=докр.Товар.вид("справочник.Номенклатура");
    Докс.Количество=Докр.Количество;   
    Докс.Цена = Докр.Цена;
    Докс.Сумма = Докр.Сумма;
    Докс.НДС =Докр.НДС;
    Докс.Всего =Докр.Всего;
    Докс.Комитент =Докр.Комитент; 
    докс.СчетНДС=1;  
    докс.ставкаНДС="18%"; 
    докс.Счет=СчетПоКоду("90.3");
    докс.субконто1=докр.товар  ;
    докс.субконто2=    "18%";
    //    Субконто1 =Докс.товар;
    КонецЦикла;
    Докс.Записать();    
    
    Докс.Провести();
    КонецЦикла;
    КонецПроцедуры
    
    
    
    
    пишит Докс.товар=докр.Товар.вид("справочник.Номенклатура");
    : Объект не может быть перепозиционирован!

    p.s она съела мой мозг.
  2. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    у тя тут ошибок больше чем строк в коде...:
    1.Прав(Докр.Договор,6); ет че вообще?
    2.докс.субконто1=докр.товар; реквизит субконто1 не определенный, его сначала определить надо
    3.докс.субконто2="18%"; по мимо того же определения реквизита "18%" это значение справочника а не строка как у тебя :)

    ну это то, что сразу на глаз попалось...

    м-дя, и еще...: докр=док.текущийдокумент(); зачем тебе это? обращайся через док и все!
  3. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    1.Прав(Докр.Договор,6); это стобы кот обрезать на 2 нуля т.к в счетфактуре 6-ти значный код, а в накладной 8.
    2.докс.субконто1=докр.товар;это табл реквизит документа
    3.докс.субконто2="18%";тож уберу
    докр=док.текущийдокумент(); т.к. их может быть и десять

    вся загвоздка в "товар" он никак не хочет переносится.
  4. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    1. "это стобы кот обрезать на 2 нуля" ?!?!?! ты имеешь ввиду вшитую стандартную нумерацию?? или чего вообще?
    2. у тебя верно, только перед твоей строчкой надо определить чем у тебя будет реквизит "субконто1"...
    Код:
    Док.НазначитьТип("Субконто1", "Справочник.Номенклатура");
    
    
    примерно так..
    3.
    Код:
    Док.НазначитьТип("Субконто2", "Справочник.СтавкиНДС");
    
    
    + ставку НДС вытаскивай грамотно...
  5. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    не помогло=(
    _____________________________________________________________________________
    если Докр то
    докр.НазначитьТип("Субконто1","Справочник.Номенклатура");
    {\\PROGRAMMIST\1\ПЕРЕНОС4.ERT(38)}: Реквизит с данным идентификатором не найден!
    _____________________________________________________________________________
    Если док то
    док.НазначитьТип("Субконто1","Справочник.Номенклатура");
    {\\PROGRAMMIST\1\ПЕРЕНОС4.ERT(38)}: Реквизит с данным идентификатором не найден!
    _____________________________________________________________________________
    Если докс то ссылается на строку модуля СчетФактура
    ИначеЕсли Товар.Вид() = "Номенклатура" Тогда
    {Документ.СчетФактура.Модуль Документа(240)}: Значение не представляет агрегатный объект (Вид)
    ________________________________________________________________________________________
  6. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    ну давай тогда дальше косяки искать...
    это чего такое:
    Код:
    Докс.товар=докр.Товар.вид("справочник.Номенклатура");
    
    так же как и субконто1 сделай! т.е. назначай докс.товар вид, а потом приравнивай туда значение... у тебя значение-то нигде не приравнивается! и если не получится, то клади новый код!
  7. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    В итоге получился код
    Код:
    Процедура ПереносСФ()    
    Перем Д;	
    ДокС=СоздатьОбъект("Документ.СчетФактура"); 
    Док=СоздатьОбъект("Документ.РасходнаяНакладная");
    Док.ВыбратьДокументы(НачДата, КонДата);
    Пока Док.ПолучитьДокумент()=1 Цикл
    докр=док.текущийдокумент();
    Докс.Новый();              
    Докс.ДатаДок=докр.датадок;
    Докс.номердок=докр.номердок;
    //	Докс.Записать();  
    Докс.ДокументОснование="Отгрузка товаров, продукции"+Докр.номердок;
    ДОкс.Контрагент=Докр.Контрагент; 
    Прав(Докр.Договор,6);
    Докс.Договор=Докр.Договор;  		 
    Докс.Грузоотправитель=Докр.Грузоотправитель;
    Докс.Грузополучатель= Докр.Грузополучатель; 
    Докс.Договор=Докр.Договор;  
    Докс.Счет=СчетПоКоду("90.3");       
    Докс.Записать();
    
    Докр.ВыбратьСтроки();
    Пока Докр.ПолучитьСтроку()=1 Цикл  
    Докс.НоваяСтрока();
    Докс.товар=докр.Товар.вид("справочник.Номенклатура");
    Докс.Количество=Докр.Количество;   
    Докс.Цена = Докр.Цена;
    Докс.Сумма = Докр.Сумма;
    Докс.НДС =Докр.НДС;
    Докс.Всего =Докр.Всего;
    Докс.Комитент =Докр.Комитент; 
    докс.СчетНДС=1;  
    докс.ставкаНДС=18; 
    докс.Счет=СчетПоКоду("90.3");  
    докс.НазначитьТип("Субконто1","Справочник.Номенклатура");
    докс.НазначитьТип("Субконто2","Справочник.СтавкиНДС");
    докс.субконто1=докр.товар   ;
    докс.субконто2="18%";
    Субконто1 =Докс.товар;
    КонецЦикла;
    Докс.Записать();    
    
    Докс.Провести();
    КонецЦикла;
    КонецПроцедуры
    
    
    ошибка таже=(

    Докс.товар=докр.Товар.вид("справочник.Номенклатура");
    {\\PROGRAMMIST\1\ПЕРЕНОС4.ERT(28)}: Объект не может быть перепозиционирован!
  8. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    м-ля...
    1.
    Код:
    Докс.товар=докр.Товар.вид("справочник.Номенклатура");
    
    это че за ...? сделай ты уже так же как и с субконто я тебе показал!
    2.Прав(Докр.Договор,6); уберай и рассказывай че ты там с кодами хочешь на мутить
    3.докс.субконто2="18%"; так и не исправил?
    4.докр=док.текущийдокумент(); и это все же убери и сделай везде обращение через док. не знаю как ты там разбираешься а мне смотреть тяжеловато! сам себя путаешь только...
  9. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    1.поменял на
    Код:
    Докс.НазначитьТип("Товар"    ,"Справочник.Номенклатура");
    
    
    2. убрал.нужно чтобы номер документа брился на 2символа с начала(В расходной накладной номер 8- знаков, а в счетфактуре должен быть 6 знаков
    пример:
    номерРасНак 00000001 а в СФ должно перенестись так 000001(без двух первых нулей) .О как! :unsure:

    3.а как ставку НДС выташить грамотно?чета не получается B)
    4.докр пофиксил. =)
    ____________________________
    Код:
    докс.Счет=СчетПоКоду("90.3"); 
    Докс.НазначитьТип("Товар"    ,"Справочник.Номенклатура");
    докс.НазначитьТип("Субконто1","Справочник.Номенклатура");
    докс.НазначитьТип("Субконто2","Справочник.СтавкиНДС");
    докс.субконто1=док.товар   ; 
    докс.товар=док.товар;
    докс.субконто2="18%";
    Субконто1 =Докс.товар;
    КонецЦикла;
    
    
    !!!!!!!УРА!!!!!!!ЗАРАБОТАЛО!!!!! :D !!!!!!!!!!!!Спасибо!огромное!
    осталось только с ндс и номером разобраЦЦо!=)
  10. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    Не получается со ставкой НДС=((((
  11. Kaboom
    Offline

    Kaboom Опытный в 1С

    Регистрация:
    2 июл 2007
    Сообщения:
    158
    Симпатии:
    0
    Баллы:
    26
    Обрати внимание на то что Ставка НДС, это не строка а элемент справочника, а значит тебе надо создать этот справочник, и найти соответствующий элемент (например, по коду или по наименованию).
    Вот, например, так:
    Код:
    ...
    СпрНалоги = СоздатьОбъект("Справочник.НалогиИОтчисления");
    СпрНалоги.НайтиПоКоду("ОсновнаяСтавкаНДС");
    ДокС.СтавкаНДС = СпрНалоги.ТекущийЭлемент();
    ДокС.Субконто2 = СпрНалоги.ТекущийЭлемент();
    
    ЗЫ: рекомендую почитать желто-красную книжку.
  12. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    насчет кода... у тебя подряд по списку будут создаваться коды.. зачем тебе их присваивать именно такие же как и в реализации? а если очень хочется, то сделай длину кода в счф больше :)
  13. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    Все!понял,спасибо.
    вот только возник новый гемор,если у РН есть подчиненный док и у него номер такой же как у создаваемого дока, то пишет "номер не уникален"и прирывает цикл.
    Скажи пожалуйста есть ли такая команда "НомерНеУникален"или что-то вроде?
    по идее должено полуситя такое условие:
    Код:
    Если  "НомерНеУникален"(докс.номердок)=1 тогда
    продолжить
    иначе сообщить(докс.номердок);
    конецЕсли;
    
    
  14. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    найтиДокументПоНомеру эта команда называется :) а вообще ну вот зачем тебе это??? машина сама будет без проблем цеплять сделующий номер! ну вот зачем тебе что бы они обязательно одинаковые были?
  15. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    Так в этом то и проблемма, что программа цепляет,говорит номер не уникален завершает цикл и ничего не происходит.
    допустим ситуация:
    РС.номер=расходная накладная
    СФ.номер=счет фактуры

    РС=0000001
    СФ=00001 -------->и тут возникает трабл.
    РС=0000002

    так как он пищет про уникальность и для 0000002 ничего не создает=(
  16. Kaboom
    Offline

    Kaboom Опытный в 1С

    Регистрация:
    2 июл 2007
    Сообщения:
    158
    Симпатии:
    0
    Баллы:
    26
    Закомментируй строчку
    Код:
    Докс.номердок=докр.номердок;
    
    и посмотри что получится;)

Поделиться этой страницей