Имя: Пароль:
1C
1C 7.7
v7: Записать() - Ошибка! - Не выбран документ!
0 america2013
 
20.11.13
15:45
Приветствую Вас, уважаемые форумчане!
Помогите понять причину такой ошибки, имею код (прошу заранее простить за непонятность имен переменных - вырвал кусок из большой процедуры), получаю список значений и заполняю реквизита документа Счет-фактуры значениями из списка:

    ЗначениеИзСписка = "";
    
    ДокСФ  = СоздатьОбъект("Документ.СчетФактураПоставщика");
    НайдСФ = СоздатьОбъект("Документ.СчетФактураПоставщика");

    
    Если НайдСФ.НайтиПоНомеру(ПарамСФ.ПолучитьЗначение(2,ЗначениеИзСписка), НачДата) = 1 Тогда
        ДокСФ = НайдСФ.ТекущийДокумент();
    Иначе
        ДокСФ.Новый();
    КонецЕсли;

    //////Заполнение реквизитов шапки:
    ДокСФ.Организация              = ПарамДок.Организация;
    ДокСФ.ДатаДок                  = ПолучитьДатуИзСтроки(ПарамСФ.ПолучитьЗначение(1,ЗначениеИзСписка));
    ДокСФ.НомерДок                 = ПарамСФ.ПолучитьЗначение(2,ЗначениеИзСписка);          
    ДокСФ.Контрагент               = ПарамДок.Контрагент;            
    ДокСФ.СчетФактураНомер         = ПарамСФ.ПолучитьЗначение(3,ЗначениеИзСписка);    
    ДокСФ.СчетФактураДата          = ПарамСФ.ПолучитьЗначение(4,ЗначениеИзСписка);        
    ДокСФ.Дополнительная           = ПарамСФ.ПолучитьЗначение(5,ЗначениеИзСписка); //ПолучитьПризнакСФДополнительная(ПарамСФ.ПолучитьЗначение(5,ЗначениеИзСписка));    
    //ДокСФ.Подразделение            = "";        
    //ДокСФ.ОригиналОтсутствует      = "";      
    
    
    

    ДокСФ.Записать();
    
КонецПроцедуры

Проблема вот в чем, на строке: ДокСФ.Записать(), ругается, что: Не выбран документ! От чего ругается, ведь по полученному номеру документ нашелся и надо было всего-то перезаписать его реквизиты?

Заранее благодарен!
1 NS
 
20.11.13
15:46
ДокСФ = НайдСФ.ТекущийДокумент();
Вот тут ошибка. Текущийдокумент() записывать нельзя.
2 NS
 
20.11.13
15:47
Если ДокСФ.НайтиПоНомеру(ПарамСФ.ПолучитьЗначение(2,ЗначениеИзСписка), НачДата) = 1 Тогда
        //ДокСФ = НайдСФ.ТекущийДокумент();
    Иначе
        ДокСФ.Новый();
    КонецЕсли;
3 КонецЦикла
 
20.11.13
15:49
Если ДокСФ.НайтиПоНомеру(ПарамСФ.ПолучитьЗначение(2,ЗначениеИзСписка), НачДата) = 0 Тогда
  ДокСФ.Новый();
КонецЕсли;
4 america2013
 
20.11.13
15:50
(1) и (3) Как тогда программно поменять значения реквизитов в найденом ДокСФ, ведь мне нужно заменить не все реквизиты, а некотороые, полагаю, что если сделаю ДокСФ.Новый(), тогда создастся и запишется совершенно чистый документ?
5 Господин ПЖ
 
20.11.13
15:58
(4) можешь если не нашелся не делать ничего...

Если ДокСФ.НайтиПоНомеру(ПарамСФ.ПолучитьЗначение(2,ЗначениеИзСписка), НачДата) = 1 Тогда
        //ДокСФ = НайдСФ.ТекущийДокумент();

    Иначе
        Сообщить("ААААА!!! Мы все умрем!!");
    КонецЕсли;
6 america2013
 
