Имя: Пароль:
1C
1С v8
Запретить интерактивную запись Контрагента если не выбран основной договор
0 1Сергей
 
17.04.13
07:34
Т.е. у пользователя не должно быть возможности записать элемент справочника Контрагенты, если не указан основной договор. С другой стороны Договора контрагента - это подчиненный справочник. Значит невозможно добавить договор в незаписанного контрагента.
Как сделать? интересуют и управляемая и обычная формы элемента
1 чувак
 
17.04.13
07:35
Разве основной договор не реквизит контрагента?
2 IamAlexy
 
17.04.13
07:36
(0) проверяй заполненность реквизита "Основной договор"

отсечь новые элементы можно через параметры.ключ.пустая()
3 shuhard
 
17.04.13
07:37
(1) в 1С Бордель это не так
4 1Сергей
 
17.04.13
07:37
(2) и? у пользователя будет возможность создать контрагента без договоров, закрыть и забыть
5 a_alenkin
 
17.04.13
07:38
Делай в транзакции
6 1Сергей
 
17.04.13
07:39
(5) в какие моменты создавать транзакцию, фиксировать/отменять?
7 Godofsin
 
17.04.13
07:39
(5) +
8 Sammo
 
17.04.13
07:39
Создавай основной договор автоматически и привязывай его сразу.
9 cw014
 
17.04.13
07:40
Сам понимаешь абсурдность своего вопроса? В типовых конфах основной договор создается автоматически, после записи нового контрагента, и проставляется так же. Если же элемент не новый - тогда программно запрещай записывать элемент, если реквизит незаполнен.
10 1Сергей
 
17.04.13
07:40
(9) >> В типовых конфах основной договор создается автоматически

Это в БП?
11 IamAlexy
 
17.04.13
07:41
(10) это где то в паралельной вселенной...
12 MSII
 
17.04.13
07:42
(10) И в УТ 10 тоже, в 11 не помню.
13 1Сергей
 
17.04.13
07:43
да, ладно...
14 Рэйв
 
17.04.13
07:44
Процедура ПередЗаписью()
   Если Не ЗначениеЗаполнено(ОсновнойДоговорКонтрагента) Тогда
    Сообщить("Не выбран основной договор.")
    Отказ=Истина;
    Возврат;
   КонецЕсли;
КонецПроцедуры;
15 MSII
 
17.04.13
07:45
(13) В УТ точно.
16 1Сергей
 
17.04.13
07:46
(14) умный, да?
17 1Сергей
 
17.04.13
07:47
(15) В БП для Казахстана нет. А они очень похожи с российской
18 Sammo
 
17.04.13
07:48
(14) А если новый?
19 MSII
 
17.04.13
07:53
(18) А нечего базу засорять новыми контрагентами, хватит и имеющихся.
20 1Сергей
 
17.04.13
07:54
Вот если бы можно было как-то узнать, записывается элемент с закрытием формы или без, в процедуре ПередЗаписью, то проблема бы решилась.
21 Лефмихалыч
 
17.04.13
07:54
(0) невозможное возможно, если правильно кастовать кровавый спелл ПолучитьСсылкуНового()
22 1Сергей
 
17.04.13
07:55
(21) думал об этом, но пока не придумаю как реализовать
23 Лефмихалыч
 
17.04.13
07:57
(22) в чем проблема-то?
24 1Сергей
 
17.04.13
07:59
(23) сама логика какая?
там пока ЭтоНовый() = Истина, закладка "Счета и договоры" вообще не активна
25 IamAlexy
 
17.04.13
07:59
(23) боязно.. слишком могуча сила... а ну как она вырвется на свободу и начнет причинять боль и унижение всем вокруг ?
26 Рэйв
 
17.04.13
08:00
(18)Ну..Тогда добавить услови  
Если НЕ Ссылка.Пустая() Тогда
27 1Сергей
 
17.04.13
08:00
(26) см (4)
Кароче, читай ветку, не тупи
28 dmpl
 
17.04.13
08:00
(20) Ну дык обработай событие формы, будь мужиком!

(22) Дык ты владельца договора на эту ссылку регистрируй и записывай перед записью контрагента, а потом уже контрагента записывай. Правда, придется регулярно проверять на договоры без контрагентов...

(24) Дык сделай активной, всего 1 строчка кода, причем, скорее всего, ее просто надо закомментировать...
29 Рэйв
 
17.04.13
08:03
(27)
форму тогда не давай закрывать пока не выберет договор
30 Рэйв
 
17.04.13
08:03
а больше никак
31 Лефмихалыч
 
17.04.13
08:04
(25) ну дык... чтобы быть одинэсником, надо иметь яйцы
32 Рэйв
 
17.04.13
08:04
только создавать стандартный "Основной договор" самому при записи
33 1Сергей
 
17.04.13
08:05
(29) как тогда интерактивно закрыть форму без записи?
34 Лефмихалыч
 
17.04.13
08:05
(29) при таком раскладе надо еще в форму договора чо-нить наговнокодить, чтобы создать новый было категорически нельзя, а потом наблюдать, как юзер бьется в вечном цикле рекурсивного ада
35 Рэйв
 
17.04.13
08:07
(33)А никак. Пусть делают договор, записывают и тогда могут закрыть

А ты проверяй пока Ссылка.ОсновнойДоговор не заполнено - флаг в руки и наразворот
36 Рэйв
 
17.04.13
08:08
ну, только надо как то обработать отказ от ввода ..А то навечно зависнут)
37 Лефмихалыч
 
17.04.13
08:08
Я вообще не понимаю смысла в задаче. Зачем создавать контрагента, если договора с ним нет? Если договор есть, то достаточно организационных мер - назначить персонально ответственных за создание контрагентов и им в инструкцию прописать, что создавать меют право только, по подписанному договору и при создании контрагента создавать обязаны еще и договор.
38 shuhard
 
17.04.13
08:09
(37) окстись
39 1Сергей
 
17.04.13
08:10
(37) казалось бы, простая задача, а упирается в банальные особенности платформы :)
40 Лефмихалыч
 
17.04.13
08:10
(38) аргументы?
41 shuhard
 
17.04.13
08:14
(39) плохому танцору платформа мешает (с)
42 ОбычныйЧеловек
 
17.04.13
08:15
(39) И каким боком тут особенности платформы? В том, что ты не можешь решить элементарную задачу - платформа не виновата... Кто тебе мешает сделать свою форму ввода нового контрагента (довольно простую форму где будет наименование контрагента (+осн.параметры), наименование договора(+осн.параметры) и при записи создавать и контрагента и осн.доровор)
43 Sammo
 
17.04.13
08:15
Либо сделай отдельную общую форму, которая будет содержать данные по контрагенту и договору. И при закрытии (записи) из этой формы создавай/записывай сразу и контрагента и договор.
А форма контрагента вообще чтобы не открывалась
44 Лефмихалыч
 
17.04.13
08:18
(39) дело в тебе, а не в платформе
45 dmpl
 
17.04.13
09:01
(39) Да ни во что она не упирается.
46 В тылу врага
 
17.04.13
09:03
да никак, запрещать юзать в документах единственный и правильный выход
47 В тылу врага
 
17.04.13
09:04
(44) давай без личностей, это не решаемая задача, а он не виноват
48 1Сергей
 
17.04.13
09:05
Сделал так

Процедура ПриЗаписи(Отказ)

   Если Не ЗначениеЗаполнено(ОсновнойДоговорКонтрагента) Тогда
       
       ВыборкаДоговоров = Справочники.ДоговорыКонтрагентов.ВыбратьИерархически( , Ссылка);
       Если ВыборкаДоговоров.Следующий() Тогда
           Сообщить("Не выбран Основной договор");
           Отказ = Истина;
           Возврат;
       КонецЕсли;
       
       Если Вопрос("У контрагента нет договоров. Создать новый?", РежимДиалогаВопрос.ДаНет) <> КодВозвратаДиалога.Да Тогда
           Отказ = Истина;
           Возврат;
       КонецЕсли;
       
       ФормаЭлементаДоговор = Справочники.ДоговорыКонтрагентов.ПолучитьФормуНовогоЭлемента();
       ФормаЭлементаДоговор.Владелец = Ссылка;
       ФормаЭлементаДоговор.ОткрытьМодально();
       Если ЗначениеЗаполнено(ФормаЭлементаДоговор.Ссылка) Тогда
           ОсновнойДоговорКонтрагента = ФормаЭлементаДоговор.Ссылка;
           Записать();
       Иначе
           Отказ = Истина;
           Возврат;
       КонецЕсли;
       
   КонецЕсли;
49 butterbean
 
17.04.13
09:05
(47) толсто
50 butterbean
 
17.04.13
09:07
(48) кошмар
51 1Сергей
 
17.04.13
09:07
(50) это ты из-за диалогов в транзакции?
52 dmpl
 
17.04.13
09:13
(51) Не только. Надо еще на ОбменДанными.Загрузка = Истина проверять, как минимум. И директивы препроцессора расставить.
53 1Сергей
 
17.04.13
09:18
про обмен данными согласен. Но, про какие директивы ты говоришь? это обычная форма