1с запрет редактирования реквизита по условию

Запрет редактирования поля по условию

Автор Анна Анисимова, 23 мая 2020, 21:38

0 Пользователей и 1 гость просматривают эту тему.

Здравствуйте,
Не могли бы вы пожалуйста подсказать мне, как сделать, чтобы в форме документа определенное поле (норма на время работы трактора) было доступно для ввода при определенном значении другого поля (тип транспорта).
Поле должно быть доступно для редактирования, если реквизит справочника «Автотранспорт», «Тип транспорта» равен перечислению «Трактор».


Привязываем обработчик события элемента формы Автотранспорт ПриИзменении:

&НаКлиенте
Процедура АвтотранспортПриИзменении(Элемент)
    АвтотранспортПриИзмененииНаСервере()
КонецПроцедуры

&НаСервере
Процедура АвтотранспортПриИзмененииНаСервере()
    Элементы.НормаНаВремяРаботыТрактора.Доступность = Объект.Автотранспорт.ТипТранспорта = Перечисление.ТипыТранспорта.Трактор
КонецПроцедуры


Цитата: antoneus от 23 мая 2020, 23:31
Привязываем обработчик события элемента формы Автотранспорт ПриИзменении:

Спасибо!

Добавлено: 24 мая 2020, 00:16


Нет, не работает.
Сначала была ошибка, что значение «Перечисление» не найдено.
Я обратилась к перечислению через «ПредопределенноеЗначение», но ничего не изменилось

&НаКлиенте
Процедура ДопРеквТипАвтотранспортаПриИзменении(Элемент)
ДопРеквТипАвтотранспортаПриИзмененииНаСервере()
КонецПроцедуры

&НаСервере
Процедура ДопРеквТипАвтотранспортаПриИзмененииНаСервере()
Элемент.НормаВремя.Доступность = Объект.Автотранспорт.ДанныеТранспорта.ТипАвтотранспорта = ПредопределенноеЗначение("Перечисление.ТипАвтотранспорта.Трактор")
КонецПроцедуры

Потом я сделала так, но тоже не вышло:

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

Единственный недовариант, который «работает» — это вывод предупреждения при редактировании поля.


Прошу прощения, Перечисления, конечно же)

&НаСервере
Процедура АвтотранспортПриИзмененииНаСервере()
    Элементы.НормаНаВремяРаботыТрактора.Доступность = Объект.Автотранспорт.ТипТранспорта = Перечисления.ТипыТранспорта.Трактор
КонецПроцедуры

А ваш код не работает потому, что условие стоит на равенство вида транспорта трактору. Если оно выполняется — элемент становится доступным. Если не выполняется — ничего не происходит, если элемент до этого был доступным, он таковым и остается.


Ничего не происходит.
Я попыталась всунуть это в другую процедуру ПриИзменении:

&НаКлиенте
Процедура ТранспортПриИзменении(Элемент)
ТранспортПриИзмененииНаСервере();
КонецПроцедуры

&НаСервере
Процедура ТранспортПриИзмененииНаСервере()
Объект.ДопРекв.Очистить();
Для каждого Об Из Объект.Транспорт.ДанныеТранспорта Цикл
НСтр=Объект.ДопРекв.Добавить();
НСтр.ГосНомер=Об.ГосНомер;
НСтр.Марка=Об.Автотранспорт;
НСтр.Топливо=Об.ТипТоплива;
НСтр.ТипАвтотранспорта=Об.ТипАвтотранспорта;
    Если Об.ТипАвтотранспорта = Перечисления.ТипАвтотранспорта.Трактор Тогда
Объект.НормаВремя.Доступность=Истина;
КонецЕсли
КонецЦикла;
КонецПроцедуры

Ставила и убирала доступность поля в свойствах. Нужного эффекта не дало, кроме ошибки «Значение не является значением объектного типа (Доступность)» при выборе транспорта с типом «трактор».

Я понимаю, что решение должно быть простым, но не могу до него дойти :dfbsdfbsdf:


Цитата: Анна Анисимова от 25 мая 2020, 00:50

    Объект.НормаВремя.Доступность=Истина;

Почему вы упорно игнорируете мой код? При чем здесь объект, если мы управляем доступностью элемента формы? Ладно, напишу в третий раз.

Элементы.НормаВремя.Доступность = Объект.Транспорт.ТипТранспорта = Перечисления.ТипыТранспорта.Трактор


Я не игнорирую, просто при использовании вашего кода ничего не происходит. Поле остается доступным для ввода при любом значении реквезита табличной части «ТипАвтотранспорта».

Я еще раз напишу, что мне нужно, но подробнее.
Существует документ «НормыТоплива». В этом документе есть ряд реквезитов и табличная часть. При изменении реквезита «Транспорт» меняются все реквезиты табличной части «ДопРекв», среди которых: «ГосНомер», «Марка», «Топливо» и «ТипАвтотранспорта», которые доступны только для просмотра, вручную данные там не изменяются, только подставляются из табличной части «ДанныеТранспорта» справочника «Автотранспорт». Это все у меня сделано.
В документе «НормыТоплива» есть реквезит «НормаВремя», который должен быть доступен для заполнения ТОЛЬКО если «ТипАвтотранспорта» это трактор. Именно это мне и нужно реализовать.
Все типы транспорта записаны в перечислении «ТипАвтотранспорта». Данное перечисление используется для заполнения одноименного реквезита табличной части справочника «Автотранспорт».


Я прекрасно понимаю, что вам нужно сделать. Как сейчас выглядят все эти процедуры ПриИзмененииТранспорта?


Цитата: antoneus от 25 мая 2020, 16:28
Я прекрасно понимаю, что вам нужно сделать. Как сейчас выглядят все эти процедуры ПриИзмененииТранспорта?

&НаКлиенте
Процедура ТранспортПриИзменении(Элемент)
ТранспортПриИзмененииНаСервере();
КонецПроцедуры

&НаСервере
Процедура ТранспортПриИзмененииНаСервере()

Объект.ДопРекв.Очистить();
Для каждого Об Из Объект.Транспорт.ДанныеТранспорта Цикл
НСтр=Объект.ДопРекв.Добавить();
НСтр.ГосНомер=Об.ГосНомер;
НСтр.Марка=Об.Автотранспорт;
НСтр.Топливо=Об.ТипТоплива;
НСтр.ТипАвтотранспорта=Об.ТипАвтотранспорта;
КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ДопРеквТипАвтотранспортаПриИзменении(Элемент)
    ДопРеквТипАвтотранспортаПриИзмененииНаСервере()
КонецПроцедуры

&НаСервере
Процедура ДопРеквТипАвтотранспортаПриИзмененииНаСервере()
Элементы.НормаВремя.Доступность = Объект.ДанныеТранспорта.ТипАвторанспорта = Перечисления.ТипыТранспорта.Трактор
КонецПроцедуры


Почему. Вы. Игнорируете. Мой. Код? Вот этот:

Цитата: antoneus от 23 мая 2020, 23:31
Привязываем обработчик события элемента формы Автотранспорт ПриИзменении:&НаКлиенте
Процедура АвтотранспортПриИзменении(Элемент)
    АвтотранспортПриИзмененииНаСервере()
КонецПроцедуры

&НаСервере
Процедура АвтотранспортПриИзмененииНаСервере()
    Элементы.НормаНаВремяРаботыТрактора.Доступность = Объект.Автотранспорт.ТипТранспорта = Перечисления.ТипыТранспорта.Трактор
КонецПроцедуры

Процедура проверки должна вызываться из процедуры изменения реквизита, а не табличной части ДопРекв. Просто допишите эту строчку в процедуру ТранспортПриИзмененииНаСервере. В общем, вот.


Теги:

  • Форум 1С

  • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Конфигурирование, программирование в 1С Предприятие 8

  • Запрет редактирования поля по условию

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

Запрет редактирования строки таблицы по условию

Я
   palima

05.05.17 — 14:36

Всем привет. Есть управляемая форма с табличной частью «ТЧ» и кнопкой «Пересчитать»

В строке ТЧ есть ячейка с типом булево. Пользователь выставляет в определенных строках галочки в истину и нажимает кнопку «Пересчитать». Производятся определенные манипуляции и в этих строках значение ячейки меняется обратно в ложь.

Необходимо чтобы ко всему прочему эти строки таблицы стали недоступны для редактирования. Чтобы больше они не могли менять в них значения.

Помогите пожалуйста, 2 дня мучаюсь и никак не получается!

  

Партнерская программа EFSOL Oblako

   palima

1 — 05.05.17 — 14:39

Забыла добавить что пересчет происходит единожды и кнопка «Пересчитать» после нажатия становится недоступна. Это же действо надо произвести и со строками, по которым, собственно, и происходил пересчет…

   MrAvPika

2 — 05.05.17 — 14:39

(0) Я думаю «Только просмотр» для конкретной строки поставить не получится, как вариант перед редактированием сохранять строку, после редактирования загружать из сохранения, то есть как бы они редактируют, но значение не меняется

   MrAvPika

3 — 05.05.17 — 14:40

(1) А если отредактировано было несколько строк, потом пересчет, потом еще несколько строк, можно еще раз нажать на пересчет?

   palima

4 — 05.05.17 — 14:45

(3) Да, я ввела вас в заблуждение, извиняюсь. Повторно можно использовать пересчет. Но только тех строк, которые до этого не пересчитывались. Отсюда и идея запретить выставлять галки в строках уже пересчитанных.

   FIXXXL

5 — 05.05.17 — 14:45

добавь еще колонку булево РасчетОкончен, заполняй при расчете, осваивай УсловноеОформление упрФорм :)

   dezss

6 — 05.05.17 — 14:46

(0) доп. скрытая галка.

&НаКлиенте

Процедура ДокументыПриАктивизацииСтроки(Элемент)

    Если Элемент.ТекущиеДанные.ДопГалка Тогда

        Элемент.ПодчиненныеЭлементы.ТвояГалка.ТолькоПросмотр = Истина;

    Иначе

        Элемент.ПодчиненныеЭлементы.ТвояГалка.ТолькоПросмотр = Ложь;

    КонецЕсли;

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

   dezss

7 — 05.05.17 — 14:48

(5) вот жеж блин…

а мне в свое время никто не подсказал, что там можно ставить ТолькоПросмотр…

Спасибо.

   h-sp

8 — 05.05.17 — 14:48

(2) можно поставить

   MrAvPika

9 — 05.05.17 — 14:52

(5) Через Условное оформление реально работает) круто

   palima

10 — 05.05.17 — 14:53

(9) Расскажи пожалуйста поподробнее про условное оформление..

   MrAvPika

11 — 05.05.17 — 14:55

(10) Открываешь свойство формы, в свойствах находишь условное оформление, открываешь, в оформление выбираешь только просмотр истина, потом у в условиях свою галку и все

   MrAvPika

12 — 05.05.17 — 14:57

(10) и не забудь в оформляемых полях свою таблицу выбрать

   dezss

13 — 05.05.17 — 14:57

(10) Да что там рассказывать. Заходишь в свойства формы, ищешь условной оформление, нажимаешь Открыть, а там все и так понятно и логично. Главное быть внимательней, а то вон я и не заметил, что там можно только просмотр ставить.

   palima

14 — 05.05.17 — 15:03

(13) (12) да, вот только после пересчета у меня все строки становятся недоступны, не зависимо от того стояла на них галочка или нет..

   MrAvPika

15 — 05.05.17 — 15:06

(14) скинь скрин окна условного оформления

   MrAvPika

16 — 05.05.17 — 15:09

у меня все работает, по галочке

   palima

17 — 05.05.17 — 15:10

   palima

18 — 05.05.17 — 15:11

(17) Выбор — моя колонка с галочкой

   MrAvPika

19 — 05.05.17 — 15:15

(17) хм. вроде норм все

у меня вот точно так же отрабатывает для конкретной строки

   MrAvPika

20 — 05.05.17 — 15:17

(14) Может у тебя пересчет везде галки снял

   MrAvPika

21 — 05.05.17 — 15:18

http://i.imgur.com/AqoeEOj.jpg

вот наглядно первые две строки только просмотр 3яя редактируется

   palima

22 — 05.05.17 — 15:44

(21) А у тебя изначально булево в Ложь или в Истина установлено? При открытии?

   palima

23 — 05.05.17 — 15:49

(21) потому что я попробовала и так и так, если поставить при открытии Ложь то когда нажимаю  пересчет пропадают вообще галки и ячейки становятся пустые…

   palima

24 — 06.05.17 — 09:52

ничего так и не получилось(

   palima

25 — 06.05.17 — 14:08

никто не подскажет как программно установить доступность текущей строке в ТЧ при нажатии кнопки на форме?

   h-sp

26 — 06.05.17 — 21:14

(25) устанавливайте для всей тч. На другие строки ведь всё равно не попадете, значит получится, что для текущей установили.

  

Aleksandr N

27 — 06.05.17 — 23:05

(0)

«А я люблю шалав.

Шалавы — май лав».

Ой, что-то я отвлекся. Условное оформление же.

RTFM, короче.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
    
    // Обработка сингульных форм
    Если (ВидФормы = "ФормаДокумента") ИЛИ (ВидФормы = "ФормаОбъекта") ИЛИ (ВидФормы = "ФормаЗаписи") Тогда
        Для Каждого ВариантЗначение Из Новый Структура("Ключ,ЗначенияКопирования,ЗначенияЗаполнения,Отбор") Цикл
            Ссылка = Неопределено;
            Если (Параметры.Свойство(ВариантЗначение.Ключ, ПараметрСвойство) И ЗначениеЗаполнено(ПараметрСвойство)) Тогда
                Запрос = Новый Запрос;
                Запрос.Текст = 
                    "ВЫБРАТЬ
                    |   1 КАК Поле1
                    |ИЗ
                    |   Документ.ПриходнаяНакладная КАК Т
                    |ГДЕ
                    |   ИСТИНА
                    |   И Т.Ссылка = &Ссылка
                    |   И Т.Статус = ЗНАЧЕНИЕ(Перечисление.Статус.Выполнен)";
                Запрос.УстановитьПараметр("Ссылка", Ссылка);
                РезультатЗапроса = Запрос.Выполнить();
                Если НЕ РезультатЗапроса.Пустой() Тогда
                    Если Параметры.Свойство("ТолькоПросмотр") Тогда
                        Параметры["ТолькоПросмотр"] = Истина;
                    Иначе
                        Параметры.Вставить("ТолькоПросмотр", Истина);
                    КонецЕсли; 
                КонецЕсли; 
                Прервать; // Дискриминирующий параметр найден - завершить цикл
            КонецЕсли;     
        КонецЦикла;
    КонецЕсли;         
    
КонецПроцедуры

В одном из занятий курса Настройка и доработка прав доступа, профилей пользователей и RLS в типовых конфигурациях рассматривается работа с подсистемой БСП “Запрет редактирования реквизитов объектов”. На конкретном примере тренер реализовывает запрет редактирования ряда полей и табличной части “Товары” на форме документа “План продаж”.

Напомним, что для реализации запрета редактирования данных формы нужно выполнить ряд действий, среди которых:

  1. Подключение документа к подсистеме БСП

Общий модуль ЗапретРедактированияРеквизитовОбъектовПереопределяемый

Процедура ПриОпределенииОбъектовСЗаблокированнымиРеквизитами()

Процедура ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты) Экспорт    
 //++ НЕ ГОСИС
ОбменДаннымиУТУП.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты);
Объекты.Вставить(Метаданные.ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПолноеИмя(), "ПолучитьБлокируемыеРеквизитыОбъекта");//-- НЕ ГОСИС

 //++ изменения
 Объекты.Вставить(Метаданные.Документы.ПланПродаж.ПолноеИмя(), "ПолучитьБлокируемыеРеквизитыОбъекта");
 //-- изменения    
КонецПроцедуры

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

Вопрос

Добрый день! Как заблокировать доступ не к табличной части целиком, а к отдельной колонке табличной части? Например: Товары.Номенклатура.

Ответ тренера

Добрый день! Для блокировки редактирования отдельной колонки табличной части, например, колонки “Номенклатура”, нужно исправить код функции ПолучитьБлокируемыеРеквизитыОбъекта() на следующий:

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

Иногда бывают ситуации, когда необходимо в табличном поле запретить редактирование какой-либо ячейки строки, исходя из определенного условия. Например, в строке есть два поля — «номенклатура» и «серийный номер», оба ссылочного типа. Необходимо запретить редактирование номенклатуры только в тех строках, где серийный номер выбран. И кроме этого, так как номенклатура является ссылочным типом, желательно оставить пользователю возможность для открытия текущей номенклатуры из табличного поля.
Решение.
Я предлагаю следующее решение для поставленной задачи — следует воспользоваться событием табличного поля «ПриАктивизацииЯчейки», где для элемента управления колонки табличного поля изменяем значение свойства «ТолькоПросмотр» в зависимости от условия:

Процедура ТабличноеПолеПриАктивизацииЯчейки(Элемент)            
    Если Элемент.ТекущаяКолонка = Элемент.Колонки.Номенклатура Тогда
        Если Элемент.ТекущаяСтрока.СерийныйНомер.Пустая() Тогда    
             Элемент.Колонки.Номенклатура.ЭлементУправления.ТолькоПросмотр = Ложь;
             Элемент.Колонки.Номенклатура.ЭлементУправления.КнопкаОчистки = Истина;
             Элемент.Колонки.Номенклатура.ЭлементУправления.КнопкаВыбора = Истина;
        Иначе
             Элемент.Колонки.Номенклатура.ЭлементУправления.ТолькоПросмотр = Истина;
             Элемент.Колонки.Номенклатура.ЭлементУправления.КнопкаОчистки = Ложь;
             Элемент.Колонки.Номенклатура.ЭлементУправления.КнопкаВыбора = Ложь;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Ermak
13.03.2013 13:38 Прочитано: 11271

Подскажите что я не так делаю, выдает ошибку

{Документ.Подписаный.Форма.ФормаДокумента.Форма(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

Вопрос закрыт!

Подсказка: Для выделения Кода используйте (в редакторе).

Понравилась статья? Поделить с друзьями:
  • 1с значение реквизита объекта табличная часть
  • 1с значения по умолчанию для реквизитов формы
  • 1с изменить реквизит документа при проведении
  • 1с изменить реквизиты в нескольких документах
  • 1с как получить типы реквизитов по метаданным