20.11.13
16:01
(5) Если не нашелся, у меня с ним отдельный разговор будет. Проблема моя в том, что документ есть, он нашелся по номеру и теперь бы надо поменять пару его реквизитов. Реквизиты переприсвоены, и теперь пришло время записываться - Записать() и облом((( Перезаписать уже найденный хочу.
7 NS
 
20.11.13
16:03
(6) Тебе в (2) написали как, в (3) написали. Тебе этого недостаточно?
8 Господин ПЖ
 
20.11.13
16:04
(6) ну и что не хватает то?

тебе все уже написали...

.ТекущийДокумент() делать не надо - это ссылка уже а не объект
9 america2013
 
20.11.13
16:07
(7) и (8) я понял, что в момент правильного нахождения документа следует сделать Новый(), будет ли это означать, что все реквизиты уже существующего документа "обнулятся" и запишутся только те, которые я присвою?
10 NS
 
20.11.13
16:09
(9) Если ты нашел документ, то ссылка на него уже в ДокСФ, если не нашел, тогда новый().
11 Ёпрст
 
20.11.13
16:09
(9) ты нихрена не понял.
12 КонецЦикла
 
20.11.13
16:13
(9) Если такого документа нет, то будет создан НОВЫЙ и ВСЕ реквизиты заново надо заполнить. А существующие останутся такими как и были.
13 america2013
 
20.11.13
16:19
(11) Сделал, как понял. Теперь пишет, что Номер не уникальный!(((

Но вопрос совсем не в том, что делать с Новым, а как поменять старый???

...в общем, мой мятежный дух успокоился, когда на мысль навел (10). В существующем документе реквизиты стали перезаписываться. В итоге имею:

    ЗначениеИзСписка = "";
    ДокСФ  = СоздатьОбъект("Документ.СчетФактураПоставщика");
    
    //ДокСФ.НайтиПоНомеру(ПарамСФ.ПолучитьЗначение(2,ЗначениеИзСписка), НачДата);
    Если ДокСФ.НайтиПоНомеру(ПарамСФ.ПолучитьЗначение(2,ЗначениеИзСписка), НачДата) = 1 Тогда
        
    Иначе
        ДокСФ.Новый();
    КонецЕсли;

    //////Заполнение реквизитов шапки:
    ДокСФ.Организация              = ПарамДок.Организация;
    ДокСФ.ДатаДок                  = ПолучитьДатуИзСтроки(ПарамСФ.ПолучитьЗначение(1,ЗначениеИзСписка));
    ДокСФ.НомерДок                 = ПарамСФ.ПолучитьЗначение(2,ЗначениеИзСписка);          
    ДокСФ.Контрагент               = ПарамДок.Контрагент;            
    ДокСФ.СчетФактураНомер         = ПарамСФ.ПолучитьЗначение(3,ЗначениеИзСписка);    
    ДокСФ.СчетФактураДата          = ПарамСФ.ПолучитьЗначение(4,ЗначениеИзСписка);        
    ДокСФ.Дополнительная           = ПарамСФ.ПолучитьЗначение(5,ЗначениеИзСписка); //ПолучитьПризнакСФДополнительная(ПарамСФ.ПолучитьЗначение(5,ЗначениеИзСписка));    
    //ДокСФ.Подразделение            = "";        
    //ДокСФ.ОригиналОтсутствует      = "";      
    
    
    


    ДокСФ.Записать();
    

Благодарю всех за помощь и участие!!!
14 Ёпрст
 
20.11.13
16:25
(13) еще подумай, зачем менять дату и номер у счет фактуры, если она в базе уже есть.
Оно тебе точно надо ?
15 america2013
 
20.11.13
16:26
(14) Да, надо. Реквизиты зависят от документа Поступления.
16 Mikeware
 
20.11.13
16:26
Ошибка там же, где и обычно....
17 america2013
 
20.11.13
16:28
(16) На что намекаете?
18 Tankur
 
20.11.13
16:54
(17) дело в том что ДокСФ = НайдСФ.ТекущийДокумент()
возвращает ссылку на документ,
а ссылкой ничего низя сделать,
а нужн получить ОБЪЕКТ

а номер будет ругатся.
для того чтобы не ругался на номер нужно
ДокСФ.УстановитьНовыйНомер()
19 NS
 
20.11.13
17:03
Вообще-то номер и дата счет фактуры поставщика заполняются в отдельном реквизите, а никак не в номердок и датадок.
Номердок и датадок - это наши номер и дата, и грузить их не надо, и у уже существующих документов менять не надо.
20 america2013
 
21.11.13
07:33
(18) Проблема у меня была (да и осталась, наверное) в том, что Ссылку и Объект я не вижу явно, другое дело, к примеру, как в 8.2 получил в запросе именно "ссылку", а от неё с помощью ПолучитьОбъект() уже сам "объект", и было явно видно, когда имеем объект, а когда ссылку. В 7.7 же мы это только подразумеваем, догадываемся, узнаем из опыта...

(19) (У нас здесь) многое зависит от состояния базы, поставленной задачи и прежнего опыта коллег : )