Стандартные доработки. Запрет изменения документов “ЗаказовПокупателей”, по которым есть движения.

08.04.11

Разработка - Универсальные функции

Стандартные доработки.  Запрет изменения документов “ЗаказовПокупателей”, по которым есть движения.

Эта статья описывает процесс доработки типовых 1С конфигураций, для добавления возможности запретить редактировать документы, на основании которых другими документами уже сделаны движения в регистрах накопления.  Это позволяет предотвратить часть ошибок, возникающих из-за действий пользователя задним числом.

Молочников Олег Spb. 2011.

Стандартные доработки.  Запрет изменения документов “ЗаказовПокупателей”, по которым есть движения.

 

Эта статья описывает процесс доработки типовых 1С конфигураций, для добавления возможности запретить редактировать документы, на основании которых другими документами уже сделаны движения в регистрах накопления.  Это позволяет предотвратить часть ошибок, возникающих из-за действий пользователя задним числом.

 

1.       В Общий модуль ”Полные права” добавьте следующую функцию:


Функция ЗаказыПокупателя_СуществуютСсылки(ЗаказПокупателя) Экспорт
    Если 
ЗаказПокупателя =Документы.ЗаказПокупателя.ПустаяСсылка() Тогда
        Возврат Ложь;
    КонецЕсли;

   
Запрос = Новый Запрос();
   
Запрос.УстановитьПараметр("ЗаказПокупателя", ЗаказПокупателя);

   
ТипЗначения = ТипЗнч(Документы.ЗаказПокупателя.ПустаяСсылка());
   
Счетчик=0;
    Для Каждого
РегистрНакопления Из Метаданные.РегистрыНакопления Цикл
        Для Каждого
РеквизитРегистра Из РегистрНакопления.Измерения Цикл
            Если
РеквизитРегистра.Тип.СодержитТип(ТипЗначения) Тогда
                Если
Счетчик>0 Тогда
               
Запрос.Текст = Запрос.Текст + "
                |ОБЪЕДИНИТЬ ВСЕ
                |"
               
КонецЕсли;
               
Запрос.Текст = Запрос.Текст + "
                |ВЫБРАТЬ
                |   ИСТИНА
                |ИЗ
                |   РегистрНакопления."
+ РегистрНакопления.Имя + " КАК " + РегистрНакопления.Имя + "
                |ГДЕ
                |   "
+ РегистрНакопления.Имя + "." + РеквизитРегистра.Имя + " = &ЗаказПокупателя
                | И "
+ РегистрНакопления.Имя + ".Регистратор <> &ЗаказПокупателя
                |"
;
               
Счетчик=Счетчик+1;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    Возврат НЕ
Запрос.Выполнить().Пустой();

КонецФункции

2.      В  модуль  формы документа в текст функции ”ПриОткрытии()” добавьте следующие строки:

  Если ПолныеПрава.ЗаказыПокупателя_СуществуютСсылки(Ссылка) Тогда
       
ЭтаФорма.ТолькоПросмотр=Истина;
    КонецЕсли;

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    5410    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    46333    dimanich70    83    

164

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6847    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    57378    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8615    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    22770    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
0. milkers 3008 07.04.11 13:16 Сейчас в теме
Стандартные доработки. Запрет изменения документов “ЗаказовПокупателей”, по которым есть движения.

Эта статья описывает процесс доработки типовых 1С конфигураций, для добавления возможности запретить редактировать документы, на основании которых другими документами уже сделаны движения в регистрах накопления. Это позволяет предотвратить часть ошибок, возникающих из-за действий пользователя задним числом.


Перейти к публикации

