Имя: Пароль:
1C
1С v8
Можно ли внешней обработкой вызвать процедуру из модуля документа?
0 Азат
 
22.11.12
00:24
Собственно, суть...

мутится очередная нетленная печатка, надо вызвать пару процедур из модуля документа... но проблема в том, что слова "Экспорт" нет...

конфа базовая!
есть ли возможность как-то поиметь систему или тупо придется копировать код?
1 zak555
 
22.11.12
00:26
нетленка -- базовая ? о_О
2 zak555
 
22.11.12
00:26
> печатка

это что ?
3 servs
 
22.11.12
00:27
(0) помощь стоит 3 косаря
4 Азат
 
22.11.12
00:31
(3) ты очень крут, разрешаю тебе самому себя удовлетворить орально
5 Азат
 
22.11.12
00:31
(2) печатная форма из нескольких частей
6 servs
 
22.11.12
00:41
(4) Тараканами на кухне будешь командовать!

П.С.: Твои родители когда-нибудь попросили тебя убежать из дома?
7 zak555
 
22.11.12
01:18
а чего печать не в модуле менеджере  *
8 Азат
 
22.11.12
01:22
(7) спроси у 1С-а, почему они так в типовой сделали... еще и все функции, возвращающие табличный документ, без экспорта...
9 zak555
 
22.11.12
01:33
(8)

1. открыл бп 3.0 -- там экспорт в модулях менеджера есть
2. ответь на (1)
10 Азат
 
22.11.12
01:35
(9) конфа базовая... нетленка - это моя печатка :)
11 zak555
 
22.11.12
01:39
сделать небазовой ?
12 Азат
 
22.11.12
01:43
(11) не вариант
13 zak555
 
22.11.12
01:49
это что за конфа ?
14 Азат
 
22.11.12
02:33
плат. документы
15 zak555
 
22.11.12
02:35
по-моему, без слова экспорт -- никак
16 Азат
 
22.11.12
02:40
(15) лан, спасиб, будем биться... не хотелось, канеш, код копировать...
17 zak555
 
22.11.12
02:42
какие процедуры и из какого модуля ?
18 Азат
 
22.11.12
02:47
ПещатьСчета... из модуля счета, ПечатьТОРГ12 из модуля накладной и тп
19 zak555
 
22.11.12
02:52
что-то не могу найти алкоголь =)
20 zak555
 
22.11.12
03:00
эти что ли ?

Функция ПечатьСчетаЗаказа(Тип)

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

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

   ТабДокумент = Новый ТабличныйДокумент;
   ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказПокупателя_СчетЗаказ";

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

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

   Макет = ФормированиеПечатныхФорм.ПолучитьМакетДляПечати("СчетЗаказ");

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

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

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

   ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
   ОбластьМакета.Параметры.ТекстЗаголовка = РаботаСДиалогами.СформироватьЗаголовокДокумента(Шапка, "Счет на оплату");
   
   ТабДокумент.Вывести(ОбластьМакета);

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

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

   ОбластьНомера = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
   ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");
   ОбластьСуммы  = Макет.ПолучитьОбласть("ШапкаТаблицы|Сумма");

   ТабДокумент.Вывести(ОбластьНомера);
   ТабДокумент.Присоединить(ОбластьДанных);
   ТабДокумент.Присоединить(ОбластьСуммы);

   ОбластьКолонкаТовар = Макет.Область("Товар");

   ОбластьНомера = Макет.ПолучитьОбласть("Строка|НомерСтроки");
   ОбластьДанных = Макет.ПолучитьОбласть("Строка|Данные");
   ОбластьСуммы  = Макет.ПолучитьОбласть("Строка|Сумма");

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

   Для каждого ВыборкаСтрокТовары Из ЗапросТовары Цикл

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

       ОбластьДанных.Параметры.Заполнить(ВыборкаСтрокТовары);
       ОбластьДанных.Параметры.Товар       = СокрЛП(ВыборкаСтрокТовары.Товар);
       ТабДокумент.Присоединить(ОбластьДанных);

       ОбластьСуммы.Параметры.Заполнить(ВыборкаСтрокТовары);
       ТабДокумент.Присоединить(ОбластьСуммы);
       Сумма          = Сумма       + ВыборкаСтрокТовары.Сумма;
       СуммаНДС       = СуммаНДС    + ВыборкаСтрокТовары.СуммаНДС;

   КонецЦикла;

   // Вывести Итого
   ОбластьНомера = Макет.ПолучитьОбласть("Итого|НомерСтроки");
   ОбластьДанных = Макет.ПолучитьОбласть("Итого|Данные");
   ОбластьСуммы  = Макет.ПолучитьОбласть("Итого|Сумма");

   ТабДокумент.Вывести(ОбластьНомера);
   ТабДокумент.Присоединить(ОбластьДанных);
   ОбластьСуммы.Параметры.Всего = ФормированиеПечатныхФорм.ФорматСумм(Сумма);
   ТабДокумент.Присоединить(ОбластьСуммы);

   // Вывести ИтогоНДС
   ОбластьНомера = Макет.ПолучитьОбласть("ИтогоНДС|НомерСтроки");
   ОбластьДанных = Макет.ПолучитьОбласть("ИтогоНДС|Данные");
   ОбластьСуммы  = Макет.ПолучитьОбласть("ИтогоНДС|Сумма");
   
   ТабДокумент.Вывести(ОбластьНомера);
   Если СуммаНДС <> 0 Тогда
       ОбластьДанных.Параметры.НДС = ?(Шапка.СуммаВключаетНДС, "В том числе НДС:", "Сумма НДС:");
       ОбластьСуммы.Параметры.ВсегоНДС = ФормированиеПечатныхФорм.ФорматСумм(СуммаНДС);
   Иначе
       ОбластьДанных.Параметры.НДС = "Без налога (НДС)";
       ОбластьСуммы.Параметры.ВсегоНДС = "-";
   КонецЕсли;
   ТабДокумент.Присоединить(ОбластьДанных);
   
   ТабДокумент.Присоединить(ОбластьСуммы);
   
   // Вывести Сумму прописью
   ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
   СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);
   ОбластьМакета.Параметры.ИтоговаяСтрока ="Всего наименований " + ЗапросТовары.Количество()
   + ", на сумму " + ФормированиеПечатныхФорм.ФорматСумм(СуммаКПрописи, "руб.");
   ОбластьМакета.Параметры.СуммаПрописью = РаботаСДиалогами.СформироватьСуммуПрописью(СуммаКПрописи, );
   ТабДокумент.Вывести(ОбластьМакета);

   // Вывести подписи
   Если Тип = "Счет" Тогда
       ОбластьМакета = Макет.ПолучитьОбласть("ПодвалСчета");

       Руководители = ОбщегоНазначения.ОтветственныеЛица(Организация, Дата);
       Руководитель = Руководители.РуководительПредставление;
       Бухгалтер    = Руководители.ГлавныйБухгалтерПредставление;

       ОбластьМакета.Параметры.ФИОРуководителя = Руководитель;
       ОбластьМакета.Параметры.ФИОБухгалтера   = Бухгалтер;

   Иначе
       ОбластьМакета = Макет.ПолучитьОбласть("ПодвалЗаказа");
   КонецЕсли;
   ОбластьМакета.Параметры.Заполнить(Шапка);
   ТабДокумент.Вывести(ОбластьМакета);

   Возврат ТабДокумент;

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

Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, НепосредственнаяПечать = Ложь) Экспорт
   
   ПризнакПечати = Ложь;
   
   // Получить экземпляр документа на печать
   Если ИмяМакета = "Счет" Тогда
       
       ТабДокумент = ПечатьСчетаЗаказа(ИмяМакета);
       
   КонецЕсли;
   
   ФормированиеПечатныхФорм.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, РаботаСДиалогами.СформироватьЗаголовокДокумента(ЭтотОбъект, ЭтотОбъект.Метаданные().Представление()), НепосредственнаяПечать, Ссылка, ИмяМакета);
   
КонецПроцедуры
21 zak555
 
22.11.12
03:04
странно как-то
функция ПечатьСчетаЗаказа вызывает только из процедуры Печать и предполагает использование нескольких значений переменной
Тип = "Счет" и иначе
а вот процедура Печать вызывает функцию только со значением переменной "Счет"

т.е. косяк
22 zak555
 
22.11.12
23:28
в 1с написал вопрос ?
23 Азат
 
22.11.12
23:29
(22) нет, решили иначе...
24 zak555
 
22.11.12
23:31
(23) копи-паст ?
25 Азат
 
22.11.12
23:32
ага, сделал свою внешнюю обработку, которая возвращает табличный документ... и вызываю ее... клиент доволен, конфа-целка, все щастливы
26 Азат
 
22.11.12
23:33
плат. доки редко меняются, поэтому особых геморроев с этим можно не ждать
27 zak555
 
22.11.12
23:33
надо было написать в 1с
28 Азат
 
22.11.12
23:37
(27) еще чего...
Независимо от того, куда вы едете — это в гору и против ветра!