Проблема с заполнением табличной части
15.10.2007
10:06
#1
"Здравствуйте. В 1С:Бухгалтерия 7.7 имеется документ. При нажатии кнопки "Заполнить" должна заполняться табличная часть и одновременно выводиться отчет. Проблема в том, что когда реквизит табличной части формы совпадает с именем ячейки в таблице отчета, наименование ОС перестает выводится. Вместо этого выводятся пустые ячейки.
Вот код процедуры:
Перем Ит, м, мв, итм, г, гт, мср;
Перем аморт10;
Перем оно65, оно175;
Перем Таб;
Перем бухнач, налнач;
Перем разн, уменьш65, уменьш175, сумманарит;
Перем итог;
//*******************************************
Процедура Заполнить()
Ном=1;
амортпремит=0;
оно65ит=0;
оно175ит=0;
бухначит=0;
налначит=0;
разнит=0;
уменьш65ит=0;
уменьш175ит=0;
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ПовторятьПриПечатиСтроки(Таб.ВысотаСекции("Заголовок")+1,Таб.ВысотаСекции("Заголовок")+Таб.ВысотаСекции("Шапка"));
Таб.ВывестиСекцию("Заголовок");
Таб.ВывестиСекцию("Шапка");
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства,,,);
Ит.ВыполнитьЗапрос(Д1,Д2);
спрОС = СоздатьОбъект("Справочник.ОсновныеСредства");
спрОС.ВыбратьЭлементы();
Пока СпрОС.ПолучитьЭлемент() = 1 Цикл
ИнвНомер = спрОС.Код;
НаименованиеП= спрОС.Наименование;
ГодВВЭкспл = спрОС.ДатаВводаВЭксплуатацию;
БалансСтоимость = спрОС.ПервоначальнаяСтоимость.Получить(Д2);
сз=спрОС.СчетЗатрат.Получить(Д2);
СрокИсп=спрОС.СрокПолезногоИспользования.Получить(Д2);
аморт10=БалансСтоимость*10/100;
БалансСтоимостьН=БалансСтоимость-аморт10;
оно65=аморт10*6.5/100;
оно175=аморт10*17.5/100;
м=ДатаМесяц(Д2);
мв=ДатаМесяц(ГодВВЭкспл);
г=ДатаГод(ГодВВЭкспл);
гт=ДатаГод(Д2);
гд1=ДатаГод(Д1);
мд1=ДатаМесяц(Д1);
мт=ДатаМесяц(ТекущаяДата());
гс=ДатаГод(ТекущаяДата());
Если гт>г Тогда
итм=12-мв+м;
Иначе
итм=м-мв;
итог=(оно65+оно175);
КонецЕсли;
Если СрокИсп > 0 Тогда
бухнач=БалансСтоимость/СрокИсп;
налнач=БалансСтоимостьН/СрокИсп;
КонецЕсли;
разн=бухнач-налнач;
уменьш65=разн*6.5/100;
уменьш175=разн*17.5/100;
сумманарит=(Окр(уменьш65,2)+Окр(уменьш175,2))*итм;
Если м-мд1 > 0 Тогда
Если итог<>сумманарит Тогда
Если БалансСтоимость>=10000 Тогда
Если г>2005 Тогда
Если (Лев(сз,2) > "44") или (Лев(сз,2) < "44") Тогда
Если г<=гт Тогда
Если ГодВВЭкспл>Д1 Тогда
Если (мв < м) Тогда
НоваяСтрока();
НомерПП=Ном;
ИнвНомер=ИнвНомер;
Наименование=НаименованиеП;
ВводВЭксплуатацию=ГодВВЭкспл;
СрокИсп=СрокИсп;
ПервНачСтоим=БалансСтоимость;
АмортПрем10=аморт10;
СтоимНалУч=БалансСтоимостьН;
ОНО65=оно65;
ОНО175=оно175;
СумНачБухУч=бухнач;
СумНачНалУч=налнач;
Разница=разн;
УменьшОНО65=уменьш65;
УменьшОНО175=уменьш175;
ОНО=сумманарит;
амортпремит=Окр(амортпремит+аморт10,2);
оно65ит=Окр(оно65ит+оно65,2);
оно175ит=Окр(оно175ит+оно175,2);
бухначит=Окр(бухначит+бухнач*(м-мв),2);
налначит=Окр(налначит+налнач*(м-мв),2);
разнит=Окр(разнит+разн,2);
уменьш65ит=Окр(уменьш65ит+уменьш65*(м-мв),2);
уменьш175ит=Окр(уменьш175ит+уменьш175*(м-мв),2);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
Если итог<>сумманарит Тогда
Если БалансСтоимость>=10000 Тогда
Если г>2005 Тогда
Если (Лев(сз,2) > "44") или (Лев(сз,2) < "44") Тогда
Если (мв = мд1-1) Тогда
НоваяСтрока();
НомерПП=Ном;
ИнвНомер=ИнвНомер;
Наименование=НаименованиеП;
ВводВЭксплуатацию=ГодВВЭкспл;
СрокИсп=СрокИсп;
ПервНачСтоим=БалансСтоимость;
АмортПрем10=аморт10;
СтоимНалУч=БалансСтоимостьН;
ОНО65=оно65;
ОНО175=оно175;
СумНачБухУч=бухнач;
СумНачНалУч=налнач;
Разница=разн;
УменьшОНО65=уменьш65;
УменьшОНО175=уменьш175;
ОНО=сумманарит;
амортпремит=амортпремит+аморт10;
оно65ит=оно65ит+оно65;
оно175ит=оно175ит+оно175;
бухначит=бухначит+бухнач*(м-мв);
налначит=налначит+налнач*(м-мв);
разнит=разнит+разн;
уменьш65ит=уменьш65ит+уменьш65*(м-мв);
уменьш175ит=уменьш175ит+уменьш175*(м-мв);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Пока ПолучитьСтроку() =1 Цикл
Таб.ВывестиСекцию("Строка");
Ном=Ном+1;
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
Таб.ВывестиСекцию("Подписи");
Таб.ПараметрыСтраницы(2,50,1,10,10,10,0);
Таб.ТолькоПросмотр(1);
Таб.Опции(0,0,6,0);
Таб.Показать("Ведомость учета ОС");
КонецПроцедуры "
Вот код процедуры:
Перем Ит, м, мв, итм, г, гт, мср;
Перем аморт10;
Перем оно65, оно175;
Перем Таб;
Перем бухнач, налнач;
Перем разн, уменьш65, уменьш175, сумманарит;
Перем итог;
//*******************************************
Процедура Заполнить()
Ном=1;
амортпремит=0;
оно65ит=0;
оно175ит=0;
бухначит=0;
налначит=0;
разнит=0;
уменьш65ит=0;
уменьш175ит=0;
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ПовторятьПриПечатиСтроки(Таб.ВысотаСекции("Заголовок")+1,Таб.ВысотаСекции("Заголовок")+Таб.ВысотаСекции("Шапка"));
Таб.ВывестиСекцию("Заголовок");
Таб.ВывестиСекцию("Шапка");
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства,,,);
Ит.ВыполнитьЗапрос(Д1,Д2);
спрОС = СоздатьОбъект("Справочник.ОсновныеСредства");
спрОС.ВыбратьЭлементы();
Пока СпрОС.ПолучитьЭлемент() = 1 Цикл
ИнвНомер = спрОС.Код;
НаименованиеП= спрОС.Наименование;
ГодВВЭкспл = спрОС.ДатаВводаВЭксплуатацию;
БалансСтоимость = спрОС.ПервоначальнаяСтоимость.Получить(Д2);
сз=спрОС.СчетЗатрат.Получить(Д2);
СрокИсп=спрОС.СрокПолезногоИспользования.Получить(Д2);
аморт10=БалансСтоимость*10/100;
БалансСтоимостьН=БалансСтоимость-аморт10;
оно65=аморт10*6.5/100;
оно175=аморт10*17.5/100;
м=ДатаМесяц(Д2);
мв=ДатаМесяц(ГодВВЭкспл);
г=ДатаГод(ГодВВЭкспл);
гт=ДатаГод(Д2);
гд1=ДатаГод(Д1);
мд1=ДатаМесяц(Д1);
мт=ДатаМесяц(ТекущаяДата());
гс=ДатаГод(ТекущаяДата());
Если гт>г Тогда
итм=12-мв+м;
Иначе
итм=м-мв;
итог=(оно65+оно175);
КонецЕсли;
Если СрокИсп > 0 Тогда
бухнач=БалансСтоимость/СрокИсп;
налнач=БалансСтоимостьН/СрокИсп;
КонецЕсли;
разн=бухнач-налнач;
уменьш65=разн*6.5/100;
уменьш175=разн*17.5/100;
сумманарит=(Окр(уменьш65,2)+Окр(уменьш175,2))*итм;
Если м-мд1 > 0 Тогда
Если итог<>сумманарит Тогда
Если БалансСтоимость>=10000 Тогда
Если г>2005 Тогда
Если (Лев(сз,2) > "44") или (Лев(сз,2) < "44") Тогда
Если г<=гт Тогда
Если ГодВВЭкспл>Д1 Тогда
Если (мв < м) Тогда
НоваяСтрока();
НомерПП=Ном;
ИнвНомер=ИнвНомер;
Наименование=НаименованиеП;
ВводВЭксплуатацию=ГодВВЭкспл;
СрокИсп=СрокИсп;
ПервНачСтоим=БалансСтоимость;
АмортПрем10=аморт10;
СтоимНалУч=БалансСтоимостьН;
ОНО65=оно65;
ОНО175=оно175;
СумНачБухУч=бухнач;
СумНачНалУч=налнач;
Разница=разн;
УменьшОНО65=уменьш65;
УменьшОНО175=уменьш175;
ОНО=сумманарит;
амортпремит=Окр(амортпремит+аморт10,2);
оно65ит=Окр(оно65ит+оно65,2);
оно175ит=Окр(оно175ит+оно175,2);
бухначит=Окр(бухначит+бухнач*(м-мв),2);
налначит=Окр(налначит+налнач*(м-мв),2);
разнит=Окр(разнит+разн,2);
уменьш65ит=Окр(уменьш65ит+уменьш65*(м-мв),2);
уменьш175ит=Окр(уменьш175ит+уменьш175*(м-мв),2);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
Если итог<>сумманарит Тогда
Если БалансСтоимость>=10000 Тогда
Если г>2005 Тогда
Если (Лев(сз,2) > "44") или (Лев(сз,2) < "44") Тогда
Если (мв = мд1-1) Тогда
НоваяСтрока();
НомерПП=Ном;
ИнвНомер=ИнвНомер;
Наименование=НаименованиеП;
ВводВЭксплуатацию=ГодВВЭкспл;
СрокИсп=СрокИсп;
ПервНачСтоим=БалансСтоимость;
АмортПрем10=аморт10;
СтоимНалУч=БалансСтоимостьН;
ОНО65=оно65;
ОНО175=оно175;
СумНачБухУч=бухнач;
СумНачНалУч=налнач;
Разница=разн;
УменьшОНО65=уменьш65;
УменьшОНО175=уменьш175;
ОНО=сумманарит;
амортпремит=амортпремит+аморт10;
оно65ит=оно65ит+оно65;
оно175ит=оно175ит+оно175;
бухначит=бухначит+бухнач*(м-мв);
налначит=налначит+налнач*(м-мв);
разнит=разнит+разн;
уменьш65ит=уменьш65ит+уменьш65*(м-мв);
уменьш175ит=уменьш175ит+уменьш175*(м-мв);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Пока ПолучитьСтроку() =1 Цикл
Таб.ВывестиСекцию("Строка");
Ном=Ном+1;
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
Таб.ВывестиСекцию("Подписи");
Таб.ПараметрыСтраницы(2,50,1,10,10,10,0);
Таб.ТолькоПросмотр(1);
Таб.Опции(0,0,6,0);
Таб.Показать("Ведомость учета ОС");
КонецПроцедуры "
15.10.2007
11:51
#2
>>реквизит табличной части формы совпадает с именем ячейки в таблице отчета
А почему нельзя переименовать ячейку, чтобы имена не совпадали?
А почему нельзя переименовать ячейку, чтобы имена не совпадали?
15.10.2007
13:13
#3
"Введите строку
> Таб.ВывестиСекцию("Строка");
в предыдущий цикл по перебору ОС (если формируется новая строка).
"
> Таб.ВывестиСекцию("Строка");
в предыдущий цикл по перебору ОС (если формируется новая строка).
"
15.10.2007
15:15
#4
Нет! Так тоже не получается. Дело в том что он выводит все суммы и числа правильно, а вот столбец наименование пустой. Ничего не понимаю....
15.10.2007
16:53
#5
Проверьте что стоит в отчете у ячейки с "наименованием". Тип должен быть выражение.
>Проблема в том, что когда реквизит табличной части
>формы совпадает с именем ячейки в таблице отчета, наименование ОС
>перестает выводится.
Это не связанно.
Зачем вообще присваивать имя ячейки (к тому же в приведенном примере не видно чтобы вы обращались к поименнованной области) при выводе на печать.
15.10.2007
17:21
#6
У ячейки тип - выражение.
Ладно. Ну с этим отчетом. Я просто хочу вывести ОС за определенный период в табличную часть. При нажатии кнопки заполнить у меня выводятся все нужные мне ОС и цифры тоже, а поле наименование почему-то пустое.
Ладно. Ну с этим отчетом. Я просто хочу вывести ОС за определенный период в табличную часть. При нажатии кнопки заполнить у меня выводятся все нужные мне ОС и цифры тоже, а поле наименование почему-то пустое.
15.10.2007
18:43
#7
"Какой тип столбца в табличной части документа, судя по тому что вы присваиваете СпрОС.Наименование, то тип должен быть строка, иначе
Наименование=СпрОС.Текущийэлемент()
А имена как раз и могут совпадать, потому как для вывода на печать табличной части достаточно
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;
"
Наименование=СпрОС.Текущийэлемент()
А имена как раз и могут совпадать, потому как для вывода на печать табличной части достаточно
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;
"
Читают тему
(гостей: 1)