Дробная нумерация счетов. Проблема
17.12.2006
22:21
#1
На нашем предприятии счета нумеруются так:
в январе: 01/01
02/01
03/01
в феврале:04/02
05/02
06/02
То есть, как видите, до дроби номера счетов идут по порядку, а после - по номеру месяца. Как автоматизировать этот процесс? Я лишь начинающий бухгалтер, автоматическая нумерация застряла у меня на номере 99/09. Изменять номер вручную часто забываю, начальство ругается. Подскажите, что сделать. Ваши ответы будут очень важны для меня.
Спасибо.
в январе: 01/01
02/01
03/01
в феврале:04/02
05/02
06/02
То есть, как видите, до дроби номера счетов идут по порядку, а после - по номеру месяца. Как автоматизировать этот процесс? Я лишь начинающий бухгалтер, автоматическая нумерация застряла у меня на номере 99/09. Изменять номер вручную часто забываю, начальство ругается. Подскажите, что сделать. Ваши ответы будут очень важны для меня.
Спасибо.
18.12.2006
04:45
#2
Оригинальная система. Но так и не понятно в чём собственно проблема.
А так же _где_ эта проблема.
А так же _где_ эта проблема.
18.12.2006
12:52
#3
В Типовой конфигурации 1С v 7.7. Проблема в том, что такая нумерация не осуществляется автоматически при создании нового счета.
18.12.2006
13:41
#5
1 вариант: позвать программиста.
2 вариант: сначала месяц, затем номер счета.
Издержки второго варианта - надо не забывать по первым числам производить ручную правку номера. А чтобы не застревало на 99, предусмотреть нужное число нулей.
в январе: 01/001
01/002
01/003
2 вариант: сначала месяц, затем номер счета.
Издержки второго варианта - надо не забывать по первым числам производить ручную правку номера. А чтобы не застревало на 99, предусмотреть нужное число нулей.
в январе: 01/001
01/002
01/003
18.12.2006
21:35
#6
"Надо программно задать нумерацию. Например, написать код, так чтобы номер формировался при создании нового документа:
Номер месяца\Номер последнего документа в месяце + 1
Функция СформироватьНомер()
Док = СоздатьОбъект("Документ.Счет");
СпН = СоздатьОбъект("СписокЗначений");
Док.ВыбратьДокументы(НачМесяца(ДатаДок),КонМесяца(ДатаДок));
Пока Док.ПолучитьДокумент() = 1 Цикл
ПозНомера = Найти(СокрЛП(Док.НомерДок),"/");
Номер = Прав(СокрЛП(Док.НомерДок),СтрДлина(Док.НомерДок)-ПозНомера);//определяем кол-во знаков после дроби
СпН.ДобавитьЗначение(Номер);
КонецЦикла;
СпН.Сортировать();
Если СпН.РазмерСписка() > 0 Тогда
ПозПоследнего = СпН.РазмерСписка();
НомерПоследнего = Число(СпН.ПолучитьЗначение(ПозПоследнего));
Иначе
НомерПоследнего = 0;
КонецЕсли;
НомерДок = """"+ДатаМесяц(ДатаДок) + "/" + (НомерПоследнего + 1);
Возврат НомерДок;
КонецФункции
Процедура ВводНового()
...
НомерДок = СформироватьНомер();//Добавляем в процедуру документа ВводНового()
КонецПроцедуры
19/12 Уточнение к замечанию:
Зачем нам перебирать все документы за период, и создавать список значений, разве не проще воспользоваться
ОбратныйПорядок(<Режим>)
Назначение:
Установить порядок выборки документов во времени.
Возвращает значение порядка выборки до вызова: 1 - выборка документов в порядке убывания даты и времени; 0 - в порядке возрастания.
и получить сразу последний выписанный документ.
Перебираем затем, что последний выписанный документ не обязательно с последним номером!
Сортировка по Номеру тоже не годится т.к. возможны варианты: 01/999 и 01/1000. Что окажется в конце?"
Номер месяца\Номер последнего документа в месяце + 1
Функция СформироватьНомер()
Док = СоздатьОбъект("Документ.Счет");
СпН = СоздатьОбъект("СписокЗначений");
Док.ВыбратьДокументы(НачМесяца(ДатаДок),КонМесяца(ДатаДок));
Пока Док.ПолучитьДокумент() = 1 Цикл
ПозНомера = Найти(СокрЛП(Док.НомерДок),"/");
Номер = Прав(СокрЛП(Док.НомерДок),СтрДлина(Док.НомерДок)-ПозНомера);//определяем кол-во знаков после дроби
СпН.ДобавитьЗначение(Номер);
КонецЦикла;
СпН.Сортировать();
Если СпН.РазмерСписка() > 0 Тогда
ПозПоследнего = СпН.РазмерСписка();
НомерПоследнего = Число(СпН.ПолучитьЗначение(ПозПоследнего));
Иначе
НомерПоследнего = 0;
КонецЕсли;
НомерДок = """"+ДатаМесяц(ДатаДок) + "/" + (НомерПоследнего + 1);
Возврат НомерДок;
КонецФункции
Процедура ВводНового()
...
НомерДок = СформироватьНомер();//Добавляем в процедуру документа ВводНового()
КонецПроцедуры
19/12 Уточнение к замечанию:
Зачем нам перебирать все документы за период, и создавать список значений, разве не проще воспользоваться
ОбратныйПорядок(<Режим>)
Назначение:
Установить порядок выборки документов во времени.
Возвращает значение порядка выборки до вызова: 1 - выборка документов в порядке убывания даты и времени; 0 - в порядке возрастания.
и получить сразу последний выписанный документ.
Перебираем затем, что последний выписанный документ не обязательно с последним номером!
Сортировка по Номеру тоже не годится т.к. возможны варианты: 01/999 и 01/1000. Что окажется в конце?"
19.12.2006
04:46
#7
Слово типовая 1С... мало о чём говорит. Хотя если свой план счетов, да
ещё такой - это уже не типовая. Не описано где и как должно использоваться.
Лично моё мнение - в том же глобальном модуле сделать функцию, которая будет
возвращать нужный номер счета исходя из даты, например получить_счет(номер, дата)
Т.е. имеем номер счёта и дату - вызываем функцию, а она возвращает тот номер,
который нужно.
ещё такой - это уже не типовая. Не описано где и как должно использоваться.
Лично моё мнение - в том же глобальном модуле сделать функцию, которая будет
возвращать нужный номер счета исходя из даты, например получить_счет(номер, дата)
Т.е. имеем номер счёта и дату - вызываем функцию, а она возвращает тот номер,
который нужно.
Читают тему
(гостей: 1)