Имя: Пароль:
1C
1С v8
преобразовать процедуру в функцию
,
0 Neznayka_5
 
13.07.12
10:51
можно ли преобразовать процедуру в функцию (без ее изменения) знаю, нагло, но вдруг??
интересует процедура печать, которая есть в каждом документе (модуль объекта)
10 le_
 
13.07.12
10:55
(0) neшbI uщ0!
11 EasyRider
 
13.07.12
10:55
(0)можно ли преобразовать мясо в фарш?Но только чур без изменения мяса!
12 YF
 
13.07.12
10:59
(1) :-D
13 izekia
 
13.07.12
11:03
(8) ты не поверишь, 1С вообще пофиг
14 servs
 
13.07.12
11:05
(0) Делай так:

Процедура Печать2()
Результат = Печать();
КонецПроцедуры;

Далее используй Процедуру Печать2 вместо функции Печать().
15 izekia
 
13.07.12
11:05
(14) пятнично
16 GLazNik
 
13.07.12
11:06
(14) гы
17 GLazNik
 
13.07.12
11:06
(14) чукча не читатель, чукча писатель?
18 servs
 
13.07.12
11:06
(15) Ага :D
19 servs
 
13.07.12
11:07
(17) какой вопрос был такой и ответ + пятница)
20 Пыльный
 
13.07.12
11:07
(15) Не, это скорее субботично! В пятницу 1с еще что-то соображают ;)
21 izekia
 
13.07.12
11:07
(19) ему наоборот надо)
22 le_
 
13.07.12
11:08
(21) Он - это она )
23 GLazNik
 
13.07.12
11:08
(21) судя по фото - ей
24 izekia
 
13.07.12
11:08
Незнайка всегда М был
25 GLazNik
 
13.07.12
11:08
+(23) но опять же ... пятница...
26 servs
 
13.07.12
11:09
(21) (0) тогда так:

Функция Печать2()
Печать();
Возврат true;
КонецФункции;
27 izekia
 
13.07.12
11:10
предлагаю вообще не использовать процедуры в 1С, а писать одними функциями, а они уже если захотят будут что-то возвращать, а если функция вернула неопределено, то значит она процедура
28 Пыльный
 
13.07.12
11:10
(0) Ты отзывайся, отзывайся :)
Чем подробнее ты объяснишь, что тебе надо - тем скорее помогут.
29 izekia
 
13.07.12
11:10
ага, фотка есть, что бы не помочь?
30 Neznayka_5
 
13.07.12
11:10
(14) спасибо) я уже догадалась)
31 servs
 
13.07.12
11:10
(27) я за)
32 izekia
 
13.07.12
11:11
(30) реально - пятница
33 Пыльный
 
13.07.12
11:11
(30) /* с трудом вылезая из по стола */
Это лучше, чем Новая ПЯТНИЦА13 !!!!
34 le_
 
13.07.12
11:12
Предлагаю такой вариант:

Профедура ФункцияПечать()
   //тирлим-бом-бом
КонецПроцедуры
35 Neznayka_5
 
13.07.12
11:12
)))
36 izekia
 
13.07.12
11:12
(34) ошибку выдает
37 Aleks73
 
13.07.12
11:14
(34)
Процедура Этофунция()
КонецПроцедуры
38 Omskdizel
 
13.07.12
11:14
(34) Нам в конце надо написать "КонецПрофедуры"
39 le_
 
13.07.12
11:15
(36) А так:

Профедура ФункцияПечать()
   //тирлим-бом-бом

КонецПрофедуры


? )
40 izekia
 
13.07.12
11:15
тоже
41 Omskdizel
 
13.07.12
11:16
(40) У тебя неправильная 1Ска
42 le_
 
13.07.12
11:16
(40) Чорд, надо с саппорт писать.
43 izekia
 
13.07.12
11:18
профедура вроде проходит
пишет вот что:
Сообщение 102, уровень 15, состояние 1, строка 1
Неправильный синтаксис около конструкции ")".
44 GLazNik
 
13.07.12
11:19
(43) двоеточия не хватает... сто пудов
45 hhhh
 
13.07.12
11:22
всё-таки правильнее "Профи-дура"
46 Neznayka_5
 
