Задвоение в печатной форме

Версия для печатиPDF-версия

Платформа:

В документе начисление амортизации в проводках одна сумма. В печатной форме задваивается автомобиль и в итоге сумма получается выше чем необходимо.

Без доступа к базе трудно что-то сказать.

А что именно вам требуется? Могу прислать текст процедуры и функции печати где заполняется сам макет. Правда конфигурация в этом документе не изменена.

Функция ПечатьВедомости()
 
ТабДокумент = Новый ТабличныйДокумент;
ТаблицаДвижений = ОбщегоНазначения.СформироватьТаблицуДвиженийДокумента(Ссылка);
СписокОС        = ТаблицаДвижений.ВыгрузитьКолонку("СубконтоКт2");
СписокСумм      = ТаблицаДвижений.ВыгрузитьКолонку("Сумма");
СписокСчетов    = ОсновныеСредства.ВыгрузитьКолонку("СчетУчета");
 
СписокСчетовАм = Новый Массив;
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.11"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.12"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.13"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.15"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.18"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.21"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.22"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.23"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.24"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.25"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.26"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.27"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.28"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.29"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.31"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.32"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.33"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.34"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.35"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.36"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.37"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.38"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.39"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.41"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.42"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.43"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.44"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.45"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.46"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.47"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.48"));
СписокСчетовАм.Добавить(ПолучениеНСИ.ПолучитьСчетПоКоду("104.49"));
 
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НачалоМесяца",                НачалоМесяца(Дата));
Запрос.УстановитьПараметр("КонецМесяца",                 КонецМесяца(Дата));
Запрос.УстановитьПараметр("ТекБаланс",                   Баланс);
Запрос.УстановитьПараметр("ТекУчреждение",               Учреждение);
Запрос.УстановитьПараметр("СписокСчетов",                СписокСчетов);
Запрос.УстановитьПараметр("СчетАм",                      СписокСчетовАм);
Запрос.УстановитьПараметр("СписокОС",                    СписокОС);
Запрос.УстановитьПараметр("ПринятиеКУчету",              Перечисления.ВидыСобытийОС.ПринятиеКУчету);
 
 
СубконтоОС = Новый Массив();
СубконтоОС.Добавить(ПланыВидовХарактеристик.ВидыСубконтоБюджет.ОсновныеСредства);
Запрос.УстановитьПараметр("СубконтоОС", СубконтоОС);
 
