Счет-фактура на аванс

1. zakhar111 11.07.12 11:31 Сейчас в теме
Не смог добавить вознаграждение в эту тему(http://forum.infostart.ru/forum29/topic65512/), поэтому создаю новую.

Добрый день!

При попытке сформировать счет-фактуру на аванс, появляется ошибка.

{Документ.СчетФактураВыданный.МодульОбъекта(2562)}: Преобразование значения к типу Булево не может быть выполнено
Если ЕстьТовары Тогда

На реализацию сф выставляется нормально. Сам не программист, не знаю откуда подойти. Заранее благодарен за помощь.
Прикрепленные файлы:
СчетФактура.txt
По теме из базы знаний
Найденные решения
5. Rom_Kat 19 11.07.12 12:30 Сейчас в теме
как то так

// Функция собирает данные по текущему документу в случае, если это СФ на аванс
//
Функция СобратьДанныеСФнаАвансИСуммовуюРазницу(ТекущееОснование)

Если Не (ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НаАванс
или ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НаСуммовуюРазницу)
Тогда
Возврат Неопределено;
КонецЕсли;

мНадписьПредоплата = ?(Дата >= '20060101', "Предварительная оплата", "Авансовый платеж");
НадписьНаименование = ?(ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НаАванс, мНадписьПредоплата, "Суммы, связанные с расчетами по оплате (ст. 162 НК РФ)");

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("ВалютаРегламентированногоУчета", Константы.ВалютаРегламентированногоУчета.Получить());

Запрос.Текст =
"ВЫБРАТЬ
| СчетФактураВыданный.Организация,
| СчетФактураВыданный.Номер,
| СчетФактураВыданный.Дата,
| СчетФактураВыданный.Организация КАК Поставщик,
| СчетФактураВыданный.Контрагент КАК Покупатель,
| &ВалютаРегламентированногоУчета КАК Валюта,
| СчетФактураВыданный.Сумма КАК Сумма,
| СчетФактураВыданный.СуммаНДС КАК СуммаНДС,
| СчетФактураВыданный.СтавкаНДС КАК СтавкаНДС
|ИЗ
| Документ.СчетФактураВыданный КАК СчетФактураВыданный
|ГДЕ
| СчетФактураВыданный.Ссылка = &Ссылка";

Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();


ДанныеДляПечати = Новый Структура();
ДанныеДляПечати.Вставить("Организация", Шапка.Организация);
ДанныеДляПечати.Вставить("Номер", Шапка.Номер);
ДанныеДляПечати.Вставить("Дата", Шапка.Дата);
ДанныеДляПечати.Вставить("Поставщик", Шапка.Поставщик);
ДанныеДляПечати.Вставить("Грузоотправитель", );
ДанныеДляПечати.Вставить("Покупатель", Шапка.Покупатель);
ДанныеДляПечати.Вставить("Грузополучатель", );
ДанныеДляПечати.Вставить("Сумма", Шапка.Сумма);
ДанныеДляПечати.Вставить("Валюта", Шапка.Валюта);
ДанныеДляПечати.Вставить("УчитыватьНДС", Истина);
ДанныеДляПечати.Вставить("СуммаВключаетНДС", Истина);

Руководители = ОбщегоНазначения.ОтветственныеЛица(Шапка.Организация, Дата);
ДанныеДляПечати.Вставить(?(РегламентированнаяОтчетность.ЭтоПБОЮЛ(Шапка.Поставщик), "ФИОПБОЮЛ", "ФИОРуководителя"), Руководители.РуководительПредставление);
ДанныеДляПечати.Вставить("ФИОГлавногоБухгалтера", Руководители.ГлавныйБухгалтерПредставление);

Товары = ИнициализацияТаблицыСтрок();

ЕстьТовары = Ложь;

Если ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НаАванс Тогда

Запрос.Текст = "ВЫБРАТЬ
| СчетФактураВыданныйАвансы.Номенклатура КАК Товар,
| ВЫРАЗИТЬ(СчетФактураВыданныйАвансы.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)) КАК ТоварНаименование,
| ВЫРАЗИТЬ(СчетФактураВыданныйАвансы.Содержание КАК СТРОКА(1000)) КАК Содержание,
| СУММА(СчетФактураВыданныйАвансы.Сумма) КАК Сумма,
| СУММА(СчетФактураВыданныйАвансы.СуммаНДС) КАК СуммаНДС,
| СчетФактураВыданныйАвансы.СтавкаНДС
|ИЗ
| Документ.СчетФактураВыданный.Авансы КАК СчетФактураВыданныйАвансы
|ГДЕ
| СчетФактураВыданныйАвансы.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| СчетФактураВыданныйАвансы.СтавкаНДС,
| СчетФактураВыданныйАвансы.Номенклатура,
| ВЫРАЗИТЬ(СчетФактураВыданныйАвансы.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)),
| ВЫРАЗИТЬ(СчетФактураВыданныйАвансы.Содержание КАК СТРОКА(1000))";
ТаблицаПоАвансам = Запрос.Выполнить().Выгрузить();

СоответствиеСтавок = Новый Соответствие();
СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС10, Перечисления.СтавкиНДС.НДС10_110);
СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС18, Перечисления.СтавкиНДС.НДС18_118);
СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС20, Перечисления.СтавкиНДС.НДС20_120);
СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.БезНДС, Перечисления.СтавкиНДС.БезНДС);
СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.ПустаяСсылка(), Перечисления.СтавкиНДС.БезНДС);

Для Каждого СтрокаТаблицы Из ТаблицаПоАвансам Цикл

ЕстьТовары = Истина;

Строчка = Товары.Добавить();
Строчка.Товар = ?(ЗначениеЗаполнено(СтрокаТаблицы.Товар), СтрокаТаблицы.Товар, НадписьНаименование);
Строчка.ТоварНаименование = ?(ЗначениеЗаполнено(СокрЛП(СтрокаТаблицы.Содержание)), СокрЛП(СтрокаТаблицы.Содержание),
?(ЗначениеЗаполнено(СтрокаТаблицы.Товар), СокрЛП(СтрокаТаблицы.ТоварНаименование), НадписьНаименование));
Строчка.СтранаПроисхождения = "";
Строчка.ПредставлениеСтраны = "";
Строчка.НомерГТД = "";
Строчка.ПредставлениеГТД = "";
Строчка.Количество = 0;
Строчка.ЕдиницаИзмерения = "";
Строчка.СтавкаНДС = СтрокаТаблицы.СтавкаНДС;
Строчка.СуммаНДС = СтрокаТаблицы.СуммаНДС;
Строчка.Сумма = СтрокаТаблицы.Сумма;

КонецЦикла;

Иначе

Строчка = Товары.Добавить();
Строчка.Товар = НадписьНаименование;
Строчка.ТоварНаименование = НадписьНаименование;
Строчка.СтранаПроисхождения = "";
Строчка.ПредставлениеСтраны = "";
Строчка.НомерГТД = "";
Строчка.ПредставлениеГТД = "";
Строчка.Количество = 0;
Строчка.ЕдиницаИзмерения = "";

Строчка.СтавкаНДС = Шапка.СтавкаНДС;
Строчка.СуммаНДС = Шапка.СуммаНДС;
Строчка.Сумма = Шапка.Сумма;

КонецЕсли;

ДанныеДляПечати.Вставить("ТабличнаяЧасть", Товары);
ДанныеДляПечати.Вставить("ТолькоУслуги", Истина);

Возврат ДанныеДляПечати;

КонецФункции // СобратьДанныеПоСВП()
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. demarine 11.07.12 11:40 Сейчас в теме
Ставишь точку останова на строчке с Если ЕстьТовары Тогда, запускаешь отладку и смотришь какой тип у ЕстьТовары.
3. Rom_Kat 19 11.07.12 12:14 Сейчас в теме
//Если ЕстьТовары Тогда
Если ДанныеДляПечати.Свойство("АдресДоставки")
И Не ПустаяСтрока(ДанныеДляПечати.АдресДоставки) Тогда
ПредставлениеГрузополучателя = "Грузополучатель и его адрес: " + ?(Не ЗначениеЗаполнено(ДанныеДляПечати.Грузополучатель),
ДанныеДляПечати.АдресДоставки,
ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузополучателе, "ПолноеНаименование") + ", " + ДанныеДляПечати.АдресДоставки);
Иначе
ПредставлениеГрузополучателя = "Грузополучатель и его адрес: " + ?(Не ЗначениеЗаполнено(ДанныеДляПечати.Грузополучатель),
"",
ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузополучателе, "ПолноеНаименование, ФактическийАдрес,"));
КонецЕсли;
//Иначе
// ПредставлениеГрузополучателя = "Грузополучатель и его адрес:";
//КонецЕсли;
Вот так заработает.
4. Rom_Kat 19 11.07.12 12:24 Сейчас в теме
А лучше определить ЕстьТовары в функции СобратьДанныеСФнаАвансИСуммовуюРазницу по аналогии с определением в функции СобратьДанныеПоРеализацияТоваровУслуг.
5. Rom_Kat 19 11.07.12 12:30 Сейчас в теме
как то так

// Функция собирает данные по текущему документу в случае, если это СФ на аванс
//
Функция СобратьДанныеСФнаАвансИСуммовуюРазницу(ТекущееОснование)

Если Не (ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НаАванс
или ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НаСуммовуюРазницу)
Тогда
Возврат Неопределено;
КонецЕсли;

мНадписьПредоплата = ?(Дата >= '20060101', "Предварительная оплата", "Авансовый платеж");
НадписьНаименование = ?(ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НаАванс, мНадписьПредоплата, "Суммы, связанные с расчетами по оплате (ст. 162 НК РФ)");

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("ВалютаРегламентированногоУчета", Константы.ВалютаРегламентированногоУчета.Получить());

Запрос.Текст =
"ВЫБРАТЬ
| СчетФактураВыданный.Организация,
| СчетФактураВыданный.Номер,
| СчетФактураВыданный.Дата,
| СчетФактураВыданный.Организация КАК Поставщик,
| СчетФактураВыданный.Контрагент КАК Покупатель,
| &ВалютаРегламентированногоУчета КАК Валюта,
| СчетФактураВыданный.Сумма КАК Сумма,
| СчетФактураВыданный.СуммаНДС КАК СуммаНДС,
| СчетФактураВыданный.СтавкаНДС КАК СтавкаНДС
|ИЗ
| Документ.СчетФактураВыданный КАК СчетФактураВыданный
|ГДЕ
| СчетФактураВыданный.Ссылка = &Ссылка";

Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();


ДанныеДляПечати = Новый Структура();
ДанныеДляПечати.Вставить("Организация", Шапка.Организация);
ДанныеДляПечати.Вставить("Номер", Шапка.Номер);
ДанныеДляПечати.Вставить("Дата", Шапка.Дата);
ДанныеДляПечати.Вставить("Поставщик", Шапка.Поставщик);
ДанныеДляПечати.Вставить("Грузоотправитель", );
ДанныеДляПечати.Вставить("Покупатель", Шапка.Покупатель);
ДанныеДляПечати.Вставить("Грузополучатель", );
ДанныеДляПечати.Вставить("Сумма", Шапка.Сумма);
ДанныеДляПечати.Вставить("Валюта", Шапка.Валюта);
ДанныеДляПечати.Вставить("УчитыватьНДС", Истина);
ДанныеДляПечати.Вставить("СуммаВключаетНДС", Истина);

Руководители = ОбщегоНазначения.ОтветственныеЛица(Шапка.Организация, Дата);
ДанныеДляПечати.Вставить(?(РегламентированнаяОтчетность.ЭтоПБОЮЛ(Шапка.Поставщик), "ФИОПБОЮЛ", "ФИОРуководителя"), Руководители.РуководительПредставление);
ДанныеДляПечати.Вставить("ФИОГлавногоБухгалтера", Руководители.ГлавныйБухгалтерПредставление);

