helpf.pro
Регистрация

v8: Запретить редактировать реквизиты

Ermak
13.03.2013 13:38Прочитано: 12582
Подскажите что я не так делаю, выдает ошибку

{Документ.Подписаный.Форма.ФормаДокумента.Форма(20)}: Поле объекта не обнаружено (Доступность)
Результат.Ответственный.Доступность = Ложь;


Код 1C v 8.х
 Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Форма1.Ссылка,
| Форма1.Ответственный
|ИЗ
| Документ.Форма1 КАК Форма1
|ГДЕ
| Форма1.Организация = &Организация
| И Форма1.Квартал = &Квартал";

Запрос.Параметры.Вставить("Организация", ЭлементыФормы.Организация.Значение);
Запрос.Параметры.Вставить("Квартал", ЭлементыФормы.Квартал.Значение);
Результат = Запрос.Выполнить().Выбрать();

Пока Результат.Следующий() Цикл
Результат.Ответственный.Доступность = Ложь;
КонецЦикла;


Ответственный тип Справочник
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
13.03.2013 13:56Ответ № 1
так ты же это перебираешь результат запроса - в нем только выборка и нет ни какой доступности!
Ermak
13.03.2013 16:12Ответ № 2
А как тогда можно сделать через запрос?
E_Migachev
13.03.2013 17:16Ответ № 3
(2) Ermak, ни как... запрос служит только для получения данных...
А что ты хочешь ограничить, расскажи подробнее
Ermak
13.03.2013 17:19Ответ № 4
я хочу при нажатии на кнопку в документе Подпись, в документе Документы.Форма1 реквизит Ответственный был не доступен для редактирования
DJ_Serega
13.03.2013 17:40Ответ № 5
(4) Ermak, я так понял, если нажали на ПОДПИСЬ, то редактировать ответственного вообще нельзя?
Вижу выход только через дополнительный реквизит. При нажатии на ПОДПИСЬ устанавливать как истина, снимать доступность у открытого документа и при открытии проверять "доступно или нет"
Ermak
13.03.2013 17:51Ответ № 6
Да вы правильно поняли, при нажатии вообще редактировать нельзя.
А можно на пример как через дополнительный реквизит
E_Migachev
13.03.2013 18:03Ответ № 7
В модуле кнопки подпись напиши:
Код 1C v 8.х
 ЭлементыФормы.Ответсвенный.Доступность = Не РеквизитХраненияДоступностиБулево;   


создай РеквизитХраненияДоступностиБулево
Ermak
13.03.2013 19:34Ответ № 8
а как обратиться к документу Документы.Форма1 так как кнопка подписи находится в Документы.Подпись
DJ_Serega
13.03.2013 22:08Ответ № 9
Код 1C v 8.х
 
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Форма1.Ссылка КАК Документ
|ИЗ
| Документ.Форма1 КАК Форма1
|ГДЕ
| Форма1.Организация = &Организация
| И Форма1.Квартал = &Квартал"
;

Запрос.Параметры.Вставить("Организация", ЭлементыФормы.Организация.Значение);
Запрос.Параметры.Вставить("Квартал", ЭлементыФормы.Квартал.Значение);
Результат = Запрос.Выполнить().Выбрать();

Пока Результат.Следующий() Цикл
ДокументБлокировки = Результат.Документ.ПолучитьОбъект();
ДокументБлокировки.РеквизитХраненияДоступностиБулево = Истина;
ДокументБлокировки.Записать(РежимЗаписиДокумент.Запись);
КонецЦикла;


На корректность кода (если что) не обращайте внимания. Писал "от руки" *09 Но смысл думаю будет доставлен *17
Изменено 13.03.13 22:10:49
Ermak
14.03.2013 08:55Ответ № 10
Не много код не понял, создал реквизит РеквизитХраненияДоступности в документе Форма1 и добавил код в документ Подпись, после нажатия на кнопку все равно можно редактировать документ Форма1.
Изменено 14.03.13 09:02:52
DJ_Serega
14.03.2013 18:44Ответ № 11
(10) Ermak, а при открытии не забыл доступность устанавливать исходя из зна чения нового реквизита?
Пенечитай (7) E_Migachev,
Ermak
14.03.2013 19:17Ответ № 12
(11) DJ_Serega, Я не понимаю, реквизит Ответственный находится в документе Форма1, а кнопка Подпись находится в документе Подпись, если я напиши он не поймет что за реквизит Ответственный.
DJ_Serega
14.03.2013 23:00Ответ № 13
Приду домой напишу. А то с телефона сижу *07
E_Migachev
15.03.2013 00:11Ответ № 14
(12) Ermak, Форма1 и Подпись это формы одного документа???
DJ_Serega
15.03.2013 02:00Ответ № 15
(14) E_Migachev, та походу разные это документы
.(12) Ermak, тебе нужно получить объект документа ответственный и в нем установить запрет на изменение реквизита. И ПриОткрытии того (запрещенного) документа проверять на доступность изменения.
Что бы тебе помочь более детально, нам нужно знать как между собой связаны документ Подпись с документом Ответственный.
Ermak
15.03.2013 08:35Ответ № 16
Если вы имеет это объединение то у них есть два одинаковый реквизита, это Квартал и Организация, по этим реквизитам я делал отбор в документе Форма1

Код 1C v 8.х
 Запрос.Параметры.Вставить("Организация",  ЭлементыФормы.Организация.Значение);
Запрос.Параметры.Вставить("Квартал", ЭлементыФормы.Квартал.Значение);


смысл такой, устанавливаю данные в документе подпись для организации и квартал, он ищет в документ Форма1 такие же данные когда находит документы с этими же данными то делает реквизит ответственный не доступным.
Больше эти документы не чем не объединяются.
Ermak
15.03.2013 13:49Ответ № 17
Всем спасибо я разобрался!
Кому нужно вот код

В Документы.Подпись

Код 1C v 8.х
 Процедура Кнопка1Нажатие(Элемент)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Форма1.Ссылка КАК Ссылка
|ИЗ
| Документ.Форма1 КАК Форма1
|ГДЕ
| Форма1.Организация = &Организация
| И Форма1.Квартал = &Квартал";

Запрос.Параметры.Вставить("Организация", ЭлементыФормы.Организация.Значение);
Запрос.Параметры.Вставить("Квартал", ЭлементыФормы.Квартал.Значение);
Результат = Запрос.Выполнить().Выбрать();

Пока Результат.Следующий() Цикл
ДокументБлокировки = Результат.Ссылка.ПолучитьОбъект();
ДокументБлокировки.РеквизитХраненияДоступности = Ложь;
ДокументБлокировки.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
КонецПроцедуры


Документы.Форма1

Код 1C v 8.х
 Процедура ПриОткрытии()
ЭлементыФормы.Ответственный.Доступность = РеквизитХраненияДоступности;
КонецПроцедуры
Ermak
15.03.2013 13:56Ответ № 18
А можно как нибудь через запрос сделать это действие

ЭлементыФорым.....Доступность = РеквизитХраненияДоступности;

чтобы каждый реквизит не прописывать.
Ermak
15.03.2013 17:06Ответ № 19
Подскажите, тут я обращаюсь к документу


Код 1C v 8.х
 "ВЫБРАТЬ
| Форма1.Ссылка
|ИЗ
| Документ.Форма1 КАК Форма1
|ГДЕ
| Форма1.Организация = &Организация
| И Форма1.Квартал = &Квартал
| И Форма1.Ссылка <> &Ссылка";


и использую ссылку

а если я буду обращаться к регистру накопления там же не ссылки как мне быть тогда?

Код 1C v 8.х
 "ВЫБРАТЬ
| Форма1.Организация,
| Форма1.Квартал,
| Форма1.Исполнитель,
| Форма1.Номенклатура,
| Форма1.Группа,
| Форма1.Подгруппа,
| Форма1.БазЕдиница,
| Форма1.Тип,
| Форма1.Количество,
| Форма1.Цена,
| Форма1.Сумма,
| Форма1.СуммаНДС
|ИЗ
| РегистрНакопления.Форма1 КАК Форма1
|ГДЕ
| Форма1.Организация = &Организация
| И Форма1.Квартал = &Квартал";


мне это нужно для это, что у меня будет 20 документов к которым нужно будет одновременно закрывать доступность при нажатии кнопки подпись.
DJ_Serega
16.03.2013 03:44Ответ № 20
(19) Ermak, через регистр можно либо через ссылку в измерении или реквизите либо через регистратор.
(18) Ermak, запрос только выбирает данные. Их можно только посмотреть. Что бы изменить, нужно получать объект.
DJ_Serega
16.03.2013 03:48Ответ № 21
(17) Ermak, у тебя нюансик. По умолчанию реквизит доступности = ложь. А значит изменение всегда заблокировано. Лучше установить блокировку если реквизит приобретет истину. А то получается что в новых документах у тебя уже изменять нельзя.
Ermak
18.03.2013 08:56Ответ № 22
(20) DJ_Serega, можно пример а то плохо понятно.
(21) DJ_Serega, точно я не заметил, а что вы имеете ввиду блокировку. У меня смысл был такой, я создаю документ Подпись, нажимаю там на кнопку и блокирую все документы с установленными параметрами Организация и Квартал, а почему новые теперь блокируются не понятно.
DJ_Serega
19.03.2013 00:35Ответ № 23
(22) Ermak, по 21му теперь исправили и оно корректно? *17

(22) Ermak, с (20) DJ_Serega это по поводу (19) Ermak? Если "истина" *17 тогда где-то так:
Код 1C v 8.х
 
