Как запретить изменять документы после 8 часов с момента их создания Обратился ко мне клиент с задачей: Нужно запретить изменение всех видов платежных документов (ПП, РКО, ПКО) спустя 8 часов с момента проведения соответствующего документа
Для реализации этого я использовал Подписку на событие: ПередЗаписьюДокументаДатаЗапретаРедактирования
В конце процедуры обработчика добавил вызов своей процедуры
Вот ее код:
Код 1C v 8.3 Процедура ПроверкаВремениСозданияИИзмененияДокумента(Источник, Отказ)
Если РольДоступна("ПолныеПрава") Тогда
//Все можно
ИначеЕсли Источник.Проведен Тогда //Обрабатывае только Проведенные
ТекДата=ТекущаяДата(); ЧасовРазрешено=24;
Если ТипЗнч(Источник) = Тип("ДокументОбъект.РасходныйКассовыйОрдер") Тогда
ЧасовРазрешено=8;
Если НЕ (ТекДата-Источник.Дата)/60 < ЧасовРазрешено*60 Тогда Отказ=Истина; Конецесли;
ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.ПриходныйКассовыйОрдер") Тогда
ЧасовРазрешено=8;
Если НЕ (ТекДата-Источник.Дата)/60 < ЧасовРазрешено*60 Тогда Отказ=Истина; Конецесли;
ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.ПлатежноеПоручениеВходящее") Тогда
ЧасовРазрешено=8;
Если НЕ (ТекДата-Источник.Дата)/60 < ЧасовРазрешено*60 Тогда Отказ=Истина; Конецесли;
ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.ПлатежноеПоручениеИсходящее") Тогда
ЧасовРазрешено=8;
Если НЕ (ТекДата-Источник.Дата)/60 < ЧасовРазрешено*60 Тогда Отказ=Истина; Конецесли;
КонецЕсли;
КонецЕсли;
#Если Клиент Тогда
Если Отказ Тогда
Сообщить("Прошло более "+Строка(ЧасовРазрешено)+" часов с момента создания документа! Изменение запрещено и документ не может быть записан...", СтатусСообщения.Важное);
КонецЕсли;
#КонецЕсли
КонецПроцедуры
Пока документ не проведен, его можно менять сколько угодно, но после первого проведения и истечения указанного количества часов, документ заблокируется, и при проведении будет выведено сообщение:
Категория:
Документы Как сбросить счётчик нумерации документов или справочников Используйте:
Глобальный контекст:
ОбновитьНумерациюОбъектов (RefreshObjectsNumbering)
Синтаксис:
Код 1C v 8.х ОбновитьНумерациюОбъектов(<Метаданные>)
Параметры:
<Метаданные> (необязательный, НО Если значение параметра не указано, то обновление будет выполнено для всех типов объектов)
Тип:
Массив; Объекты метаданных. Объект метаданного или массив объектов метаданных, для объектов которого будет выполнено обновление. Если значение параметра не указано, то обновление будет выполнено для всех типов объектов.
Описание:
Выполняет обновление номеров в соответствии с номерами, записанными в базе данных. После вызова данного метода все выданные, но не записанные номера, становятся невалидными, т.к. не гарантируется их уникальность. Данный метод разрешено вызывать только администратору системы.
Доступность:
Сервер, толстый клиент, внешнее соединение
Пример:
Код 1C v 8.х //Обновим нумерацию у документа Реализация товаров и услуг
ОбновитьНумерациюОбъектов(Метаданные.Документы.РеализацияТоваровУслуг)
// другие примеры:
ОбновитьНумерациюОбъектов(Метаданные.Документы.ОтчетПроизводстваЗаСмену);
ОбновитьНумерациюОбъектов(Метаданные.Документы.ТребованиеНакладная);
ОбновитьНумерациюОбъектов(Метаданные.Документы.ПриходныйКассовыйОрдер);
ОбновитьНумерациюОбъектов(Метаданные.Документы.РасходныйКассовыйОрдер);
ОбновитьНумерациюОбъектов(Метаданные.Справочники.Номенклатура);
ОбновитьНумерациюОбъектов(Метаданные.Справочники.Абонементы);
По этой теме:
Сбилась автонумерация у документа или справочника с текстовым кодом, что делать? Категория:
1С Общие вопросы - Обычные формы Как в запросе получить Вид (тип) Документа? Столкнулся с задачей, нужно было выбрать все документы по выплате и сгруппировать их по типу документа!
Перелистав все ЖКК и интернет, понял что простого способа получить Вид документа в запросе нет
Пришлось сделать так:
Код 1C v 8.х
Запрос = Новый Запрос;
Запрос.Текст ="
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.РасходныйКассовыйОрдер
| ТОГДА ""Расходный кассовый ордер""
| ИНАЧЕ ВЫБОР
| КОГДА ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
| ТОГДА ""Платежное поручение исходящее""
| ИНАЧЕ ВЫБОР
| КОГДА ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.ДепонированиеОрганизаций
| ТОГДА ""Депонирование""
| ИНАЧЕ ВЫБОР
| КОГДА ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.ПриходныйКассовыйОрдер
| ТОГДА ""Приходный кассовый ордер""
| ИНАЧЕ """"
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ КАК ВидДокумента,
| ВзаиморасчетыСРаботникамиОрганизаций.Регистратор КАК Регистратор,
| ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
|ГДЕ
| ВзаиморасчетыСРаботникамиОрганизаций.Регистратор.Дата МЕЖДУ &ДатаН И &ДатаК
| И ВзаиморасчетыСРаботникамиОрганизаций.ВидДвижения = &ВидДвижения
|ИТОГИ
| СУММА(СуммаВзаиморасчетов)
|ПО
| ВидДокумента
|";
Запрос.УстановитьПараметр("ВидДвижения",ВидДвиженияНакопления.Расход);
Запрос.УстановитьПараметр("ДатаК",Дата("28.02.2010 23:59:59"));
Запрос.УстановитьПараметр("ДатаН",Дата("01.02.2010 0:00:00"));
Результат = Запрос.Выполнить();
Результат = Результат.Выбрать();
Пока Результат.Следующий() Цикл
// ... код обработки...
КонецЦикла;
В 8.2.какой-то версии добавили определение ТИПА
Код 1C v 8.х ГДЕ ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.ВидДокумента)
Категория:
Запросы Выбрать документы за период, установить значение в реквизит табличной части и провести документ Код 1C v 8.х // Необходимо выбрать документы за период по ответственному
// В каждом документе, где в первой строке табличного поля не заполнен реквизит Статья
// заполнить, и провести документ
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходныйКассовыйОрдер.Ссылка
|ИЗ
| Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
|ГДЕ
| РасходныйКассовыйОрдер.Дата МЕЖДУ &ДатаН И &ДатаК
| И РасходныйКассовыйОрдер.Ответственный = &Ответственный";
Запрос.УстановитьПараметр("ДатаН", ЭлементыФормы.НачПериода.Значение);
Запрос.УстановитьПараметр("ДатаК", ЭлементыФормы.КонПериода.Значение);
Запрос.УстановитьПараметр("Ответственный", Ответственный);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
// получим документ для обработки
Док = Выборка.Ссылка.ПолучитьОбъект();
//Проверим заполнение реквизита СтатьяДвиженияДенежныхСредств в первой строке табл. поля
Если ПустаяСтрока(Док.РасшифровкаПлатежа[0].СтатьяДвиженияДенежныхСредств) тогда
Док.РасшифровкаПлатежа[0].СтатьяДвиженияДенежныхСредств=СтатьяЗатрат;
Док.Записать(РежимЗаписиДокумента.Проведение);
Сообщить(Док);
КонецЕсли;
КонецЦикла;
Категория:
Документы Открыть форму документа Код 1C v 8.х
Форма = Документы.РасходныйКассовыйОрдер.ПолучитьФорму();
//возможные варианты получения формы: Параметы ()
//Форма = Документы.РасходныйКассовыйОрдер.ПолучитьФормуВыбора();
//Форма = Документы.РасходныйКассовыйОрдер.ПолучитьФормуНовогоДокумента();
//Форма = Документы.РасходныйКассовыйОрдер.ПолучитьФормуСписка();
//Можно открыть так
Форма.Открыть(); //Открывает форму и делает ее окно активным.
// или так
ФормаСписка.ОткрытьМодально(); //Открывает форму в модальном режиме. Форма открывается для выбора, возвращает выбранное значение (или массив значений, в случае разрешенного множественного выделения в открываемой форме). Если значение не выбрано, возвращается Неопределено.
// Для возврата значения из модальной формы, в форме пишут Закрыть(<Параметр закрытия>); Параметр закрытия формы, открытой в модальном режиме. Это значение будет возвращено как результат метода, открывающего форму модально.
Категория:
Документы