Запрос.Текст =
"ВЫБРАТЬ
| СобытияОССрезПоследних.ОС,
| СобытияОССрезПоследних.Учреждение,
| СобытияОССрезПоследних.Событие,
| СобытияОССрезПоследних.ДатаСобытия
|ПОМЕСТИТЬ РегистрСобытийОС
|ИЗ
| РегистрСведений.СобытияОС.СрезПоследних(
| &КонецМесяца,
| Учреждение = &ТекУчреждение
| И ОС В (&СписокОС)) КАК СобытияОССрезПоследних
|ГДЕ
| СобытияОССрезПоследних.Событие = &ПринятиеКУчету
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| РасчетАмортизацииОССрезПоследних.ОС КАК ОС,
| СобытияОССрезПоследних.Учреждение,
| СобытияОССрезПоследних.Событие,
| ЕСТЬNULL(РасчетАмортизацииОССрезПоследних.СрокПолезногоИспользования, 0) КАК СрокПолезногоИспользования,
| ЕСТЬNULL(РасчетАмортизацииОССрезПоследних.СрокИспользованияДляВычисленияАмортизации, 0) КАК СрокИспользованияДляВычисленияАмортизации,
| ЕСТЬNULL(РасчетАмортизацииОССрезПоследних.СтоимостьДляВычисленияАмортизации, 0) КАК СтоимостьДляВычисленияАмортизации,
| СобытияОССрезПоследних.ДатаСобытия КАК ДатаПринятияКУчету
|ПОМЕСТИТЬ РасчетАмортизацииОСрезПоследних
|ИЗ
| РегистрСведений.РасчетАмортизацииОС.СрезПоследних(&КонецМесяца, ОС В (&СписокОС)) КАК РасчетАмортизацииОССрезПоследних
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСобытийОС КАК СобытияОССрезПоследних
| ПО РасчетАмортизацииОССрезПоследних.ОС = СобытияОССрезПоследних.ОС
|
|ИНДЕКСИРОВАТЬ ПО
| ОС
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЕПСБУСтоимостьНаКонецПериода.Учреждение,
| ЕПСБУСтоимостьНаКонецПериода.Субконто1 КАК ОС,
| ЕПСБУСтоимостьНаКонецПериода.Счет,
| ЕПСБУСтоимостьНаКонецПериода.Баланс,
| ЕСТЬNULL(ЕПСБУСтоимостьНаКонецПериода.СуммаОстатокДт, 0) КАК СтоимостьНаКонецПериода
|ПОМЕСТИТЬ ЕПСБУСтоимостьНаКонецПериода
|ИЗ
| РегистрБухгалтерии.ЕПСБУ.Остатки(
| &КонецМесяца,
| Счет В ИЕРАРХИИ (&СписокСчетов),
| &СубконтоОС,
| Учреждение = &ТекУчреждение
| И Баланс = &ТекБаланс
| И Субконто1 В (&СписокОС)) КАК ЕПСБУСтоимостьНаКонецПериода
|
|ИНДЕКСИРОВАТЬ ПО
| ОС
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЕПСБУОстаткиИОбороты.Учреждение,
| ЕПСБУОстаткиИОбороты.Субконто1 КАК ОС,
| ЕПСБУОстаткиИОбороты.Счет,
| ЕПСБУОстаткиИОбороты.Баланс,
| ЕПСБУОстаткиИОбороты.СуммаНачальныйОстатокКт КАК АмортизацияНачало,
| ЕПСБУОстаткиИОбороты.СуммаКонечныйОстатокКт КАК АмортизацияКонец,
| ЕПСБУОстаткиИОбороты.СуммаОборотКт КАК АмортизацияНачислено
|ПОМЕСТИТЬ ЕПСБУАмортизация
|ИЗ
| РегистрБухгалтерии.ЕПСБУ.ОстаткиИОбороты(
| &НачалоМесяца,
| &КонецМесяца,
| Месяц,
| ДвиженияИГраницыПериода,
| Счет В ИЕРАРХИИ (&СчетАм),
| &СубконтоОС,
| Учреждение = &ТекУчреждение
| И Баланс = &ТекБаланс
| И Субконто1 В (&СписокОС)) КАК ЕПСБУОстаткиИОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеСчетовОС КАК СоответствиеСчетовОС
| ПО (ВЫРАЗИТЬ(ЕПСБУОстаткиИОбороты.Субконто1 КАК Справочник.ОсновныеСредства).СчетУчета = СоответствиеСчетовОС.СчетОС)
|ГДЕ
| ЕПСБУОстаткиИОбороты.Счет = СоответствиеСчетовОС.СчетАмортизации
|
|ИНДЕКСИРОВАТЬ ПО
| ОС
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЕПСБУСтоимостьНаКонецПериода.Счет КАК Счет,
| РасчетАмортизацииОСрезПоследних.ОС КАК ОС,
| ЕПСБУСтоимостьНаКонецПериода.Счет.Код КАК КодСчета,
| ЕПСБУСтоимостьНаКонецПериода.Счет.Наименование КАК НаименованиеСчета,
| РасчетАмортизацииОСрезПоследних.ОС.Представление КАК пНаименованиеОС,
| РасчетАмортизацииОСрезПоследних.СрокПолезногоИспользования КАК СрокПолезногоИспользования,
| РасчетАмортизацииОСрезПоследних.ОС.ИнвентарныйНомер КАК ИнвНомер,
| РасчетАмортизацииОСрезПоследних.ОС.АмортизационнаяГруппа КАК АмортизационнаяГруппа,
| ЕСТЬNULL(РасчетАмортизацииОСрезПоследних.СрокИспользованияДляВычисленияАмортизации, 0) КАК СрокИспользованияДляВычисленияАмортизации,
| ЕСТЬNULL(РасчетАмортизацииОСрезПоследних.СтоимостьДляВычисленияАмортизации, 0) КАК СтоимостьДляВычисленияАмортизации,
| РасчетАмортизацииОСрезПоследних.ДатаПринятияКУчету КАК ДатаПринятияКУчету,
| ЕСТЬNULL(ЕПСБУСтоимостьНаКонецПериода.СтоимостьНаКонецПериода, 0) КАК БалансСтоимость,
| ЕСТЬNULL(ЕПСБУАмортизация.АмортизацияНачало, 0) КАК АмортизацияНачало,
| ЕСТЬNULL(ЕПСБУАмортизация.АмортизацияКонец, 0) КАК АмортизацияКонец,
| ЕСТЬNULL(ЕПСБУАмортизация.АмортизацияНачислено, 0) КАК АмортизацияНачислено
|ИЗ
| РасчетАмортизацииОСрезПоследних КАК РасчетАмортизацииОСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ ЕПСБУАмортизация КАК ЕПСБУАмортизация
| ПО РасчетАмортизацииОСрезПоследних.ОС = ЕПСБУАмортизация.ОС
| ЛЕВОЕ СОЕДИНЕНИЕ ЕПСБУСтоимостьНаКонецПериода КАК ЕПСБУСтоимостьНаКонецПериода
| ПО РасчетАмортизацииОСрезПоследних.ОС = ЕПСБУСтоимостьНаКонецПериода.ОС
|
|УПОРЯДОЧИТЬ ПО
| Счет,
| ОС
|ИТОГИ
| СУММА(БалансСтоимость),
| СУММА(АмортизацияНачало),
| СУММА(АмортизацияКонец),
| СУММА(АмортизацияНачислено)
|ПО
| ОБЩИЕ,
| Счет
|АВТОУПОРЯДОЧИВАНИЕ";
 
Опер  = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
 
Макет = ПолучитьМакет("ВедомостьАмортизации");
 
Заголовок  = Макет.ПолучитьОбласть("Заголовок");
Шапка      = Макет.ПолучитьОбласть("Шапка");
СтрокаА    = Макет.ПолучитьОбласть("СтрокаА");
Подвал     = Макет.ПолучитьОбласть("Подвал");
Счет       = Макет.ПолучитьОбласть("Счет");
СтруктураП = Новый Структура("ДанныеУчреждения", Новый Структура("НаименованиеПолное"));
ПолучениеНСИ.ПолучитьДанные(Учреждение, КонецДня(Дата), СтруктураП);
пНаименованиеОрганизации    = СтруктураП.НаименованиеПолное;
 
Заголовок.Параметры.пНаименованиеОрганизации = пНаименованиеОрганизации;
Заголовок.Параметры.пНомер                   = Номер;
Заголовок.Параметры.пДата                    = Формат (Дата,"ДФ=dd.MM.yyyy");
 
ТабДокумент.Вывести(Заголовок);
ТабДокумент.Вывести(Шапка);
ПовторятьПриПечатиСтроки   = ТабДокумент.Область(6, ,7);
ТабДокумент.ФиксацияСверху = 7;
Ном = 0;
Пока Опер.Следующий() Цикл
Подвал.Параметры.Заполнить(Опер);
ОстСтоимость          = Опер.БалансСтоимость - Опер.АмортизацияКонец;
Подвал.Параметры.ОстСтоимость = ОстСтоимость;
Опер2 = Опер.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Опер2.Следующий() Цикл
Если Не ЗначениеЗаполнено(Опер2.КодСчета) Тогда
Счет.Параметры.НазваниеСчета = "В документе начислена амортизация по выбывшему объекту"+ Символы.ПС+"Отмените проведение документа и заново его проведите";
ТабДокумент.Вывести(Счет);
Иначе
Счет.Параметры.Заполнить(Опер2);
Счет.Параметры.НазваниеСчета  = Опер2.КодСчета + " "+ Опер2.НаименованиеСчета;
ОстСтоимость                  = Опер2.БалансСтоимость - Опер2.АмортизацияКонец;
Счет.Параметры.ОстСтоимость   = ОстСтоимость;
ТабДокумент.Вывести(Счет);
Опер3 = Опер2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Опер3.Следующий() Цикл
СтрокаА.Параметры.Заполнить(Опер3);
Ном = Ном + 1;
ОстСтоимость                     = Опер3.БалансСтоимость - Опер3.АмортизацияКонец;
СтепеньИзноса                    = ?(Опер3.БалансСтоимость=0,0,Опер3.АмортизацияКонец/Опер3.БалансСтоимость*100);
СтрокаА.Параметры.Ном            = Ном;
СтрокаА.Параметры.ОстСтоимость   = ОстСтоимость;
СтрокаА.Параметры.СтепеньИзноса  = СтепеньИзноса;
СтрокаА.Параметры.ИнвНомер       = СокрП(Опер3.ИнвНомер);
Если ЗначениеЗаполнено(Опер3.АмортизационнаяГруппа) Тогда
СтрокаА.Параметры.НомАмортизационнаяГруппа = Строка(ОбщегоНазначения.СвойствоЗначенияПеречисления(Опер3.АмортизационнаяГруппа, "Индекс")+1);
Иначе
СтрокаА.Параметры.НомАмортизационнаяГруппа = "";
КонецЕсли;
ТабДокумент.Вывести(СтрокаА);
КонецЦикла;
КонецЕсли;
КонецЦикла;
ТабДокумент.Вывести(Подвал);
КонецЦикла;
ТабДокумент.ПовторятьПриПечатиСтроки = ПовторятьПриПечатиСтроки;
ТабДокумент.ОриентацияСтраницы       = ОриентацияСтраницы.Ландшафт;
ТабДокумент.АвтоМасштаб              = Истина;
Возврат ТабДокумент;
КонецФункции
 
---------------------------------------------------------------------------------------------------------------------------------------------
// Процедура осуществляет печать документа. Можно направить печать на 
// экран или принтер, а также распечатать необходимое количество копий.
//
//  Название макета печати передается в качестве параметра,
// по переданному названию находим имя макета в соответствии.
//
// Параметры:
//  ИмяМакета - строка, название макета.
//
Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, НепосредственнаяПечать = Ложь) Экспорт
 
// Получить экземпляр документа на печать
Если ИмяМакета = "Справка0504833" Тогда
// Унифицированная форма бухгалтерской справки (ф.0504833)
ТабДокумент = ФормированиеПечатныхФорм.ПечатьСправки0540833(Ссылка);
ИначеЕсли  ИмяМакета = "ВедомостьАмортизации" Тогда
Если НЕ Проведен Тогда
Сообщить ("Ведомость начисленной амортизации печатается только для проведенного документа",СтатусСообщения.Внимание);
Возврат;
КонецЕсли;
 
ТабДокумент = ПечатьВедомости();
КонецЕсли;
 
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект,ЭтотОбъект.Метаданные().Представление()), НепосредственнаяПечать);
 
КонецПроцедуры // Печать
 

Отменили проведение сторно и лишняя строчка без даты пропала(но так делать нельзя). попробую обновить конфигурацию посвежее.

обновления не помогли.

Вот поэтому я и говорю, что нужно смотреть базу. Скорее всего ошибка где-то в данных.

Скопируйте запрос из процедуры формирования печатной формы и посмотрите в консоли запросов результаты формирования временных таблиц. Нужно разобраться, откуда берётся строка с пустой датой принятия к учёту.

а может легче сделать что то типо

 если дата <> 01.01.0001 тогда выводить

по идее пустая дата он обозначает как 01.01.0001

До какого релиза обновились?

Конфигурация на поддержке? Хотите вносить изменения в типовую конфигурацию?

самый свежий.

она не типовая

Судя по скриншоту, у Вас БГУ 1.0, а не 2.0.

Точно)))
Получится ли сначала сделать внешнюю печатную форму а потом в ней уже делать изменения?

Никаких преград для создания внешней печатной формы нет. Но я бы всё-таки посоветовал разобраться откуда берётся строка с пустой датой. Для начала посмотреть какие движения у документа сторно.

что то не могу понять как обратиться к этой дате...

Если СтрокаА.Дата <> "01.01.0001" тогда 
ТабДокумент.Вывести(СтрокаА);
КонецЕсли;
 
{ВнешняяОбработка.ОС_НачислениеАмортизации_ВнешняяПечатная.МодульОбъекта(274)}: Поле объекта не обнаружено (Дата)
Если СтрокаА.Дата <> "01.01.0001" тогда 
 

 

Если Вы хотите проверку сделать в обходе выборки из запроса, то после строки

Пока Опер3.Следующий() Цикл

нужно вставить:

	Если Не ЗначениеЗаполнено(Опер3.ДатаПринятияКУчету) Тогда 
		Продолжить;
	КонецЕсли;

Но правильней будет добавить в запрос условие:

ГДЕ РасчетАмортизацииОСрезПоследних.ДатаПринятияКУчету > ДАТАВРЕМЯ(1,1,1)

В первом случае общая сумма всё равно будет неправильной.

{ВнешняяОбработка.ОС_НачислениеАмортизации_ВнешняяПечатная.МодульОбъекта(225)}: Ошибка при вызове метода контекста (Выполнить)
Опер  = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
по причине:
{(31, 1)}: Синтаксическая ошибка "РасчетАмортизацииОСрезПоследних.ДатаПринятияКУчету"
<<?>>РасчетАмортизацииОСрезПоследних.ДатаПринятияКУчету > ДАТАВРЕМЯ(1,1,1)
 
может я не в тот запрос ставлю?? 

первый случай не подходит( нужно чтоб и сумма так же была нормальная

А куда Вы условие вставляете?

Строку "|ГДЕ РасчетАмортизацииОСрезПоследних.ДатаПринятияКУчету > ДАТАВРЕМЯ(1,1,1)" нужно вставить непосредственно в текст запроса между строками "| ПО РасчетАмортизацииОСрезПоследних.ОС = ЕПСБУСтоимостьНаКонецПериода.ОС" и "|УПОРЯДОЧИТЬ ПО".

Заработало))) спасибо за помощь)))
я смотрела не в тот запрос оказывается))