Товары = ИнициализацияТаблицыСтрок();

ЕстьТовары = Ложь;

Если ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НаАванс Тогда

Запрос.Текст = "ВЫБРАТЬ
| СчетФактураВыданныйАвансы.Номенклатура КАК Товар,
| ВЫРАЗИТЬ(СчетФактураВыданныйАвансы.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)) КАК ТоварНаименование,
| ВЫРАЗИТЬ(СчетФактураВыданныйАвансы.Содержание КАК СТРОКА(1000)) КАК Содержание,
| СУММА(СчетФактураВыданныйАвансы.Сумма) КАК Сумма,
| СУММА(СчетФактураВыданныйАвансы.СуммаНДС) КАК СуммаНДС,
| СчетФактураВыданныйАвансы.СтавкаНДС
|ИЗ
| Документ.СчетФактураВыданный.Авансы КАК СчетФактураВыданныйАвансы
|ГДЕ
| СчетФактураВыданныйАвансы.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| СчетФактураВыданныйАвансы.СтавкаНДС,
| СчетФактураВыданныйАвансы.Номенклатура,
| ВЫРАЗИТЬ(СчетФактураВыданныйАвансы.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)),
| ВЫРАЗИТЬ(СчетФактураВыданныйАвансы.Содержание КАК СТРОКА(1000))";
ТаблицаПоАвансам = Запрос.Выполнить().Выгрузить();

СоответствиеСтавок = Новый Соответствие();
СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС10, Перечисления.СтавкиНДС.НДС10_110);
СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС18, Перечисления.СтавкиНДС.НДС18_118);
СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС20, Перечисления.СтавкиНДС.НДС20_120);
СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.БезНДС, Перечисления.СтавкиНДС.БезНДС);
СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.ПустаяСсылка(), Перечисления.СтавкиНДС.БезНДС);

Для Каждого СтрокаТаблицы Из ТаблицаПоАвансам Цикл

ЕстьТовары = Истина;

Строчка = Товары.Добавить();
Строчка.Товар = ?(ЗначениеЗаполнено(СтрокаТаблицы.Товар), СтрокаТаблицы.Товар, НадписьНаименование);
Строчка.ТоварНаименование = ?(ЗначениеЗаполнено(СокрЛП(СтрокаТаблицы.Содержание)), СокрЛП(СтрокаТаблицы.Содержание),
?(ЗначениеЗаполнено(СтрокаТаблицы.Товар), СокрЛП(СтрокаТаблицы.ТоварНаименование), НадписьНаименование));
Строчка.СтранаПроисхождения = "";
Строчка.ПредставлениеСтраны = "";
Строчка.НомерГТД = "";
Строчка.ПредставлениеГТД = "";
Строчка.Количество = 0;
Строчка.ЕдиницаИзмерения = "";
Строчка.СтавкаНДС = СтрокаТаблицы.СтавкаНДС;
Строчка.СуммаНДС = СтрокаТаблицы.СуммаНДС;
Строчка.Сумма = СтрокаТаблицы.Сумма;

КонецЦикла;

Иначе

Строчка = Товары.Добавить();
Строчка.Товар = НадписьНаименование;
Строчка.ТоварНаименование = НадписьНаименование;
Строчка.СтранаПроисхождения = "";
Строчка.ПредставлениеСтраны = "";
Строчка.НомерГТД = "";
Строчка.ПредставлениеГТД = "";
Строчка.Количество = 0;
Строчка.ЕдиницаИзмерения = "";

Строчка.СтавкаНДС = Шапка.СтавкаНДС;
Строчка.СуммаНДС = Шапка.СуммаНДС;
Строчка.Сумма = Шапка.Сумма;

КонецЕсли;

ДанныеДляПечати.Вставить("ТабличнаяЧасть", Товары);
ДанныеДляПечати.Вставить("ТолькоУслуги", Истина);

Возврат ДанныеДляПечати;

КонецФункции // СобратьДанныеПоСВП()
6. zakhar111 12.07.12 11:17 Сейчас в теме
Спасибо, все заработало.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот