Имя: Пароль:
1C
1C 7.7
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) А по поводу "Всю жизнь так делал. И до меня тут так делали" прям вспомнил известный "Эксперимент с обезьянами и водой" :)