13.07.12
11:23
да ну вас( чего-то она не работает.. мне результат нужно присвоить переменной
47 Neznayka_5
 
13.07.12
11:24
Процедура Печать2()
Результат = Печать();
КонецПроцедуры;

нельзя присваивать процедуру чему-либо
48 le_
 
13.07.12
11:25
Смиренно ждем 8.4 - там можно будет писать без двоеточий, обзывать процедуры функциями и на результат можно будет аще забить.
49 izekia
 
13.07.12
11:25
(47) присвой переменной что-нибудь другое
50 Neznayka_5
 
13.07.12
11:26
(49) но тогда у меня будет открываться табличный документ все равно. а мне именно его и нужно усмирить!
51 чувак
 
13.07.12
11:26
(46) Какой ркзультат? Печатную форму?
52 GLazNik
 
13.07.12
11:26
(48) почему только на результат... забить будет можно на все
(47) конфигурация какая хоть?
53 Neznayka_5
 
13.07.12
11:26
(52) упп 1.3
54 Neznayka_5
 
13.07.12
11:28
(51) НУ да, чтоб потом ее впихнуть с другими. в одну общую
55 izekia
 
13.07.12
11:30
кого впихнуть, с кем еще, в какую общую?
56 Neznayka_5
 
13.07.12
11:34
дело в том, что в документе РеализацияТоваровУслуг есть много печатных форм. Нашим пользователям надоело нажимать много кнопочек, и поэтому мое руководство поставило мне задачу сделать обработку в которой бы пользователи, эти милейшие лентяи, задавали бы сколько и каких печатных форм им надо вывести и выводились бы они в одном табличном документе. Вот этим я и занимаюсь. И не знаю, как несколько типовых форм поместить в один печатный документ
57 izekia
 
13.07.12
11:39
(56) в обработку печати параметром передавай документ в который выводишь
по умолчанию он будет неопределен, соответственно в печати смотришь и либо выводишь в уже готовый, либо создаешь новый, и все что тебе нужно будет - вызвать сколько нужно раз каждую процедуру печати с параметром
58 izekia
 
13.07.12
11:39
документ = табличныйдокумент
59 rool
 
13.07.12
11:42
Оо. Беги от такого руководства, они тебя плохому научат...

А если по теме то надо тупо заменить Процедура ... КонецПроцедуры на Функция ... КонецФункции и заставить все это что-то возвращать Возврат ТирлимБомБом;
60 Neznayka_5
 
13.07.12
11:44
(59) в том то и дело, что я не могу так сделать, потому что обращаюсь к процедуре в модуле объекта (документа), так уже не знаю, что делать
61 servs
 
13.07.12
11:46
(47) я в (26) исправился в (14) наоборот делал из функции процедуру.
62 servs
 
13.07.12
11:48
(60) тебе надо получать в результате выполнения функции табличный док..., а потом их объединять
63 izekia
 
13.07.12
11:48
сделай как в (57)
64 Neznayka_5
 
13.07.12
11:50
(62) РАССКАЖИТЕ ПОДРОБНЕЕ, КАК ОБЪЕДИНИТЬ НЕСКОЛЬКО ТАБ ДОКУМЕНТОВ?
65 Neznayka_5
 
13.07.12
11:50
(63) это сложнее, если не получиться сейчас объединить, сделаю так
66 Neznayka_5
 
13.07.12
11:51
(57) вы уверены, что параметром а не реквизитом?
67 servs
 
13.07.12
11:51
(64) тсс, тише.
68 Neznayka_5
 
13.07.12
11:52
(67) это случайно)
69 servs
 
13.07.12
11:52
(64) в поиске полно примеров
70 rool
 
13.07.12
11:52
Процедура Печать()
...
КонецПроцедуры

Функция Печать()
...
  Возврат КакаяТоХрень;
КонецФункции

С точки зрения вызова не отличаются вообще ни чем:

Печать();

Просто во втором случае есть возможность что-то получить на выходе:

ЧтоТо = Печать();

Так, что можно просто заменить скобки Процедура ... КонецПроцедуры на Функция ... КонецФункции и добавить возврат. Для кода который уже юзает эту процедуру ничего не изменится
71 servs
 
13.07.12
11:53
(69) + лучше 1 раз увидеть, чем 100 раз услышать (с)
72 Neznayka_5
 
13.07.12
11:54
(70) не могу лезть в типовую
73 izekia
 
