Имя: Пароль:
1C
1С v8
Вопрос про ввод на основании
0 Valiant
 
15.03.12
12:58
Как при вводе на основании перед вводом проверить документ основания на изменения или принудительно записывать перед этим ?
1 Grusswelle
 
15.03.12
12:59
Основание = ссылка, не объект. Так что imho лучше записывать, разумеется.
2 Fish
 
гуру
15.03.12
13:00
Вынос мозга какой-то. А запятые никак не расставить?
3 Wobland
 
15.03.12
13:02
(2) хм.. а не нужны. слова переставить надо бы, да
4 Reset
 
15.03.12
13:04
Явно говорит про открытую форму с изменениями, из которой жмут на основании.
Я как-то предлагал предлагал через ссылку получать форму и проверять модифицировнность, но меня обкакали, поэтому не буду второй раз ;)
5 Fish
 
гуру
15.03.12
13:08
(3) парочку я бы поставил.

По теме. А не проще это оставить на совести вводящего? Или написать инструкцию для пользователей, чтобы они знали, что перед вводом на основании надо жмакнуть кнопочку "Записать", чем извращаться с разного рода проверками? Всё равно найдется дурак, который поменяет что-нибудь уже после ввода на основании. Ведь на все случаи жизни проверки всё равно не напишешь.
6 Valiant
 
15.03.12
13:10
Открыл документ, поменял цену, ввожу на основании этого документа другой документ, как проверить что форма изменена ? У формы нету события "При вводе на основании" ), в том подчиненном документе я уже не могу проверить на модифицированность.
7 Valiant
 
15.03.12
13:11
Вот как раз и надо поставить защиту от дураков )
8 Reset
 
15.03.12
13:12
Fish правильно говорит, ну заставишь ты го записать, создаст он, а потом он возьмет и опять поменяет. Он же "дурак" (с).
Будешь добавлять проверку, а не создан ли на основании, и не давать менять цену? :)
9 Valiant
 
15.03.12
13:13
Это уже отмазки )))
10 Valiant
 
15.03.12
13:14
Задача все равно осталась не решенной )
11 fisher
 
15.03.12
13:14
Можно так попробовать исхитриться - по ссылке получить форму. Это будет открытая форма документа основания (можно для очистки совести проверить на Открыта()).
После этого проверяешь модифицированность и делаешь что хочешь. Или грозно ругаешься или принудительно записываешь.
12 Fish
 
гуру
15.03.12
13:16
(7) Опыт показывает, что на любую защиту найдётся дурак, который эту защиту обойдёт, либо не заметит :)). А загромождать конфу лишними проверками - только тормозить работу базы.

Я не против каких-то примитивных проверок, но, имхо, не зря в типовых такая проверка не реализована. Человек, работающий с документами должен понимать что он делает. И нести ответственность за неправильный ввод данных.

А твой вопрос - это попытка решить административные вопросы техническими методами.
13 fisher
 
15.03.12
13:17
(11) + Я недавно подобным макаром одну хотелку реализовывал - чтобы после проведения дока на основании автоматом закрывалась форма документа-основания :)
14 Valiant
 
15.03.12
13:19
Форма = Основание.ПолучитьФорму("ФормаДокумента");
Форма.Модифицированность() //говорит правду
15 mikecool
 
15.03.12
13:20
проверять в ПередОткрытием формы
16 Valiant
 
15.03.12
13:20
а если несколько открыто форм )))
17 Fish
 
гуру
15.03.12
13:21
(9) Это не отмазки, это реальный опыт. Видел я конфы, в которых были попытки внедрить подобные "защиты от дурака". Документы там открывались и записывались по 5 минут. И всё равно находились идиоты, которые умудрялись сделать что-то, не предусмотренное этими защитами. Так что правильнее просто написать инструкции по вводу на основании и всем пользователям раздать её под подпись.
18 Лирик
 