1. пользователь 07.04.11 13:16
Сообщение было скрыто модератором.
...
7. milkers 3008 07.04.11 13:58 Сейчас в теме
(1)(2) Отслеживается не проведение этого документа а наличие ссылок на этот документ в проводках других документов.
(3) Дата запрета редактирования не отменяет необходимость запрета редактирования сегодняшнего заказа, если на основании этого заказа сделаны другие документы, например реализация.
Пусть сначала распроводят реализацию, потом правят заказ.
(4) Есть и другие важные реквизиты, которые м.б. нельзя менять (Например договор). Их состав строго индивидуален. В примере, для простоты, блокируется все.
(5) Наличие программных изменений для меня уже форсмажер. С таким я разбираюсь индивидуально.
8. пользователь 07.04.11 14:04
Сообщение было скрыто модератором.
...
9. milkers 3008 08.04.11 13:06 Сейчас в теме
(8) Ну, несмотря на объяснения, плюс ты все равно зажал. :D
10. пользователь 08.04.11 13:09
Сообщение было скрыто модератором.
...
2. пользователь 07.04.11 13:20
Сообщение было скрыто модератором.
...
3. пользователь 07.04.11 13:22
Сообщение было скрыто модератором.
...
4. пользователь 07.04.11 13:27
Сообщение было скрыто модератором.
...
5. Поручик 4598 07.04.11 13:33 Сейчас в теме
Про программное изменение заказа (какой-нибудь обработкой, например) забыли оба. Надо добавить соответствующий код или в модуль объекта или в подписку на событие.
kuza_87; Androsovych; +2 Ответить
6. пользователь 07.04.11 13:50
Сообщение было скрыто модератором.
...
11. y22-k 255 08.04.11 16:20 Сейчас в теме
Подпиской не судьба сделать?, а по поводу доступности кнопок, Ест дата запрета
влеплю минус.
Корежить типовую там где можно без этого обойтись.
12. milkers 3008 08.04.11 16:41 Сейчас в теме
(11) По поводу подписки. При групповой обработке заказов покупателей это очень сильно замедлит работу системы. Данный дополнительный контроль актуален именно при ручной попытки изменить документ. Так, что забирай минус обратно :D .
По поводу даты запрета: Дата запрета редактирования не отменяет необходимость запрета редактирования сегодняшнего заказа, если на основании этого заказа сделаны другие документы, например реализация. Пусть сначала распроводят реализацию, потом правят заказ.
13. y22-k 255 08.04.11 17:33 Сейчас в теме
(12) Очень Сильно Это сколько?
Можно просто настроить автоматическую синхронизацию ЗАКАЗ - РТУ или в обратную сторону. или использовать Схему ЗАКАЗ - Корректировка -РТУ
14. milkers 3008 08.04.11 17:47 Сейчас в теме
(13) Зависит о количества строк в документе и количества документов сделанных на основании этого заказа или документов имеющих резерв по этому заказу. Но в большой базе даже простейшее групповое изменение всех заказов может занять несколько суток, так как для каждого заказа он будет динамически строить запрос по всем регистрам накопления и время выполнения каждого запроса может достигать нескольких секунд. В совсем огромных базах мой алгоритм (без изменений), возможно, будет излишне замедлять даже открытие одного заказа.
15. milkers 3008 08.04.11 17:49 Сейчас в теме
(13) А на счет автоматической синхронизации, никак не могу понять, что Вы имеете в виду.
16. Sintson 414 13.04.11 09:46 Сейчас в теме
Решали подобную проблему, Ваш вариант очень замедлит работу системы, особенно в части групповой обработки данных, а также, как показывает опыт на больших базах часто возникают коллизии при таком подходе.
Подобным уже откомментировали, оказывается, так что не пинайте.
17. simuljakr 207 14.04.11 09:26 Сейчас в теме
(16) А как Вы решили подобную проблему, если не секрет ?
18. milkers 3008 14.04.11 10:23 Сейчас в теме
(16) Так как вы не указали кому конкретно вы отвечаете, повторюсь что моя реализация ни как не повлияет на групповую обработку, так как реализована в момент интерактивного открытия пользователем формы. Рискну предположить, что и коллизий мой метод вызывать не должен.
19. Sintson 414 14.04.11 17:36 Сейчас в теме
(18) Прошу прощения, я не разобрался в какой момент времени вызывается тотальная проверка на движения документа.

(17) Запретили изменять проведенный документ пользователям без полных прав.
20. milkers 3008 14.04.11 17:54 Сейчас в теме
(18) Этот вариант хуже, так как на этого пользователя сваливается дополнительная нагрузка.
21. wwizard 7 29.02.12 23:26 Сейчас в теме
22. 1c-intelligence 13095 30.08.12 10:32 Сейчас в теме
Способ хорош простотой своей реализации, но есть ряд вопросов/предложений:

1. ЭтаФорма.ТолькоПросмотр = Истина оставляет доступными некоторые кнопки на командных панелях. Например, кнопки заполнения ТЧ. При этом документ удастся записать, т.к. при закрытии форма спросит "Записать?";
2. Если типовое решение используется нормально, то используются также документы "КорректировкаЗаказаПокупателя", "ИзменениеЗаказаПокупателя". С их помощью удастся внести изменения.
3. Часто есть потребность менять какие-то реквизиты документа или его ТЧ, не меняя при этом содержательной части (комментарий, ответственный, напомнить о событии, подразделение, дата оплаты и т.д.). Ваш метод такие изменения тоже запретит.

Я делал подобное для заказов поставщику, там было так:
1. Подписка ПриЗаписи для регистра накопления ЗаказыПоставщикам (ПриЗаписи, потому что записываемый набор уже в БД и читается запросом);
2. В обработчике подписки просто проверяются остатки регистра по этому заказу.
3. Если остатки отрицательные, ставится Отказ.

В чем смысл:
1. Работает от любого документа (сам заказ, корректировка, ПТиУ, и т.д.);
2. Контролирует как обычное превышение, так и расхождение аналитики (как правило - цена или ставка НДС). В заказе цена стоит 100 р., в ПТиУ указали 101 - все, система фиксирует отрицательный остаток, т.к. контроль идет по всем измерениям;
3. Можно менять любые реквизиты документа, запретов нет - но при проведении выполняется контроль. Т.е. пользователь наколбасил что-то, пытается провести, а ему сообщение выходит, типа вот по такому набору полей у тебя превышение.
4. Пользователь может увеличивать объемы в заказе, т.к. превышения при этом не возникает. Но это считается нормальным, т.е. нет смысла это запрещать.

Такое же решение работает для заказа на производство и внутреннего заказа. По заказу покупателя не делал, т.к. потребности не было.
lavash67; Polzavatel; katavy; kuza_87; sergos3331; +5 Ответить
23. Polzavatel 25.03.14 08:46 Сейчас в теме
Подскажите, как запретить в "Реализации товар и услуг" изменение Менеджерами (роль) документа, если в статусе документа кладовщик (роль) установил статус "Отгружен".
Для отправки сообщения требуется регистрация/авторизация