8.х @ печатные формы, счет на оплату..

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем rdyu, 6 сен 2007.

  1. TopicStarter Overlay
    rdyu
    Offline

    rdyu

    Регистрация:
    6 сен 2007
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте!
    есть 1с бухгалтерия 8.0 1.5.17.3, в ней докумен СчетНаОплатуПокупателю в нем я создал 2 макета СчетЗаказ и СчетЗаказ1 (с печатью и подписью), но я не могу сделать выбор в режиме предприятия какой док мне выводить... каждый раз приходится залазить в конфигуратор и переименовывать СчетЗаказ в СчетЗаказ1 и наоборот, отображается с названием СчетЗаказ!
    Что мне сделать чтобы можно было выбрать одну из нужных печатных форм не заходя в конфигуратор?
    И пожалуйста опишите для ламера в 1с 8!
    заранее спасибо!!
  2. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Тебе необходимо подправить в конфигураторе код который обрабатывается при нажатии на кнопку "Печать"...
  3. TopicStarter Overlay
    rdyu
    Offline

    rdyu

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

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Если быстро и максимально "безболезненно", то так, создай в удобном месте на форме флажок. Дай ему название "Флажок1" и текст флажка пусть будет "Макет с печатью". Далее в вышеприведенном коде меняй строку:

    Макет = ПолучитьМакет("СчетЗаказ");

    На такую:
    Если ЭлементыФормы.Флажок1.Значение = Истина Тогда
    Макет = ПолучитьМакет("СчетЗаказ1"); // если флажок выбран - используем новый макет
    Иначе
    Макет = ПолучитьМакет("СчетЗаказ"); // если флажок не выбран - используем старый макет
    КонецЕсли;
  5. TopicStarter Overlay
    rdyu
    Offline

    rdyu

    Регистрация:
    6 сен 2007
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    при сохранении выдает
    Код:
    {Документ.СчетНаОплатуПокупателю(114,7)}: Переменная не определена (ЭлементыФормы)
    Если <<?>>ЭлементыФормы.Флажок1.Значение = Истина Тогда
    
  6. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Вы уверены, что эта функция вызывается непосредственно кнопкой?
  7. TopicStarter Overlay
    rdyu
    Offline

    rdyu

    Регистрация:
    6 сен 2007
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Это ошибка выводится в конфигураторе при сохранении..

    я в форме документа создал флажок, и в модуле добавил код как вы написали, и при сохранении выдает ошибку При проверке модуля обнаружены ошибки! Продолжить? и в низу код
  8. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Я не об этом, вы уверены, что функция ПечатьСчетаЗаказа(Тип) является обработчиком события НажатиеНаКнопкуПечать, а не вызывается из кода обработчика нажатия на кнопку?

    Т.е. у кнопки "Печать" есть обработчик КнопкаПечатьПриНажатии()
    А в уже из тела обработчкика вызывается ПечатьСчетаЗаказа()? Что то вроде:
    Процедура КнопкаПечатьПриНажатии()
    ....
    ПечатьСчетаЗаказа(Тип) ;
    ....
    КонецПроцедуры
  9. TopicStarter Overlay
    rdyu
    Offline

    rdyu

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

    Код:
    Перем мОбновлятьВладельца;
    
    Перем мТекущаяДатаДокумента; // Хранит последнюю установленную дату документа - для проверки перехода документа в другой период
    
    // Хранит валюту взаиморасчетов, установленную в текущем договоре взаиморасчетов,
    // используется для определения необходимости пересчетов при изменении договора.
    Перем мТекущаяВалютаВзаиморасчетов; 
    
    // Хранит текущий договор контрагента
    // используется для восстановления старого договора в случае некорректного выбора нового
    Перем мТекущийДоговорКонтрагента; 
    
    // Хранит текущую форму подбора номенклатуры
    Перем мФормаПодбораНоменклатуры; 
    
    Перем мОбработкаТайпинга;
    Перем мТекстТайпинга;
    Перем мПоследнееЗначениеЭлементаТайпинга;
    
    // Хранит список видов договоров, доступных для данного документа
    Перем мСписокВидовДоговоров; 
    
    // Хранит дерево макетов печатных форм
    Перем мДеревоМакетов;
    
    // Хранит элемент управления подменю печати
    Перем мПодменюПечати;
    
    // Хранит элемент управления кнопку печать по умолчанию
    Перем мПечатьПоУмолчанию;
    
    // Хранит дерево кнопок подменю заполнение ТЧ
    Перем мКнопкиЗаполненияТЧ;
    
    
    ////////////////////////////////////////////////////////////////////////////////
    // ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ
    
    // Процедура устанавливает подменю "Заполнить" в командных панелях ТЧ документа при необходимости
    //
    Процедура УстановитьКнопкиПодменюЗаполненияТЧ();
    
    СоответствиеТЧ = Новый Соответствие;
    СоответствиеТЧ.Вставить(ЭлементыФормы.Товары,ЭлементыФормы.КоманднаяПанельТовары);
    СоответствиеТЧ.Вставить(ЭлементыФормы.ВозвратнаяТара,ЭлементыФормы.КоманднаяПанельВозвратнаяТара);
    СоответствиеТЧ.Вставить(ЭлементыФормы.Услуги,ЭлементыФормы.КоманднаяПанель1);
    
    мКнопкиЗаполненияТЧ = СформироватьПодменюЗаполненияТЧ(Ссылка, СоответствиеТЧ, Новый Действие("НажатиеНаДополнительнуюКнопкуЗаполненияТЧ"));
    
    КонецПроцедуры
    
    // Процедура устанавливает подменю "Печать" и кнопку "Печать по умолчанию" при необходимости
    //
    Процедура УстановитьКнопкиПечати()
    
    мДеревоМакетов = ПолучитьДеревоМакетовПечати(Ссылка, ПолучитьСтруктуруПечатныхФорм(), Новый Действие("ОсновныеДействияФормыПечать"), Новый Действие("ОсновныеДействияФормыУстановитьПечатьПоУмолчанию"));
    
    УстановитьПодменюПечати	(мПодменюПечати, ЭлементыФормы.ОсновныеДействияФормы, мДеревоМакетов.Строки.Количество() > 0);
    УстановитьПечатьПоУмолчанию(мПечатьПоУмолчанию, ЭлементыФормы.ОсновныеДействияФормы, мДеревоМакетов, Метаданные().Имя,Новый Действие("ОсновныеДействияФормыПечатьПоУмолчанию"));
    
    Если Не мПодменюПечати = Неопределено Тогда
    СформироватьПодменю(мДеревоМакетов, мПодменюПечати,Истина,Истина);
    КонецЕсли;
    
    КонецПроцедуры
    
    // Процедура выполняет необходимые действия при изменении договора взаиморасчетов
    // с контрагентом.
    //
    Процедура ПриИзмененииДоговора()
    
    СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатуры;
    
    // Зададим, какие реквизиты надо редактировать.
    СтруктураРеквизитовДокумента = ПолучитьСтруктуруРеквизитовДокументаДляЦенообразования(ЭтотОбъект);
    
    ПриИзмененииЗначенияДоговора(ЭтотОбъект, мТекущаяВалютаВзаиморасчетов, мВалютаРегламентированногоУчета, СпособЗаполненияЦен, СтруктураРеквизитовДокумента, "Продажа", "Товары", мТекущийДоговорКонтрагента);
    
    мТекущаяВалютаВзаиморасчетов = ДоговорКонтрагента.ВалютаВзаиморасчетов;
    
    УстановитьВидимость();
    
    КонецПроцедуры // ПриИзмененииДоговора()
    
    // Функция формирует список запросов для передачи в форму подбора.
    //
    // Параметры:
    //  ТабличнаяЧасть - табличная часть, для подбора в которую формируется список запросов.
    //
    // Возвращаемое значение:
    //  Список значений - список запросов.
    //
    Функция СформироватьСписокЗапросовДляПодбора(ТабличнаяЧасть)
    
    СписокЗапросов = Новый СписокЗначений();
    СписокЗапросов.Добавить(,"По справочнику");
    
    Если ТабличнаяЧасть = Товары
    ИЛИ ТабличнаяЧасть = ВозвратнаяТара Тогда
    СписокЗапросов.Добавить("ОстаткиНоменклатуры", "Остатки номенклатуры");
    
    Если НЕ ЗначениеНеЗаполнено(ТипЦен) Тогда
    СписокЗапросов.Добавить("ОстаткиИЦеныНоменклатуры", "Остатки и цены номенклатуры");
    СписокЗапросов.Добавить("ЦеныНоменклатуры",		 "Цены номенклатуры");
    КонецЕсли;
    
    ИначеЕсли ТабличнаяЧасть = Услуги
    И НЕ ЗначениеНеЗаполнено(ТипЦен) Тогда
    
    СписокЗапросов.Добавить("ЦеныНоменклатуры", "Цены номенклатуры");
    
    КонецЕсли;
    
    Возврат СписокЗапросов;
    
    КонецФункции // СформироватьСписокЗапросовДляПодбора()
    
    // Процедура обновляет параметры в форме подбора, если она открыта.
    //
    // Параметры:
    //  Реквизит - измененный реквизит.
    //
    Процедура ОбновитьФормуПодбора(Реквизит)
    
    ОбновитьПараметрыИФормуПодбора(ЭтотОбъект, мФормаПодбораНоменклатуры, Реквизит);
    
    КонецПроцедуры // ОбновитьФормуПодбора()
    
    // Процедура вызывает сервисный механизм для подбора номеклатуры в табличную часть.
    //
    // Параметры:
    //  ТабличнаяЧасть - табличная часть, в которую осуществляется подбор.
    //
    Процедура ДействиеПодбор(ТабличнаяЧасть)
    
    Перем Команда, Валюта;
    
    ЕстьЦена  = Истина;
    
    Если ТабличнаяЧасть = Товары Тогда
    
    Команда		 = "ПодборВТабличнуюЧастьТовары";
    Валюта		  = ВалютаДокумента;
    ИмяТабличнойЧасти = "Товары";
    
    ИначеЕсли ТабличнаяЧасть = ВозвратнаяТара Тогда
    
    Если ЗначениеНеЗаполнено(ДоговорКонтрагента) Тогда
    Предупреждение("Не выбран договор контрагента!");
    Возврат;
    
    ИначеЕсли ЗначениеНеЗаполнено(ДоговорКонтрагента.ВалютаВзаиморасчетов) Тогда
    Предупреждение("Не выбрана валюта взаиморасчетов по договору!");
    Возврат;
    
    КонецЕсли;
    
    Валюта = ДоговорКонтрагента.ВалютаВзаиморасчетов;
    
    Команда		   = "ПодборВТабличнуюЧастьВозвратнаяТара";
    ИмяТабличнойЧасти = "Тара";
    
    ИначеЕсли ТабличнаяЧасть = Услуги Тогда
    
    Команда		   = "ПодборВТабличнуюЧастьУслуги";
    Валюта			= ВалютаДокумента;
    ИмяТабличнойЧасти = "Услуги";
    
    КонецЕсли;
    
    СписокВидовПодбора = СформироватьСписокЗапросовДляПодбора(ТабличнаяЧасть);
    ПредставлениеДок = Метаданные().Представление();
    
    СтруктураПараметровПодбора = Новый Структура();
    СтруктураПараметровПодбора.Вставить("Команда"			, Команда);
    СтруктураПараметровПодбора.Вставить("СписокВидовПодбора" , СписокВидовПодбора);
    
    // Параметры запросов.
    ВременнаяДатаРасчетов = ?(НачалоДня(Дата) = НачалоДня(ТекущаяДата()), Неопределено, Дата);
    
    СтруктураПараметровПодбора.Вставить("ДатаРасчетов"	   , ВременнаяДатаРасчетов);
    СтруктураПараметровПодбора.Вставить("Склад"			  , Склад);
    СтруктураПараметровПодбора.Вставить("ТипЦен"			 , ТипЦен);
    СтруктураПараметровП
  10. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Ну, так и есть. Стукнись в асю....
  11. Pasha
    Offline

    Pasha Опытный в 1С

    Регистрация:
    25 авг 2007
    Сообщения:
    65
    Симпатии:
    0
    Баллы:
    26
    чего-то больно все усложняете. А нельзя завести еще кнопку - "Печать второго варианта" - и ей вызывать второй макет печати? и так до тех пор, пока хватит места на форме документа, куда напихать кнопки... Это самый простой вариант!

Поделиться этой страницей