15.03.12
13:21
(6) Зато у документа вводимого на основании есть событие "ОбработкаЗаполнения", а в типовых конфигурациях есть пример как организовать процедуру проверки модифицированности: при печати из формы проверяет и записывает.
(14) Можешь получить другую форму. Ответ "нет".
19 fisher
 
15.03.12
13:22
(14) Лучше еще Открыта() проверяй на всякий случай.
(16) Несколько форм одного дока можно открыть только спецом задавая ключ уникальности.
20 Valiant
 
15.03.12
13:23
а несколько форм не может быть открыто, в общем:


Процедура ОбработкаЗаполнения(Основание)


       
       Форма = Основание.ПолучитьФорму("ФормаДокумента");
       Форма.Модифицированность();
   

КонецПроцедуры // ОбработкаЗаполнения()

будем считать что работает )
всем спасиба
21 Reset
 
15.03.12
13:23
(18) "Можешь получить другую форму. Ответ "нет"."
Подумал, СП почитал, прежде чем отвечать?
22 Valiant
 
15.03.12
13:23
согласен с (19)
23 Лирик
 
15.03.12
13:24
(21) и подумал и почитал
24 Fish
 
гуру
15.03.12
13:25
(20) Что будешь делать, чтобы запретить менять цену уже после ввода на основании? Допустим я записал док, ввел на основании другой, и в первом поменял цену. Что тогда?
25 Valiant
 
15.03.12
13:27
(24) это уже их дело, мне главное что б в подчиненный документ вышло с учетом изменений основания )
26 Fish
 
гуру
15.03.12
13:28
(25) Так ты не понял. Я меняю основание СРАЗУ ПОСЛЕ создания подчинённого дока. И в чём смысл твоей проверки тогда? Она никак косяк не исключает.
27 fisher
 
15.03.12
13:28
(24) А в чем сложность? Элементарно же делается.
28 Reset
 
15.03.12
13:29
(25) Отмазки. Естьт возможность создать документы с разной ценой? Есть. Задача осталась не решенной ;)
29 Fish
 
гуру
15.03.12
13:29
(27) Напиши как?
30 fisher
 
15.03.12
13:31
(29) Проблема, как я понял - залочить данные еще открытого документа-основания после проведения документа на основании? Мы об этом говорим?
31 Fish
 
гуру
15.03.12
13:37
(30) Не совсем. Проблема немного глубже. Как исключить возможность различных данных в документе-основании и подчинённом. поверь мне, она конечно, решаема, но требует кучи проверок как при открытии, так и при вводе на основании и записи. Мы как-то такое реализовывали. И всё равно находились умники, которые умудрялись накосячить.
простой пример: Есть док основание. Я его записываю, нажимаю кнопку "ввести на основании". НЕ записывая подчинённый документ, меняю док-основание и после этого записываю подчинённый. Есть и другие варианты обхода. Как ты их все разрулишь и предусмотришь?
32 Reset
 
15.03.12
13:38
(30) А если поменяет До проведения ? -) Ну нажал, открылась вторая форма - переключился назад, поменял. Опа.
Лочить сразу при вводе на основании? А если он окажется от ввода (закроет окно)? При закрытии разлочивать, если без проведения? А если создаст на основании, закроет пред окно, снова откроет? Открыто будет доступны (введннного на основании еще нет(не записан)) И тд, и тп
33 Fish
 
гуру
15.03.12
13:39
+(31) В результате мы пришли к выводу, что гораздо проще издать инструкции и бить по рукам нерадивых сотрудников, чем городить сотню ненужных проверок. Тем более, что такие косяки выявляются элементарным отчётом.
34 fisher
 
15.03.12
13:39
(31) Количество вариантов которые нужно "зарезать" вполне себе конечно. Ничего военного на самом деле. Назови "незарезываемый".
35 Fish
 
гуру
15.03.12
13:42
(34) Никто не говорит, что оно бесконечно. Но если у тебя на основании одного дока может быть введено 10 подчинённых, тогда все эти проверки "на дурака" начинают серьёзно тормозить процедуры проведения. Особенно когда работает 150 человек и одновременно проводит кучу документов.
36 Конфигуратор1с
 
