helpf.pro
Регистрация
 +2 
Распечатать

Своя нумерация документов (сделали свою, т.к. штатную нумерацию испортили)

Обратился ко мне старый клиент и говорит - беда с нумерацией счетов!

Менеджеры, кто как хотел - так и изменял номера документов. с префиксом, без, писали даже б/н. Но тут пришел новый бухгалтер и сказал - нужно с 1 октября запустить авто нумерацию с номера 00010000, но старые счета не трогать!

Попросили - сделали:

т.к. Старые трогать нельзя - простое восстановление нумерации отпадает )

Первое решение, которое пришло в голову, сделать выборку по моментувремени создания счета - обратная сортировка - получить первый - и к полученному номеру документа +1

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

Нужно сортировать именно по дате создания документа! Реквизита такого нет, но решение было найдено в ГУИДе документа, вот статья на эту тему: Как по GUID определить время и дату создания ссылки?

Только алгоритм решили немного переделать - не получаем дату создания документа, а сортируем по части ГУИДа, которая является началом периода создания документа.

Код получился такой:

Код 1C v 8.2 УП
 //В модуле объекта документа
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
//... стандартный код
//All4CF - Установим новый номер
Если ЭтоНовый() Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 30
| СчетНаОплатуПокупателю.Номер,
| СчетНаОплатуПокупателю.Ссылка
|ИЗ
| Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
|
|УПОРЯДОЧИТЬ ПО
| СчетНаОплатуПокупателю.МоментВремени УБЫВ";
Результат = Запрос.Выполнить().Выбрать(); 
спНомеров = Новый СписокЗначений;
Пока Результат.Следующий() Цикл
тевгуид = Результат.Ссылка.УникальныйИдентификатор(); спНомеров.Добавить(Результат.Ссылка, Сред(тевгуид,10,9)+Сред(тевгуид,0,8));
КонецЦикла;
спНомеров.СортироватьПоПредставлению(НаправлениеСортировки.Убыв);
послНомер = спНомеров[0].Значение.Номер;
ДлиНом=СтрДлина(СокрЛП(послНомер));
    Номер = Формат(Число(послНомер)+1,"ЧЦ="+ДлиНом+"; ЧВН=; ЧГ=0");
КонецЕсли;
КонецПроцедуры // ПередЗаписью

Встречалось ли у вас такая ситуация? Как решали?

Разместил:   Версии: | 8.2 УП | 8.3 |  Дата:   Прочитано: 26632
 +2 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1C: Enterprise Development Tools 52
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем
1С 8.x : Как убрать лидирующие нули в номере Документа (вариант2) 0
Скопировать строку с номером, с лидирующими нулями, в числовом поле (с форматом без групп, без группировки), и вернуть(скопировать) обратно в строковом поле с номером. Возвращает без нулей.
Посмотреть все результаты поиска похожих
Комментарии
E_Migachev
01.02.2016 14:45Комментарий: 1
E_Migachev

Доработал, так правильнее:

Код 1C v 8.2 УП
 Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 30
| СчетНаОплатуПокупателю.Номер КАК Номер,
| СчетНаОплатуПокупателю.Дата КАК ДатаД,
| СчетНаОплатуПокупателю.Ссылка КАК Ссылка
|ПОМЕСТИТЬ вт
|ИЗ
| Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
|
|УПОРЯДОЧИТЬ ПО
| СчетНаОплатуПокупателю.МоментВремени УБЫВ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ ПЕРВЫЕ 1
| вт.Номер КАК Номер
|ИЗ
| вт КАК вт
|
|УПОРЯДОЧИТЬ ПО
| вт.ДатаД УБЫВ";
Результат = Запрос.Выполнить().Выбрать(); Результат.Следующий(); послНомер=Результат.Номер; ДлиНом=СтрДлина(СокрЛП(послНомер));
Номер = Формат(Число(послНомер)+1,"ЧЦ="+ДлиНом+"; ЧВН=; ЧГ=0");
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.