Вход | Регистрация


1С:Предприятие ::

Метки: 

v7: Как найти "кривой" документ

Я
   John83
 
11.01.13 - 08:33
Комплексная конфа 519 релиз
При проведении проведении документа формирования книги продаж, ругается
ДокПодч.ВыбратьПодчиненныеДокументы(,,ДокДляПроверки);
{Документ.КнигаПродаж.Модуль Документа(47)}: Не выбран документ!
Вроде бы идем в отладчик и смотрим, в чем проблема, но там документы перебираются в цикле

    ДокПодч.ВыбратьПодчиненныеДокументы(,ДатаДок,ДокДляПроверки);
    Пока ДокПодч.ПолучитьДокумент()=1 Цикл
       Если ДокПодч.Вид()=ВидСФ Тогда
          Если (ДокПодч.Проведен()=1) ИЛИ (ДокПодч.ФлагСвертки=1) Тогда
             Если ВидСФ = "СчетФактураПолученный" Тогда
                Если ДокПодч.АвтоКнигаПокупок = 1 Тогда
                   НайденнаяСФ = ДокПодч.ТекущийДокумент();
                   Возврат 1;
                Иначе
                Возврат 0;
             КонецЕсли;
          Иначе
                Если ДокПодч.АвтоКнигаПродаж = 1 Тогда
                   НайденнаяСФ = ДокПодч.ТекущийДокумент();
                   Возврат 1;
                Иначе
                   Возврат 0;
                КонецЕсли
             КонецЕсли;
          КонецЕсли;
       КонецЕсли;
    КонецЦикла;               

и нет волшебной галочки "остановка по ошибке", а сидеть и нажимать F8 неск. тыс. раз, как-то неохота...
Как тут проще поступить?
 
 
   tdm
 
1 - 11.01.13 - 08:42
какая конкретно строка - КнигаПродаж.Модуль Документа(47) ?
   John83
 
2 - 11.01.13 - 08:43
ой...
вот эта
НайденнаяСФ = ДокПодч.ТекущийДокумент();
   PuhUfa
 
3 - 11.01.13 - 08:45
Сообщить()
   John83
 
4 - 11.01.13 - 08:51
(3) эм.. что-то такое смутно припоминаю - может напоминшь? :)
   John83
 
5 - 11.01.13 - 08:52
PS видать пора спать уже :)
вот модуль

    ДокПодч.ВыбратьПодчиненныеДокументы(,,ДокДляПроверки);
    Пока ДокПодч.ПолучитьДокумент()=1 Цикл
        Если ДокПодч.Вид()="СчетФактураВыданный" Тогда
            Если (ДокПодч.Проведен()=1) или (ДокПодч.ФлагСвертки=1) Тогда
                Если ДокПодч.АвтоКнигаПродаж = 1 Тогда
                    НайденнаяСФ = ДокПодч.ТекущийДокумент();
                    Возврат 1;
                Иначе     
                    Возврат 0;
                КонецЕсли;
            КонецЕсли;
            
        ИначеЕсли ДокПодч.Вид()="СчетФактураПолученный" Тогда
            Если (ДокПодч.Проведен()=1) или (ДокПодч.ФлагСвертки=1) Тогда
                Если ДокПодч.АвтоКнигаПокупок = 1 Тогда
                    НайденнаяСФ = ДокПодч.ТекущийДокумент();
                    Возврат 1;
                Иначе     
                    Возврат 0;
                КонецЕсли;
            КонецЕсли;
            
        КонецЕсли;
    КонецЦикла;   

и 47ая строка 
ДокПодч.ВыбратьПодчиненныеДокументы(,,ДокДляПроверки);
   evGenius
 
6 - 11.01.13 - 08:54
ДокДляПроверки где присваивается?
   John83
 
7 - 11.01.13 - 08:56
вот вся функция

Функция ПроверкаСФДокумента(ДокДляПроверки,НайденнаяСФ)
                        
    Если (ДокДляПроверки.Вид() = "ОтчетККМ") Тогда
        НайденнаяСФ = ДокДляПроверки;
        Возврат 1;
    КонецЕсли;
    
    Если ДокДляПроверки.Вид() = "РеализацияРозница" Тогда
        Если ДокДляПроверки.ВидОперации = Перечисление.ВидыОперацийРеализацияРозница.ОтчетПоПродажам Тогда
            НайденнаяСФ = ДокДляПроверки; 
            Возврат 1;
        КонецЕсли;        
    КонецЕсли;          
    
    Если ДокДляПроверки.Вид() = "ПКО" Тогда
        Если (ДокДляПроверки.КодОперации = глКО.РозничнаяВыручка) ИЛИ (ДокДляПроверки.КодОперации = глКО.РозничнаяВыручкаЗаПринятые)Тогда
            НайденнаяСФ = ДокДляПроверки; 
            Возврат 1;
        КонецЕсли;        
    КонецЕсли;
    
    ДокПодч.ВыбратьПодчиненныеДокументы(,,ДокДляПроверки);
    Пока ДокПодч.ПолучитьДокумент()=1 Цикл
        Если ДокПодч.Вид()="СчетФактураВыданный" Тогда
            Если (ДокПодч.Проведен()=1) или (ДокПодч.ФлагСвертки=1) Тогда
                Если ДокПодч.АвтоКнигаПродаж = 1 Тогда
                    НайденнаяСФ = ДокПодч.ТекущийДокумент();
                    Возврат 1;
                Иначе     
                    Возврат 0;
                КонецЕсли;
            КонецЕсли;
            
        ИначеЕсли ДокПодч.Вид()="СчетФактураПолученный" Тогда
            Если (ДокПодч.Проведен()=1) или (ДокПодч.ФлагСвертки=1) Тогда
                Если ДокПодч.АвтоКнигаПокупок = 1 Тогда
                    НайденнаяСФ = ДокПодч.ТекущийДокумент();
                    Возврат 1;
                Иначе     
                    Возврат 0;
                КонецЕсли;
            КонецЕсли;
            
        КонецЕсли;
    КонецЦикла;   
    
    
    глСообщениеПроведения("На документ "+ДокДляПроверки+" не зарегистрирован счет - фактура!",ДокДляПроверки,, ТекущийДокумент(),1);
    Возврат 0;
    
КонецФункции// ПроверкаСФДокумента()
   1Сергей
 
8 - 11.01.13 - 08:56
ДокДляПроверки чему равен?
   evGenius
 
9 - 11.01.13 - 08:57
Так все-таки что же ты передаешь в эту функцию?
   John83
 
10 - 11.01.13 - 08:58
(8) (9) туда реализации передаются
 
 Рекламное место пустует
   evGenius
 
11 - 11.01.13 - 08:59
(10) код покажи, там у тебя случайно не документ, созданный с помощью СоздатьОбъект()???
   evGenius
 
12 - 11.01.13 - 08:59
а где
ДокПодч = СоздатьОбъект("Документ");
???
   1Сергей
 
13 - 11.01.13 - 08:59
(10) с отладчиком знаком?
   tdm
 
14 - 11.01.13 - 09:00
НайденнаяСФ - это просто переменная модуля или же реквизит документа ? может просто типы не совпадают...да и в 7-ке нет явной объектной модели (ссылка и объект) в эту сторону бы еще покопал...несколько лет конфигуратор 7-ки не открывал к счастью)))
   1Сергей
 
15 - 11.01.13 - 09:00
(12) кстати +1
   PuhUfa
 
16 - 11.01.13 - 09:03
(12)(15)
//////////////////////////////////////////////////////////////
 
// ПЕРЕМЕННЫЕ МОДУЛЯ
 //
 
Перем ДокПодч;
   John83
 
17 - 11.01.13 - 09:04
(14) та же "проблема" :)
   evGenius
 
18 - 11.01.13 - 09:05
А если переделать так? Заработает?
ДокПодч.ВыбратьПодчиненныеДокументы(,,ДокДляПроверки.ТекущийДокумент());
   PuhUfa
 
19 - 11.01.13 - 09:05
+(16) там дальше еще веселее:
//////////////////////////////////////////////////////////////
 
// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
 //
 
ДокПодч = СоздатьОбъект("Документ");
   John83
 
20 - 11.01.13 - 09:07
(13) с 7чным давние знакомые
   PuhUfa
 
21 - 11.01.13 - 09:09
(4)
Сообщить("Проверяем: "+ДокДляПроверки);
ДокПодч.ВыбратьПодчиненныеДокументы(,ДатаДок,ДокДляПроверки);