15.03.12
13:43
(31) (33) +100500. Когда работал с 1с еше как пользователь, сломал нечаянно хитромудрую защиту на доступ к папке, потому что не знал, что там есть защита)))
37 fisher
 
15.03.12
13:44
(33) Это совершенно отдельная тема. Ессно любая система должна быть разумно сбалансирована в плане защиты от дурака. Далеко не всегда имеет большой смысл резать все ошибочные варианты, если результат ошибки несложно и своевременно выкупается. Но относительно частые промашки пользователей всегда имеет смысл нейтрализовать программно.
38 fisher
 
15.03.12
13:45
(37) к (35)
39 Fish
 
гуру
15.03.12
13:46
(37) Вот поэтому ТС и надо подумать, а стоит ли делать эту проверку в принципе :)))
40 Fish
 
гуру
15.03.12
13:49
З.Ы. Как резюме: чем проще система, и чем меньше в ней подобного рода "проверок", тем более безглючно и надёжно она работает. Гораздо эффективнее учить пользователей правильно пользоваться программой.
41 fisher
 
15.03.12
13:50
Это уже его проблемы. Мне было интересно чисто технические моменты обсудить :)
А защита от дурака часто слишком завязана на конкретную специфику, чтобы можно было общие рекомендации плотно задвигать...
42 DS
 
15.03.12
13:51
(40) щетаю, защита от дурака должна присутствовать.
43 Fish
 
гуру
15.03.12
14:06
(41) Это были общие рекомендации применительно к конкретному случаю. Задача в (0) решаема, конечно, но очень долгим, громоздким и затратным с точки зрения производительности способом. А все те способы, которые здесь предлагались, проблему в (0) не решают.
44 DS
 
15.03.12
14:12
(43) "защита от дурака" всегда громоздка, затратна и объемна как по времени так и по коду.
45 Лирик
 
15.03.12
14:18
А вся то байда - запретить одновременно открывать более одной формы документа основания, и при создании подчиненного документа запретить изменение основания. Блокировать объект при СозданииНаСервере. Перед этим проверять мож кто другой его заблокировал. В обработкезаполнения подчиненных теже проверки. (ИМХО)
46 Fish
 
гуру
15.03.12
14:23
(45) Почитай внимательно (32). Подумай ещё :))
47 Лирик
 
15.03.12
15:22
(46) Подумал. Ввожу на основании, при заполнении подчиненного беру объект который принадлежит вызвавшей форме (она, как помним, одна в этот момент времени), проверяю модифицированность, записываю (провожу) основание, взвожу флаг запрещающий менять объект основание. Все, вопросы "Вы хотите записать/провести основание" добавить по вкусу.
48 Лирик
 
15.03.12
15:24
+(47) вернулся он в форму основания, а ему "фиг поменяешь".
49 Лирик
 
15.03.12
15:24
Задача вполне решаемая, причем малой кровью.
50 fisher
 
15.03.12
17:03
Я тоже не вижу ничего особо военного с точки зрения сложности и ресурсоемкости.
Но и горожу подобные огороды редко. Скорее не в качестве защиты от дурака, а когда не совсем стандартные механизмы приходится реализовывать и при этом гарантировать целостность данных.
51 Fish
 
гуру
15.03.12
17:14
(50) Тут дело не в том, что это так уж сложно реализовать (хотя и не так просто, как кажется на первый взгляд :). Просто когда начинается такая практика программных "защит от дураков", одним документом это не ограничивается. Руководство понимает, что проще напрячь программиста, чем дать по рукам нерадивым сотрудникам, и постепенно эти "защиты" накладываются друг на друга, и можно такие проблемы поиметь, что не дай бог. Я согласен, что пара тройка примитивных проверок "на дурака" должна быть, но главное, этим сильно не увлекаться.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший