Попутно два решения, которые дают возможность обычным пользователям изменять некритичные реквизиты документов в закрытом периоде.
Руководство поставило задачу: дать пользователям возможность изменять в закрытом периоде реквизиты, которые не влияют на движения регистров. Это, к примеру, такие реквизиты как Комментарий, Дата и Номер входящего документа, Ответственный и т.д. В итоге получилось два решения, которые и представляю Вам. Может кому-то и пригодится.
Разрабатывалось для УПП. Проверено для «Комплексной автоматизации».
ВАРИАНТ ПЕРВЫЙ. Внешняя подключаемая обработка заполнения табличных частей.
Собственно, задание было реализовать функционал через меню «Заполнить», которое присутствует во всех табличных частях. Поэтому написал внешнюю «Обработку заполнения табличных частей».
Но не тут-то было. В закрытом периоде пункты меню «Заполнить» оказались недоступны.
Пришлось разбираться. Оказывается, что для формы, открытой в режиме «Только чтение», элементы, с установленным свойством «ИзменяетДанные» в значение «Истина», становятся недоступными.
Обойти эту «фичу» без изменения конфигурации, к сожалению, не получилось. Но изменения получились минимальными. Нужно добавить всего одну строчку кода.
Способ заставить работать «Обработку заполнения табличных частей» в закрытом периоде.
Для этого надо выполнить два пункта:
1. В общий модуль УниверсальныеМеханизмы, в функцию ПолучитьДеревоКнопокЗаполненияТабличныхЧастей,
ПОСЛЕ строки:
ДобавитьСтрокуВДеревоКнопок(СтрокаПодменю, «ЗаполнениеТЧ»+НомерКнопки, ТипКнопкиКоманднойПанели.Действие, ВыборкаДействий.Наименование, Действие, СтруктураРасшифровки, , , , , Истина);
ДОБАВИТЬ одну строку:
СтрокаПодменю.Строки[СтрокаПодменю.Строки.Количество()-1].ИзменяетДанные = Найти(СокрЛ(ВыборкаДействий.Наименование), «*») <> 1; // ДОБАВЛЕНА 1стр. (MTV 31.03.2012)
2. При регистрации обработки, в табличной части диалога «Регистрация внешней обработки заполнения табличных частей«, в колонке «Представление кнопки«, первым символом в строке должен быть символ «*» (звездочка). Смотри скриншот №1.
Можно выбрать и другой символ, при условии соответствующего изменения в добавляемой строке кода (пункт 1).
ВАРИАНТ ВТОРОЙ. Внешняя подключаемая печатная форма. (Без изменения конфигурации.)
Если нет желания вносить изменение в конфигурацию, то для реализации заданного функционала можно подключить предлагаемую внешнюю печатную форму «Изменение реквизитов в закрытом периоде». В этом случае изменять конфигурацию не нужно.
Выкладываю оба варианта — выбирайте, какой больше понравится. В архиве находятся обе обработки (обработка заполнения табличных частей и внешняя печатная форма). А так же текстовый файл с описанием вносимого изменения.
В обработках реализовано изменение следующих реквизитов: Комментарий, НомерВходящегоДокумента, ДатаВходящегоДокумента, Ответственный. При желании можно легко убрать или добавить нужные реквизиты.
В представленных обработках, при записи изменений используется следующая конструкция:
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать(РежимЗаписиДокумента.Запись);
Таким образом происходит только запись документа без перепроведения. То есть движения документа (записи в регистрах) не изменяются.
А УниверсальныеПодборИОбработкаОбъектов чем плоха?
(1) KonstB, я категорически против того, чтобы давать в руки обычным пользователям такие обработки, как УниверсальныеПодборИОбработкаОбъектов 🙂
Моя обработка позволяет изменять только фиксированные, разрешенные, некритичные реквизиты. И сделать это можно прямо из документа, а не искать обработку, потом в ней долго выбирать нужный документ и т.д…. Вобщем довольно долго и не удобно.
(2)
Это конечно, лично мое мнение, но по моему легче подправить УниверсальныеПодборИОбработкаОбъектов (что можно менять, а что нет обычным пользователям, а долго выбирать нужный док тоже подправить можно) + если надо у 100 документов поменять не критичный реквизит… Но это лично мое мнение.
(3) KonstB,
Если надо у 100 документов поменять реквизит на какое-то одно значение, то да — УниверсальныеПодборИОбработкаОбъектов в руки.
А если только, к примеру, у трех документов из из всей кучи надо изменить к примеру «Номер входящего документа» и этот номер в каждом документе разный, то мое решение удобнее. Именно для таких ситуаций и применяю.
Насколько я понял, меняются реквизиты НЕ КРИТИЧНЫЕ, т.е. ссылочная целостность остаётся неизменной. Ну, номер документа можно изменить, а вот дату документа уже нельзя? Ведь при этом должна будет сдвинуться запись в регистре.
И до какой степени можно изменить табличную часть документа? Как всё это будет связано с изменением записей в регистрах? Они будут корректироваться в соответствии с изменениями?
Но, кстати, в любом случае, второй вариант (без изменения конфигурации) предпочтительнее, т.к. меньше возни в последующем, если, конечно, не ставить только цель на зарабатывании при обновлении конфигурации.
А прописывается эта возможность изменения во всех документах, надеюсь, или есть какие ограничения?
(5) Boroda,
Под некритичными реквизитами подразумеваются такие реквизиты, изменение которых не влияет на движения регистров при перепроведении документа.
В представленных обработках, при записи изменений используется следующая конструкция:
Таким образом происходит только запись документа без перепроведения.
То есть движения документа (записи в регистрах) не изменяются.
Интересная вещь… А на БП пойдет, никто не проверял?
В описании хорошо сказано.Впринципе с пользователям давать уныверсальную подбор и обработку ето чересчур и до ничего хорошого ето не привидет.Обработка для меня супер актуальная и супер нужная сейчас денег нет как будут обязательно скачаю.Автору огромное спасибо, так держать.
Я бы вообще обычным пользователям не давала подобные обработки а то поменяю а ты голову ломай
(10) AB3012, плюсую.
Заполнение ТЧ не произведено!
Метод объекта не обнаружен (ДокументВЗакрытомПериоде)
Такая вот ошибка подскажите как ето дело побороть и заставить работать
(13) electronik,
Какая у вас конфигурация?
Разрабатывалось для УПП. Проверено для «Комплексной автоматизации».
Если конфигурация другая, то придется отключить проверку, что Документ находится в закрытом периоде.
Для этого в модуле объекта надо поправить строку № 23:
Вместо
ДокВЗакрытомПериоде = НастройкаПравДоступа.ДокументВЗакрытомПериоде(Объект);
Надо написать
ДокВЗакрытомПериоде = Истина;
Конфигурация УТ 10 Но и после
«Если конфигурация другая, то придется отключить проверку, что Документ находится в закрытом периоде.
Для этого в модуле объекта надо поправить строку № 23:
Вместо
ДокВЗакрытомПериоде = НастройкаПравДоступа.ДокументВЗакрытомПериоде(Объект);
Надо написать
ДокВЗакрытомПериоде = Истина;»
возникает следуюшая ошибка
Редактирование данных этого периода запрещено. Изменения не могут быть записаны…
Не удалось записать измененные реквизиты:
Ошибка при вызове метода контекста (Записать)
(15) electronik,
У меня нет под руками УТ 10. Проверить не смогу. Скорее всего В УТ 10 эта обработка и не будет работать под обычным пользователем (хотя под пользователем с полными правами работать скорее всего должна).
Надо допиливать… Но времени на это сейчас просто нет. Занят очень.
Еще раз напомню, что Разрабатывалось для УПП. Проверено для «Комплексной автоматизации». На других конфигурациях не гарантируется корректное функционирование (скорее всего надо будет адаптировать).
(16)Ясно и на том Спасибо будем разбираться с проблемой сами
Автор, непонятно, ты же сам себя обманываешь: записывая документ, ты меняешь как дату изменения документа (кто и когда поправил), так и версию документа.
Идя на поводу вот таких руководителей — приводишь базу в негодность. И сам же и виноват потом будешь, да и не восстановишь уже ничего.
Для таких, как у тебя, хотелок — есть свойства и категории, т.е. отдельно подключаемые справочники и регистры, не влияющие на проведение, куда заноси всю динамическую информацию, связанную с документами, и меняй как хочешь.
А у тебя наизменяют через некоторое время так, что будешь все документы восстанавливать.