13.07.12
11:55
(65) с чего бы это сложнее?
74 Neznayka_5
 
13.07.12
11:56
(73) точно мы говорим о параметре? Зачем параметр, если можно и просто создать Табличный документ?
75 Lama12
 
13.07.12
11:57
(0)Можно.
Если хочешь что ни будь вернуть, поставь в конце - Возврат Неопределено;
Функция что ни будь вернет.
76 rool
 
13.07.12
11:58
Тогда не очень понятно чего вы хотите :) Скопируйте типовую процедуру печати в другое место во внешнюю обработку например, и делайте с ней что хотите)
77 Neznayka_5
 
13.07.12
11:59
(76) неоптимально получается уже)
78 izekia
 
13.07.12
12:02
(74) мы его передаем в процедуру печати, там смотрим, если мы получили документ то вывод идет в него, далее мы передаем его в следующую процедуру и не надо будет ничего объединять
79 rool
 
13.07.12
12:03
(77)

Ну заставить процедуру, что то вернуть, не трогая кода этой процедуры (тобиш не изменяя типовой) не реально в принципе... Если только посмотреть ее параметры, может она уже умеет что-то возвращать, какой-нибуть параметр по ссылке передается...
80 Neznayka_5
 
13.07.12
12:04
(79) ну дело в том что в процедуре есть вывод. можно ли мне прервать процедуру на середине? не изменяя ее опять таки. я сейчас код скину процедуры
81 Neznayka_5
 
13.07.12
12:06
Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
   
   // Получить экземпляр документа на печать
   Если ИмяМакета = "Акт" Тогда
       ТабДокумент = ПечатьАктаОбОказанииУслуг(Ложь);
   ИначеЕсли ИмяМакета = "АктРуб" Тогда
       ТабДокумент = ПечатьАктаОбОказанииУслуг(Истина);
   ИначеЕсли ИмяМакета = "1Т" или ИмяМакета = "_1Т" Тогда
       ТабДокумент = ПечатьТТН();
   ИначеЕсли ИмяМакета = "Бланк" Тогда
       ТабДокумент = ПечатьБланк(НаПринтер);
   ИначеЕсли ИмяМакета = "СправкаРасчетВал" тогда

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



Ну примерно так..
82 Neznayka_5
 
13.07.12
12:07
вот мне бы ТабДокумент получить как-нибудь. Но все эти функции не помечены словом ЭСПОРТ вот проблема(
83 izekia
 
13.07.12
12:07
эта тема ни о чем
84 GLazNik
 
13.07.12
12:08
(81) ну и соответственно таких процедур много.. для каждого документа
Без изменения процедуры не реально...
Еще вариант... в довесок к этой процедуры сделать свою функцию
85 Neznayka_5
 
13.07.12
12:09
(84) продолжите идею. которая бы делала... что?
86 Steel_Wheel
 
13.07.12
12:11
(64)
ТабДок = Новый ТабличныйДокумент();
СоздатьТабличныйДокумент1(ТабДок);
СоздатьТабличныйДокумент1(ТабДок);
ТабДок.Показать()
87 GLazNik
 
13.07.12
12:12
(85) которая бы возвращала ТабДокумент.
В данном случае было бы что-то типа:

Функция ФункцияПечать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
   
   // Получить экземпляр документа на печать

   Если ИмяМакета = "Акт" Тогда
       Возврат ПечатьАктаОбОказанииУслуг(Ложь);
   ИначеЕсли ИмяМакета = "АктРуб" Тогда
       Возврат ПечатьАктаОбОказанииУслуг(Истина);
   ИначеЕсли ИмяМакета = "1Т" или ИмяМакета = "_1Т" Тогда
       Возврат ПечатьТТН();
   ИначеЕсли ИмяМакета = "Бланк" Тогда
       Возврат ечатьБланк(НаПринтер);
   Иначе
       Возврат Неопределено;
   КонецЕсли;
КонецФункции
88 Neznayka_5
 
13.07.12
12:13
(87) ну тут получается, что ПечатьАктаОбОказанииУслуг и остальные стали процедурами) и они то как раз увы и без пометки ЭКСПОРТ..
89 GLazNik
 
13.07.12
12:15
(88) кто их сделал процедурами? О_О
Нет. Вы эту функцию размещаете рядом с процедурой Печать. Но вместо процедуры печать извне, вызываете функцию. Она вам вернет ТабДокумент
90 Пыльный
 
