Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Как изменить номер документа при изменении его даты на другой год?

v7: Как изменить номер документа при изменении его даты на другой год?
Я
   kissolo
 
22.12.20 - 13:53
Пользователи очень любят в конце года копировать документы на следующий год. Ну т.е.сейчас, в декабре, скопировали документ, и поменяли у него дату на будущий год, на январь. При этом нумерация документа осталась прежней, и очень быстро доступные номера кончаются. Приходится менять у пользователя префикс, чтобы начать нумерацию заново с другим префиксом.
И Сколько им ни говорили - при вводе документов за будущий год сначала устанавливайте рабочую дату на следующий год, а потом уже копируйте - многие этого не делают.
Нумерация у документа - ежегодная. Плюс префиксы у пользователей используем.
Попытался сейчас сделать, чтобы при изменении даты документа у него менялась нумерация, на новогоднюю, для этого - при изменении даты в форме документа запускать команду
УстановитьНовыйНомер(ПрефиксДокументов);
но это не сработало, какой был номер в старом году, такой и остался. Попытался сначала дать команду
РабочаяДата(ДатаДок);
чтобы он сначала рабочую дату сменил на 2021 год, и потом поменял номер - но это тоже не помогло.

Конечно, можно просто при открытии документа запоминать рабочую дату программы, и при смене даты документа проверять с новой датой - и если год не совпадает, не давать менять, но хотелось бы все же менять номер документа. Такое возможно?
   Масянька
 
1 - 22.12.20 - 13:57
(0) Кривая у вас нумерация.
В стандарте: при смене года всегда выводится предупреждение о новой нумерации. И я никогда не встречала, чтобы получались кривые номера.
Что-то вы там намудрили с нумерацией.
   Builder
 
2 - 22.12.20 - 14:06
УстановитьНовыйНомер(ПрефиксДокументов) - должен менять номер, что-то у вас не так.
Скорее всего есть документы со старыми номерами в новом году, вот и продолжается старая нумерация. Сначала надо их всех перенумеровать, если возможно.
   Cthulhu
 
3 - 22.12.20 - 14:08
не при изменении даты надо устанавливать, а при записи.
   Kigo_Kigo
 
4 - 22.12.20 - 14:12
(1) А они уже нахерачили там прификсов в нумерциях, вот и итог
   Cthulhu
 
5 - 22.12.20 - 14:14
(3)+: и - да, изменение года ловить через переменную модуля.
в приоткрытии - запоминать в нее ДатаГод(ДатаДок), а п призаписи - сравнивать ее с ДатаГод(ДатаДок) и если отличие есть - устанавливать новый номер (при этом очень желательно записывать про изменение и старый номер в примечании документа - если есть такой реквизит, а он почти всегда есть - а также отмечать полную информацию об изменении номера документа в журнале регистрации).
   kissolo
 
6 - 22.12.20 - 14:34
(1) Конфа вообще самописная, как я понял, изначально взяли бухгалтерию, судя по неиспользуемым (!) объектам метаданных, так что вполне возможно, понять бы, что сейчас делать.
(2) В Новом году есть документы, но с другими префиксами. Как я понимаю, на мой префикс они не должны влиять.
(3) Какая разница? Если все равно не срабатывает?
(4) Префиксы эти стандартная фишка 1с, и пускай не я это придумал изначально делать, но тем не менее, почему это не должно работать?
(5) Я это делаю. Проблема в том, что новый номер при изменении года в дате документа не присваивается.
   Builder
 
7 - 22.12.20 - 14:36
(6) совсем не присваивается? Или меняется на похожий?
Что отладчик говорит? "УстановитьНовыйНомер()" то хоть запускается?
   Lazy Stranger
 
8 - 22.12.20 - 14:42
найди типовую ТиС и посмотри как там сделано, в принципе в (5) описано как раз оно
   kissolo
 
9 - 22.12.20 - 14:43
(1) Посмотрел как это сделано в ТиС. Там в глобальном модуле процедура есть, которая создает документ такого же вида, присваивает ему номер и дату документа-оригинала, и потом выполняет команду
Дубликат.УстановитьНовыйНомер(СокрЛП(Константа.ПрефиксИБ) + СокрЛП(ПереданКонтекст.ЮрЛицо.ПрефиксНомеровДокументов));
В общем, то же самое, что и у меня - но с дубликатом документа, т.е. не из контекста, затем проверяет, есть ли этот номер в новом периоде, и потом этот новый номер уже присваиваем оригинальному документу... Короче все не просто так))))
   kissolo
 
10 - 22.12.20 - 14:44
(7) Не меняется, как будто не отрабатывает команда установки номера.
УстановитьНовыйНомер - это команда системы, я в нее пошагово зайти не смогу.
(8) - уже посмотрел))) Непонятно, почему так извращенчески, но если не получится сделать просто, скопируем этот вариант.
   Kigo_Kigo
 
11 - 22.12.20 - 14:50
(10) Потому и сделано так, делай, это рабочий вариант, ту недавно тоже танцы с бубном были, после ввода значения в поле, поле должно очистится и фокус вернутся обратно в него, так вот пришло плясать так, открывать пустую форму другой обработки модально со статусомвозврата(0), там смещать фокус в нужное поле и закрывать, куле 7-ка, она жеж сырая еще)))))
   kissolo
 
12 - 22.12.20 - 14:52
(7) Дополнение. Сделал подряд две команды:
        УстановитьНовыйНомер(); 
        УстановитьНовыйНомер(ПрефиксДокументов);
номер после каждой команды меняется! Но при этом тот номер, который я получил после второй команды - совпадает с тем, который у меня изначально. Т.е. как будто он не понимает, что дата документа уже в другом периоде.
Придется извращаться как в типовой...
   Масянька
 
13 - 22.12.20 - 14:52
(11) Не фиг лезть в следующий год :)
   kissolo
 
14 - 22.12.20 - 14:54
(13) Это нашим пользователям трудно объяснить. Особенно когда начальство "за" них. Единственное, можем или запретить менять дату на новый год, когда рабочая дата - в текущем, или вот принудительно менять номер...Второй вариант желательнее, ибо полной защиты от дурака все равно не придумаешь..
   Lazy Stranger
 
15 - 22.12.20 - 14:55
(12) похоже что УстановитьНовыйНомер() для уже записанного документа дату считывает из базы, а там она ещё старая, поэтому в типовой и пришлось извращаться с дубликатом документа
   Kigo_Kigo
 
16 - 22.12.20 - 14:57
(13) Ситуации разные бывают, у меня к примеру план-наряды будущей датой делают, а другой крендель-менеджер вхерачивает расходную накладную на будущую дату(дату отгрузки) а склад по факту отгружает, ну хотят так, чеб нет то?
   kissolo
 
17 - 22.12.20 - 14:58
(15) Я пришел к такому же выводу, т.к. при создании нового документа эта команда срабатывает, документ создается с нужным префиксом..
   kissolo
 
18 - 22.12.20 - 16:24
Это ппц, товарищи.... Оказывается, у этого вида документов стоит периодичность "По всем данного вида"!!!!!! Какого хрена программист, который это писал, сделал так - я ХЗ, но был в полной уверенности, что и как в остальных документах периодичность - год...
ппц...

Дополнено: проверил остальные документы - у них почти у всех так... Только относительно недавно добавленные виды документов - которые именно я добавлял, там нумерация в пределах года...
И чего я хочу от них????
твою же ма....
   Builder
 
19 - 22.12.20 - 16:26
(18) Ну собственно чудес не бывает, даже перед новым годом :)
Сейчас проверил УстановитьНовыйНомер() - прекрасно отрабатывает на записанных документах.
   kissolo
 
20 - 22.12.20 - 16:27
..я в трансе...
   Масянька
 
21 - 22.12.20 - 16:29
(18) Задача так стояла... Кривые руки...
Вообще-то, прежде чем кивать на предыдущего - стоило бы с этого начать. Тем более - самописка.
   kissolo
 
22 - 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) Не должна и не рухнет - разные вещи.
Хотя, с другой стороны, бэкапы придумали трусы.
:))))))))))))))))))))
   sqr4
 
27 - 22.12.20 - 16:45
пофиксите заголовок)
   kissolo
 
28 - 22.12.20 - 16:53
(23) Руки наконец-то дошли. А так - там длина номера была достаточно длинная, и только в этом году пару месяцев назад глюки пошли изза закончившихся номеров.
(24) да-да, именно эту процедуру я и подключил у себя в базе - только она не сработала, т.к. периодичность у документа оказалась неправильная.
(26) Ну я ж на копии))) И бэкапы есть, ессно. Каждую неделю в наше регламентное время по субботам запускаю.
   kissolo
 
29 - 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 мин то ли разнстные то ли инкрементные, разницы особой нет так как копируются все равно самые большие файло - полностью так как они и потому большие что меняются часто ;-)
   bolder
 
33 - 22.12.20 - 20:29
(1) +100500.точно чтото сломали )))
   MWWRuza
 
34 - 22.12.20 - 22:52
Лень читать всю тему, нафлудили кучу сообщений, а просто предложить спи****ь из типовой, никто не предложил? В типовой, ну точно знаю - "Упрощенке", т.к. сам в ней учет свой веду, при таких действиях предлагает -  что-то типа этого: "Нумерация по каждому году начинается заново, установить новый номер документа?" - ? Чем не устраивает?
   Злопчинский
 
35 - 23.12.20 - 00:03
(34) я хз что  там у ТС не получалось, я аналогично думаю
   kissolo
 
36 - 23.12.20 - 08:20
(31) Спасибо, не знал. Мне это как раз было странно, но почему так - не знал.
(32) Не боись, это я про 1с-ные говорил, а так-то на скуле админы тоже настроили, и чаще ессно. Просто 1с-ные я могу делать только по субботам, в другое время у нас производство круглые сутки.
(34) Уже выяснили, оказывается, периодичность ранее не была правильная указана у нужного вида документа. Стояла "по всем документам". Для другого вида документов, которых тоже много - все же стоит "в течение года". Для него попробую из ТиС механизм применить, если не сработает мое решение из (0) (Пока пробовал только на первом виде документа).
   Builder
 
37 - 23.12.20 - 09:22
(36) "Просто 1с-ные" - это как? Скопировать md и dds? Для этого надо всех выгонять? :)
   Джордж1
 
38 - 23.12.20 - 09:23
Сколько понаписали

в типовых 1С такая проверка в каждом документе есть - берите и пользуйтесь
   kissolo
 
39 - 23.12.20 - 09:51
(37) Конфигуратор / Администрирование / Выгрузить данные.
(38) Если вы возьмете на себя труд прочитать ветку, об этом уже не раз говорилось. В т.ч. в последних сообщениях. Тем не менее, спасибо за совет. Много не мало)))

Кстати, после смены периодичности в первом виде документа на ежегодную - алгоритм, взятый из ТиС, сработал. Наверное, его и оставлю.

Всем спасибо)
   Builder
 
40 - 23.12.20 - 10:10
(39) Это бекапы так теперь делают, через выгрузку данных? Оригинально!
Почитайте хоть для чего эта выгрузка предназначена :)
   kissolo
 
41 - 23.12.20 - 11:08
(40) Что не так? линк в студию.  Всю жизнь так делал. И до меня тут так делали. И восстанавливали так. Все работает.
И, раз уж вас это не устраивает - предложите альтернативу и ее преимущества по сравнению с моим способом? Если убедительные доводы будут - чего ж не перейти на другой вариант, я открыт к диалогу.
   Builder
 
42 - 23.12.20 - 11:16
(41) выгрузка предназначена для перехода с DBF на SQL и обратно.
Бекапы ей, конечно, делать можно, но зачем?
Бекапы SQL надо делать исключительно средствами SQL, это быстрее и надежнее.
   Builder
 
43 - 23.12.20 - 11:20
(41) А по поводу "Всю жизнь так делал. И до меня тут так делали" прям вспомнил известный "Эксперимент с обезьянами и водой" :)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.