Имя: Пароль:
1C
1С v8
счет на оплату внешняя форма КА 1.1
0 VasjaIvanov
 
10.01.12
17:28
Кто нибудь подскажите, суть проблемы это сделать внешнею печатную форму "счет на оплату покупателя" для КА 1.1
Проблема в том что код не получается написаьт.
1 VasjaIvanov
 
10.01.12
17:29
Ошибка при вызове метода контекста (Выполнить): {(26, 32)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
СчетНаОплатуПокупателю.Ссылка <<?>>= &ТекущийДокумент

код
Функция Печать () экспорт
   КоличествоЭкземпляров=1;
   НаПринтер=Ложь;
   ИмяМакета="СчетЗаказ";
       
   ТабДокумент =  ПолучитьПараметрыПечатиСчетаЗаказа();
   Если ТабДокумент <> Неопределено Тогда
       УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект, ""), СсылкаНаОбъект);
   КонецЕсли;
        Возврат ТабДокумент;

КонецФункции

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

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

   СтрокаВыборкиПоляСодержания = ОбработкаТабличныхЧастей.ПолучитьЧастьЗапросаДляВыбораСодержания("СчетНаОплату");
   
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
   Запрос.Текст = "ВЫБРАТЬ
   |    ВложенныйЗапрос.Номенклатура,
   |    ВЫРАЗИТЬ (ВложенныйЗапрос.Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК НаименованиеПолное,
   |    ВложенныйЗапрос.Номенклатура.Код                КАК Код,
   |    ВложенныйЗапрос.Номенклатура.Артикул            КАК Артикул,
   |    ВложенныйЗапрос.Количество,
   |    ВложенныйЗапрос.ЕдиницаИзмерения.Представление  КАК ЕдиницаИзмерения,
   |    ВложенныйЗапрос.ПроцентСкидкиНаценки
   |    + ВложенныйЗапрос.ПроцентАвтоматическихСкидок   КАК Скидка,
   |    ВложенныйЗапрос.Цена,
   |    ВложенныйЗапрос.Сумма,
   |    ВложенныйЗапрос.СуммаНДС,
   |    ВложенныйЗапрос.Характеристика,
   |    NULL                           КАК Серия,
   |    ВложенныйЗапрос.НомерСтроки    КАК НомерСтроки,
   |    ВложенныйЗапрос.Метка          КАК Метка
   |ИЗ
   |    (ВЫБРАТЬ
   |        СчетНаОплату.Номенклатура               КАК Номенклатура,
   |        СчетНаОплату.ЕдиницаИзмерения           КАК ЕдиницаИзмерения,
   |        СчетНаОплату.ПроцентСкидкиНаценки       КАК ПроцентСкидкиНаценки,
   |        СчетНаОплату.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,
   |        СчетНаОплату.Цена КАК Цена,
   |        СУММА(СчетНаОплату.Количество)          КАК Количество,
   |        СУММА(СчетНаОплату.Сумма)               КАК Сумма,
   |        СУММА(СчетНаОплату.СуммаНДС)            КАК СуммаНДС,
   |        СчетНаОплату.ХарактеристикаНоменклатуры КАК Характеристика,
   |        МИНИМУМ(СчетНаОплату.НомерСтроки)       КАК НомерСтроки,
   |        0 КАК Метка
   |    ИЗ
   |        Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплату
   |    
   |    ГДЕ
   |        СчетНаОплату.Ссылка = &ТекущийДокумент
   |    
   |    СГРУППИРОВАТЬ ПО
   |        СчетНаОплату.Номенклатура,
   |        СчетНаОплату.ЕдиницаИзмерения,
   |        СчетНаОплату.ПроцентСкидкиНаценки,
   |        СчетНаОплату.ПроцентАвтоматическихСкидок,
   |        СчетНаОплату.Цена,
   |        СчетНаОплату.ХарактеристикаНоменклатуры
   |        ) КАК ВложенныйЗапрос
   |
   |ОБЪЕДИНИТЬ ВСЕ
   |
   |ВЫБРАТЬ
   |    СчетНаОплату.Номенклатура,
   |    " + СтрокаВыборкиПоляСодержания + " КАК Товар,
   |    СчетНаОплату.Номенклатура.Код     КАК Код,
   |    СчетНаОплату.Номенклатура.Артикул КАК Артикул,
   |    Сумма(СчетНаОплату.Количество),
   |    СчетНаОплату.Номенклатура.ЕдиницаХраненияОстатков,
   |    СчетНаОплату.ПроцентСкидкиНаценки + СчетНаОплату.ПроцентАвтоматическихСкидок,
   |    СчетНаОплату.Цена,
   |    Сумма(СчетНаОплату.Сумма),
   |    Сумма(СчетНаОплату.СуммаНДС),
   |    NULL,
   |    NULL,
   |    Минимум(СчетНаОплату.НомерСтроки),
   |    1
   |ИЗ
   |    Документ.СчетНаОплатуПокупателю.Услуги КАК СчетНаОплату
   |
   |ГДЕ
   |    СчетНаОплату.Ссылка = &ТекущийДокумент
   |    СГРУППИРОВАТЬ ПО
   |        СчетНаОплату.Номенклатура,
   |    " + СтрокаВыборкиПоляСодержания + ",
   |        СчетНаОплату.ПроцентСкидкиНаценки,
   |        СчетНаОплату.ПроцентАвтоматическихСкидок,
   |        СчетНаОплату.Цена
   |
   |УПОРЯДОЧИТЬ ПО
   |    Метка,
   |    НомерСтроки";

   ЗапросТовары = Запрос.Выполнить().Выгрузить();

   // Выводим шапку накладной

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

           ПараметрыПечати.Вставить("БИКБанкаПолучателя", БИК);
           ПараметрыПечати.Вставить("БанкПолучателя", Банк);
           ПараметрыПечати.Вставить("БанкПолучателяПредставление", СокрЛП(Банк) + " " + ГородБанка);
           ПараметрыПечати.Вставить("СчетБанкаПолучателя", КоррСчет);
           ПараметрыПечати.Вставить("СчетБанкаПолучателяПредставление", КоррСчет);
           ПараметрыПечати.Вставить("СчетПолучателяПредставление", НомерСчета);
           ПараметрыПечати.Вставить("СчетПолучателя", НомерСчета);
           ПредставлениеПоставщикаДляПлатПоручения = СсылкаНаОбъект.СтруктурнаяЕдиница.ТекстКорреспондента;
       КонецЕсли;
       Если ПустаяСтрока(ПредставлениеПоставщикаДляПлатПоручения) Тогда
           ПредставлениеПоставщикаДляПлатПоручения = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,");
       КонецЕсли;
       ПараметрыПечати.Вставить("ПредставлениеПоставщикаДляПлатПоручения", ПредставлениеПоставщикаДляПлатПоручения);
   КонецЕсли;

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

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

   ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
   ПараметрыПечати.Вставить("ВыводитьКоды", Ложь);
   Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
       ПараметрыПечати.ВыводитьКоды = Истина;
       Колонка = "Артикул";
   ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда
       ПараметрыПечати.ВыводитьКоды = Истина;
       Колонка = "Код";
   КонецЕсли;
   
   Если ПараметрыПечати.ВыводитьКоды Тогда
       ПараметрыПечати.Вставить("ИмяКолонкиКодов", Колонка);
   КонецЕсли;

   Сумма    = 0;
   СуммаНДС = 0;
   ВсегоСкидок    = 0;
   ВсегоБезСкидок = 0;

   Для каждого ВыборкаСтрокТовары Из ЗапросТовары Цикл
       
       ПараметрыПозиции = Новый Структура;

       ПараметрыПозиции.Вставить("Номенклатура", ВыборкаСтрокТовары.Номенклатура);
       ПараметрыПозиции.Вставить("НомерСтроки", ЗапросТовары.Индекс(ВыборкаСтрокТовары) + 1);

       Если ПараметрыПечати.ВыводитьКоды Тогда
           Если Колонка = "Артикул" Тогда
               ПараметрыПозиции.Вставить("Артикул", ВыборкаСтрокТовары.Артикул);
           Иначе
               ПараметрыПозиции.Вставить("Артикул", ВыборкаСтрокТовары.Код);
           КонецЕсли;
       КонецЕсли;

       ПараметрыПозиции.Вставить("Количество", ВыборкаСтрокТовары.Количество);
       ПараметрыПозиции.Вставить("ЕдиницаИзмерения", ВыборкаСтрокТовары.ЕдиницаИзмерения);
       ПараметрыПозиции.Вставить("Цена", ВыборкаСтрокТовары.Цена);
       ПараметрыПозиции.Вставить("Товар", СокрП(ВыборкаСтрокТовары.НаименованиеПолное)
                                                   + ФормированиеПечатныхФормСервер.ПредставлениеСерий(ВыборкаСтрокТовары));

       Скидка = Ценообразование.ПолучитьСуммуСкидки(ВыборкаСтрокТовары.Сумма, ВыборкаСтрокТовары.Скидка);

       Если ПараметрыПечати.ЕстьСкидки Тогда
           ПараметрыПозиции.Вставить("Скидка", Скидка);
           ПараметрыПозиции.Вставить("СуммаБезСкидки", ВыборкаСтрокТовары.Сумма + Скидка);
       КонецЕсли;

       ПараметрыПозиции.Вставить("Сумма", ВыборкаСтрокТовары.Сумма);
       
       Сумма          = Сумма       + ВыборкаСтрокТовары.Сумма;
       СуммаНДС       = СуммаНДС    + ВыборкаСтрокТовары.СуммаНДС;
       ВсегоСкидок    = ВсегоСкидок + Скидка;
       ВсегоБезСкидок = Сумма       + ВсегоСкидок;
       
       Позиции.Добавить(ПараметрыПозиции);

   КонецЦикла;
   
   ПараметрыПечати.Вставить("Позиции", Позиции);

   // Вывести Итого
   Если ПараметрыПечати.ЕстьСкидки Тогда
       ПараметрыПечати.Вставить("ВсегоСкидок", ВсегоСкидок);
       ПараметрыПечати.Вставить("ВсегоБезСкидок", ВсегоБезСкидок);
   КонецЕсли;
   ПараметрыПечати.Вставить("Всего", ОбщегоНазначения.ФорматСумм(Сумма));

   // Вывести ИтогоНДС
   Если ПараметрыПечати.УчитыватьНДС Тогда
       ПараметрыПечати.Вставить("НДС", ?(Шапка.СуммаВключаетНДС, "В том числе НДС:", "Сумма НДС:"));
       ПараметрыПечати.Вставить("ВсегоНДС", ОбщегоНазначения.ФорматСумм(ЗапросТовары.Итог("СуммаНДС")));
       ПараметрыПечати.Вставить("ВсегоКОплате", ОбщегоНазначения.ФорматСумм(Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС)));
   КонецЕсли;

   // Вывести Сумму прописью
   СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);
   ПараметрыПечати.Вставить("ИтоговаяСтрока", "Всего наименований " + ЗапросТовары.Количество()
   + ", на сумму " + ОбщегоНазначения.ФорматСумм(СуммаКПрописи, Шапка.ВалютаДокумента));
   ПараметрыПечати.Вставить("СуммаПрописью", ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, Шапка.ВалютаДокумента));

   // Вывести подписи
   Если Тип = "Счет" Тогда
       Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Шапка.Руководители, Шапка.Дата,);
       Руководитель = Руководители.Руководитель;
       ДолжностьРуководителя = Руководители.РуководительДолжность;
       Бухгалтер    = Руководители.ГлавныйБухгалтер;
       
       ПараметрыПечати.Вставить("ФИОРуководителя",        Руководитель);
       ПараметрыПечати.Вставить("ДолжностьРуководителя",    ДолжностьРуководителя);
       ПараметрыПечати.Вставить("ФИОБухгалтера",            Бухгалтер);
       
       Если НЕ ЗначениеЗаполнено(СсылкаНаОбъект.Ответственный.ФизЛицо) Тогда
           ФИООтветственный = СсылкаНаОбъект.Ответственный.Наименование;
       Иначе
           ФамилияИмяОтчествоФизЛица           = ФормированиеПечатныхФормСервер.ФамилияИмяОтчество(СсылкаНаОбъект.Ответственный.ФизЛицо, Шапка.Дата);
           ФамилияИмяОтчествоОтветственного = ФамилияИмяОтчествоФизЛица.Фамилия + " " + ФамилияИмяОтчествоФизЛица.Имя + " " + ФамилияИмяОтчествоФизЛица.Отчество;
           ФИООтветственный                 = ОбщегоНазначения.ФамилияИнициалыФизЛица(ФамилияИмяОтчествоОтветственного);
       КонецЕсли;
       ПараметрыПечати.Вставить("ФИООтветственный", ФИООтветственный);

   КонецЕсли;
   
   Возврат ПараметрыПечати;

КонецФункции //ПолучитьПараметрыПечатиСчетаЗаказа()
2 ДенисЧ
 
10.01.12
17:29
Ну, если ты код пишешь так же, как по русски...
3 ДенисЧ
 
10.01.12
17:29
Используй Выразить()
4 VasjaIvanov
 
10.01.12
17:31
создаю функцию печать () экспорт, дальше все х.з.