13.07.12
12:16
(88) Я же тебе уже писал в соседней теме

АктОбОказанииУслуг.Печать(ИмяМакета);

где имя макета "Акт","АктРуб и т.д. УПП-шка дальше сама разберется.
91 Neznayka_5
 
13.07.12
12:17
(89) это интересно уже. если только вы не имеете ввиду вставить функцию там же где написано определение процедуры)
92 Neznayka_5
 
13.07.12
12:19
(90) оттуда то все и пошло. АктОбОказанииУслуг.Печать(ИмяМакета); - это процедура. а мне функция нужна
93 GLazNik
 
13.07.12
12:20
(91) вставить там же где и написано определение процедуры...
94 GLazNik
 
13.07.12
12:21
+(93) модуль объекта(ов) править так или иначе придется. Либо полностью повторять логику печати во вне модуля объекта.
95 Neznayka_5
 
13.07.12
12:23
(94) я уже поняла это, ну это конечно ппц..
96 Пыльный
 
13.07.12
12:27
Так. Стоп. Я нифига не уверен, ибо я "травкой" не увлекаюсь ;), но...
Разве удастся вывести в ОДИН табличный документ несколько макетов с разной шириной колонок так, что бы не сбилось форматирование?
Кто-нибудь здесь пытался?
Убеди начальство, что это неверно методологически :)
Пусть выбирают сколько угодно печатных форм, но печататься они будут в разных табличных документах. А иначе - Беги, Лола, беги!
97 Neznayka_5
 
13.07.12
12:29
Начальник кроме всего прочего в отпуске, в мне сдавать во вторник( Поздравляйте меня. в этот близящийся наконец к завершению рабочий день пятницы 13го
98 izekia
 
13.07.12
12:30
(96) это не семерка, тут такое нормально будет работать
99 Neznayka_5
 
13.07.12
12:36
(57) вернулась снова. можно поподробнее
100 Cube
 
13.07.12
12:46
Сотка
101 Neznayka_5
 
13.07.12
12:48
дешевеет)
102 Cube
 
13.07.12
12:49
(101) Эх ты, это не цена, это пост номер сто!)))
103 Cube
 
13.07.12
12:50
+(102) А по теме ответить не могу, т.к. читать много))) Я лучше в пятничной ветке посижу)
104 Smallrat
 
13.07.12
12:57
Дайте угадать - автор делает групповую печать, чтобы пачка документов в одну таблицу вывелась ?
без правки не получится - 2 варианта - приписать экспорт непосредственно к функции формирования табдокумента или добавить в процедуру печати лишний параметр в конце что-то типа:
Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, ВернутьТабДок = Неопределено) Экспорт
и вписать
Если ВернутьТабДок <> Неопределено Тогда
ВернутьТабДок =  ТабДокумент;
Возврат;
КонецЕсли;
чтобы вернуть откуда-нибуть табдок, в параметр передать что-нибуть отличное от Неопределено
105 rool
 
13.07.12
12:58
(102) Мораль: Вам либо придется слегка поправить код типовой, слегка усложнив дальнейшие обновления, либо полностью переносить все не экспортные методы печати во внешнюю обработку...
106 Steel_Wheel
 
13.07.12
13:01
(97) Думаю, зря ты взялась за эту задачу в пятнциу 13-ое.... Бегом билеты сдавать )
107 AndyD
 
13.07.12
15:16
я думаю намного проще сделать на форме кнопку печать комплекта документов и в ней печатать напрямую на принтер по умолчанию все что надо, например:

ТД = ПечатьДокумента(Ссылка);
УниверсальныеМеханизмы.НапечататьДокумент(ТД, 1, Истина, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект), Ссылка);
ТД = ПечатьТОРГ12(Ссылка);
УниверсальныеМеханизмы.НапечататьДокумент(ТД,1, Истина, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект), Ссылка);
108 stonewolf
 
13.07.12
17:08
(96) СоздатьФорматСтрок()
109 SachoZ
 
14.07.12
13:28
Можно использовать глобальные переменные:

Перем Результат;

Процедура ТипаФункция()

    Результат = "Миста!";

КонецПроцедуры;

ТипаФункция();
Сообщить(Результат);