Имя: Пароль:
1C
1C 7.7
v7: Ошибки при формировании отчёта в Бух. учёте, ред. 4.5
0 Napalmmm
 
09.12.13
09:54
Здравствуйте!
Пару месяцев назад пришёл в сферу программирования на 1С, платформа 8.2(а именно, начал стажироваться путём просмотра обучающих курсов и выполнения задач по типу "создать отчёт, доработать форму и т.д.). Буквально на днях от руководства была поставлена задача: исправить отчёт  "Журнал-ордер счета 71" в конфигурации Бухгалтерский учёт, ред. 4.5 (7.70.560), т.к. он не формируется из-за ошибок.
1 Chum
 
09.12.13
09:55
И что?
2 Chum
 
09.12.13
09:56
(0) Мы послушали краткое повествование, а в чем, собственно говоря, заключается вопрос?
3 Napalmmm
 
09.12.13
09:57
Извините, что отправил так рано. Думал при создании темы и последующем её редактировании можно будет вставить код.

Через пару минут добавлю код и напишу ошибки, по которым хотел бы получить консультацию.
4 dclxvi
 
09.12.13
09:59
(3) Жгешь напалмом
5 Napalmmm
 
09.12.13
10:44
Код:
Процедура Сформировать()
    Подр = СоздатьОбъект("Справочник.Подразделения");
    СписокП = СоздатьОбъект("СписокЗначений");
    Подр.ВыбратьЭлементы();
    Пока Подр.ПолучитьЭлемент() = 1  Цикл
        Если Подр.ПометкаУдаления() = 1 Тогда
            Продолжить;
        КонецЕсли;
        СписокП.ДобавитьЗначение(Подр.ТекущийЭлемент());
    КонецЦикла;
    Если ПроверкаПериодаИГруппы() = 0 Тогда
        Возврат;
    КонецЕсли;
    БД=СоздатьОбъект("Xbase");
    БД.ДобавитьПоле("NA",1,10,2);
    БД.ДобавитьПоле("KO",1,10,2);
    БД.ДобавитьПоле("NA1",1,10,2);
    БД.ДобавитьПоле("KO1",1,10,2);
    БД.ДобавитьПоле("NAIM",2,50,);
    БД.ДобавитьПоле("NOMER",2,5,);
    БД.ДобавитьПоле("DATAN",2,10,);
    БД.ДобавитьИндекс("IDX1","NAIM+DATAN+NOMER",0,0,"");
    БД.СоздатьФайл(КаталогПользователя()+"ostatki.dbf");
    БД.ОчиститьФайл();
    Таб = СоздатьОбъект("Таблица");

    Таб.ИсходнаяТаблица("Сформировать");
    Ит1 = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит1.ВыполнитьЗапрос(Дата1, Дата2);
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ВключатьСубсчета(-1,-1);
    Ит.ИспользоватьСубконто("Сотрудники");                  
    Ит.ИспользоватьСубконто("Подразделения",СписокП);
    Если Ит.ВыполнитьЗапрос(Дата1, Дата2,СчетПоКоду("71.1"),,, 3,2,1) = 0 Тогда
        Возврат;
    КонецЕсли;
    НОМЕР = 1;
    Ит.ВыбратьПериоды();
    Пока Ит.ПолучитьПериод() = 1 Цикл
        Ит.ВыбратьСубконто(1);
        Ит.ПолучитьСубконто();
        БД.Добавить();
        БД.naim  = Ит.ПредставлениеСубконто(1);
        БД.NOMER = Формат(НОМЕР,"Ч(0)5");
        БД.DATAN = Формат(Ит.Операция.Документ.ДатаДок, "Д ДДММГГГГ");
        БД.NA    = Ит.СНД();
        БД.KO    = Ит.СКД();
        БД.NA1   = Ит.СНК();
        БД.KO1   = Ит.СКК();
        БД.Записать();
        НОМЕР = НОМЕР +1;
    КонецЦикла;
    БД.ТекущийИндекс("IDX1");
    БД.Первая();
    ФИО1=БД.NAIM;
    НаНач=БД.NA;
    НаКон=БД.KO;
    НаНач1=БД.NA1;
    НаКон1=БД.KO1;
    БД.KO=0;
    БД.KO1=0;
    БД.Записать();
    БД.Следующая();
    Пока БД.ВКонце()=0 Цикл
        Если ФИО1=БД.NAIM Тогда
            НаКон=БД.KO;
            БД.NA=0;
            БД.KO=0;
            НаКон1=БД.KO1;
            БД.NA1=0;
            БД.KO1=0;
            БД.Записать();
        Иначе
            БД.Предыдущая();
            БД.KO=НаКон;
            БД.KO1=НаКон1;
            БД.Записать();
            БД.Следующая();
            ФИО1=БД.NAIM;
            НаНач=БД.NA;
            НаКон=БД.KO;
            БД.KO=0;
            НаНач1=БД.NA1;
            НаКон1=БД.KO1;
            БД.KO1=0;
            БД.Записать();
        кОНЕЦЕСЛИ;    
        БД.Следующая();
    КонецЦикла;
    БД.Предыдущая();
    БД.KO=НаКон;
    БД.KO1=НаКон1;
    БД.Записать();
    
    НомерПП=0;
    ИтогоАванс=0;
    Итого50=0;
    Итого51=0;
    ИтогоВыдано=0;

    Таб.ВывестиСекцию("Заголовок");
    Таб.ВывестиСекцию("Шапка|Начало");
      Ит.ВыбратьКорСчета(1, 2);
    Пока Ит.ПолучитьКорСчет() = 1 Цикл
        Если ((Ит.Корсчет.ЭтоГруппа()=0) И (НЕ((Ит.Корсчет=СчетПоКоду("50.1")) ИЛИ (Ит.Корсчет=СчетПоКоду("51"))))) Тогда
            Таб.ПрисоединитьСекцию("Шапка|Кредит");
        КонецЕсли;
       КонецЦикла;
    Таб.ПрисоединитьСекцию("Шапка|Конец");
    НОМЕР = 1;
    Ит.ВыбратьПериоды();
    Пока Ит.ПолучитьПериод() = 1 Цикл
            Ит.ВыбратьКорСчета(0, 2);
              К50=0;
              К51=0;
              НомИДата="";
              ДатаАванс="";
              НомАванс="";
              АвансСумма=0;
              Пока Ит.ПолучитьКорСчет() = 1 Цикл
                Если Ит.Корсчет=СчетПоКоду("50.1") Тогда
                    НомИДата=Формат(Ит.Операция.Документ.ДатаДок, "Д ДДММГГГГ")+" №"+СокрЛ(СокрП(Ит.Операция.Документ.НомерДок));
                    К50=Ит.КорКО();
                    Итого50=Итого50+К50;
                КонецЕсли;
                Если Ит.Корсчет=СчетПоКоду("51") Тогда
                    К51=Ит.КорКО();
                    Итого51=Итого51+К51;
                КонецЕсли;
                Если ((Ит.Корсчет.ЭтоГруппа()=0) И (НЕ((Ит.Корсчет=СчетПоКоду("50.1")) ИЛИ (Ит.Корсчет=СчетПоКоду("51"))))) Тогда
                    ДатаАванс=Формат(Ит.Операция.Документ.ДатаДок, "Д ДДММГГГГ");
                    НомАванс=СокрЛ(СокрП(Ит.Операция.Документ.НомерДок));
                    АвансСумма=Ит.КорКО();
                    ИтогоАванс=ИтогоАванс+АвансСумма;
                КонецЕсли;
               КонецЦикла;
              Ит.ВыбратьКорСчета(0, 1);
              Д50=0;
              НомДата="";
            Пока Ит.ПолучитьКорСчет() = 1 Цикл
                Если Ит.КорСчет=СчетПоКоду("50.1") Тогда
                    НомДата=Формат(Ит.Операция.Документ.ДатаДок, "Д ДДММГГГГ")+" №"+СокрЛ(СокрП(Ит.Операция.Документ.НомерДок));
                    Д50=Ит.КорДО();
                    ИтогоВыдано=ИтогоВыдано+Д50;
                КонецЕсли;
            КонецЦикла;
            Ит.ВыбратьСубконто(1);
            Ит.ПолучитьСубконто();
            БД.Ключ.NAIM=Ит.ПредставлениеСубконто(1);
            БД.Ключ.DATAN=Формат(Ит.Операция.Документ.ДатаДок, "Д ДДММГГГГ");
            БД.Ключ.NOMER=Формат(НОМЕР,"Ч(0)5");
            НОМЕР=НОМЕР+1;
            Если БД.НайтиПоКлючу(0) = 1 Тогда
                НаНач=БД.NA;
                НаКон=БД.KO;
                НаНач1=БД.NA1;
                НаКон1=БД.KO1;
            Иначе
                Сообщить("Документ не найден"+Ит.Операция.Документ.НомерДок);
               КонецЕсли;
            НомерПП=НомерПП+1;
            Таб.ВывестиСекцию("Аванс|Начало");
            Ит.ВыбратьКорСчета(1, 2);
            Пока Ит.ПолучитьКорСчет() = 1 Цикл
                Если ((Ит.Корсчет.ЭтоГруппа()=0) И (НЕ((Ит.Корсчет=СчетПоКоду("50.1")) ИЛИ (Ит.Корсчет=СчетПоКоду("51"))))) Тогда
                       Таб.ПрисоединитьСекцию("Аванс|Кредит");
                КонецЕсли;
            КонецЦикла;
            Таб.ПрисоединитьСекцию("Аванс|Конец");
    КонецЦикла;

    Таб.ВывестиСекцию("Подвал|Начало");
      Ит.ВыбратьКорСчета(1, 2);
    Пока Ит.ПолучитьКорСчет() = 1 Цикл
        Если ((Ит.Корсчет.ЭтоГруппа()=0) И (НЕ((Ит.Корсчет=СчетПоКоду("50.1")) ИЛИ (Ит.Корсчет=СчетПоКоду("51"))))) Тогда
            Таб.ПрисоединитьСекцию("Подвал|Кредит");
        КонецЕсли;
       КонецЦикла;
    Таб.ПрисоединитьСекцию("Подвал|Конец");
    Ит = 0;
    Таб.ТолькоПросмотр(1);
       Таб.Опции(0, 0, 5, 3);
    Таб.ОбластьПечати();
    Таб.ПараметрыСтраницы(2,,,,,,,,, 0);
    Таб.Показать("Журнал ордер счет 71");
    БД.ЗакрытьФайл();

КонецПроцедуры


Ошибки:
ФИО1=БД.NAIM;
{Отчет.ЖурналОрдерСчета71ПоСотрудникам.Форма.Модуль(59)}: Перед выполнением операции установите объект на запись!
НаНач=БД.NA;
{Отчет.ЖурналОрдерСчета71ПоСотрудникам.Форма.Модуль(60)}: Перед выполнением операции установите объект на запись!
НаКон=БД.KO;
{Отчет.ЖурналОрдерСчета71ПоСотрудникам.Форма.Модуль(61)}: Перед выполнением операции установите объект на запись!
НаНач1=БД.NA1;
{Отчет.ЖурналОрдерСчета71ПоСотрудникам.Форма.Модуль(62)}: Перед выполнением операции установите объект на запись!
НаКон1=БД.KO1;
{Отчет.ЖурналОрдерСчета71ПоСотрудникам.Форма.Модуль(63)}: Перед выполнением операции установите объект на запись!
БД.KO=0;
{Отчет.ЖурналОрдерСчета71ПоСотрудникам.Форма.Модуль(64)}: Перед выполнением операции установите объект на запись!
БД.KO1=0;
{Отчет.ЖурналОрдерСчета71ПоСотрудникам.Форма.Модуль(65)}: Перед выполнением операции установите объект на запись!
БД.KO=НаКон;
{Отчет.ЖурналОрдерСчета71ПоСотрудникам.Форма.Модуль(95)}: Перед выполнением операции установите объект на запись!
БД.KO1=НаКон1;
{Отчет.ЖурналОрдерСчета71ПоСотрудникам.Форма.Модуль(96)}: Перед выполнением операции установите объект на запись!


Я так понимаю, мы проскакиваем цикл
Пока Ит.ПолучитьПериод() = 1 Цикл
...
КонецЦикла;
Но вот почему - понять не могу.

Подскажите, пожалуйста, в какую сторону копать? Заранее спасибо!
P.S. Еще раз извините за ошибки при создании темы.
6 Napalmmm
 
10.12.13
09:29
Up
7 Морозов Александр
 
10.12.13
09:30
Это чтение ДБФ...
8 dclxvi
 
10.12.13
09:31
Надпись: БД=СоздатьОбъект(... существует?
9 hhhh
 
10.12.13
09:44
(6) походу нет ни одной записи в БД
10 NikVars
 
10.12.13
14:27
(5) БД.СоздатьФайл(КаталогПользователя()+"ostatki.dbf");
Ты там случайно файл ostatki.dbf не открыл на чтение?
Чего там с правами на эту папку? Может ты по сети открываешь, а нужно рубать локально.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший