Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 11:47

Счет на оплату для УТ 11: Ошибка при формировании печатной формы

Автор romanprogrammist, 19 ноя 2013, 02:34

0 Пользователей и 1 гость просматривают эту тему.

romanprogrammist

 :dfbsdfbsdf: Делаю печатную форму "Счет на оплату."
Пишу:
Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати) Экспорт   
     
   Запрос = Новый Запрос();
   Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
   Запрос.Текст =
       "ВЫБРАТЬ
      |ЗаказКлиента.Ссылка                                            КАК Ссылка,
      |ЗаказКлиента.Номер                                             КАК Номер,
      |ЗаказКлиента.Дата                                              КАК Дата,
      |ЗаказКлиента.Организация                                       КАК Организация,
      |ЗаказКлиента.Организация.ТекущийРуководитель.Наименование      КАК Руководитель,
      |ЗаказКлиента.Организация.ТекущийГлавныйБухгалтер.Наименование  КАК ГлавныйБухгалтер,
      |ВЫБОР
      |КОГДА
      |ЗаказКлиента.НалогооблажениеНДС = ЗНАЧЕНИЕ(Перечисление.ТипыНалогооблаженияНДС.ПродажаОблагаетсяНДС)
      |ТОГДА
      |ИСТИНА
      |ИНАЧЕ
      |ЛОЖЬ
      |КОНЕЦ КАК УчитыватьНДС,
      |ЗаказКлиента.Организация.Префикс                               КАК Префикс,
      |ЗаказКлиента.Контрагент                                        КАК Контрагент,
      |ЗаказКлиента.БанковскийСчет                                    КАК БанковскийСчет,
      |ЗаказКлиента.БанковскийСчет.ТекстКорреспондента                КАК БанковскийСчетТекстКорреспондента,
      |ЗаказКлиента.ЦенаВключаетНДС                                   КАК ЦенаВключаетНДС,
      |ЗаказКлиента.Валюта                                            КАК Валюта,
      |ЗаказКлиента.Менеджер.ФизическоеЛицо.Наименование              КАК Менеджер,
      |ЗаказКлиента.ДополнительнаяИнформация                          КАК ДополнительнаяИнформация,
      |ЗаказКлиента.Товары.(
      |     НомерСтроки                                               КАК Номенклатура,
      |     Номенклатура.Код                                          КАК Код,
      |     Номенклатура.Артикул                                      КАК Артикул,
      |     Номенклатура.НаименованиеПолное                           КАК НаименованиеПолное,
      |ВЫБОР
      |КОГДА ЗаказКлиента.Товары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка)
      |ТОГДА ПРЕДСТАВЛЕНИЕ(ЗаказКлиента.Товары.Номенклатура.ЕдиницаИзмерения) 
      |ИНАЧЕ ПРЕДСТАВЛЕНИЕ(ЗаказКлиента.Товары.Упаковка.ЕдиницаИзмерения)
      |КОНЕЦ                                                          КАК ЕдиницаИзмерения,
       |КоличествоУпаковок                                             КАК Количество,
      |Цена                                                           КАК Цена,
      |СуммаРучнойСкидки + СуммаАвтоматическойСкидки                  КАК СуммаСкидки,
      |Сумма + СуммаРучнойСкидки + СуммаАвтоматическойСкидки          КАК СуммаБезСкидки,
      |Сумма                                                          КАК Сумма,
        |СтавкаНДС                                                      КАК СтавкаНДС,
        |СуммаНДС                                                       КАК СуммаНДС,
      |ДатаОтгрузки                                                   КАК ДатаОтгрузки,
      |Характеристика                                                 КАК Характеристика,
      |Отменено                                                       КАК Отменено,
      |)
      |ИЗ
      |Документ.ЗаказКлиента                                          КАК ЗаказКлиента,
      |ГДЕ
      |ЗаказКлиента.Ссылка = &ТекущийДокумент";
      
           
   Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();
      
    ТабличныйДокумент = Новый ТабличныйДокумент;
   ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказКлиента_СчетНаОплату";
      
      
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект.Ссылка);
   Запрос.Текст = 
      "ВЫБРАТЬ
      |ВложенныйЗапрос.Номенклатура                                   КАК Номенклатура,
      |ВЫРАЗИТЬ(ВложенныйЗапрос.Номенклатура.НаименованиеПолное       КАК Строка(1000)) КАК Товар,
      |ВложенныйЗапрос.Количество,
      |ВложенныйЗапрос.ЕдиницаИзмерения,
      |ВложенныйЗапрос.Цена,
      |ВложенныйЗапрос.СтавкаНДС,
      |ВложенныйЗапрос.СуммаНДС,
      |ВложенныйЗапрос.Сумма,
      |ВложенныйЗапрос.НомерСтроки                                    КАК НомерСтроки,
      |1  КАК  ID
      |ИЗ
      |(ВЫБРАТЬ                                                       
      |ЗаказКлиента.Номенклатура                                      КАК Номенклатура,
        |ЗаказКлиента.Номенклатура.БазоваяЕдиницаИзиерения.Наименование КАК ЕдиницаИзмерения,
      |ЗаказКлиента.СтавкаНДС                                         КАК СтавкаНДС,
      |ЗаказКлиента.Цена                                              КАК Цена,
      |СУММА(ЗаказКлиента.Количество)                                 КАК Количество,
      |СУММА(ЗаказКлиента.Сумма)                                      КАК Сумма,
      |СУММА(ЗаказКлиента.СуммаНДС)                                   КАК СуммаНДС,
      |МИНИМУМ(ЗаказКлиента.НомерСртроки)                             КАК НомерСтроки,
      |
      |ИЗ
      |Документ.ЗаказКлиента.Товары                                   КАК ЗаказКлиента,
      |
      |ГДЕ
      |ЗаказКлиента.Ссылка = &ТекущийДокумент
      |
      |СГРУППИРОВАТЬ ПО
        |ЗазакКлиента.Номенклатура,
        |ЗаказКлиента.Номенклатура.БазоваяЕдиницаИзиерения.Наименование
      |ЗаказКлиента.Цена)                                             КАК ВложенныйЗапрос
        |
      |ОБЪЕДИНИТЬ ВСЕ
        |
      |ВЫБРАТЬ
      |ЗазакКлиента.Номенклатура,
      |ЗаказКлиента.Количество,                                     
        |ЗаказКлиента.Номенклатура.БазоваяЕдиницаИзмерения.Наименование,
        |ЗаказКлиента.Цена,
      |ЗаказКлиента.СтавкаНДС,
        |ЗаказКлиента.Сумма,
        |ЗаказКлиента.СуммаНДС,
        |ЗаказКлиента.НомерСтроки,
      |2
        |ИЗ
        |Документ.ЗаказКлиента.Услуги                                   КАК ЗаказКлиента
        |
      |ГДЕ
        |ЗаказКлиента.Ссылка = &ТекущийДокумент
      |
        |УПОРЯДОЧИТЬ ПО
      |ID,
        |НомерСтроки";
      
   ЗапросТовары = Запрос.Выполнить().Выгрузить();
      
   Макет = ПолучитьМакет("Счет");
         
   // Выводим шапку счета
   СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата);
   Если Тип = "Счет" Тогда
      ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокСчета");
       ОбластьМакета.Параметры.Заполнить(Шапка);
       ОбластьМакета.Параметры.ИННПолучателя = СведенияОПолучателе.ИНН;
       ОбластьМакета.Параметры.КПППолучателя = СведенияОПолучателе.КПП;
   Если ТипЗнчения(СтруктурнаяЕдиница) = Тип("СправочникСсылка.БанковскиеСчета") Тогда
      Банк = ?(НЕ ЗначениеЗаполнено(СтруктурнаяЕдиницаБанкДляРасчетов), СтруктурнаяЕдиница.Банк, СтруктурнаяЕдиница.БанкДляРасчетов);
        БИК = Банк.Код;
      КоррСчет = Банк.КоррСчет;
        ГородБанка = Банк.Город;
        НомерСчета = ВернутьРасчетныйСчет(СтруктурнаяЕдиница);
      
      ОбластьМакета.Параметры.БИКБанкаПолучателя = БИК;
      ОбластьМакета.Параметры.БанкПолучателя = Банк;
      ОбластьМакета.Параметры.БИКБанкаПолучателя = БИК;
        ОбластьМакета.Параметры.БанкПолучателя = Банк;
        ОбластьМакета.Параметры.БанкПолучателяПредставление = СокрЛП(Банк) + " " + ГородБанка;
        ОбластьМакета.Параметры.СчетБанкаПолучателя = КоррСчет;
        ОбластьМакета.Параметры.СчетБанкаПолучателяПредставление = КоррСчет;
        ОбластьМакета.Параметры.СчетПолучателяПредставление = НомерСчета;
        ОбластьМакета.Параметры.СчетПолучателя = НомерСчета;
      
   Если ПустаяСтрока(СтруктурнаяЕдиница.ТекстКорреспондента) Тогда
        ТекстКорреспондента = СведенияОПолучателе.НаименованиеДляПечатныхФорм;
    Если ЗначениеЗаполнено(СтруктурнаяЕдиница.БанкДляРасчетов) Тогда
        ТекстКорреспондента = ТекстКорреспондента + " р/с " + СтруктурнаяЕдиница.НомерСчета
        + " в " + СтруктурнаяЕдиница.Банк + " " + СтруктурнаяЕдиница.Банк.Город;
    КонецЕсли;
        Иначе
        ТекстКорреспондента = СтруктурнаяЕдиница.ТекстКорреспондента;
    КонецЕсли;
        ОбластьМакета.Параметры.ПредставлениеПолучателя = ТекстКорреспондента;

        ТабличныйДокумент.Вывести(ОбластьМакета);
   КонецЕсли;
        // Вывести область заголовка
       ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
      ОбластьМакета.Параметры.ТекстЗаголовка = "Счет на оплату № " + НомерДокумента + " от " + Формат(Шапка.ДатаДокумента, "ДФ=""dd MMMM yyyy""");
        ТабличныйДокумент.Вывести(ОбластьМакета);
      
      // Вывести область поставщика
      ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");
        ОбластьМакета.Параметры.Заполнить(Шапка);
        СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.Дата);
        ОбластьМакета.Параметры.ПредставлениеПоставщика = ФормированиеПечатныхФорм.ОписаниеОрганизации(
        СведенияОбОрганизации, "НаименованиеДляПечатныхФорм,ИНН,КПП,ЮридическийАдрес,Телефоны,");
        ТабличныйДокумент.Вывести(ОбластьМакета);
      
      // Вывести область покупателя
        ОбластьМакета = Макет.ПолучитьОбласть("Покупатель");
        ОбластьМакета.Параметры.Заполнить(Шапка);
        СведенияОПокупателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Покупатель, Шапка.Дата);
        ОбластьМакета.Параметры.ПредставлениеПокупателя = ФормированиеПечатныхФорм.ОписаниеОрганизации(
        СведенияОПокупателе, "НаименованиеДляПечатныхФорм,ИНН,КПП,ЮридическийАдрес,Телефоны,");
        ТабличныйДокумент.Вывести(ОбластьМакета);
      
      // Вывести табличную часть (товары и услуги)
      ОбластьМакета = Макет.ПолучитьОбласть("ШапкаТаблицыСНДС");
      ОбластьМакета.Параметры.Заполнить(Шапка);
      ОбластьМакета.Параметры.Номер = Номер;
      ОбластьМакета.Параметры.Товар = "Товары (работы, услуги)";
      ОбластьМакета.Параметры.Количество = Количество;
      ОбластьМакета.Параметры.Цена = Цена;
      ОбластьМакета.Параметры.СтавкаНДС = СтавкаНДС;
      ОбластьМакета.Параметры.СуммаНДС = СуммаНДС;
      ОбластьМакета.Параметры.Сумма = Сумма;
      ТабличныйДокумент.Вывести(ОбластьМакета);
      
      ОбластьМакета = Макет.ПолучитьОбласть("СтрокаТаблицыСНДС");
      НомерСтроки = 0;
      
   Для Каждого ВыборкаСтрокТовары Из ЗапросТовары Цикл
      НомерСтроки = НомерСтроки+1;
      
      ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
      ОбластьМакета.Параметры.НомерСтроки = Номер;
      ОбластьМакета.Параметры.Товары = СокрЛП(СтрокаТабличнойЧасти.Товар);
      ОбластьМакета.Параметры.Количество = СтрокаКоличество;
      ОбластьМакета.Параметры.ЕдиницаИзмерения = СтрокаЕдиницаИзмерения;
      ОбластьМакета.Параметры.Цена = СтрокаЦена;
      ОбластьМакета.Параметры.СтавкаНДС = СтрокаСтавкаНДС;
      ОбластьМакета.Параметры.СуммаНДС = СтрокаСуммаНДС;
      ОбластьМакета.Параметры.Сумма = СтрокаСумма;
      ТабличныйДокумент.Вывести(ОбластьМакета);
   КонецЦикла;
   
       // Выводим секцию с итоговой суммой
      ОбластьМакета = Макет.ПолучитьОбласть("Итого");
      ОбластьМакета.Параметры.Всего = ОбщегоНазначения.ФорматСумм(Итого);
      ТабличныйДокумент.Вывести(ОбластьМакета);
      
      // Выводим секцию с итоговой суммой с НДС
   Если СуммаСНДС <> 0 Тогда
      ОбластьМакета = Макет.ПолучитьОбласть("ИтогоСНДС");
      ОбластьМакета.Параметры.ВсегоНДС = ОбщегоНазначения.ФорматСумм(СуммаНДС);
      СуммаСНДС = Сумма + СуммаНДС;
      ОбластьМакета.Параметры.НДС = ?(Выборка.СуммаВключаетНДС, "Итого с НДС", " Сумма НДС");   
      ОбластьМакета.Параметры.ВсегоСНДС = ОбщегоНазначения.ФорматСумм(СуммаСНДС);
      ТабличныйДокумент.Вывести(ОбластьМакета);   
   КонецЕсли;
   
      // Выводим сумму прописью
      ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
      ОбластьМакета.Параметры.ИтоговаяСтрока ="Всего наименований " + ЗапросТовары.Количество() + ", на сумму " + ОбщегоНазначения.ФорматСумм(СуммаКПрописи) + " руб.";
      ОбластьМакета.Параметры.СуммаПрописью = ЧислоПрописью(СуммаКПрописи, "L=ru_RU", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
      
      // Заполнить реквизиты подвала
        ОбластьМакета = Макет.ПолучитьОбласть("ПодвалСчета");
        ОбластьМакета.Параметры.ФИОРуководителя = ФизическиеЛица.ФамилияИнициалыФизЛица(Данные.Руководитель);
        ОбластьМакета.Параметры.ФИОГлавногоБухгалтера = ФизическиеЛица.ФамилияИнициалыФизЛица(Данные.ГлавныйБухгалтер);
      ОбластьМакета.Параметры.ФИОменеджера = ФизическиеЛица.ФамилияИнициалыФизЛица(Данные.Менеджер);
        ТабличныйДокумент.Вывести(ОбластьМакета);
      
      Возврат ТабличныйДокумент;
      
КонецФункции // СформироватьПечатнуюФорму()

Ругаицца: {ВнешняяОбработка.СчетНаОплатуПокупателю.МодульОбъекта(310,1)}: Ожидается ключевое слово 'КонецЕсли' ('EndIf')
<<?>>КонецФункции // СформироватьПечатнуюФорму() (Проверка: Сервер)

Может кто подскажет, щито не так?  :dfbsdfbsdf: :dfbsdfbsdf: :dfbsdfbsdf:

romanprogrammist

Полный шайтан. Целые сутки уже пытаюсь разобраться. :fdbsdfbsd:

Besart

где то пропущено КонецЕсли, в середине кода я насчитал 4 если и 3 КонецЕсли, для удобства перехода в операторе используейте ctrl+] вперед, и ctrl+[ назад

romanprogrammist


wise

(3) // Выводим шапку счета
   СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата);
   Если Тип = "Счет" Тогда
      ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокСчета");
       ОбластьМакета.Параметры.Заполнить(Шапка);
       ОбластьМакета.Параметры.ИННПолучателя = СведенияОПолучателе.ИНН;
       ОбластьМакета.Параметры.КПППолучателя = СведенияОПолучателе.КПП;//а ТУТ НЕТУ чего-то :-)
   Если ТипЗнчения(СтруктурнаяЕдиница) = Тип("СправочникСсылка.БанковскиеСчета") Тогда
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