Дальше смотри из какого запроса ростут ноги так как во все проверки передаются данные запроса:
Если ПроверкаСФДокумента(Запрос.КредДокумент,НайденнаяСФ) = 0 Тогда
    Продолжить;
КонецЕсли;
   1Сергей
 
22 - 11.01.13 - 09:11
(20) а чего не пользуешься?
   John83
 
23 - 11.01.13 - 09:11
(21) вот запрос с последующим вызовом функции
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)
 
    |Период с ДатаНачала "+ ПериодПо+";
    |ФирмаРег         = Регистр.Покупатели.Фирма;
    |ВидДолга         = Регистр.Покупатели.ВидДолга;
    |КредДокумент     = Регистр.Покупатели.КредДокумент;
    |ДокументОплаты = Регистр.Покупатели.ДокументОплаты;
    |ТекДокумент     = Регистр.Покупатели.ТекущийДокумент;
    |СуммаРуб         = Регистр.Покупатели.СуммаРуб;
    |КодОперации     = Регистр.Покупатели.КодОперации;
    |СтавкаНП         = Регистр.Покупатели.СтавкаНП;
    |Функция СуммаРубПриход = Приход(СуммаРуб);
    |Функция СуммаРубОтг    = Приход(СуммаРуб) Когда (КодОперации <> КодОперацииСуммоваяРазница);
    |Функция СуммаРубСР     = Приход(СуммаРуб) Когда (КодОперации =  КодОперацииСуммоваяРазница);
    |Группировка     КредДокумент;
    |Группировка     ВидДолга;
    |Группировка     СтавкаНП;
    |Условие    (ФирмаРег     = Фирма);
    |Условие    (КодОперации     в СписокНужныхКодов);
    |Условие    (ВидДолга         в СписокНужныхВидовДолга);
    |//}}ЗАПРОС
 
    ;
    
    Если ФормироватьТолькоПоДокументамОтгрузки = 1 Тогда
        ТекстЗапроса = ТекстЗапроса + "Условие (ТекДокумент = КредДокумент);
    |";
    
    КонецЕсли;
    
   // Если ошибка в запросе, то выход из процедуры
 
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли; 
    
    НайденнаяСФ = "";            
    ТИКнигаПродаж = СоздатьОбъект("ТаблицаЗначений");
        
    Пока Запрос.Группировка("КредДокумент") = 1 Цикл
        Если ПроверкаСФДокумента(Запрос.КредДокумент,НайденнаяСФ) = 0 Тогда
            Продолжить;
        КонецЕсли;
   John83
 
24 - 11.01.13 - 09:12
(22) пытаюсь...
   John83
 
25 - 11.01.13 - 09:13
+24 рядом эта же база, но конвертированная на 8ку - параллельно сижу в ней, запросами смотрю
   evGenius
 
26 - 11.01.13 - 09:17
(23) Хм, не заполнено измерение в регистре похоже, пустая ссылка на документ получается
   Ёпрст
 
27 - 11.01.13 - 09:17
дык проверь регистр, где в КредДок пустая/битая ссылка, делов то.
   Ёпрст
 
28 - 11.01.13 - 09:17
или воткни в функцию проверку на Выбран()..
   PuhUfa
 
29 - 11.01.13 - 09:23
(23)
// Если ошибка в запросе, то выход из процедуры
 
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
  Возврат;
КонецЕсли; 
    
НайденнаяСФ = "";            
ТИКнигаПродаж = СоздатьОбъект("ТаблицаЗначений");

Тзапроса = СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(Тзапроса);
Тзапроса.ВыбратьСтроку();

Смотришь таблицу результата запроса, анализируешь -)
   John83
 
30 - 11.01.13 - 09:23
(26) так и оказалось
это выписка банка, только вот не пойму, почему кред. документ не заполняется
   John83
 
31 - 11.01.13 - 09:24
(28) (29) сейчас уже поздновато - люди начали работать
   PuhUfa
 
32 - 11.01.13 - 09:25
(31) мы на столько суровы, что делаем все на боевой базе? -)
   John83
 
33 - 11.01.13 - 09:27
(32) ну а чего мелочиться?
и бэкапы придумал трусы :)
 
 



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует