Имя: Пароль:
1C
1C 7.7
v7: Ошибка при формировании записей книги-покупок
0 тоа
 
24.09.14
16:28
Релиз Бухгалтерия 7.70.584
Формирую запись книги-покупок выдает ошибку

Если СокрЛП(Запрос.ДокументПоставки.ДатаНомерСчетаФактуры)<>"" Тогда
{Документ.ЗаписиКнигиПокупок.Форма.Модуль(719)}: Поле агрегатного объекта не обнаружено (ДатаНомерСчетаФактуры)
1 тоа
 
24.09.14
16:30
Причем за июль все окау, а за август проблема
2 lavalit
 
24.09.14
16:35
Проверьте на ПустоеЗначение(Запрос.ДокументПоставки)
3 lavalit
 
24.09.14
16:39
Если увидите "пустышку", То поймете где ошибочка случилась
4 тоа
 
24.09.14
16:41
(2) как это сделать? не пойму как должны увидеть пустышку..
5 lavalit
 
24.09.14
16:44
Запустите отладчик, поставьте точку останова на строке 719. Далее формируйте книгу. На строке 719 оно остановится и там можно будет посмотреть чему равно Запрос.ДокументПоставки.
Но если Вы бухгалтер, то можно попросить это сделать Вашего 1С ника. Он знает как это делать
6 тоа
 
24.09.14
16:44
Док=СоздатьОбъект("Документ");
    Пока Запрос.Группировка(1) = 1 Цикл
        СтрокаТЗ = "";
        ТЗ.НоваяСтрока();
        ТЗ.ДокРезерв = Запрос.ДокументПоставки;
        ТЗ.Резерв = Запрос.СуммаДок;
        Если СокрЛП(Запрос.ДокументПоставки.ДатаНомерСчетаФактуры)<>"" Тогда
            ТЗ.СчетФактура = Запрос.ДокументПоставки;
        Иначе
            Док.ВыбратьПодчиненныеДокументы(Запрос.ДокументПоставки.ДатаДок,ДатаКон,Запрос.ДокументПоставки);
            Пока Док.ПолучитьДокумент()=1 Цикл
                Если Док.Вид()="СчетФактураПолученный" Тогда
                    ТЗ.СчетФактура = Док.ТекущийДокумент();
                    Прервать;
                КонецЕсли;
            КонецЦикла;

Вот что имеем. Где Пустышка? Где запрос ПустоеЗначение?
7 lavalit
 
24.09.14
16:45
Док.ВыбратьПодчиненныеДокументы(Запрос.ДокументПоставки.ДатаДок,ДатаКон,Запрос.ДокументПоставки);
По ходу это и есть строка 719
8 lavalit
 
24.09.14
16:46
нет сори вот эта строка СокрЛП(Запрос.ДокументПоставки.ДатаНомерСчетаФактуры)<>""
9 lavalit
 
24.09.14
16:48
А сам запрос покажите
10 тоа
 
24.09.14
16:49
Процедура ЗаполнитьРезерв(ТЗ)
    ДатаНач = НачМесяца(ДатаДок);
    ДатаКон = КонМесяца(ДатаДок);
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "//{{ЗАПРОС(Запрос)
    |Период с ДатаНач по ДатаКон;
    |Обрабатывать НеПомеченныеНаУдаление;
    |ДокументПоставки = Документ.Выписка.ДокументПоставки, Документ.РасходныйОрдер.ДокументПоставки;
    |Сумма = Документ.РасходныйОрдер.Сумма, Документ.Выписка.Расход;
    |Функция СуммаДок = Сумма(Сумма);
    |Группировка ДокументПоставки без групп без упорядочивания;
    |Условие(ДокументПоставки.Выбран()=1);
    |Условие(Сумма>0);
    |Условие(ДокументПоставки.Договор.АвтоОбработкаНДС=1);
    |";//}}ЗАПРОС
    Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
        Предупреждение("Невозможно выполнить запрос");
        Возврат;
    КонецЕсли;
    Док=СоздатьОбъект("Документ");
    Пока Запрос.Группировка(1) = 1 Цикл
        СтрокаТЗ = "";
        ТЗ.НоваяСтрока();
        ТЗ.ДокРезерв = Запрос.ДокументПоставки;
        ТЗ.Резерв = Запрос.СуммаДок;
        Если СокрЛП(Запрос.ДокументПоставки.ДатаНомерСчетаФактуры)<>"" Тогда
            ТЗ.СчетФактура = Запрос.ДокументПоставки;
        Иначе
            Док.ВыбратьПодчиненныеДокументы(Запрос.ДокументПоставки.ДатаДок,ДатаКон,Запрос.ДокументПоставки);
            Пока Док.ПолучитьДокумент()=1 Цикл
                Если Док.Вид()="СчетФактураПолученный" Тогда
                    ТЗ.СчетФактура = Док.ТекущийДокумент();
                    Прервать;
                КонецЕсли;
            КонецЦикла;    
        КонецЕсли;
    КонецЦикла;
        
КонецПроцедуры
11 lavalit
 
24.09.14
16:51
Так стоп.... там по ходу пустышки не предвидится...
А во всех ли документах есть реквизит "ДатаНомерСчетаФактуры"?
12 тоа
 
24.09.14
16:53
а как посмотреть чему равно Запрос.ДокументПоставки все манипуляции с отладчиком сделали
13 lavalit
 
24.09.14
16:53
Вернее в документах выписка и расходный ордер есть Документ поставки вот там во всех ли документах есть этот реквизит? Там наверняка могут быть разные доки
14 тоа
 
24.09.14
16:54
по реквизитам щас посмотрим
15 lavalit
 
24.09.14
16:55
делаете так- отладчик включили, точку останова сделали. запустили формирование книги. после этого отладчик остановился на точке... выделяем Запрос.ДокументПоставки и жмем шифт+F9. в окошке видим содержание.
16 lavalit
 
24.09.14
16:57
Если это агрегат, то под плюсиками можно открывать  сам агрегат и смотреть чего там есть еще.. для документа это будут датадок номердок  и т.д.
17 тоа
 
24.09.14
16:57
= Ошибка в выражении
18 lavalit
 
24.09.14
16:59
ну вот а какой документ ? если ошибка выражения, стало быть реквизита нет
19 тоа
 
24.09.14
16:59
смотрим документы...
20 lavalit
 
24.09.14
17:00
наверно сразу смотрели "Запрос.ДокументПоставки.ДатаНомерСчетаФактуры"?
21 lavalit
 
24.09.14
17:01
Смотрите "Запрос.ДокументПоставки" он должен как раз показать что за документ
22 тоа
 
24.09.14
17:02
ага щас
23 тоа
 
24.09.14
17:03
не заполнены реквизиты
24 тоа
 
24.09.14
17:03
спасибо за помощь
25 lavalit
 
24.09.14
17:04
ну вот и суслик))
26 lavalit
 
24.09.14
17:04
не за что))
27 тоа
 
25.09.14
14:30
Добрый день!
Разобрались с формированием книги покупок
Теперь делаем отчет Книга покупок по Постановлению № 1137

ТабОтчета.КодВидаОперации   = ДокАвто.Приход.КодВидаОперации;
{Отчет.КнигаПокупок1137.Форма.Модуль(862)}: Поле агрегатного объекта не обнаружено (КодВидаОперации)
28 lavalit
 
25.09.14
15:24
Можно по той же схеме в принципе.
Отладчик точка на строке 862 и смотреть что там в ДокАвто.Приход. Что за документ и есть ли у него такой реквизит
29 lavalit
 
25.09.14
15:25
Обновки надеюсь свежие?
30 тоа
 
25.09.14
15:58
(29) 585 поставили
31 тоа
 
25.09.14
16:00
Если ПустоеЗначение(ДокАвто.Приход) = 0 Тогда
                Если (ДокАвто.Приход.Вид() = "РасходнаяНакладная") или (ДокАвто.Приход.Вид() = "ОтпускМатериаловНаСторону") Тогда
                Иначе
                    ТабОтчета.КодВидаОперации   = ДокАвто.Приход.КодВидаОперации;
                КонецЕсли;
            КонецЕсли;
            
            ТабОтчета.ВсегоПокупок         = ДокАвто.Всего;
            ТабОтчета.СуммаБезНДС20     = ДокАвто.БезНДС20;              
            ТабОтчета.НДС20             = ДокАвто.НДС20;
            ТабОтчета.СуммаБезНДС10     = ДокАвто.БезНДС10;
            ТабОтчета.НДС10             = ДокАвто.НДС10;
            ТабОтчета.НДС0                 = ДокАвто.НДС0;
            ТабОтчета.СуммаСовсемБезНДС = ДокАвто.Освобождаемые;  
            
            Если ПустоеЗначение(ДокАвто.СчетФактура) = 0 Тогда
                ДокОснование = ДокАвто.СчетФактура;            
                Если ДокОснование.Вид() = "ПоступлениеТоваров" Тогда
                    Если ((ДокОснование.ВидПоступления=4) или (ДокОснование.ВидПоступления=13)) и (ДокОснование.ПокупателемВыставляетсяСчетФактураНаВозврат = 0) и (ДокОснование.ВариантОтраженияВозврата = 1) и (ПустоеЗначение(ДокОснование.ДатаНомерСчетаФактуры) = 1) Тогда
                        ТабОтчета.Возврат = 1;
                    КонецЕсли;

строка 862...
32 lavalit
 
25.09.14
16:08
Вот на этой строке
ТабОтчета.КодВидаОперации   = ДокАвто.Приход.КодВидаОперации;
надо глянуть что за документ ДокАвто.Приход
Есть ли у него в принципе реквизит "КодВидаОперации"
33 тоа
 
25.09.14
16:27
рушится на документе об оказании услуг, который введен на основании счета
В этих документах все ровно
34 lavalit
 
25.09.14
16:34
Тогда все верно у документа "ОказаниеУслуг" нет такого реквизита
35 lavalit
 
25.09.14
16:36
Поправьте строку
Если (ДокАвто.Приход.Вид() = "РасходнаяНакладная") или (ДокАвто.Приход.Вид() = "ОтпускМатериаловНаСторону") Тогда

На эту

Если (ДокАвто.Приход.Вид() = "РасходнаяНакладная") или (ДокАвто.Приход.Вид() = "ОтпускМатериаловНаСторону")  или
(ДокАвто.Приход.Вид() = "ОказаниеУслуг") Тогда
36 lavalit
 
25.09.14
16:38
В этом случае Отчет не будет считывать реквизит "КодВидаОперации"
37 тоа
 
25.09.14
16:41
Все получилось.
Большое СПАСИБО!!!
38 lavalit
 
25.09.14
16:47
Вообще то я бы заменил бы вот этот момент  
      Если (ДокАвто.Приход.Вид() = "РасходнаяНакладная") или (ДокАвто.Приход.Вид() = "ОтпускМатериаловНаСторону") Тогда
                Иначе
                    ТабОтчета.КодВидаОперации   = ДокАвто.Приход.КодВидаОперации;
                КонецЕсли;
            КонецЕсли;
на
    Реквизит=Метаданные.Документ(ДокАвто.Приход.Вид()).РеквизитТабличнойЧасти(ИмяРеквизита);
    Если Реквизит.Выбран()=1 Тогда
ТабОтчета.КодВидаОперации   = ДокАвто.Приход.КодВидаОперации;
КонецЕсли;

В этом варианте не надо перечислять все виды документов в который нет реквизита... а просто берется документ по его виду и определяется есть ли такой реквизит... а уж какой документ попадется отчету будет все равно
39 lavalit
 
25.09.14
16:48
Чем смог тем помог.
Удачи.
Если чего спрашивайте.
40 тоа
 
26.09.14
08:55
Доброе утро!
Заменил код, теперь при открытии Книги покупок по постановлению №1137 вылетает ошибка

Реквизит=Метаданные.Документ(ДокАвто.Приход.Вид()).РеквизитТабличнойЧасти(ИмяРеквизита<<?>>);
{Отчет.КнигаПокупок1137.Форма.Модуль(860)}: Переменная не определена (ИмяРеквизита)

Где забить переменную?
41 lavalit
 
29.09.14
09:59
Вместо ИмяРеквизита ставьте "КодВидаОперации"
2 + 2 = 3.9999999999999999999999999999999...