Имя: Пароль:
1C
1C 7.7
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) примерно так и планирую, когда все контракты проверятся
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.