romanprogrammist

Цитата: wise от 19 ноя 2013, 12:10
(3) // Выводим шапку счета
   СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата);
   Если Тип = "Счет" Тогда
      ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокСчета");
       ОбластьМакета.Параметры.Заполнить(Шапка);
       ОбластьМакета.Параметры.ИННПолучателя = СведенияОПолучателе.ИНН;
       ОбластьМакета.Параметры.КПППолучателя = СведенияОПолучателе.КПП;//а ТУТ НЕТУ чего-то :-)
   Если ТипЗнчения(СтруктурнаяЕдиница) = Тип("СправочникСсылка.БанковскиеСчета") Тогда

:dfbsdfbsdf:КонецЕсли?
Добавлено: 19 ноя 2013, 12:15


Добавляю "КонецЕсли", удаляю "КонецЕсли" - сразу выскакиват куча ошибок :dfbsdfbsdf::dfbsdfbsdf::dfbsdfbsdf: шайтан:dfbsdfbsdf::dfbsdfbsdf::dfbsdfbsdf:
Добавлено: 19 ноя 2013, 12:16


{ВнешняяОбработка.СчетНаОплатуПокупателю.МодульОбъекта(312,1)}: Ожидается ключевое слово 'КонецЕсли' ('EndIf')
<<?>>КонецФункции // СформироватьПечатнуюФорму() (Проверка: Сервер) :dfbsdfbsdf: :dfbsdfbsdf: :dfbsdfbsdf:
Добавлено: 19 ноя 2013, 12:19


