Имя: Пароль:
1C
1С v8
Как запретить копировать документ?
0 Gorr
 
18.11.13
12:24
Простой вопрос - как запретить копировать документ, если основная форма документа является управляемой?
1 Повелитель
 
18.11.13
12:25
(0) Отковырять отверткой кнопку F9
2 Maxus43
 
18.11.13
12:28
ПриКопировании есть процедура в объекте, там можно проанализировать поидее и отказ повесить если что
3 zakidonoff
 
18.11.13
12:29
&НаКлиенте
Процедура ТоварыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Если Копирование Тогда    
    Отказ = истина;
КонецЕсли;
КонецПроцедуры
4 Повелитель
 
18.11.13
12:29
(2) Нет там такого
5 kiruha
 
18.11.13
12:32
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
ПриКопировании (OnCopy)
Синтаксис:

ПриКопировании(<ОбъектКопирования>)
Параметры:

<ОбъектКопирования>

Тип: ДокументОбъект.
Исходный документ, который является источником копирования.
Описание:

Возникает при создании документа копированием.
6 Gorr
 
18.11.13
12:33
(2) в этой процедуре нет такого параметра.
Можно определить реквизит документа ВведенКопированием, и анализировать его из формы ПриОткрытии, но это решение не кажется мне удачным.
7 Maxus43
 
18.11.13
12:33
отказ тока не повесить там
8 Gorr
 
18.11.13
12:36
(7) ПриОткрытии как раз имеет параметр Отказ
9 Maxus43
 
18.11.13
12:38
(8) я про ПриКопировании, при открытии можно конечно
10 kiruha
 
18.11.13
12:40
(9)
А зачем там отказ - достаточно в экспрортную переменную поставить признак
11 Повелитель
 
18.11.13
12:40
(8) Процедура ПриОткрытии() нет отказа
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

Чем вариант в (3) не устраивает?

Вот еще вариант.Можно еще забрать права на интерактивное добавление. И написать свою кнопку "Добавить".
12 Gorr
 
18.11.13
12:42
(5) эта информация всем доступна и известна. не флудите пожалуйста.
Вариант (0) слишком радикален.
Вопрос на самом деле с подвохом. Пока серьезных мыслей не вижу.
Если бы речь шла о простых формах, то там есть решение через расширение формы документа ПараметрОбъектКопирования, но в управляемых формах он недоступен.
13 mzelensky
 
18.11.13
12:46
(0) чет вы велосепед изобретаете, как мне кажется:

Процедура ПриОткрытии()
    // Вставить содержимое обработчика.
    Если ЭтоНовый() тогда
        Если НЕ ЗначениеЗаполнено(ПараметрОбъектКопирования) тогда            
            //ЗНАЧИТ НЕ СКОПИРОВАН
        КонецЕсли;        
    КонецЕсли;
14 kiruha
 
18.11.13
12:47
(12)
Умник которому все известно - тебе же написали - в экспортную переменную или реквизит.
15 mzelensky
 
18.11.13
12:48
(13) сори, не дочитал про УпрФормы
16 Gorr
 
18.11.13
12:48
(10)(14) и как вы потом к этой переменной (если она не глобальная) обратитесь из модуля формы?
(11) процедура ПриОткрытии в УПРАВЛЯЕМЫХ формах как раз таки имеет параметр Отказ. будьте внимательнее при прочтении топика.
17 Fedor-1971
 
18.11.13
12:50
(12)Если Параметры.ЗначениеКопирования.Пустая() тогда
в управляемых формах
18 Gorr
 
18.11.13
12:51
+(14) а про вариант с реквизитом я еще в 6м посте упоминал
19 Fedor-1971
 
18.11.13
12:51
(17)+ в ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
20 kiruha
 
18.11.13
12:54
(16)
РеквизитФормыВЗначение("Объект").МояПерем

у перем конечно должно быть Экспорт
21 Gorr
 
18.11.13
13:19
(17)+(19) это действительно работает. Спасибо!

(20) а вариант с экспортной переменной не работает:

Модуль объекта:
перем ФлагВведенКопированием Экспорт;

Процедура ПриКопировании(ОбъектКопирования)
    ФлагВведенКопированием = истина;
КонецПроцедуры

функция ВведенКопированием() экспорт
    возврат ФлагВведенКопированием;
конецфункции

Модуль формы:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Отказ = ВведенКопированием();    
КонецПроцедуры

&НаСервере
функция ВведенКопированием()
    а = РеквизитФормыВЗначение("Объект").ВведенКопированием();
    б = РеквизитФормыВЗначение("Объект").ФлагВведенКопированием;
    возврат а или б;  
КонецФункции

Так вот в функции модуля формы ВведенКопированием() переменные а и б всегда имеют значение неопределено. Почему?
22 Gorr
 
18.11.13
13:24
+(21) проверял очередность вызова - ПриКопировании вызывается первой, не смотря на это при последующем обращении к переменной ФлагВведенКопированием из модуля формы ее значение всегда неопределено
23 Fedor-1971
 
18.11.13
13:29
Так переменная на уровне документа будет инициализироваться заново при каждом обращении на сервер, если хочешь работать через переменную объяви её, например, в модуле приложения.
24 kiruha
 
18.11.13
13:49
25 Gorr
 
18.11.13
13:49
(23) но в этом случае она станет глобальной
26 kiruha
 
18.11.13
13:50
В любом случае решение (17) конечно изящнее
27 acsent
 
18.11.13
13:54
проще всего при копировании очищать все реквизиты
28 Gorr
 
18.11.13
13:59
(24) вот если бы ты почитал тему на которую ссылаешься внимательнее, то понял бы что у человека как раз таки проблема в том, что значение переменной не сохраняется в модуле объекта!
29 kiruha
 
18.11.13
14:00
(28)
Нет . Он в модуле объекта еей присваивал "1"
и у него выскакивало "1"
30 kiruha
 
18.11.13
14:04
А в ПриЧтенииНаСервере(ТекущийОбъект)
ТекущийОбъект.ФлагВведенКопированием - ?
31 Gorr
 
18.11.13
14:05
(29) смотрю у многих здесь проблемы с внимательностью. бесит честное слово!
Вот потому что он присваивал значение переменной в разделе программы модуля равное 1, а не в обработчиках событий в которых он присваивал значение равное 2м, то он и получал значение каждый раз равное 1, а не 2!!!
32 Gorr
 
18.11.13
14:08
(29) вы вообещ про разделы модуля слышали? знаете чем отличается раздел процедур и функций от раздела основной программы?
33 Холодильник
 
18.11.13
14:09
мдаа..

в модуле документа:

Процедура ПриКопировании(ОбъектКопирования)
ОбъектКопирования = документы.мойДок.ПустаяСсылка();
Конецпроцедуры
34 kiruha
 
18.11.13
14:14
(31)
И что ?
Он пишет что в этом была ошибка.
Пока у меня сложилось впечатление что для незаписанных объектов 1С заново инициализирует объект при РеквизитФормыВЗначение("Объект")

Поэтому спросил про
ПриЧтенииНаСервере(ТекущийОбъект)
ТекущийОбъект.ФлагВведенКопированием
35 banco
 
18.11.13
14:20
(0)
Процедура ПриКопировании(ОбъектКопирования)
    
     ТекстОшибки = НСтр("ru='Нельзя создать документ копированием.'");
     ВызватьИсключение ТекстОшибки;

КонецПроцедуры
36 Gorr
 
18.11.13
15:03
(34) никакой обишби - нормальное поведение системы. Инициализация переменных модуля выполняется при каждом обращении к модулю. Там это и подтеврждается. Об этом еще в 23 посте объяснили! новый или нет объект да никакой разницы!
если это непонятно, то дальше не о чем говорить
37 Gorr
 
18.11.13
15:04
(0) некрасивое решение - ошибка с предложением открыть конфигуратор ни к чему.
38 Gorr
 
18.11.13
15:04
(35)
39 banco
 
18.11.13
15:17
(37) по мне нормальное решение. пользователю надо же что нибудь сообщить почему форма не открылась? тогда придется создавать форму на сервере, открыть форму, сообщить, потом отказаться от открытия.
40 Defender aka LINN
 
18.11.13
15:19
(39) Дурацкое решение - запрещать копировать документ, если уж на то пошло.
41 AlexTim03
 
18.11.13
15:26
(40) +1
Недавно у нас тоже была задача - "а запретите копировать документ". Вопрос к ТС: на фейхоа?
42 zakidonoff
 
18.11.13
15:31
ПоказатьОповещениеПользователя("Ты не пройдёшь!",,
            //"http://doc.ru";,
            "Гендальф рулит!!!",
            БиблиотекаКартинок.Важно);
У меня нет управляемых форм под рукой, но в справке написано - должно работать
43 hhhh
 
18.11.13
15:32
(41) потому что тупой программист, когда пишет программу, не догадывается, что пользователь может скопировать документ. Поэтому куча ошибок вылезает.
44 kiruha
 
18.11.13
15:39
(36)
А в том посте нет объяснения что тогда означает Экспорт.
То народ пишет - не все так просто.
45 shamannk
 
18.11.13
15:46
(0) Может проблема не в копировании? А в том что копируются лишние данные?
46 ifso
 
18.11.13
17:07
+(45)
Или таки запретить "интерактивное добавление".
47 samozvanec
 
18.11.13
17:16
(0) с командной панели убрать автозаполнение, кнопку копирования не выводить. в контекстном меню тоже самое.

", если основная форма документа является управляемой?" - это условие должно проверяться?
48 pumbaEO
 
18.11.13
19:22
Очистить все реквизиты при копировании и сделать копирование бесмысленным.
49 EvgeniuXP
 
18.11.13
20:46
(13) не универсально, на другой форме тоже писать придется.