Имя: Пароль:
1C
1C 7.7
v7: нужна помощь с кодом
🠗 (Волшебник 16.09.2015 10:11)
0 AlaMaRit
 
16.09.15
09:47
Процедура НеОплаченныеНакладные();
    ... // Отчет по неоплаченным накладным...
КонецПроцедуры

Процедура ПриОткрытии();
НеОплаченныеНакладные()
КонецПроцедуры
выдает ошибку <<?>>Процедура НеОплаченныеНакладные();
{Отчет.Взаиморасчеты.Форма.Модуль(385)}: Определения процедур и функций должны размещаться перед операторами основной программы
вопрос где ошибка?
1 Zhuri
 
16.09.15
09:49
Процедура НеОплаченныеНакладные();
убери ";"
2 HawkEye
 
16.09.15
09:50
(0) ";" - убери после названия процедур
3 itlikbez
 
16.09.15
09:52
(0) Ошибка где-то выше строки 385. Ищи лишние ";"
4 itlikbez
 
16.09.15
09:53
(1) (2) Зачем? Смотрится неплохо. Мне лично нравится.
5 HawkEye
 
16.09.15
10:09
(4) и то верно, хотя мне и не нравится....
(0) убери ";" ПЕРЕД "Процедура НеОплаченныеНакладные()"
6 AlaMaRit
 
16.09.15
10:46
(5) убрал, ошибка осталась
7 xaozai
 
16.09.15
10:48
Процедура НеОплаченныеНакладные();
Процедура ПриОткрытии();

Нафик здесь ;  ?
8 itlikbez
 
16.09.15
10:49
(7) Для красоты. Не трожь!
9 itlikbez
 
16.09.15
10:49
(6) Убери все.
10 AlaMaRit
 
16.09.15
10:50
все убрал не работает
11 xaozai
 
16.09.15
10:52
(8) Для красоты сисек не хватает.

?•_?_•?
12 xaozai
 
16.09.15
10:52
эх
13 itlikbez
 
16.09.15
10:52
(10) Ошибка та же?
14 AlaMaRit
 
16.09.15
11:10
(13) да
15 HawkEye
 
16.09.15
11:21
(0) чего гадать то, давай сюда весь код.
16 AlaMaRit
 
16.09.15
11:23
(15)

//*******************************************
процедура выбДаты(Реж)
    если Реж = 0 тогда
        если ДатаС > ПолучитьДатуТА() тогда
            ДатаС = ПолучитьДатуТА();
            Предупреждение("Нельзя выбирать дату начала периода больше ТА", 30);
        иначеЕсли ДатаС > ДатаПо тогда
            ДатаС = ДатаПо;
            Предупреждение("Нельзя выбирать дату начала периода больше даты конца", 30);
        конецЕсли;
    иначе
        если ДатаПо < ДатаС тогда
            ДатаПо = ДатаС;
            Предупреждение("Некорректный интервал дат", 30);
        конецЕсли;
    конецЕсли;
конецПроцедуры