:dfbsdfbsdf: вот так задачка :) с одним неизветным

LordWizard

Может проще собирать по параметрам? собрали Параметры по Шапке - вывели макет, собрали другую часть и вывели.. И т.д.
Добавлено: 20 ноя 2013, 12:54


Соответственно и искать поблочно ошибки удобнее.
Правильно ведите учет или пишите программы и вам воздастся!...

(Кстати - кнопочку Сказать Спасибо - никто не отменял)

romanprogrammist

Цитата: LordWizard от 20 ноя 2013, 12:49
Может проще собирать по параметрам? собрали Параметры по Шапке - вывели макет, собрали другую часть и вывели.. И т.д.
Добавлено: 20 ноя 2013, 12:54


Соответственно и искать поблочно ошибки удобнее.

Кстати, идея. Снесу весь код и потихоньку начну с "А" и так до "Я".
И еще айн момент. Правильно писать в запросе: Док.Номер КАК Номер или просто  Номер, Дата и т.д.?

LordWizard

Цитата: romanprogrammist от 20 ноя 2013, 16:30
Цитата: LordWizard от 20 ноя 2013, 12:49
Может проще собирать по параметрам? собрали Параметры по Шапке - вывели макет, собрали другую часть и вывели.. И т.д.
Добавлено: 20 ноя 2013, 12:54


Соответственно и искать поблочно ошибки удобнее.

Кстати, идея. Снесу весь код и потихоньку начну с "А" и так до "Я".
И еще айн момент. Правильно писать в запросе: Док.Номер КАК Номер или просто  Номер, Дата и т.д.?

Можно оставлять так, как есть.

....Как [что-то]
....

используют, если хотят использовать другие имена
например:

Документ.Номер КАК Номерок,

потом обращаются так:

НомерЗапрошенногоДокумента = ВыборкаЗапроса.Номерок;
Правильно ведите учет или пишите программы и вам воздастся!...

(Кстати - кнопочку Сказать Спасибо - никто не отменял)

romanprogrammist


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск