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


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

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

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) ну а чего мелочиться?
и бэкапы придумал трусы :)
 
 


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