//*******************************************
Процедура Сформировать()
    перем Реж;
    
    Спис = СоздатьОбъект("СписокЗначений");
    Спис.ДобавитьЗначение(0,"Итоги");
    Спис.ДобавитьЗначение(1,"Кратко");
    Спис.ДобавитьЗначение(2,"Подробно");
    Спис.ДобавитьЗначение(3,"Неоплаченные документы");
    если Спис.ВыбратьЗначение(Реж,"Режим печати",,,1) = 0 тогда
        возврат;
    конецЕсли;
    Спис = 0;        
    Если реж=3 Тогда//Неоплаченные документы
        Состояние("Выполняется обработка. Ждите...");
        Таб = СоздатьОбъект("Таблица");
        Заг=1;
        Если ПустаяСтрока(выбПост)<>1 Тогда
            Заг="По "+ВыбПост;                
        КонецЕсли;
        Заг1="";
        
        Таб.ИсходнаяТаблица("Таблица1");
        Таб.ВывестиСекцию("Шапка");
        Рег=создатьОбъект("Регистр.Взаиморасчеты");
        Рег1=создатьОбъект("Регистр.Партии");
        сумДолг4=0;
        СумНадо4=0;
        Табл = СоздатьОбъект("ТаблицаЗначений");
        б=1;
        Табл.НоваяКолонка();
        Табл.НоваяКолонка();
        Табл.НоваяКолонка();
        Табл.НоваяКолонка();
        Табл.НоваяКолонка();        
        Таб1 = СоздатьОбъект("ТаблицаЗначений");
        Сп = СоздатьОбъект("СписокЗначений");
        Таб1.НоваяКолонка();
        Таб1.НоваяКолонка();
        Таб1.НоваяКолонка();
        Таб1.НоваяКолонка();
        СпрФ=СоздатьОбъект("Справочник.ФирмыК");
        
        ин=1;
        
        Док=СоздатьОБъект("Документ");
        Док.ОбратныйПорядок(1);
        Если ВыбПост.Выбран()=1 Тогда
            Док.ВыбратьПоЗначению(Дата(2004,9,1),ДатаПо,"Поставщик",ВыбПост);
        Иначе    
            Док.ВыбратьДокументы(Дата(2004,9,1),ДатаПо);
        КонецЕсли;
        Пока (Док.ПолучитьДокумент()>0)  Цикл
            Если Док.проведен()=0 Тогда
                Продолжить;
            КонецЕсли;    
            
            Если (Док.Вид()="ПрихНакладная") Тогда
                Если выбФир.Выбран()=1 Тогда    
                    Если (Док.Фирма=ВыбФир) Тогда
                    Иначе
                        Продолжить;
                    КонецЕсли;    
                КонецЕсли;        
                Стр="";                                  
                Если сп.НайтиЗначение(Док.Поставщик)<>0 тогда
                КонецЕсли;    
                Если Таб1.НайтиЗначение(Док.Поставщик,Стр,1)=0 Тогда
                    Если ПустоеЗначение(выбфир)=1 Тогда
                        СумДолг=Рег.СводныйОстаток(Док.Поставщик,,,"Сумма");
                    Иначе    
                        СумДолг=Рег.СводныйОстаток(Док.Поставщик,,ВыбФир,"Сумма");
                    КонецЕсли;
                    СпрФ.ИспользоватьВладельца(Док.Поставщик);
                    СпрФ.ИспользоватьДату(ДатаПо);
                    Если СПРФ.НайтиПоРеквизиту("Фирма",Константа.ОснФирма,0)<>0 Тогда
                        Срок=СпрФ.Дни;
                        ВидР=СпрФ.ПоУмолчанию;
                    КонецЕсли;      
                    
                    СумДолг1=0;
                    Если видР=0 Тогда
                        Ост=Рег1.СводныйОстаток(,,ВыбФир,Док.Поставщик,"Себестоимость");
                        СумДолг1=СумДолг-Ост;
                    КонецЕсли;
                    Сп.ДобавитьЗначение(Док.Поставщик);
                    
                    Если СумДолг>0 Тогда
                        Таб1.НоваяСтрока();    
                        Стр=Таб1.КоличествоСтрок();
                        Таб1.УстановитьЗначение(стр,1,Док.Поставщик);
                        Таб1.УстановитьЗначение(стр,2,СумДолг);
                        Таб1.УстановитьЗначение(стр,3,СумДолг1);
                        Таб1.УстановитьЗначение(стр,4,ВидР);
                    Иначе    
                        Сп.ДобавитьЗначение(Док.Поставщик);
                        Продолжить;
                    Конецесли;    
                КонецЕсли;    
                СумДолг=Таб1.ПолучитьЗначение(стр,2);
                Если сумДолг<=0 Тогда
                    Продолжить;
                КонецЕсли;    
                Докум=Док.ТекущийДокумент();
                ПрихДолг=Док.Итог("Сумма");
                Если ПрихДолг<=СумДолг Тогда
                    Долг=ПрихДолг;
                    СумДолг=СумДолг-ПрихДолг;  
                Иначе
                    Долг=СумДолг;
                    СумДолг=0;
                КонецЕсли;
                Таб1.УстановитьЗначение(стр,2,СумДолг);
                Табл.НоваяСтрока();
                Табл.УстановитьЗначение(ин,1,Докум.ДатаДок);
                Табл.УстановитьЗначение(ин,2,Докум);
                Табл.УстановитьЗначение(ин,3,ПрихДолг);
                Табл.УстановитьЗначение(ин,4,Долг);
                Табл.УстановитьЗначение(ин,5,Докум.Поставщик);
                ин=ин+1;
            КонецЕсли;    
            
        КонецЦикла;                                
        СумНадо=0;            б=1; СумДолг2=0;СумНадо=0;
        Табл.Сортировать("5,1");
        Если Табл.КоличествоСтрок()=0 Тогда
            Предупреждение("Неоплаченных документов нет!");
            Возврат;
        КонецЕсли;    
        Пс=Табл.ПолучитьЗначение(1,5);
        Таб.ВывестиСекцию("Контрагент");
        Стр=""; СумДолг1=0;ВидР=1;
        Если таб1.НайтиЗначение(Пс,Стр,1)<>0 Тогда
            Если таб1.ПолучитьЗначение(Стр,4)=0 Тогда
                ВидР= таб1.ПолучитьЗначение(Стр,4);
                СумДолг1=таб1.ПолучитьЗначение(Стр,3);
            КонецЕсли;    
        КонецЕсли;    
        Для ин=1 По Табл.КоличествоСтрок() Цикл
            Если Пс<>Табл.ПолучитьЗначение(ин,5) Тогда
                Таб.ВывестиСекцию("Итог");
                СумДолг4=СумДолг4+СумДолг2;
                СумНадо4=СумНадо4+СумНадо;
                Пс=Табл.ПолучитьЗначение(ин,5);
                Таб.ВывестиСекцию("Контрагент");
                Стр=""; СумДолг1=0;ВидР=1;
                Если таб1.НайтиЗначение(Пс,Стр,1)<>0 Тогда
                    Если таб1.ПолучитьЗначение(Стр,4)=0 Тогда
                        СумДолг1=таб1.ПолучитьЗначение(Стр,3);
                        ВидР= таб1.ПолучитьЗначение(Стр,4);
                    КонецЕсли;    
                КонецЕсли;    
                СумДолг2=0;                        
                СумНадо=0;
                б=0;
            КонецЕсли;        
            Докум=Табл.ПолучитьЗначение(ин,2);
            ПрихДолг=Табл.ПолучитьЗначение(ин,3);
            Долг=Табл.ПолучитьЗначение(ин,4);    
            СумДолг2=СумДолг2+Долг;
            
            
        
        КонецЦикла;    
        Таб.ВывестиСекцию("Итог");            
        СумДолг4=СумДолг4+СумДолг2;
        СумНадо4=СумНадо4+СумНадо;
        Если СумНадо4<>СумНадо Тогда
            Таб.ВывестиСекцию("Всего");
        КонецЕсли;
        ОчиститьОкноСообщений();
        Таб.Опции(0,0,5,0,0);
        Таб.ТолькоПросмотр(1);
        Таб.Показать("Взаиморасчеты","");
        
        Возврат;
    КонецЕсли;    
    
    ТекстЗапроса = "Период с ДатаС";
    если ДатаПо >= ПолучитьДатуТА() тогда
        ТекстЗапроса = ТекстЗапроса + ";";
    иначе
        ТекстЗапроса = ТекстЗапроса + " по ДатаПо;";
    конецЕсли;
    
    ТекстЗапроса = ТекстЗапроса +     "//{{ЗАПРОС(хочу)
    |Контрагент = Регистр.Взаиморасчеты.Контрагент;
    |ВидЗакупки = Регистр.Взаиморасчеты.ВидЗакупки;
    |Фирма = Регистр.Взаиморасчеты.Фирма;
    |Сум = Регистр.Взаиморасчеты.Сумма;
    |Докум = Регистр.Взаиморасчеты.ТекущийДокумент;
    |Проект = Регистр.Взаиморасчеты.ТекущийДокумент.Проект;
    |Функция Сумма = КонОст(Сум);
    |Функция НачДолг = НачОст(Сум);
    |Функция ПрихДолг = Приход(Сум);
    |Функция РасхДолг = Расход(Сум);
    |"//}}ЗАПРОС
    ;
    Если Проект = 1 тогда
        
        ТекстЗапроса = ТекстЗапроса + "Группировка Проект;
                                       |Группировка Контрагент " + ?(БезГрупп = 1, "Без Групп", "") + " упорядочить по " + ?(Упорядочить = 1, "Контрагент.Наименование", "Сумма") + ";";//Контрагент.Наименование;";//
    Иначе
        ТекстЗапроса = ТекстЗапроса +  "Группировка Контрагент " + ?(БезГрупп = 1, "Без Групп", "") + " упорядочить по " + ?(Упорядочить = 1, "Контрагент.Наименование", "Сумма") + ";";//Контрагент.Наименование;";
    конецЕсли;
    Итог=0;
    если Реж = 2 тогда
        ТекстЗапроса = ТекстЗапроса + "Группировка Докум упорядочить по Докум.ДатаДок;";
    конецЕсли;
    
    если выбПост.Выбран()=1 тогда
        если выбПост.ЭтоГруппа()=1 тогда
            ТекстЗапроса = ТекстЗапроса + "Условие (Контрагент.ПринадлежитГруппе(выбПост)=1);";
            Заг = "По контрагентам группы "+выбПост.Наименование;
        иначе
            ТекстЗапроса = ТекстЗапроса + "Условие (Контрагент = выбПост);";
            Заг = "По контрагенту " + выбПост.Наименование;
        конецЕсли;
    иначе
        Заг = "По всем конрагентам";
    конецЕсли;
    
    если выбВид.Выбран() = 1 тогда
        
        Заг1 = Заг1 + ", По "+строка(выбВид);
        ТекстЗапроса = ТекстЗапроса + "Условие (ВидЗакупки = выбВид);";
    иначе
        Заг1 = Заг1 + ", По всем взаиморасчетам";
    конецЕсли;
    если выбФир.Выбран() = 1 тогда
        
        Заг1 = Заг1 + ", По "+строка(выбФир);
        ТекстЗапроса = ТекстЗапроса + "Условие (Фирма = выбФир);";
    иначе
        Заг1 = Заг1 + ", По всем фирмам";
    конецЕсли;
    если ВыбПроект.Выбран() = 1 тогда
        
        Заг1 = Заг1 + ", По проекту: "+строка(ВыбПроект);
        ТекстЗапроса = ТекстЗапроса + "Условие (Проект = ВыбПроект);";
    иначе
        Заг1 = Заг1 + ", По всем проектам";
    конецЕсли;
    
    
    Запрос = СоздатьОбъект("Запрос");
    Запрос.ВключитьSQL(1);
    если Запрос.Выполнить(ТекстЗапроса) = 0 тогда
        возврат;
    конецЕсли;
    
    Таб = СоздатьОбъект("Таблица");
    если Реж = 0 тогда
        Таб.ИсходнаяТаблица("Итоги");
    конецЕсли;
    
    Таб.ВывестиСекцию("Шапка");
    НачДолг=0;
    ПрихДолг=0;
    РасхДолг=0;
    КонДолг=0;  
    Прих1=0;
    Расх1=0;
    Если Проект = 1 Тогда
        
        пока Запрос.Группировка("Проект") = 1 цикл
            
            Таб.ВывестиСекцию("Проект");
            пока Запрос.Группировка("Контрагент") = 1 цикл
                
                Если (НашДолг = 0) И (Запрос.Сумма > 0) Тогда
                    
                    Продолжить
                КонецЕсли;//НашДолг = 1
                Если (Нулевые = 0) И (Запрос.Сумма = 0) Тогда
                    
                    Продолжить
                КонецЕсли;//Нулевые = 1
                Если (ДолгКонтрагента = 0) И (Запрос.Сумма < 0) Тогда
                    
                    Продолжить
                КонецЕсли;//ДолгКонтрагента = 1
                если Запрос.Контрагент.ЭтоГруппа()=1 тогда
                    Таб.ВывестиСекцию("Группа");
                иначе
                    Таб.ВывестиСекцию("Контрагент");
                    НачДолг=НачДолг+Запрос.НачДолг;
                    ПрихДолг=ПрихДолг+Запрос.ПрихДолг;
                    РасхДолг=РасхДолг+Запрос.РасхДолг;
                    КонДолг=КонДолг+Запрос.Сумма;
                конецЕсли;
                Итог=Итог+Запрос.Сумма;
                если Реж = 2 тогда
                    
                    Сум1 = Запрос.НачДолг;
                    Пока Запрос.Группировка("Докум")=1 цикл
                        
                        если Запрос.Докум.Выбран()=1 тогда
                            
                            Прих1=Прих1+Запрос.ПрихДолг;
                            Расх1=Расх1+Запрос.РасхДолг;
                            Сум1=Сум1+Запрос.ПрихДолг-Запрос.РасхДолг;
                            Таб.ВывестиСекцию("Докум");
                        конецЕсли;
                    КонецЦикла;
                конецЕсли;
            конецЦикла;
        конецЦикла;
    Иначе
        пока Запрос.Группировка("Контрагент") = 1 цикл
            
            Если (НашДолг = 0) И (Запрос.Сумма > 0) Тогда
                
                Продолжить
            КонецЕсли;//НашДолг = 1
            Если (Нулевые = 0) И (Запрос.Сумма = 0) Тогда
                
                Продолжить
            КонецЕсли;//Нулевые = 1
            Если (ДолгКонтрагента = 0) И (Запрос.Сумма < 0) Тогда
                
                Продолжить
            КонецЕсли;//ДолгКонтрагента = 1
            если Запрос.Контрагент.ЭтоГруппа()=1 тогда
                Таб.ВывестиСекцию("Группа");
            иначе
                Таб.ВывестиСекцию("Контрагент");
                НачДолг=НачДолг+Запрос.НачДолг;
                ПрихДолг=ПрихДолг+Запрос.ПрихДолг;
                РасхДолг=РасхДолг+Запрос.РасхДолг;
                КонДолг=КонДолг+Запрос.Сумма;
            конецЕсли;
            Итог=Итог+Запрос.Сумма;
            если Реж = 2 тогда
                
                Сум1 = Запрос.НачДолг;
                Пока Запрос.Группировка("Докум")=1 цикл
                    
                    если Запрос.Докум.Выбран()=1 тогда
                        
                        Прих1=Прих1+Запрос.ПрихДолг;
                        Расх1=Расх1+Запрос.РасхДолг;
                        Сум1=Сум1+Запрос.ПрихДолг-Запрос.РасхДолг;
                        Таб.ВывестиСекцию("Докум");
                    конецЕсли;
                КонецЦикла;
            конецЕсли;
        конецЦикла;
    КонецЕсли;//Проект = 1
    
    Таб.ВывестиСекцию("Подвал");
    
    Таб.Опции(0,0,5,0,0);
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Взаиморасчеты","");
    
