Как можно заблокировать документ?

1. D_e_X_T_e_R 573 16.08.17 10:01 Сейчас в теме
Доброго времени. Конфигурация БП 3.0 . Я в нее дописал дополнительный документ. Он проводится по регистрам. Как можно заблокировать эти документы, таким образом, что если заходят в них сегодня, то можно редактировать, если на след. день, то можно редактировать только след. день, а предыдущий уже заблокирован. Ну и так далее. Как то можно так сделать? И можно ли такое реализовать с отбором по пользователям?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. japopov 68 16.08.17 10:05 Сейчас в теме
(1) Всё возможно. Можно задействовать RLS, можно константы/регистры сведений считывать в форме и устанавливать всей форме ТолькоЧтение в обработчике ПриЧтенииНаСервере... Вариантов - масса.
2. ZergKRSK 129 16.08.17 10:05 Сейчас в теме
4. D_e_X_T_e_R 573 16.08.17 10:05 Сейчас в теме
(2) Это радует. А подскажите куда рыть в таком случае?
6. ZergKRSK 129 16.08.17 10:09 Сейчас в теме
(4) ПриОткрытии() можно прописать код, который проверяет рабочую дату и дату документа.
8. japopov 68 16.08.17 10:11 Сейчас в теме
(6) Лучше не ПриОткрытии(), а ПриЧтенииНаСервере(), оно как раз для такого и предназначено, и вызывается при ЛЮБОМ чтении/обновлении.
Но нужно всё равно предусмотреть случай, когда человек меняет дату документа, и тот попадает в запрещённые дни... Как тогда должна реагировать программа?
10. ZergKRSK 129 16.08.17 10:17 Сейчас в теме
11. корум 287 16.08.17 10:23 Сейчас в теме
(10) тем, что "вызывается при ЛЮБОМ чтении/обновлении".
12. ZergKRSK 129 16.08.17 10:28 Сейчас в теме
(11) т.е. просто прокручивая журнал доков будет постоянно срабатывать этот обработчик?
16. japopov 68 16.08.17 10:48 Сейчас в теме
(12) 1С, в отличие от Вас, предусмотрела, что Вы не единственный пользователь в базе. И если кто-то изменил дату открытого Вами документа, система заставит Вас перечитать его, прежде чем изменять. А тогда отработает ПриЧтенииНаСервере, но не ПриОткрытии. RTFM.
17. ZergKRSK 129 16.08.17 12:01 Сейчас в теме
(16) вот отличие от Вас я знаю тот факт что если кто-то изменил открытый мной документ, то я не смогу его сохранить (и разумеется провести) без повторного открытия. Что приведет к обработчику ПриОткрытии(). Учите матчасть, умник.
18. japopov 68 16.08.17 12:27 Сейчас в теме
(17) Кнопку "Перечитать" для Вас забанили, вероятно, умник?
19. japopov 68 16.08.17 12:28 Сейчас в теме
(17) ...и я уже молчу о том, что "матчасть" (то есть, сама фирма 1С) описывает предназначение обработчиков, и как раз этот случай там рассмотрен... Результат самостоятельно угадаете?
5. D_e_X_T_e_R 573 16.08.17 10:06 Сейчас в теме
А можно где то пример подобного посмотреть?
7. MyPuK_OLD 16.08.17 10:10 Сейчас в теме
(5) Топорный метод, но работает.
Если Не (Дата ) =ТекущаяДата() Тогда
	Сообщить("Нельзя проводить документы задним числом!");
	Отказ = Истина;
КонецЕсли;


С форматом "Даты" скорее всего придется подшаманить.
9. japopov 68 16.08.17 10:12 Сейчас в теме
(7) А Ваш код никогда и не отработает. Хи-хи.
ТекущаяДата() получит дату с точностью до секунды, а реквизит Дата в документе присвоился при создании, заведомо раньше. Никогда не выполнится условие. То есть, запись документа всегда будет запрещена.
14. MyPuK_OLD 16.08.17 10:35 Сейчас в теме
(9)"Чукча" не читатель?
С форматом "Даты" скорее всего придется подшаманить.


Можно к началу дня привести, просили же пример, а не готовое решение.
15. japopov 68 16.08.17 10:46 Сейчас в теме
(14) Чукча не только не читатель, а ещё и не вводитель в заблуждение и не выкладыватель заведомо нерабочего кода.
13. D_e_X_T_e_R 573 16.08.17 10:35 Сейчас в теме
Сделал так:

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	
	Если Объект.Дата < НачалоДня(ТекущаяДата()) Тогда
		Доступность = Ложь;
	КонецЕсли;	
	
КонецПроцедуры


Работает.
20. ipoloskov 162 16.08.17 12:55 Сейчас в теме
У себя сделал так:
1. В форме документа прописал обработчик
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	
	// Обработчик механизма "ДатыЗапретаИзменения"
	ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
	
КонецПроцедуры

2. В Плане видов характеристик РазделыДатЗапретаИзменения добавил предопределенный элемент ПроверкаОТК (если есть возможность, то лучше использовать какой-либо из существующих, об этом ниже)

3. Добавил подписку на событие мт_ПроверитьДатуЗапретаПередЗаписьюДокумента, источники событий - мои документы. Код обработчика:
Процедура мт_ПроверитьДатуЗапретаПередЗаписьюДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
	
	ДатыЗапретаИзменения.ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения);
	
КонецПроцедуры

4. В процедуру ДатыЗапретаИзмененийПереопределяемый.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения добавил строчку
	ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.мт_ПроверкаОТК",	"Дата", "ПроверкаОТК", "Организация");

В настройках пользователя указал дату запрета изменений для раздела "ПроверкаОТК" - вчерашний день.

Минусы данного подхода: в ERP предопределенные элементы ПВХ.РазделыДатЗапретаИзменения слетают при каждом обновлении. Соответственно, после обновления начинаются пляски с бубном по удалению старого элемента и новой настройке даты запрета изменения для пользователей. Поэтому, если есть возможность использовать для своего документа один из существующих разделов дат запрета изменения - используйте его.

Плюсы: стандартная гибкая настройка даты запрета изменений для пользователей в программе.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот