Имя: Пароль:
1C
1С v8
Процедура или функция с указанным именем объявлена, но не определена в текущем м
,
0 Z-bob
 
23.05.13
09:57
Здравствуйте, помогите с отчетом, отчет работал, там есть запрос "Документ.СчетФактураПоставщика", я хотел в запрос добавить "Документ.СчетФактура" и выходит ошибка Процедура или функция с указанным именем объявлена, но не определена в текущем модуле.
В чем ошибка? я просто в тот же запрос добавил и все, остальное ничего не менял, версия 1с 7.7
1 Z-bob
 
23.05.13
10:00
ТекстЗапроса = "//{{ЗАПРОС(СФ)
   |Период с ДатаНачала по ДатаОкончания;
   |ОбрабатыватьДокументы Проведенные;
   |Обрабатывать НеПомеченныеНаУдаление;
   |ДокСФ                    = Документ.СчетФактураПоставщика.ТекущийДокумент;
   |Контрагент                  = Документ.СчетФактураПоставщика.Контрагент;
   |ДатаВыпискиСФ            = Документ.СчетФактураПоставщика.СчетФактураДата;    
   |Свидетельство            = Документ.СчетФактураПоставщика.Контрагент.СвидетельствоПоНДС;
   |Организация              = Документ.СчетФактураПоставщика.Организация;
   |Оборот                    = Документ.СчетФактураПоставщика.СуммаБезНалогов;
   |СтНДС                      = Документ.СчетФактураПоставщика.СтавкаНДС;
   |НДС                      = Документ.СчетФактураПоставщика.СуммаНДС;
   |Функция ОблагаемыйОборот    = Сумма(Оборот) когда (СтНДС.Освобожденная = 0);
   |Функция ОбщийОборот        = Сумма(Оборот);
   |Функция ОбщийНДС            = Сумма(НДС);            
   |Группировка ДокСФ;
   |"//}}ЗАПРОС
   ;


запрос был таким
2 Z-bob
 
23.05.13
10:00
ТекстЗапроса =
   "//{{ЗАПРОС(СФ)
   |Период с ДатаНачала по ДатаОкончания;
   |Обрабатывать НеПомеченныеНаУдаление;
   |ДокСФ = Документ.СчетФактураПоставщика.ТекущийДокумент, Документ.СчетФактура.ТекущийДокумент;
   |ДатаВыпискиСФ = Документ.СчетФактураПоставщика.СчетФактураДата;
   |Свидетельство = Документ.СчетФактураПоставщика.Контрагент.СвидетельствоПоНДС;
   |Организация = Документ.СчетФактураПоставщика.Организация, Документ.СчетФактура.Организация;
   |Оборот = Документ.СчетФактураПоставщика.СуммаБезНалогов;
   |СтНДС = Документ.СчетФактураПоставщика.СтавкаНДС;
   |НДС = Документ.СчетФактураПоставщика.СуммаНДС;
   |Функция ОблагаемыйОборот = Сумма(Оборот) когда(СтНДС.Освобожденная = 0);
   |Функция ОбщийОборот = Сумма(Оборот);
   |Функция ОбщийНДС = Сумма(НДС);
   |Группировка ДокСФ;
   |"//}}ЗАПРОС
   ;


теперь такой
3 1Сергей
 
23.05.13
10:01
куда добавил-то?
4 azernot
 
23.05.13
10:01
Процедура ЗабабахатьКакуютоМуть() Далее  - процедура объявлена
...
...
Процедура ЗабабахатьКакуютоМуть()

    МутьЗабабахана = 1;

КонецПроцедуры - процедура определена.

Так вот, похоже у тебя есть первая часть в модуле, но нет второй.. А изменения в запросе тут непричём.
5 Z-bob
 
23.05.13
10:02
Документ.СчетФактура.ТекущийДокумент и Документ.СчетФактура.Организация
добавил
6 Z-bob
 
23.05.13
10:03
(4) щас попробую )))
7 Ёпрст
 
23.05.13
10:05
(0)
; не в том месте
8 azernot
 
23.05.13
10:05
(6) Что попробуешь? %) Найти объявленную процедуру с ключом "Далее" и убедиться что ниже в тексте модуля её действительно нет?
9 Z-bob
 
23.05.13
10:06
Процедура или функция с указанным именем объявлена, но не определена в текущем модуле (ПредварительныйРасчет)
10 azernot
 
23.05.13
10:07
(9) Мда.. Не найдёшь. Давай весь текст модуля.
11 Рэйв
 
23.05.13
10:07
(9)если тебе она не нужна,то проще убрать объявление
Это там где   Далее
12 Z-bob
 
23.05.13
10:07
Перем ТЗСф;
Перем РННОрганизации, БИНОрганизации;
Перем НазваниеОрганизации;              
Перем ГлБухгалтер, Исполнитель, Руководитель;

Перем РегНомерСвидетельства;
Перем ИмяОтчета, КварталОтчета;
Перем СерияСвидетельства;
Перем НомерСвидетельства;
Перем ДатаСвидетельства;
Перем КонтекстОсновнойФормы;
Перем НомерРелизаПолный;

Перем БухИтоги;

Процедура ПредварительныйРасчет() Далее


Функция ПолучитьПериод() Далее

// ~~~ -> Процедуры, функции выгрузки данных в ХМЛ

// ****************************************************************************
// ** Возвращает квартал отчетов, исходя из имени папки, в которой
//      раcположен файл внешнего отчета    
Функция ПолучитьКварталОтчета()
   Путь = "";
   ИмяФайла = "";
   РасположениеФайла(Путь, ИмяФайла);
   Если Найти(Врег(Путь),Врег(КаталогИБ()+"ExtForms\")) = 0 Тогда
       Сообщить("В каталоге квартальных отчетов " + КаталогИБ()+"ExtForms\" + " отчет " + ИмяОтчета + ".ert не обнаружен...","!");
       Возврат 0;
   КонецЕсли;
   
   Возврат (Сред(Путь,СтрДлина(КаталогИБ()+"ExtForms\")+1,6));
КонецФункции //ПолучитьКварталОтчета()      

// ** Добавить в шапку приложения _____________________________________________
//
Функция ДобавитьЭлемент(Список, Значение, Представление, Очистить=0)
   Если (ТипЗначенияСтр(Список) <> "СписокЗначений") или (Очистить = 1) Тогда
       Список = СоздатьОбъект("СписокЗначений");
   КонецЕсли;                                                    
   Список.ДобавитьЗначение(Значение, Представление);
   Возврат Список;
КонецФункции

// ** Получить имя формы в 18'символьном представлении ________________________
//            
Функция ИмяФормы(Имя)
   Возврат Лев(Имя+"                  ", 18);
КонецФункции

// ** - Сформировать данные приложения для передачи в основную
//        форму (заполнение строк, выгрузка в ХМЛ)
//
Процедура СформироватьДанныеПриложения(ПредставлениеПриложения)
   Перем СписокЭлементов, ВШапку;    
   
   Если ПустоеЗначение(ТЗСф) = 1 Тогда
       Предупреждение("Выбрано 0 строк, выгрузка не может быть выполнена!");
       Возврат;
   КонецЕсли;      
   // Проверка РНН
   Параметры = СоздатьОбъект("СписокЗначений");
   Параметры.ДобавитьЗначение(ТЗСф,"ТабличнаяЧастьФормы");
   Параметры.ДобавитьЗначение("РННПоставщика","ИмяКолонки");    
   глВыполнитьДействиеОтчета(Контекст,"ПроверитьКорректностьРНН", ИмяОтчета, КонтекстОсновнойФормы, Параметры, ПредставлениеПриложения);
   
   // Проверка номер счета-фактуры
   Параметры.ДобавитьЗначение("НомерСФ","ИмяКолонки");    
   Параметры.ДобавитьЗначение("Номер счета-фактуры","ПредставлениеКолонки");        
   глВыполнитьДействиеОтчета(Контекст,"ПроверитьКорректностьЧисловогоПоля", ИмяОтчета, КонтекстОсновнойФормы, Параметры, ПредставлениеПриложения);
   
   
   // * - Форма 300.08
   ДобавитьЭлемент(ВШапку, РННОрганизации,                            "rnn", 1);
   ДобавитьЭлемент(ВШапку, БИНОрганизации,                            "iin", );    
   ДобавитьЭлемент(ВШапку,Число(Цел((ДатаМесяц(ДатаК) - 1) / 3) + 1),    "period_quarter",);
   ДобавитьЭлемент(ВШапку, ДатаГод(ДатаК),                            "period_year",);    
   ДобавитьЭлемент(ВШапку, ТЗСф.Итог("ОбщийОборот"),                        "form_300_08_n_h_1",);
   ДобавитьЭлемент(ВШапку, ТЗСф.Итог("ОбщийНДС"),                        "form_300_08_n_i_1",);
   ДобавитьЭлемент(ВШапку, ТЗСф.Итог("ЗачетНДС"),                "form_300_08_n_j_1",);
   
   
   
   СписокЭлементов = СоздатьОбъект("СписокЗначений");
   СписокЭлементов.ДобавитьЗначение(ВШапку, "ЭлементыШапки");
   СписокЭлементов.ДобавитьЗначение(глВыполнитьДействиеОтчета(Контекст,"ПолучитьТабличнуюЧастьФормы",ИмяОтчета,
                                   ТЗСф, "СтатусПоставщика,РННПоставщика, БИНПоставщика,НомерСФ, ДатаСФ,ВидСФ1, ВидСФ2,ОбщийОборот, ОбщийНДС, ЗачетНДС",
                                       "form_300_08_n_b, form_300_08_n_c, form_300_08_n_d, form_300_08_n_e,form_300_08_n_f, form_300_08_n_g_01, form_300_08_n_g_02, form_300_08_n_h, form_300_08_n_i, form_300_08_n_j"), "ТабличнаяЧасть");
   СписокЭлементов.ДобавитьЗначение("300", "ОсновнаяФорма");
   глВыполнитьДействиеОтчета(Контекст,"СформироватьДанныеПриложения", "30008|" + КварталОтчета, КонтекстОсновнойФормы, СписокЭлементов, "Форма 300.08");
   
КонецПроцедуры

// ~~~ -> Прочие вспомогательные процедуры, функции

// ** Установить квартал, год декларации ______________________________________
//
Процедура КварталГод()
   Если Переодичность.ТекущаяСтрока() > 0 Тогда
       Если СокрЛП(Переодичность.ПолучитьЗначение(Переодичность.ТекущаяСтрока())) = "Месяц" Тогда
           Месяц = Прав("0"+Строка(ДатаМесяц(ДатаК)), 2);
           Квартал = "";
       ИначеЕсли СокрЛП(Переодичность.ПолучитьЗначение(Переодичность.ТекущаяСтрока())) = "Квартал" Тогда
           Квартал = Цел((ДатаМесяц(ДатаК) - 1) / 3) + 1;            
           Месяц = "";
       Иначе
       КонецЕсли;
   КонецЕсли;
   Год = ДатаГод(ДатаК);
КонецПроцедуры    

// ** - Получаем периодичность, выбранную в отчете ____________________________
//
Функция ПолучитьПериод()
   Возврат Переодичность.ПолучитьЗначение(Переодичность.ТекущаяСтрока());
КонецФункции
// ** - Разбиваем номер свидетельства по НДС на номер, серию и дату ___________
//
Функция РазобратьРегНомСвидетельства(Знач РегНом, Параметр)
   РегНом = СокрЛП(РегНом);
   ДлСтр = СтрДлина(РегНом);
   
   Серия = 0;
   НомПробела = 1;
   
   Пока ((Серия = 0) и (НомПробела <> 0))  Цикл
       НомПробела = Найти(РегНом," ");
       Серия      = Число(Лев(РегНом,НомПробела-1));
       РегНом       = СокрЛП(Прав(РегНом,(ДлСтр - НомПробела)));
       ДлСтр      = СтрДлина(РегНом);
   КонецЦикла;
   
   Номер = 0;
   НомПробела = 1;
   
   Пока ((Номер = 0) и (НомПробела <> 0))  Цикл
       НомПробела = Найти(РегНом," ");
       Номер      = Число(Лев(РегНом,НомПробела-1));
       РегНом       = СокрЛП(Прав(РегНом,(ДлСтр - НомПробела)));
       ДлСтр      = СтрДлина(РегНом);
   КонецЦикла;
             
   ДатаРег = "";      
   НомПробела = 1;
   
   Пока ((ДатаРег = "") и (НомПробела < (ДлСтр-9)))  Цикл
       НомПробела = Найти(РегНом," ");
       РегНом       = СокрЛП(Прав(РегНом,(ДлСтр - НомПробела)));
       ДатаРег    = Строка(Дата(РегНом));
       ДлСтр      = СтрДлина(РегНом);
   КонецЦикла;
   
   Если Параметр = "Серия" тогда
        Возврат Формат(Серия, "Ч(0)5");
   ИначеЕсли Параметр="Номер" тогда
        Возврат Формат(Номер,"Ч(0)7");
   ИначеЕсли Параметр="Дата" тогда
        Возврат Формат(ДатаРег,"ДДДММГГГГ");
   КонецЕсли;
   
КонецФункции  

// **** Обновление итоговой строчки вверху
//
Процедура Обновить()
   //Итог сумме
   Таблица.Область("R18C115").Текст = ТЗСф.Итог("ОбщийОборот");    
   Таблица.Область("R18C131").Текст = ТЗСф.Итог("ОбщийНДС");    
   Таблица.Область("R18C146").Текст = ТЗСф.Итог("ЗачетНДС");    
   Таблица.Показать();
КонецПроцедуры    

//**** Обработка ячеек таблицы
//
Процедура ОбработкаЯчейкиТаблицы(Значение, ФлагОбработки, Таблица, Адрес)
   
   Кол = Число(Сред(Адрес,Найти(Адрес,"C")+1));
   Стр = Число(Сред(Адрес,2,Найти(Адрес,"C") + 1));
   СтрТЗ = Число(Таблица.Область(Стр,1).Текст) - 1;
   
   Если Кол = 7 тогда //обработка колонки "Статус поставщика"  
       ВведЗнач = Значение;
       ВвестиСтроку(ВведЗнач,"Введите статус поставщика",1);
       ТЗСф.УстановитьЗначение(СтрТЗ,"СтатусПоставщика",СокрЛП(ВведЗнач));
       Таблица.Область(Адрес).Текст = ВведЗнач;
       Таблица.Область(Адрес).Расшифровка(ВведЗнач);
   ИначеЕсли Кол = 63 тогда //обработка колонки "НомерСФ"  
       ВведЗнач = Значение;
       ВвестиСтроку(ВведЗнач,"Введите номер счета-фактуры",20);
       ТЗСф.УстановитьЗначение(СтрТЗ,"НомерСФ",ВведЗнач);
       Таблица.Область(Адрес).Текст = ВведЗнач;
       Таблица.Область(Адрес).Расшифровка(ВведЗнач);
   ИначеЕсли Кол = 74 тогда //обработка колонки "Дата выписки счета-фактуры"  
       ВведЗнач = Значение;
       ВвестиДату(ВведЗнач,"Введите дату выписки счета-фактуры",);
       ДатаСФ = ?(ПустоеЗначение(ВведЗнач) = 1, "",Формат(ВведЗнач, "Д ДДММГГГГ"));        
       ТЗСф.УстановитьЗначение(СтрТЗ,"ДатаСФ",ДатаСФ);
       Таблица.Область(Адрес).Текст = ДатаСФ;
       Таблица.Область(Адрес).Расшифровка(ДатаСФ);  
   ИначеЕсли Кол = 84 тогда //обработка колонки "ВидСФ"  
       ВведЗнач = Значение;
       ВвестиСтроку(ВведЗнач,"Введите вид счета-фактуры",1);
       ТЗСф.УстановитьЗначение(СтрТЗ,"ВидСФ1",ВведЗнач);
       Таблица.Область(Адрес).Текст = ВведЗнач;
       Таблица.Область(Адрес).Расшифровка(ВведЗнач);    
   ИначеЕсли Кол = 85 тогда //обработка колонки "ВидСФ"  
       ВведЗнач = Значение;
       ВвестиСтроку(ВведЗнач,"Введите вид счета-фактуры",1);
       ТЗСф.УстановитьЗначение(СтрТЗ,"ВидСФ2",ВведЗнач);
       Таблица.Область(Адрес).Текст = ВведЗнач;
       Таблица.Область(Адрес).Расшифровка(ВведЗнач);        
   ИначеЕсли Кол = 115 тогда //обработка колонки "Всего стоимость без НДС"  
       ВведЗнач = Значение;
       ВвестиЧисло(ВведЗнач,"Введите всего стоимость без НДС",19,0);
       ТЗСф.УстановитьЗначение(СтрТЗ,"ОбщийОборот",ВведЗнач);
       Таблица.Область(Адрес).Текст = ВведЗнач;
       Таблица.Область(Адрес).Расшифровка(ВведЗнач);  
   
   ИначеЕсли Кол = 131 тогда //обработка колонки "Сумма НДС"  
       ВведЗнач = Значение;
       ВвестиЧисло(ВведЗнач,"Введите сумму НДС",19,0);
       ТЗСф.УстановитьЗначение(СтрТЗ,"ОбщийНДС",ВведЗнач);
       Таблица.Область(Адрес).Текст = ВведЗнач;
       Таблица.Область(Адрес).Расшифровка(ВведЗнач);
   ИначеЕсли Кол = 146 тогда //обработка колонки "Зачет НДС"  
       ВведЗнач = Значение;
       ВвестиЧисло(ВведЗнач,"Введите сумму НДС к зачету",19,0);
       ТЗСф.УстановитьЗначение(СтрТЗ,"ЗачетНДС",ВведЗнач);
       Таблица.Область(Адрес).Текст = ВведЗнач;
       Таблица.Область(Адрес).Расшифровка(ВведЗнач);
   Иначе                                                
       ФлагОбработки = 1;
   КонецЕсли;
   Обновить();
КонецПроцедуры

// ~~~ -> Процедуры стандартной обработки отчетов ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

// **** Процедура печати отчета _______________________________________________
//
Процедура Печать()
   глВыполнитьДействиеОтчета(Контекст, "Печать", ИмяОтчета,,,)
КонецПроцедуры    

// ** - Процедура очистки данных отчета
//
Процедура Очистить()  
   Таблица.Очистить();
   Таблица.Показать();
КонецПроцедуры    

// **** Процедура форматирования области по выбранным ед. изм. и точности _____
//
Процедура ФорматОбласти()
   глВыполнитьДействиеОтчета(Контекст, "Формат", ИмяОтчета,,,)
КонецПроцедуры

// ** - Процедура обработки события выбора разделителя учета
//
Процедура ПриВыбореРУ()                              

   Если Метаданные.РазделительУчета.Выбран() = 1 тогда
       СпрОрганизации = СоздатьОбъект("Справочник.Организации");
       Если СпрОрганизации.Выбрать("Выберите организацию",) = 1 Тогда
           РазделительУчета = СпрОрганизации.ТекущийЭлемент();    
       КонецЕсли;
   КонецЕсли;    
   
   АтрибутыОрганизации = ?(РазделительУчета.Выбран() = 1, РазделительУчета, глОрганизация());
   НазваниеОрганизации =  АтрибутыОрганизации.ПолноеНаименование;
   АдресОрганизации    =  АтрибутыОрганизации.ЮридическийАдрес;
   РННОрганизации      =  АтрибутыОрганизации.РНН;
   БИНОрганизации      =  АтрибутыОрганизации.БИН;
   //БИНОрганизации      =  глВыполнитьДействиеОтчета(Контекст, "ПолучитьБИН", ИмяОтчета, АтрибутыОрганизации,,);
   ГлБухгалтер         =  ФИО(АтрибутыОрганизации.ГлавныйБухгалтер.Получить(ДатаК));    
   Исполнитель         =  ФИО(АтрибутыОрганизации.Исполнитель.Получить(ДатаК));    
   Руководитель        =  ФИО(АтрибутыОрганизации.Руководитель.Получить(ДатаК));
КонецПроцедуры      

Процедура ПриВыбореРежимаФормирования()
   Если ПризнакПериода = 3 Тогда
       Форма.ДатаРегистрации.Доступность(1);    
   Иначе
       Форма.ДатаРегистрации.Доступность(0);  
   КонецЕсли;
КонецПроцедуры    


// ~~~ -> Предопределенные процедуры (ПриОткрытии()...)

// ** При Открытии отчета _____________________________________________________
//
Процедура ПриОткрытии()  
   ИмяОтчета = "30008";    
   КварталОтчета = ПолучитьКварталОтчета();
   Если КварталОтчета = 0 Тогда
       СтатусВозврата(0);
       Возврат;
   КонецЕсли;                                  
   ИмяОтчета = ИмяОтчета + "|"+КварталОтчета;
       
   ДатаПринятия = РабочаяДата();
   Основной = 1;
   
   глВыполнитьДействиеОтчета(Контекст, "ИнициализироватьДиалог", ИмяОтчета, "Квартал, Месяц|в тг., 0|", 0, 0);
   НомерРелизаПолный = глВыполнитьДействиеОтчета(Контекст,"ПолучитьНомерРелизаКонфигурации", ИмяОтчета, 1,,);
   
   БухИтоги = СоздатьОбъект("БухгалтерскиеИтоги");
   
   Если ПустоеЗначение(Форма.Параметр) = 0 Тогда
       КонтекстОсновнойФормы = Форма.Параметр;
       РазделительУчета = КонтекстОсновнойФормы.РазделительУчета;
       ДатаН = КонтекстОсновнойФормы.ДатаН;
       ДатаК = КонтекстОсновнойФормы.ДатаК;
       Переодичность.ТекущаяСтрока(КонтекстОсновнойФормы.Переодичность.ТекущаяСтрока());
       ПериодОтчета = КонтекстОсновнойФормы.ПериодОтчета;
   КонецЕсли;
   
   ПризнакПлательщиков = ВосстановитьЗначение("300ПризнакПлательщиков");    
   ПризнакПериода        = ВосстановитьЗначение("300ПризнакПериода");    
   
   Если ПризнакПериода = 0 Тогда
       ПризнакПериода = 1;
   КонецЕсли;            
   
   ПриВыбореРежимаФормирования();
   
   КоличествоСтрок = 10;        
       
   АтрибутыОрганизации = ?(РазделительУчета.Выбран() = 1, РазделительУчета, глОрганизация());
   НазваниеОрганизации =  АтрибутыОрганизации.ПолноеНаименование;
   РННОрганизации      =  АтрибутыОрганизации.РНН;
   БИНОрганизации      =  АтрибутыОрганизации.БИН;    
   //БИНОрганизации      =  глВыполнитьДействиеОтчета(Контекст, "ПолучитьБИН", ИмяОтчета, АтрибутыОрганизации,,);
   
   ГлБухгалтер         =  ФИО(АтрибутыОрганизации.ГлавныйБухгалтер.Получить(ДатаК));    
   Исполнитель         =  ФИО(АтрибутыОрганизации.Исполнитель.Получить(ДатаК));    
   Руководитель        =  ФИО(АтрибутыОрганизации.Руководитель.Получить(ДатаК));
       
   Таблица.ИсходнаяТаблица("Таблица");
   Таблица.Опции(0, 0);
   Таблица.Показать();
КонецПроцедуры
                   
// ** При закрытии отчета _____________________________________________________
//
Процедура ПриЗакрытии()
   СохранитьЗначение("300ПризнакПлательщиков",ПризнакПлательщиков);
   СохранитьЗначение("300ПризнакПериода", ПризнакПериода);    
КонецПроцедуры    

// ~~~ -> Расчеты декларации, приложения

// **** Процедура предварительного расчёта данных по декларации
//
Процедура СФ()
   Перем Запрос, ТекстЗапроса, Таб;
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(СФ)
   |Период с ДатаНачала по ДатаОкончания;
   |Обрабатывать НеПомеченныеНаУдаление;
   |ДокСФ = Документ.СчетФактураПоставщика.ТекущийДокумент, Документ.СчетФактура.ТекущийДокумент;
   |ДатаВыпискиСФ = Документ.СчетФактураПоставщика.СчетФактураДата;
   |Свидетельство = Документ.СчетФактураПоставщика.Контрагент.СвидетельствоПоНДС;
   |Организация = Документ.СчетФактураПоставщика.Организация, Документ.СчетФактура.Организация;
   |Оборот = Документ.СчетФактураПоставщика.СуммаБезНалогов;
   |СтНДС = Документ.СчетФактураПоставщика.СтавкаНДС;
   |НДС = Документ.СчетФактураПоставщика.СуммаНДС;
   |Функция ОблагаемыйОборот = Сумма(Оборот) когда(СтНДС.Освобожденная = 0);
   |Функция ОбщийОборот = Сумма(Оборот);
   |Функция ОбщийНДС = Сумма(НДС);
   |Группировка ДокСФ;
   |"//}}ЗАПРОС
   ;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;
   СФ = 1;
   // Подготовка к заполнению выходных форм данными запроса
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("СФ");
   // Заполнение полей "Заголовок"
   Таб.ВывестиСекцию("Заголовок");
   Состояние("Заполнение выходной таблицы...");
   Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
   Пока Запрос.Группировка(1) = 1 Цикл
       // Заполнение полей ДокСФ
       Таб.ВывестиСекцию("ДокСФ");
   КонецЦикла;
   // Заполнение полей "Итого"
   Таб.ВывестиСекцию("Итого");
   // Вывод заполненной формы
   Таб.ТолькоПросмотр(1);
   Таб.Показать("СФ", "");
КонецПроцедуры




/////////////////////////////////////////////////////////////////////////////
// Блок процедур для экспорта в Excel
/////////////////////////////////////////////////////////////////////////////

Процедура Экспорт_СформироватьРеестр()
   // выводим данные в отдельный макет
   // более приемлимый для экспорта
   ТаблицаРеестра = СоздатьОбъект("Таблица");
   ТаблицаРеестра.ИсходнаяТаблица("РеестрСчетовФактур");
   ТаблицаРеестра.ВывестиСекцию("Шапка");
   Стр = 1;
   ТЗСф.ВыбратьСтроки();
   Пока ТЗСф.ПолучитьСтроку() = 1 Цикл                        
       Стр = Стр + 1;
       ТаблицаРеестра.ВывестиСекцию("Строка");
   КонецЦикла;        
   ТаблицаРеестра.ВывестиСекцию("Итог");
   ТаблицаРеестра.ВывестиСекцию("Подписи");
   ТаблицаРеестра.ПараметрыСтраницы(2,90);
   ТаблицаРеестра.Опции(0,0,0,0);
   ТаблицаРеестра.Показать("Реестр счетов-фактур (форма 300.08)");
       
КонецПроцедуры

// * - Выбрать файл выгрузки данных
//
Функция ВыбратьФайлШаблона(Файл, Расширение = "xlt")
   Перем ПутьФайла;  
   
   МаскаФайла = "Шаблоны Excel (*." +СокрЛП(Расширение) +  ") |*." + СокрЛП(Расширение);
   Каталог = ВосстановитьЗначение("300КаталогШаблоновExcel");
   Если ФС.ВыбратьФайл(0, Файл, Каталог, "Выберите Xls-файл шаблона приложения", МаскаФайла + "|Все файлы (*.*) |*.*") = 1 Тогда
       ПутьФайла = Каталог + Файл;    
       СохранитьЗначение("300КаталогШаблоновExcel", Каталог);
   КонецЕсли;                    
       
   Возврат ПутьФайла;
КонецФункции                          


Процедура Экспорт_ВыгрузитьВШаблонExcel(ИмяЛиста, НомерНачальнойСтрокиExcel, СтруктураСоответствияПолей)
   ПутьКШаблону = ВыбратьФайлШаблона("SONO_300_08", "xls");
   Если ФС.СуществуетФайл(ПутьКШаблону) = 0 Тогда
       Предупреждение("В указанном каталоге не найден xlt-файл шаблона. Проверьте наличие файла шаблона в указанном каталоге.");
       Возврат;
   КонецЕсли;
   
   Попытка
       ОбъектExcel = Создатьобъект("Excel.Application");
   Исключение
       Предупреждение("Не удалось подключиться к Excel!");
       Возврат;
   КонецПопытки;
             
   Попытка
       НоваяКнига = ОбъектExcel.Workbooks.Add(ПутьКШаблону);
   Исключение
       Предупреждение("Не удалось создать новую книгу Excel!");
       Возврат;
   КонецПопытки;                                    
   

   // переходим на лист для заполнения данных
   РабочийЛистКниги = НоваяКнига.Sheets.Item(ИмяЛиста);
   НомерТекущейСтроки = НомерНачальнойСтрокиExcel;
   
   
   КоличествоСтрок = ТзСФ.КоличествоСтрок();
   Стр = 1;
   ТЗСф.ВыбратьСтроки();
   Пока ТЗСф.ПолучитьСтроку() = 1 Цикл                        
       Стр = Стр + 1;
       Состояние("Выгружается строка " + Стр + " из " + КоличествоСтрок);    
       // выгрузим номер строки      
       РабочийЛистКниги.Cells(НомерТекущейСтроки,1).NumberFormat = "@";
       РабочийЛистКниги.Cells(НомерТекущейСтроки,1).Value = Формат(НомерТекущейСтроки, "Ч(0)8");
           
       Для СчетчикЦикла = 1 ПО СтруктураСоответствияПолей.РазмерСписка() Цикл
           ИмяКолонкиТЗ = "";
           ИндексКолонкиExcel = СтруктураСоответствияПолей.ПолучитьЗначение(СчетчикЦикла,ИмяКолонкиТЗ);
           
           ЗначениеЯчейки = ТЗСф.ПолучитьЗначение(ТЗСф.НомерСтроки, ИмяКолонкиТЗ);
           
           Если ПустоеЗначение(ЗначениеЯчейки) = 1 Тогда
               Продолжить;
           КонецЕсли;
           
           // форматируем
           Если ИмяКолонкиТЗ = "БИНПоставщика" Тогда
               РабочийЛистКниги.Cells(НомерТекущейСтроки,ИндексКолонкиExcel).NumberFormat = "@";
           ИначеЕсли (ИмяКолонкиТЗ = "ОбщийОборот")    
                   ИЛИ (ИмяКолонкиТЗ = "ОбщийНДС")    
                   ИЛИ (ИмяКолонкиТЗ = "ЗачетНДС") Тогда
                       РабочийЛистКниги.Cells(НомерТекущейСтроки,ИндексКолонкиExcel).NumberFormat = "0";
           КонецЕсли;    
           // выгружаем
           Если ИмяКолонкиТЗ = "ДатаСФ" Тогда            
               Значение = ТЗСф.ПолучитьЗначение(ТЗСф.НомерСтроки, ИмяКолонкиТЗ);
               Если ПустоеЗначение(Значение) = 0 Тогда
                   РабочийЛистКниги.Cells(НомерТекущейСтроки,ИндексКолонкиExcel).Value = Дата(ЗначениеЯчейки);                            
               КонецЕсли;
           Иначе                                                          
               РабочийЛистКниги.Cells(НомерТекущейСтроки,ИндексКолонкиExcel).Value = СокрЛП(ЗначениеЯчейки);                
           КонецЕсли;
           
       КонецЦикла;            
       НомерТекущейСтроки = НомерТекущейСтроки + 1;
   КонецЦикла;

   Предупреждение("Формирование книги Excel завершено!");
   
   ОбъектExcel.Visible = "True";
   ОбъектExcel = "";    
КонецПроцедуры


///////////////////////////////////////////////////////
// Экспорт файла в шаблон
Процедура ЭкспортВExcel()          
   Если ПустоеЗначение(ТзСФ) = 1 Тогда
       Сообщить("Для экспорта данных необходимо сначала выполнить заполнение отчета","!");
       Возврат;
   КонецЕсли;
   
   ПунктМеню = "";
   Меню = СоздатьОбъект("СписокЗначений");
   Меню.ДобавитьЗначение("СформироватьРеестр", "Сформировать регистр налогового учета");
   Меню.ДобавитьЗначение("ВыгрузитьВExcel",    "Выгрузить в шаблон Excel");
   
   Если Меню.ВыбратьЗначение(ПунктМеню,,,,1) = 0 Тогда
       Возврат;
   КонецЕсли;          

   Если ПунктМеню = "СформироватьРеестр" Тогда
       Экспорт_СформироватьРеестр()
   ИначеЕсли ПунктМеню = "ВыгрузитьВExcel" Тогда
       СтруктураСоответствияПолей = СоздатьОбъект("СписокЗначений");                                
       
       СтруктураСоответствияПолей.ДобавитьЗначение(2, "СтатусПоставщика");
       СтруктураСоответствияПолей.ДобавитьЗначение(3, "РННПоставщика");
       СтруктураСоответствияПолей.ДобавитьЗначение(4, "БИНПоставщика");
       СтруктураСоответствияПолей.ДобавитьЗначение(5, "НомерСФ");
       СтруктураСоответствияПолей.ДобавитьЗначение(6, "ДатаСФ");  
       СтруктураСоответствияПолей.ДобавитьЗначение(7, "ВидСФ1");
       СтруктураСоответствияПолей.ДобавитьЗначение(8, "ВидСФ2");
       СтруктураСоответствияПолей.ДобавитьЗначение(9, "ОбщийОборот");
       СтруктураСоответствияПолей.ДобавитьЗначение(10, "ОбщийНДС");
       СтруктураСоответствияПолей.ДобавитьЗначение(11, "ЗачетНДС");

       Экспорт_ВыгрузитьВШаблонExcel("300.08.Data1", 2, СтруктураСоответствияПолей);        
   КонецЕсли;      
       
КонецПроцедуры
13 Ёпрст
 
23.05.13
10:07
(9) да блин, либо подыми её выше, либо используй конструкцию Далее в описании функции
14 Z-bob
 
23.05.13
10:08
ошибка "Процедура или функция с указанным именем объявлена, но не определена в текущем модуле (ПредварительныйРасчет)"
15 Ёпрст
 
23.05.13
10:09
(12) убери строчку
Процедура ПредварительныйРасчет() Далее
или закомменти её
16 azernot
 
23.05.13
10:09
(14) удали строку
Процедура ПредварительныйРасчет() Далее
17 Z-bob
 
23.05.13
10:10
ок, щас
18 azernot
 
23.05.13
10:13
(17) И не обманывай больше взрослых дяденек. "остальное ничего не менял".. быстро раскусим. :)
19 Z-bob
 
23.05.13
10:14
просто с отчета 300 вытикает отчет 300.08, теперь 300 отчет открывается и когда открываешь 300.08 ошибка "Процедура ПредварительныйРасчет() не найдена"
20 Z-bob
 
23.05.13
10:14
так что Процедура ПредварительныйРасчет() по любому нужен
21 Z-bob
 
23.05.13
10:17
(18) я действительно ничего не менял))) просто запрос поменял и все, а весь код так и стоит, если запрос оставляю как есть то отчет работает...
22 Z-bob
 
23.05.13
10:17
но мне надо чтобы при сформировании отчета он и еще брал данные с СчетФактура
23 Ёпрст
 
23.05.13
10:18
(20) А зачем ты её удалил из кода ?
24 Z-bob
 
23.05.13
10:19
(20) что удалил? я наоборот в запрос добавил СчетФактура
25 azernot
 
23.05.13
10:20
(24) Либо это не работало и до тебя, либо ты нам мозги компостируешь.
26 Z-bob
 
23.05.13
10:23
(25)все работало, если я убираю свои изменения в запросе, то оба отчета работают...
27 Z-bob
 
23.05.13
10:30
ну, взрослые дядьки, подскажите, или есть другой вариант сформирования отчета?
28 Рэйв
 
23.05.13
10:32
(27)Придется тебе писать

//------
Процедура ПредварительныйРасчет()
   // тут будет твой код
КонецПроцедуры
29 ZADR
 
23.05.13
10:32
или забей)))
30 azernot
 
23.05.13
10:34
В конфигураторе есть в меню файл пункт "Справнить файлы". Сравни отчёты до и после своих исправлений.
Код из (12), если он полный, работать не может. И это не зависит от текста запроса в процедуре  СФ().
31 Z-bob
 
23.05.13
10:51
а есть другие варианты сформировать отчет? ну чтобы с Документ.СчетФактура брал данные? без изменения запроса?
32 azernot
 
23.05.13
10:53
(31) Есть. Разбежаться и хорошенько долбануть головой об стену. В голове появится нужный отчёт, нужной формы, с нужными данными. Главное успеть всё хорошенько запомнить. Но, если не запомнил - не беда. Процедуру можно повторить.
33 Z-bob
 
23.05.13
10:54
(32) ))))