КонецПроцедуры


ДатаС = Мин(ПолучитьДатуТА(),НачМесяца(РабочаяДата()));
ДатаПо = РабочаяДата()

//*******************************************  

Процедура НеОплаченныеНакладные()
    ... // Отчет по неоплаченным накладным...
КонецПроцедуры

Процедура ПриОткрытии()
НеОплаченныеНакладные();
КонецПроцедуры

держи
17 itlikbez
 
16.09.15
11:26
ДатаС = Мин(ПолучитьДатуТА(),НачМесяца(РабочаяДата()));
ДатаПо = РабочаяДата()

поставь в самый конец
18 AlaMaRit
 
16.09.15
11:45
(17) дабавил, вот ошибка
<<?>>Процедура НеОплаченныеНакладные()
{Отчет.Взаиморасчеты.Форма.Модуль(386)}: Определения процедур и функций должны размещаться перед операторами основной программы
19 AlaMaRit
 
16.09.15
11:52
Людии почему мне показывает  <<?>> перед Процедура НеОплаченныеНакладные(), там что то должно стоять? или что, у мня щас голова лопнет
20 AlaMaRit
 
16.09.15
12:05
(17) ошибка осталась, куда копать?
21 NikVars
 
16.09.15
12:28
(20) Начни с самого начала.
Ты что делаешь вообще?! Отчет, документ, справочник.
Соориентируй сообщество, а то по вопросам ты можешь писать код в самых неожиданных местах.
Далее интересен ВЕСЬ код, а не место ошибки.
На вопрос "куда копать" отвечу - начинай копать с того момента, который начал изменять и далее по цепочке своих действий.
22 AlaMaRit
 
16.09.15
12:30
(21) весь я код я выкладывал в (16)сообщении, а делаю я отчет, контрагенты, взаиморасчеты
23 itlikbez
 
16.09.15
12:37
(18) А оттуда, откуда поставил убери.
В промежутках между КонеПроцедуры и Процедура не должно быть ничего.
24 AlaMaRit
 
16.09.15
12:42
(23)//*******************************************

Процедура НеОплаченныеНакладные()
// Отчет по неоплаченным накладным...
КонецПроцедуры

Процедура ПриОткрытии()
НеОплаченныеНакладные()
КонецПроцедуры

ДатаС = Мин(ПолучитьДатуТА(),НачМесяца(РабочаяДата()));
ДатаПо = РабочаяДата()
Вот эту часть кода я добавил, именно так щас он у меня выглядит, и выдает эту ошибку:(смотри ниже)
<<?>>Процедура НеОплаченныеНакладные()
{Отчет.Взаиморасчеты.Форма.Модуль(386)}: Определения процедур и функций должны размещаться перед операторами основной программы
25 xaozai
 
16.09.15
13:03
ДатаПо = РабочаяДата()<<ТУТ ДОЛЖНА БЫТЬ ТОЧКА С ЗПТ>>
26 xaozai
 
16.09.15
13:04
+(25) А описания процедур нужно выше перенести, можно в самое начало.
27 AlaMaRit
 
16.09.15
13:08
(26) поставил ДатаПо = РабочаяДата(); но все равно
<<?>>Процедура НеОплаченныеНакладные()
{Отчет.Взаиморасчеты.Форма.Модуль(386)}: Определения процедур и функций должны размещаться перед операторами основной программы
28 AlaMaRit
 
16.09.15
13:08
что он хочет?
29 HawkEye
 
16.09.15
13:15
так надо

  Таб.Показать("Взаиморасчеты","");
    
КонецПроцедуры


//*******************************************  


Процедура НеОплаченныеНакладные()
    ...// Отчет по неоплаченным накладным...

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

Процедура ПриОткрытии()
НеОплаченныеНакладные();
КонецПроцедуры


ДатаС = Мин(ПолучитьДатуТА(),НачМесяца(РабочаяДата()));
ДатаПо = РабочаяДата()
30 HawkEye
 
16.09.15
13:15
;
31 AlaMaRit
 
16.09.15
13:18
(29) Таб<<?>>.Показать("Взаиморасчеты","");
{Отчет.Взаиморасчеты.Форма.Модуль(385)}: Переменная не определена (Таб)
Таб.Показать("Взаиморасчеты","");<<?>>
{Отчет.Взаиморасчеты.Форма.Модуль(385)}: Обнаружено логическое завершение исходного текста модуля
Выдал эту ошибку
32 AlaMaRit
 
16.09.15
13:28
(30) ну че там?
Закон Брукера: Даже маленькая практика стоит большой теории.