![]() |
![]() |
|
v7: Нужен совет, как реализовать | ☑ | ||
---|---|---|---|---|
0
bestship
15.11.15
✎
11:53
|
Подскажите, как правильно сделать такую штуку: У меня в Спр.Договоров есть статус договора (активный/закрытый) и дата статуса. Соответственно, хотелось бы сделать чтобы была проверка у всех документов и пользователей (по правам или интерфейсу) на статус договора. Т.е. если договор закрытый, то этот договор выбрать в документ нельзя.
|
|||
1
ДенисЧ
15.11.15
✎
11:56
|
Проверка при выборе договора не катит?
|
|||
2
Amra
15.11.15
✎
11:56
|
Самое простое - в форме выбора договора при открытии устанавливай отбор, чтобы закрытые договора не отображались в списке
|
|||
3
bestship
15.11.15
✎
11:59
|
Ребята, я бух, не программер, поэтому катит / не катит - это не тот вопрос))).
Конечно, методом тыка я могу добиться желаемого, но хотелось бы сохранить 2-3 дня для других задач. Поэтому прошу подсказать, взможно с каким-нибудь куском кода в качестве примера, а дальше я соображу. |
|||
4
Смотрящий
15.11.15
✎
12:00
|
Процедура ОбработкаВыбораЗначения(Объект, ЭлементДиалога, Флаг)
Если ЭлементДиалога = "Договор" Тогда Если Объект.Статус = <ТвойСтатусЗакрытияДоговора> Тогда Предупреждение("Договор закрыт!!!", 10); Флаг = 0; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
5
ДенисЧ
15.11.15
✎
12:01
|
(3) Кусок кода будет в обмен на кусок денег ))))
а вообще - это задача программиста, а не буха. |
|||
6
Смотрящий
15.11.15
✎
12:01
|
(5) Какой ты меркантильный кю ...
|
|||
7
ДенисЧ
15.11.15
✎
12:02
|
(6) Ещё какой...
|
|||
8
bestship
15.11.15
✎
12:05
|
(2) Но договора, в большинстве, стоят по умолчанию, как основные, в т.ч. и закрытые (((. Их много и приходится выцеплять и исправлять в ручном режиме. А текучка давит.
(5) То что есть задачи для ... - это не значит что этот ктото есть в наличии. А дистанционно - 99% пустословов. Поэтому приходится учиться самому. |
|||
9
bestship
15.11.15
✎
12:09
|
(4) Вопрос: данный код я ставлю в доки или это можно привязать в Спр.договоров, чтобы глобально было по всем докам и элементам диалога "договор"?
|
|||
10
spectre1978
15.11.15
✎
12:12
|
Если у вас ТиС, то вы можете дописать "ругань" на неправильный договор в глобальнике, в процедуру глПриИзмененииДоговора (). И я бы не делал два реквизита, а сделал один периодический - Действует.
Если Договор.Действует.Получить (ДатаДок)=1 Тогда все нормально Иначе ругаемся, обнуляем реквизит договора КонецЕсли |
|||
11
Горогуля
15.11.15
✎
12:13
|
(9) ОбработкаВыбораЗначения. ВыбораЗначенияОбработка, Обработка выбора. Выбора
|
|||
12
Смотрящий
15.11.15
✎
12:14
|
(9) В документы.
Если Объект.Статус = <ТвойСтатусЗакрытияДоговора> Тогда замени на Если (Объект.Статус = <ТвойСтатусЗакрытияДоговора>) и (Объект.ДатаЗакрытия >= ДатаДок) Тогда Соответственно код будет решать задачу отклонения выбора закрытого договора пользователем. Если есть договора закрытые и прописанные как основные, то они обычно выставляются при первичном выборе контрганета - надо лопатить код в этом случае, чтоб не давало выбрать контрагента |
|||
13
bestship
15.11.15
✎
12:28
|
(10) Один мне нельзя, у меня интернет-услуги, поэтому там статусов аж 5
У меня Комплекс (12) Фокус в том, что мне блокировать выбор Контра нельзя, т.к. Юр.лицо может быть одно, а договора быть закрыты по линку, допустим год назад, а сейчас они опять подключились и под этим юр. делается новый договор. Поэтому идеально проверять статус договора |
|||
14
bestship
15.11.15
✎
12:29
|
(10) Один мне нельзя, у меня интернет-услуги, поэтому там статусов аж 5. У меня Комплекс, не ТиС.
(12) Фокус в том, что мне блокировать выбор Контра нельзя, т.к. Юр.лицо может быть одно, а договора быть закрыты по линку, допустим год назад, а сейчас они опять подключились и под этим юр. делается новый договор. Поэтому идеально проверять статус договора |
|||
15
Смотрящий
15.11.15
✎
12:32
|
Ну смотри.
Есть контр Рога и Копыта, есть у него основной договор, допустим договор единственный, который закрыт. При первичном выборе такого контра в документ, комплексная, закрытый договор автоподставит в документ. В обход процедуры выбора из (4). Что делаешь в этом случае ? |
|||
16
Горогуля
15.11.15
✎
12:32
|
(13) тебе говорят о том, что договор может самовыбраться по изменении контрагента
|
|||
17
bestship
15.11.15
✎
12:40
|
(15) Сейчас создается новый договор и в ручном режиме меняю его как основной. Т.к. если Осн. становится "закрытым", он все равно продолжает висеть и если создать инвойс, то он автоподставит закрытый основной договор.
Поэтому и хочу сделать проверку по статусу. чтобы была защита, что даже если осн.договор закрыт, то создать документ после даты закрытия нельзя (или сохранить или провести). только если создать новый договор и перепрописать его как основной. |
|||
18
spectre1978
15.11.15
✎
12:41
|
(13) Один мне нельзя, у меня интернет-услуги, поэтому там статусов аж 5
Ну сделайте не 0 и 1, а Перечисление из пяти. У меня Комплекс В той части о которой мы говорим - это то же самое что ТиС. Так что там все это в силе. |
|||
19
bestship
15.11.15
✎
12:41
|
(16) Ну так и должно быть - Новый Контрагент в документе, соответственно, договор этого Нового контрагента. Это логично. И сейчас так работает в типовом режиме.
|
|||
20
Горогуля
15.11.15
✎
12:41
|
(17) интерфейсными методами тут не обойтись
|
|||
21
Горогуля
15.11.15
✎
12:42
|
(20) хотя.. кто знает эти ваши семёрки ;)
|
|||
22
Смотрящий
15.11.15
✎
12:48
|
(17) Почту глянь.
|
|||
23
spectre1978
15.11.15
✎
12:58
|
(15) если мне склероз не изменяет, в ТиС (и в Комплексной тоже, потому что в части торговли это та же ТиС) все равно глПриИзмененииДоговора () вызовется, даже если это будет открытие нового документа с контрагентом по умолчанию. В ней и надо шаманить. Исключение могут из себя представлять, скорее всего, только "самопальные" документы, которые написаны нестандартным способом.
|
|||
24
bestship
15.11.15
✎
13:04
|
(23) Таких доков у меня нет - не умею))), поэтому делаю свои на основе типовых копи-пастом и далее допиливаю под нужды.
Так что, можно сказать что все доки с типовыми механизмами. глПриИзмененииДоговора()-проверяет именно изменение договора в ручном режиме уже в открытом и готовом для сохранения документе. А этого и надо избежать. |
|||
25
spectre1978
15.11.15
✎
13:05
|
(24) глПриИзмененииДоговора()-проверяет именно изменение договора в ручном режиме уже в открытом и готовом для сохранения документе
почему вы так думаете? Вы отладчиком смотрели? |
|||
26
bestship
15.11.15
✎
13:07
|
(25) зачем отладчиком, чисто при работе)))
|
|||
27
spectre1978
15.11.15
✎
13:07
|
мне почему-то помнится, что она (как и все прочие глПриИзменении...) вызывается и при открытии нового документа, когда происходит заполнение реквизитов значениями по умолчанию.
|
|||
28
spectre1978
15.11.15
✎
13:08
|
сейчас специально проверил отладчиком в ТиС - так и есть вообще-то
|
|||
29
trdm
15.11.15
✎
13:10
|
Еще на дату документа надо обращать внимание.
И проверять документ при записи. (1) и (2) не катит. |
|||
30
spectre1978
15.11.15
✎
13:13
|
(26) а как вы при работе увидите? Такие вещи смотрят отладчиком - ставят бряк в начале кода процедуры и заходят в новый документ. Если выпало в отладчик - значит вызвалось.
|
|||
31
bestship
15.11.15
✎
13:15
|
(27) Я посмотрел ГЛ. Попробую туда вставить условие что-то типа:
Если (Договор.Статус <> "TERMINATE") и (ДатаДок > СтатусДата) Тогда Предупреждение "Contract not valid" Что-то типо такого. Буду пробовать. |
|||
32
Горогуля
15.11.15
✎
13:17
|
а что, в статус можно любую строку запихать?
|
|||
33
spectre1978
15.11.15
✎
13:17
|
(31) а что статус периодическим не хотите сделать? Есть такой крыжик там в реквизитах - Периодический. Тогда статус можно будет ставить и менять не просто так, а на дату. Тогда второй реквизит типа дата вам будет не нужен
|
|||
34
spectre1978
15.11.15
✎
13:18
|
и, главное, будет храниться история - как и на какие даты меняли
|
|||
35
spectre1978
15.11.15
✎
13:20
|
затем, я бы статус делал не строкой, а Перечислением.
Заводите Перечисление СтатусыДоговоров и значения к нему: Действует; НемногоДействует; ПочтиДействует; НемногоНеДействует; СовсемНеДействует; НеДействует И потом просто будет сравнение Если Статус = Перечисление.СтатусыДоговоров.НеДействует Тогда |
|||
36
bestship
15.11.15
✎
13:22
|
(33) Статус периодический , сделан как перечисление. Второй реквизит нужен для визуализации в стоке наименования договора и в нескольких документах и отчетах в печ.формах.
|
|||
37
bestship
15.11.15
✎
13:23
|
(35) медленно обновляется форум)
у меня так и сделано! |
|||
38
spectre1978
15.11.15
✎
13:24
|
(36) дык визуализировать тем же перечислением можно. У него там есть идентификатор значения - для кода и есть длинное представление - для документов...
|
|||
39
Смотрящий
15.11.15
✎
13:25
|
(26) Вся визуализация делается с использованием одного реквизита. Второй не нужен
|
|||
40
bestship
15.11.15
✎
13:32
|
(38) У меня сейчас Наименование договора представлено вот так, как результат:
Contract № 53 dd 25.08.2015 - TERMINATED 31.10.2015 К сожалению, дату приходится ставить в ручном режиме, т.к. база приводится в порядок. Позже сделаю исключительно автоматически через документ. Поэтому Дата статуса нужна отдельно |
|||
41
Горогуля
15.11.15
✎
13:33
|
периодический статус - один реквизит. статус с датой - уже два
|
|||
42
Горогуля
15.11.15
✎
13:33
|
(41) это фигня. а вот как во втором случае узнать статус на позапрошлый год?
|
|||
43
spectre1978
15.11.15
✎
13:35
|
(42) с одной датой никак, ясен перец. Даже на прошлую неделю не узнаешь, потому что в этом случае история не хранится.
|
|||
44
spectre1978
15.11.15
✎
13:36
|
с другой стороны, можно просто сделать рекв периодическим и обработкой установить его, используя имеющийся реквизит даты. Потом реквизит даты грохнуть.
|
|||
45
bestship
15.11.15
✎
13:39
|
(44) примерно так и планирую, когда все контракты проверятся
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |