|
v7: Как изменить номер документа при изменении его даты на другой год? | ☑ | ||
---|---|---|---|---|
0
kissolo
22.12.20
✎
13:53
|
Пользователи очень любят в конце года копировать документы на следующий год. Ну т.е.сейчас, в декабре, скопировали документ, и поменяли у него дату на будущий год, на январь. При этом нумерация документа осталась прежней, и очень быстро доступные номера кончаются. Приходится менять у пользователя префикс, чтобы начать нумерацию заново с другим префиксом.
И Сколько им ни говорили - при вводе документов за будущий год сначала устанавливайте рабочую дату на следующий год, а потом уже копируйте - многие этого не делают. Нумерация у документа - ежегодная. Плюс префиксы у пользователей используем. Попытался сейчас сделать, чтобы при изменении даты документа у него менялась нумерация, на новогоднюю, для этого - при изменении даты в форме документа запускать команду УстановитьНовыйНомер(ПрефиксДокументов); но это не сработало, какой был номер в старом году, такой и остался. Попытался сначала дать команду РабочаяДата(ДатаДок); чтобы он сначала рабочую дату сменил на 2021 год, и потом поменял номер - но это тоже не помогло. Конечно, можно просто при открытии документа запоминать рабочую дату программы, и при смене даты документа проверять с новой датой - и если год не совпадает, не давать менять, но хотелось бы все же менять номер документа. Такое возможно? |
|||
1
Масянька
22.12.20
✎
13:57
|
(0) Кривая у вас нумерация.
В стандарте: при смене года всегда выводится предупреждение о новой нумерации. И я никогда не встречала, чтобы получались кривые номера. Что-то вы там намудрили с нумерацией. |
|||
2
Builder
22.12.20
✎
14:06
|
УстановитьНовыйНомер(ПрефиксДокументов) - должен менять номер, что-то у вас не так.
Скорее всего есть документы со старыми номерами в новом году, вот и продолжается старая нумерация. Сначала надо их всех перенумеровать, если возможно. |
|||
3
Cthulhu
22.12.20
✎
14:08
|
не при изменении даты надо устанавливать, а при записи.
|
|||
4
Kigo_Kigo
22.12.20
✎
14:12
|
(1) А они уже нахерачили там прификсов в нумерциях, вот и итог
|
|||
5
Cthulhu
22.12.20
✎
14:14
|
(3)+: и - да, изменение года ловить через переменную модуля.
в приоткрытии - запоминать в нее ДатаГод(ДатаДок), а п призаписи - сравнивать ее с ДатаГод(ДатаДок) и если отличие есть - устанавливать новый номер (при этом очень желательно записывать про изменение и старый номер в примечании документа - если есть такой реквизит, а он почти всегда есть - а также отмечать полную информацию об изменении номера документа в журнале регистрации). |
|||
6
kissolo
22.12.20
✎
14:34
|
(1) Конфа вообще самописная, как я понял, изначально взяли бухгалтерию, судя по неиспользуемым (!) объектам метаданных, так что вполне возможно, понять бы, что сейчас делать.
(2) В Новом году есть документы, но с другими префиксами. Как я понимаю, на мой префикс они не должны влиять. (3) Какая разница? Если все равно не срабатывает? (4) Префиксы эти стандартная фишка 1с, и пускай не я это придумал изначально делать, но тем не менее, почему это не должно работать? (5) Я это делаю. Проблема в том, что новый номер при изменении года в дате документа не присваивается. |
|||
7
Builder
22.12.20
✎
14:36
|
(6) совсем не присваивается? Или меняется на похожий?
Что отладчик говорит? "УстановитьНовыйНомер()" то хоть запускается? |
|||
8
Lazy Stranger
22.12.20
✎
14:42
|
найди типовую ТиС и посмотри как там сделано, в принципе в (5) описано как раз оно
|
|||
9
kissolo
22.12.20
✎
14:43
|
(1) Посмотрел как это сделано в ТиС. Там в глобальном модуле процедура есть, которая создает документ такого же вида, присваивает ему номер и дату документа-оригинала, и потом выполняет команду
Дубликат.УстановитьНовыйНомер(СокрЛП(Константа.ПрефиксИБ) + СокрЛП(ПереданКонтекст.ЮрЛицо.ПрефиксНомеровДокументов)); В общем, то же самое, что и у меня - но с дубликатом документа, т.е. не из контекста, затем проверяет, есть ли этот номер в новом периоде, и потом этот новый номер уже присваиваем оригинальному документу... Короче все не просто так)))) |
|||
10
kissolo
22.12.20
✎
14:44
|
(7) Не меняется, как будто не отрабатывает команда установки номера.
УстановитьНовыйНомер - это команда системы, я в нее пошагово зайти не смогу. (8) - уже посмотрел))) Непонятно, почему так извращенчески, но если не получится сделать просто, скопируем этот вариант. |
|||
11
Kigo_Kigo
22.12.20
✎
14:50
|
(10) Потому и сделано так, делай, это рабочий вариант, ту недавно тоже танцы с бубном были, после ввода значения в поле, поле должно очистится и фокус вернутся обратно в него, так вот пришло плясать так, открывать пустую форму другой обработки модально со статусомвозврата(0), там смещать фокус в нужное поле и закрывать, куле 7-ка, она жеж сырая еще)))))
|
|||
12
kissolo
22.12.20
✎
14:52
|
(7) Дополнение. Сделал подряд две команды:
УстановитьНовыйНомер(); УстановитьНовыйНомер(ПрефиксДокументов); номер после каждой команды меняется! Но при этом тот номер, который я получил после второй команды - совпадает с тем, который у меня изначально. Т.е. как будто он не понимает, что дата документа уже в другом периоде. Придется извращаться как в типовой... |
|||
13
Масянька
22.12.20
✎
14:52
|
(11) Не фиг лезть в следующий год :)
|
|||
14
kissolo
22.12.20
✎
14:54
|
(13) Это нашим пользователям трудно объяснить. Особенно когда начальство "за" них. Единственное, можем или запретить менять дату на новый год, когда рабочая дата - в текущем, или вот принудительно менять номер...Второй вариант желательнее, ибо полной защиты от дурака все равно не придумаешь..
|
|||
15
Lazy Stranger
22.12.20
✎
14:55
|
(12) похоже что УстановитьНовыйНомер() для уже записанного документа дату считывает из базы, а там она ещё старая, поэтому в типовой и пришлось извращаться с дубликатом документа
|
|||
16
Kigo_Kigo
22.12.20
✎
14:57
|
(13) Ситуации разные бывают, у меня к примеру план-наряды будущей датой делают, а другой крендель-менеджер вхерачивает расходную накладную на будущую дату(дату отгрузки) а склад по факту отгружает, ну хотят так, чеб нет то?
|
|||
17
kissolo
22.12.20
✎
14:58
|
(15) Я пришел к такому же выводу, т.к. при создании нового документа эта команда срабатывает, документ создается с нужным префиксом..
|
|||
18
kissolo
22.12.20
✎
16:24
|
Это ппц, товарищи.... Оказывается, у этого вида документов стоит периодичность "По всем данного вида"!!!!!! Какого хрена программист, который это писал, сделал так - я ХЗ, но был в полной уверенности, что и как в остальных документах периодичность - год...
ппц... Дополнено: проверил остальные документы - у них почти у всех так... Только относительно недавно добавленные виды документов - которые именно я добавлял, там нумерация в пределах года... И чего я хочу от них???? твою же ма.... |
|||
19
Builder
22.12.20
✎
16:26
|
(18) Ну собственно чудес не бывает, даже перед новым годом :)
Сейчас проверил УстановитьНовыйНомер() - прекрасно отрабатывает на записанных документах. |
|||
20
kissolo
22.12.20
✎
16:27
|
..я в трансе...
|
|||
21
Масянька
22.12.20
✎
16:29
|
(18) Задача так стояла... Кривые руки...
Вообще-то, прежде чем кивать на предыдущего - стоило бы с этого начать. Тем более - самописка. |
|||
22
kissolo
22.12.20
✎
16:30
|
Интересно, а что будет, если я сейчас у этой кучи документов за несколько лет изменю периодичность на "в пределах года"? У меня база не рухнет?
(21) Да я был в полной уверенности. Тот программист на порядок, наверное, круче меня был, я с ним работал несколько лет. |
|||
23
Масянька
22.12.20
✎
16:36
|
(22) Пробуй на копии.
Если будут проблемы - придется рисовать свою установку нового номера. И опять-таки - несколько лет не надо было, а тут вдруг - бац! |
|||
24
Злопчинский
22.12.20
✎
16:40
|
//******************************************************************************
// глКонтрольДатыДокумента(ПереданКонтекст, НачальнаяДатаДокумента) // // Параметры: // ПереданКонтекст - контекст документа,из которого вызвана процедура // НачальнаяДатаДокумента - дата документа до изменения. // // Возвращемое значение: // 1 - если документу был присвоен новый номер; // 0 - если документу не был присвоен новый номер. // // Описание: // Функция определяет ситуацию, когда при изменении своей даты документ // оказывается в другом периоде нумерации документов, проверяет уникальность // номера документа, и, в противном случае, пытается присвоить документу // новый уникальный номер. // Для работы функции должна быть объявлена глобальная переменная модуля // формы документа НачальнаяДатаДокумента. В процедуре ПриОткрытии // в эту переменную должна быть записана дата документа. // Функция глКонтрольДатыДокумента() вызывается из процедуры ПриЗаписи. // В процедуре ПриЗаписи проверяется возвращаемое значение, и, если // оно равно 1 (то есть, документу присвоен новый номер), статус возврата // устанавливается в 0, то есть документ не записывается, а происходит возрат // к редактированию документа. // Функция глКонтрольДатыДокумента(ПереданКонтекст, НачальнаяДатаДокумента) Экспорт |
|||
25
Злопчинский
22.12.20
✎
16:42
|
(22) база не рухнет - не должна.
|
|||
26
Масянька
22.12.20
✎
16:44
|
(25) Не должна и не рухнет - разные вещи.
Хотя, с другой стороны, бэкапы придумали трусы. :)))))))))))))))))))) |
|||
27
sqr4
22.12.20
✎
16:45
|
пофиксите заголовок)
|
|||
28
kissolo
22.12.20
✎
16:53
|
(23) Руки наконец-то дошли. А так - там длина номера была достаточно длинная, и только в этом году пару месяцев назад глюки пошли изза закончившихся номеров.
(24) да-да, именно эту процедуру я и подключил у себя в базе - только она не сработала, т.к. периодичность у документа оказалась неправильная. (26) Ну я ж на копии))) И бэкапы есть, ессно. Каждую неделю в наше регламентное время по субботам запускаю. |
|||
29
kissolo
22.12.20
✎
16:54
|
(27) у меня нет такой возможности. Или это к местным админам?
|
|||
30
Злопчинский
22.12.20
✎
17:33
|
(26) они же придумали шлемы и тормоза!
|
|||
31
Злопчинский
22.12.20
✎
17:34
|
(28) Неправильную периодчинсоть у дока сразу видно.
у него ПРЕДСТИАВЛЕНИЯЕ просто типа "ЗаказНаряд №23", а для нумеруемых по периодам - "ЗаказНаряд №123 от 12.12.12" |
|||
32
Злопчинский
22.12.20
✎
17:36
|
(28) "Каждую неделю в наше регламентное время по субботам запускаю."
- ну ты смелый и непуганый ;-) у нас ночные полные, днём раз в 20 мин то ли разнстные то ли инкрементные, разницы особой нет так как копируются все равно самые большие файло - полностью так как они и потому большие что меняются часто ;-) |
|||
33
bolder
22.12.20
✎
20:29
|
(1) +100500.точно чтото сломали )))
|
|||
34
MWWRuza
гуру
22.12.20
✎
22:52
|
Лень читать всю тему, нафлудили кучу сообщений, а просто предложить спи****ь из типовой, никто не предложил? В типовой, ну точно знаю - "Упрощенке", т.к. сам в ней учет свой веду, при таких действиях предлагает - что-то типа этого: "Нумерация по каждому году начинается заново, установить новый номер документа?" - ? Чем не устраивает?
|
|||
35
Злопчинский
23.12.20
✎
00:03
|
(34) я хз что там у ТС не получалось, я аналогично думаю
|
|||
36
kissolo
23.12.20
✎
08:20
|
(31) Спасибо, не знал. Мне это как раз было странно, но почему так - не знал.
(32) Не боись, это я про 1с-ные говорил, а так-то на скуле админы тоже настроили, и чаще ессно. Просто 1с-ные я могу делать только по субботам, в другое время у нас производство круглые сутки. (34) Уже выяснили, оказывается, периодичность ранее не была правильная указана у нужного вида документа. Стояла "по всем документам". Для другого вида документов, которых тоже много - все же стоит "в течение года". Для него попробую из ТиС механизм применить, если не сработает мое решение из (0) (Пока пробовал только на первом виде документа). |
|||
37
Builder
23.12.20
✎
09:22
|
(36) "Просто 1с-ные" - это как? Скопировать md и dds? Для этого надо всех выгонять? :)
|
|||
38
Джордж1
23.12.20
✎
09:23
|
Сколько понаписали
в типовых 1С такая проверка в каждом документе есть - берите и пользуйтесь |
|||
39
kissolo
23.12.20
✎
09:51
|
(37) Конфигуратор / Администрирование / Выгрузить данные.
(38) Если вы возьмете на себя труд прочитать ветку, об этом уже не раз говорилось. В т.ч. в последних сообщениях. Тем не менее, спасибо за совет. Много не мало))) Кстати, после смены периодичности в первом виде документа на ежегодную - алгоритм, взятый из ТиС, сработал. Наверное, его и оставлю. Всем спасибо) |
|||
40
Builder
23.12.20
✎
10:10
|
(39) Это бекапы так теперь делают, через выгрузку данных? Оригинально!
Почитайте хоть для чего эта выгрузка предназначена :) |
|||
41
kissolo
23.12.20
✎
11:08
|
(40) Что не так? линк в студию. Всю жизнь так делал. И до меня тут так делали. И восстанавливали так. Все работает.
И, раз уж вас это не устраивает - предложите альтернативу и ее преимущества по сравнению с моим способом? Если убедительные доводы будут - чего ж не перейти на другой вариант, я открыт к диалогу. |
|||
42
Builder
23.12.20
✎
11:16
|
(41) выгрузка предназначена для перехода с DBF на SQL и обратно.
Бекапы ей, конечно, делать можно, но зачем? Бекапы SQL надо делать исключительно средствами SQL, это быстрее и надежнее. |
|||
43
Builder
23.12.20
✎
11:20
|
(41) А по поводу "Всю жизнь так делал. И до меня тут так делали" прям вспомнил известный "Эксперимент с обезьянами и водой" :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |