Имя: Пароль:
1C
1C 7.7
v7: Ошибка "Не выбран документ!" при записи документа
0 Dark_iNiTro
 
04.03.12
21:26
Код
            Док = СоздатьОбъект("Документ");
            Док.ВыбратьПодчиненныеДокументы(,,ТекДок);
            Пока Док.ПолучитьДокумент() = 1 Цикл        
               Если Док.Вид() = "СчетФактура" Тогда  
                  ДокСчФ = Док.ТекущийДокумент();
                  ЕстьСчетФактура = 1;                  
               КонецЕсли;                                
            КонецЦикла;      
           
            // создаем СФ
            Если ЕстьСчетФактура = 0 Тогда                                  
               ДокСчФ = СоздатьОбъект("Документ.СчетФактура");
               ДокСчФ.Новый();                                          
            ИначеЕсли ТекДок.ТекущийДокумент().проведен() = 1 Тогда
               // текущиее основание (Документ отгрузка) проведен! -- пропускаем цикл
               Продолжить;
            КонецЕсли;  
               
            ....  
                               // заполняем СФ              
           
            ТекДок.ВыбратьСтроки();
            Пока ТекДок.ПолучитьСтроку() = 1 Цикл
            ...      
            КонецЦикла;    
           
            //Попытка
            ДокСчФ.Записать();


суть в том, что если есть непроведенная реализация, то перезаписываем счет-фактуру (если есть, если нет то создаем).
Проблема в том что при записи выдается "Не выбран документ!"
1 Креатив
 
04.03.12
21:38
(0)Так в обоих случаях нужно ДокСчФ = СоздатьОбъект("Документ.СчетФактура");
А в первом ещё и спозиционироваться на нём.
2 Dark_iNiTro
 
04.03.12
21:44
добавил код перед:
ДокСчФ = СоздатьОбъект("Документ.СчетФактура");
               
но все равно не помогает
3 viktor_vv
 
04.03.12
21:46
А ТекДок - это что ? Где присваиваешь ?
4 viktor_vv
 
04.03.12
21:50
И сделай лучше так

               Если Док.Вид() = "СчетФактура" Тогда  
                  ДокСчФСсылка = Док.ТекущийДокумент();
                  ЕстьСчетФактура = 1;                  
               КонецЕсли;    
               ДокСчФ = СоздатьОбъект("Документ.СчетФактура");
            Если ЕстьСчетФактура = 0 Тогда                                  

               ДокСчФ.Новый();                                          
            ИначеЕсли ТекДок.ТекущийДокумент().проведен() = 1 Тогда
               // текущиее основание (Документ отгрузка) проведен! -- пропускаем цикл

               Продолжить;
            Иначе
                 ДокСчФ.НайтиДокумент(ДокСчФСсылка) ;
            КонецЕсли;
5 andrewks
 
04.03.12
21:52
ДокСчФ = Док.ТекущийДокумент();
заменить на
ДокСчФ = Док;
6 Dark_iNiTro
 
04.03.12
21:59
ДокСчФ.Договор = ТекДок.Договор;
{C:\DOCUMENTS AND SETTINGS\dark\РАБОЧИЙ СТОЛ\ЗАГРУЗКАДАННЫХИЗ82ТЕСТ.ERT(288)}: Поле агрегатного объекта не обнаружено (Договор)
7 Dark_iNiTro
 
04.03.12
22:55
Хэлп!!!
8 BlackSeaCat
 
04.03.12
23:00
Настоящий программист даже когда тонет, кричит: "F1! F1! F1!!!"
9 nicxxx
 
05.03.12
05:54
телепатирую, в 8.2 поле Договор на самом деле называется ДоговорКонтрагента
10 Альбатрос
 
05.03.12
06:39
(9) Учитывая, что это 7
11 Godofsin
 
05.03.12
06:45
(0) Если ТекДок выбирается в цикле, то переменную ЕстьСчетФактура нужно обнулять.
12 Ёпрст
 
гуру
05.03.12
08:31
(0)
            ЕстьСчетФактура =0;
            Док = СоздатьОбъект("Документ");
            Док.ВыбратьПодчиненныеДокументы(,,ТекДок);
            Пока Док.ПолучитьДокумент() = 1 Цикл        
               Если Док.Вид() = "СчетФактура" Тогда  
                  ЕстьСчетФактура = 1;                  
                  Прервать;  
               КонецЕсли;                                
            КонецЦикла;      
           
            // создаем СФ
            Если ЕстьСчетФактура = 0 Тогда                                  
               Док = СоздатьОбъект("Документ.СчетФактура");
               Док.Новый();                                          
            ИначеЕсли ТекДок.проведен() = 1 Тогда
               // текущиее основание (Документ отгрузка) проведен! -- пропускаем цикл
               //Тут тоже бред, если это выборка по ТекДок, то достаточно ТекДок.УстановитьФильтр(0,1);
               Продолжить;
            КонецЕсли;  
            ....  
             // заполняем СФ              

           
            ТекДок.ВыбратьСтроки();
            Пока ТекДок.ПолучитьСтроку() = 1 Цикл
            ...      
            КонецЦикла;    
           
            //Попытка

            Док.Записать();
13 nicxxx
 
05.03.12
10:04
(10)а это ни о чем не говорит - ЗАГРУЗКАДАННЫХИЗ82ТЕСТ.ERT ?
15 Dark_iNiTro
 
05.03.12
10:35
Спасибо,  viktor_vv, получилось!
16 Ёпрст
 
гуру
05.03.12
10:47
(15) наивный какой..
17 Ёпрст
 
гуру
05.03.12
10:47
+16 в (4) лажа, если что
18 viktor_vv
 
05.03.12
10:50
(17) Ну и где там лажа ?
19 Ёпрст
 
гуру
05.03.12
10:56
(18) подумай.
20 viktor_vv
 
05.03.12
10:59
(19) Ну еще (11) прощелкал.
21 Ёпрст
 
гуру
05.03.12
11:00
(20) еще подумай.
22 viktor_vv
 
05.03.12
11:04
(21) Ну тут в цикле.

            Пока Док.ПолучитьДокумент() = 1 Цикл        
               Если Док.Вид() = "СчетФактура" Тогда  
                  ДокСчФСсылка = Док.ТекущийДокумент();
                  ЕстьСчетФактура = 1;                  
               КонецЕсли;                                
            КонецЦикла;    

Я уже все не копировал, просто кусок показал где поменять.
Че-то ты меня пмо в тупик ставишь :).
23 viktor_vv
 
05.03.12
11:04
*прямо.