ЗапросБлокировка = Новый Запрос(
"ВЫБРАТЬ
| РегистрНакопления1.Регистратор КАК ДокументБлокировкиРегистратор,
| РегистрНакопления1.Измерение1 КАК ДокументБлокировкиИзмерение,
| РегистрНакопления1.Ресурс1 КАК ТутТолькоЧисло,
| РегистрНакопления1.Реквизит2 КАК ДокументБлокировкиРеквизит
|ИЗ
| РегистрНакопления.РегистрНакопления1 КАК РегистрНакопления1
|ГДЕ
| РегистрНакопления1.Регистратор.Номер = &Номер
| И РегистрНакопления1.Регистратор.Дата = &Дата"
);
ЗапросБлокировка.УстановитьПараметр("Номер", НомерПоиска);
ЗапросБлокировка.УстановитьПараметр("Дата", ДатаПоиска);

РезультатБлокировкаВыполнить = ЗапросБлокировка.Выполнить();
Если РезультатБлокировкаВыполнить.Пустой() Тогда
Предупреждение("Документы для блокировки не найдены.");
Возврат;
КонецЕсли;

РезультатБлокировка = РезультатБлокировкаВыполнить.Выбрать();
Пока РезультатБлокировка.Следующий() Цикл

Если НужныйДокумент = "Это регистратор" Тогда
ОбъектБлокировки = РезультатБлокировка.ДокументБлокировкиРегистратор.ПолучитьОбъект();
ОбъектБлокировки.РеквизитХраненияДоступности = Истина;
ОбъектБлокировки.Записать();
КонецЕсли;

Если НужныйДокумент = "Это Измерение" Тогда
ОбъектБлокировки = РезультатБлокировка.ДокументБлокировкиИзмерение.ПолучитьОбъект();
ОбъектБлокировки.РеквизитХраненияДоступности = Истина;
ОбъектБлокировки.Записать();
КонецЕсли;

Если НужныйДокумент = "Это Ресурс" Тогда
// Такого быть не может ;)
КонецЕсли;

Если НужныйДокумент = "Это реквизит" Тогда
ОбъектБлокировки = РезультатБлокировка.ДокументБлокировкиРеквизит.ПолучитьОбъект();
ОбъектБлокировки. РеквизитХраненияДоступности = Истина;
ОбъектБлокировки.Записать();
КонецЕсли;

КонецЦикла;

*09
Изменено 19.03.13 00:37:20 по причине: Очепятки ))
Ermak
20.03.2013 09:34Ответ № 24
(23) DJ_Serega, по 21 я не исправил, не могу додумать как это сделать, можете подсказать
DJ_Serega
21.03.2013 00:02Ответ № 25
(24) Ermak, вот ответ (7) E_Migachev
Ermak
22.03.2013 10:18Ответ № 26
(25) DJ_Serega, я не понимаю этот код

Код 1C v 8.х
 	|	РегистрНакопления1.Измерение1 КАК ДокументБлокировкиИзмерение,
| РегистрНакопления1.Ресурс1 КАК ТутТолькоЧисло,
| РегистрНакопления1.Реквизит2 КАК ДокументБлокировкиРеквизит

Вы имеете ввиду поставить любое измерение и ресурс и реквизит? Мне нужно заблокировать полностью документ, чтобы его можно было только смотреть.
Изменено 22.03.13 10:18:51
DJ_Serega
25.03.2013 12:25Ответ № 27
Ссылка на документ может быть там где ДокументБлокировки. Вы его таким образом получите для того что бы заблокировать.
Ermak
25.03.2013 12:30Ответ № 28
че та я не много не понимаю, можете лучше примером показать
DJ_Serega
25.03.2013 22:51Ответ № 29
(28) Ermak, я ж писал в (23) DJ_Serega.
Если нужный документ находится в измерении тогда "Это измерение", если в реквизите тогда "Это реквизит".
Допустим нужный документ для блокировки это Регистратор регистра. Тогда код по блокировке будет:
Код 1C v 8.х
 
Пока РезультатБлокировка.Следующий() Цикл

ОбъектБлокировки = РезультатБлокировка.ДокументБлокировкиРегистратор.ПолучитьОбъект();
ОбъектБлокировки.РеквизитХраненияДоступности = Истина;
ОбъектБлокировки.Записать();

КонецЦикла;
Ermak
26.03.2013 12:11Ответ № 30
(29) DJ_Serega, Большое спасибо разобрался! Сделал не много по другому. )
DJ_Serega
26.03.2013 20:46Ответ № 31
(30) Ermak, Главное что разобрался и сделал *02
Наша задача "помочь" выполнена *12

з.ы.: темку то можно и закрыть *17
Ermak
27.03.2013 09:05Ответ № 32
Хорошо )
Ermak
27.03.2013 09:05Ответ № 33
Вопрос закрыт!
Подсказка: Для редактирования своего ответа щелкните по значку (справа)
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.