Последний выданный инвентарный номер

1. Evgen13 16.05.19 13:59 Сейчас в теме
Добрый день. В Бухгалтерии предприятия 3,0 есть документ принятие к учету. Когда я создаю новый документ, то мне выдается произвольный инвентарный номер. А нужно последний. Это можно как то реализовать?
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. waitklassik 16.05.19 14:23 Сейчас в теме
Выдается не произвольный а свободный если сбита нумерация
3. Evgen13 16.05.19 15:52 Сейчас в теме
(2) А как настроить определенный номер и чтобы следующий уже за ним был +1?
Подскажите, пожалуйста
4. tvm 16.05.19 15:53 Сейчас в теме
(3) перенумеровать, но есть ньюансы
5. Evgen13 16.05.19 15:54 Сейчас в теме
(4) какие? и где перенумеровывать?
6. tvm 16.05.19 16:02 Сейчас в теме
(5) перенумеровывать справочник.
в бумажных доках используется этот номер. Если изменится надо все перепечатывать/переподписывать.
можно повозиться конечно и подобрать такой номер после которого нумерация автоматом пойдет. Завести элемент справочника с таким кодом и далее автоматом пойдет
7. Evgen13 16.05.19 16:06 Сейчас в теме
(6) Перепечатывать это совсем другое.
Я создам номер, после которого не будет повторений номеров.
Только как это организовать.
Справочник "ОсновныеСредства" А дальше что?)
8. tvm 16.05.19 16:27 Сейчас в теме
(7) нужно смотреть какие там номера, пробовать подобрать. Если не ошибаюсь надо по длине чтобы номер был больше чем последний сейчас выдает. Как то так
9. Evgen13 16.05.19 16:48 Сейчас в теме
(8) Да это я понял. А куда его прописать?
10. tvm 16.05.19 16:53 Сейчас в теме
(9) Создайте ОС и присвойте руками номер
11. Evgen13 16.05.19 16:59 Сейчас в теме
(10) Есть ОС, а куда там присваивать номер?
Не пойму Вас. Можете подробнее описать принцип?
12. tvm 16.05.19 17:09 Сейчас в теме
(11) в форме ОС нажать кнопку Еще, затем изменить форму. Поставить флажок у реквизита "Код". Нажать ок. В форме рядом с наименованием появится поле код. Это и есть инв номер
13. SlavaKron 16.05.19 17:13 Сейчас в теме
По умолчанию Инв. номер это код ОС. А последний код по справочнику ОС может не совпадать с последним инвентарным номером по РС ПервоначальныеСведенияОСБухгалтерскийУчет.
14. Evgen13 17.05.19 07:58 Сейчас в теме
(13) А мне и не нужно чтобы он совпадал. Нужно просто в Регистре сведений изменить его.
Только не найду где...:(
И где в справочнике ОС посмотреть номер?
20. ben19791010 17.05.19 11:01 Сейчас в теме
(13)
По умолчанию Инв. номер это код ОС
с хрена ли ?
27. SlavaKron 20.05.19 08:53 Сейчас в теме
(20) Да всегда так было.
БП 3.0 (3.0.70.33), модуль формы документа ПринятиеКУчетуОС, событие при изменении ОС:
&НаКлиенте
Процедура ОСОсновноеСредствоПриИзменении(Элемент)

	ЭлементКоллекции = Элементы.ОС.ТекущиеДанные;
	Если ЗначениеЗаполнено(ЭлементКоллекции.ОсновноеСредство) Тогда
		ЭлементКоллекции.ИнвентарныйНомер = ПолучитьКод(ЭлементКоллекции.ОсновноеСредство);
		ЭлементКоллекции.СпособУчетаНДС = ПредопределенноеЗначение("Перечисление.СпособыУчетаНДС.Распределяется"); 
	КонецЕсли;

КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьКод(Знач ОС)
	
	Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОС, "Код");
	
КонецФункции
Показать
28. Evgen13 21.05.19 08:06 Сейчас в теме
(27)
&НаКлиенте
Процедура ОСОсновноеСредствоПриИзменении(Элемент)

ЭлементКоллекции = Элементы.ОС.ТекущиеДанные;
Если ЗначениеЗаполнено(ЭлементКоллекции.ОсновноеСредство) Тогда
ЭлементКоллекции.ИнвентарныйНомер = ПолучитьКод(ЭлементКоллекции.ОсновноеСредство);
ЭлементКоллекции.СпособУчетаНДС = ПредопределенноеЗначение("Перечисление.СпособыУчетаНДС.Распределяется");
КонецЕсли;

КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьКод(Знач ОС)

Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОС, "Код");

КонецФункции
Показать



Тоже самое было и у меня...
33. SlavaKron 22.05.19 10:15 Сейчас в теме
Если вас устраивает, что инвентарные номера будут не совпадать с кодами ОС, то можете переделать кусок кода из (27) на:
&НаКлиенте
Процедура ОСОсновноеСредствоПриИзменении(Элемент)

	ЭлементКоллекции = Элементы.ОС.ТекущиеДанные;
	Если ЗначениеЗаполнено(ЭлементКоллекции.ОсновноеСредство) Тогда
		МассивНомеров = Новый Массив;
		Для Каждого Стр Из Объект.ОС Цикл
			Если Стр = ЭлементКоллекции Тогда
				Продолжить
			КонецЕсли;
			МассивНомеров.Добавить(Стр.ИнвентарныйНомер);
		КонецЦикла;
		ИнвентарныйНомер = ПолучитьСледующийИнвентарныйНомер(МассивНомеров, Объект.Ссылка);
		Если ИнвентарныйНомер = Неопределено Тогда
			ЭлементКоллекции.ИнвентарныйНомер = ПолучитьКод(ЭлементКоллекции.ОсновноеСредство);
		Иначе
			ЭлементКоллекции.ИнвентарныйНомер = ИнвентарныйНомер;
		КонецЕсли;
		
		ЭлементКоллекции.СпособУчетаНДС = ПредопределенноеЗначение("Перечисление.СпособыУчетаНДС.Распределяется"); 
	КонецЕсли;

КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьСледующийИнвентарныйНомер(МассивНомеров, Ссылка)
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("ИнвентарныйНомер", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(9)));
	Для Каждого Номер Из МассивНомеров Цикл
		НоваяСтрока = ТЗ.Добавить();
		НоваяСтрока.ИнвентарныйНомер = Номер;		
	КонецЦикла;
	
	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	МАКСИМУМ(ПервоначальныеСведенияОСБухгалтерскийУчет.ИнвентарныйНомер) КАК ИнвентарныйНомер
	|ИЗ
	|	РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК ПервоначальныеСведенияОСБухгалтерскийУчет
	|ГДЕ
	|	ПервоначальныеСведенияОСБухгалтерскийУчет.Регистратор <> &Ссылка");
	
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	Выборка = Запрос.Выполнить().Выбрать();
	Выборка.Следующий();
	Если Выборка.ИнвентарныйНомер <> NULL Тогда
		НоваяСтрока = ТЗ.Добавить();
		НоваяСтрока.ИнвентарныйНомер = Выборка.ИнвентарныйНомер;
	КонецЕсли;

	Если ТЗ.Количество() = 0 Тогда
		Возврат Неопределено
	Иначе
		ТЗ.Сортировать("ИнвентарныйНомер Убыв");
		ИнвентарныйНомер = СокрП(ТЗ[0].ИнвентарныйНомер);
		ДлинаНомера = СтрДлина(ИнвентарныйНомер);
		
		Сч = ДлинаНомера;
		Пока Сч > 0 Цикл
			Если СтрНайти("0123456789", Сред(ИнвентарныйНомер, Сч, 1)) = 0 Тогда
				Прервать;
			КонецЕсли;
			Сч = Сч - 1;
		КонецЦикла;
		
		Префикс = ?(Сч = 0, "", Лев(ИнвентарныйНомер, Сч));
		НомерЧислом = Число(Сред(ИнвентарныйНомер, Сч + 1));
		ФорматЧисла = "ЧЦ=" + Строка(ДлинаНомера - СтрДлина(Префикс)) + "; ЧВН=; ЧГ=";		
		Возврат Префикс + Формат(НомерЧислом + 1, ФорматЧисла);
		
	КонецЕсли;
КонецФункции
Показать

Но я бы советовал разобраться с кодами ОС.
34. Evgen13 22.05.19 13:41 Сейчас в теме
(33)
&НаСервереБезКонтекста
Функция ПолучитьСледующийИнвентарныйНомер(МассивНомеров, Ссылка)
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ИнвентарныйНомер", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(9)));
Для Каждого Номер Из МассивНомеров Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ИнвентарныйНомер = Номер;
КонецЦикла;

Запрос = Новый Запрос(
"ВЫБРАТЬ
| МАКСИМУМ(ПервоначальныеСведенияОСБухгалтерскийУчет.ИнвентарныйНомер) КАК ИнвентарныйНомер
|ИЗ
| РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК ПервоначальныеСведенияОСБухгалтерскийУчет
|ГДЕ
| ПервоначальныеСведенияОСБухгалтерскийУчет.Регистратор <> &Ссылка");

Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Если Выборка.ИнвентарныйНомер <> NULL Тогда
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ИнвентарныйНомер = Выборка.ИнвентарныйНомер;
КонецЕсли;

Если ТЗ.Количество() = 0 Тогда
Возврат Неопределено
Иначе
ТЗ.Сортировать("ИнвентарныйНомер Убыв");
ИнвентарныйНомер = СокрП(ТЗ[0].ИнвентарныйНомер);
ДлинаНомера = СтрДлина(ИнвентарныйНомер);

Сч = ДлинаНомера;
Пока Сч > 0 Цикл
Если СтрНайти("0123456789", Сред(ИнвентарныйНомер, Сч, 1)) = 0 Тогда
Прервать;
КонецЕсли;
Сч = Сч - 1;
КонецЦикла;

Префикс = ?(Сч = 0, "", Лев(ИнвентарныйНомер, Сч));
НомерЧислом = Число(Сред(ИнвентарныйНомер, Сч + 1));
ФорматЧисла = "ЧЦ=" + Строка(ДлинаНомера - СтрДлина(Префикс)) + "; ЧВН=; ЧГ=";
Возврат Префикс + Формат(НомерЧислом + 1, ФорматЧисла);

КонецЕсли;
КонецФункции
Показать


Это очень хорошо. Но почему он начинает счет с номера OS_007...
а должен начинать с 600100...
?
35. SlavaKron 22.05.19 15:19 Сейчас в теме
(34) Видимо, у вас базе винегрет из инвентарных номеров или кодов ОС, какой-либо порядок едва ли удастся сделать. Можно, конечно, брать не самый "большой", а самый последний инвентарный номер из принятых к учёту, но нет гарантии, что в таком случае он не задвоится,
Возможно, коллеги меня поправят и предложат вам более мудрое решение. Мне же кажется, что проще вручную прописывать Инв. номер, который устраивает.
36. Evgen13 22.05.19 15:29 Сейчас в теме
(35)
Грустно:(
Но все равно, спасибо, Вам огромное!
37. Evgen13 23.05.19 11:37 Сейчас в теме
(33)
&НаСервереБезКонтекста
Функция ПолучитьСледующийИнвентарныйНомер(МассивНомеров, Ссылка)
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ИнвентарныйНомер", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(9)));
Для Каждого Номер Из МассивНомеров Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ИнвентарныйНомер = Номер;
КонецЦикла;

Запрос = Новый Запрос(
"ВЫБРАТЬ
| МАКСИМУМ(ПервоначальныеСведенияОСБухгалтерскийУчет.ИнвентарныйНомер) КАК ИнвентарныйНомер
|ИЗ
| РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК ПервоначальныеСведенияОСБухгалтерскийУчет
|ГДЕ
| ПервоначальныеСведенияОСБухгалтерскийУчет.Регистратор <> &Ссылка");

Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Если Выборка.ИнвентарныйНомер <> NULL Тогда
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ИнвентарныйНомер = Выборка.ИнвентарныйНомер;
КонецЕсли;

Если ТЗ.Количество() = 0 Тогда
Возврат Неопределено
Иначе
ТЗ.Сортировать("ИнвентарныйНомер Убыв");
ИнвентарныйНомер = СокрП(ТЗ[0].ИнвентарныйНомер);
ДлинаНомера = СтрДлина(ИнвентарныйНомер);

Сч = ДлинаНомера;
Пока Сч > 0 Цикл
Если СтрНайти("0123456789", Сред(ИнвентарныйНомер, Сч, 1)) = 0 Тогда
Прервать;
КонецЕсли;
Сч = Сч - 1;
КонецЦикла;

Префикс = ?(Сч = 0, "", Лев(ИнвентарныйНомер, Сч));
НомерЧислом = Число(Сред(ИнвентарныйНомер, Сч + 1));
ФорматЧисла = "ЧЦ=" + Строка(ДлинаНомера - СтрДлина(Префикс)) + "; ЧВН=; ЧГ=";
Возврат Префикс + Формат(НомерЧислом + 1, ФорматЧисла);

КонецЕсли;
КонецФункции
Показать


А как нибудь можно этот код переделать, чтобы он присваивал мое значение и дальше уже шел +1.
Прописываю цикл, он первое значение получает, а дальше остальным инвентарным номерам присваивает тоже самое значение
39. SlavaKron 23.05.19 14:18 Сейчас в теме
(37) Вместо
Запрос = Новый Запрос( 
"ВЫБРАТЬ 
| МАКСИМУМ(ПервоначальныеСведенияОСБухгалтерскийУчет.ИнвентарныйНомер) КАК ИнвентарныйНомер 
|ИЗ 
| РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК ПервоначальныеСведенияОСБухгалтерскийУчет 
|ГДЕ 
| ПервоначальныеСведенияОСБухгалтерскийУчет.Регистратор <> &Ссылка");

можете использовать
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
|	ПервоначальныеСведенияОСБухгалтерскийУчет.ИнвентарныйНомер КАК ИнвентарныйНомер
|ИЗ
|	РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК ПервоначальныеСведенияОСБухгалтерскийУчет
|ГДЕ
|	ПервоначальныеСведенияОСБухгалтерскийУчет.Регистратор <> &Ссылка
|
|УПОРЯДОЧИТЬ ПО
|	ПервоначальныеСведенияОСБухгалтерскийУчет.Период УБЫВ");
Показать

тогда вам достаточно один раз вручную указать нужный вам инв. номер, а в последующих принятиях будет так как вы хотите.
Не понимаю про какой вы цикл говорите. Приведённый код актуален только при интерактивном заполнении документа ПринятиеКУчетуОС.
15. Evgen13 17.05.19 09:59 Сейчас в теме
Справочники.ОсновныеСредства.УстановитьНовыйКод("ХА-"); Ребят, посмотрите, так?
Только куда его вставить этот код?
16. tvm 17.05.19 10:30 Сейчас в теме
(15) что значит куда вставить?
17. Evgen13 17.05.19 10:33 Сейчас в теме
19. tvm 17.05.19 10:59 Сейчас в теме
(17) зачем в процедуру? Вы руками код в объекте поставьте и запишите его
18. ben19791010 17.05.19 10:42 Сейчас в теме
Первоначальные сведения ОС (бухгалтерский учет) вот ваш регистр
21. Evgen13 17.05.19 11:09 Сейчас в теме +0.66 $m
(18)
Ну да, вот он, вот код. А куда вставить номер?
Прикрепленные файлы:
24. ben19791010 17.05.19 11:17 Сейчас в теме
(21) нужно обработать событие в форме документа
22. ben19791010 17.05.19 11:15 Сейчас в теме
да при чем тут модуль менеджера вообще?
23. Evgen13 17.05.19 11:17 Сейчас в теме
(22)
Расскажите бестолковому ;)
25. ben19791010 17.05.19 11:18 Сейчас в теме
извини сильно много пробелов... для начала проанализируй обработчики событий типовые, которые уже определены в документе и поймешь логику
26. пользователь 17.05.19 14:54
Сообщение было скрыто модератором.
...
29. Evgen13 21.05.19 13:13 Сейчас в теме
Ребят, смотрите. Сейчас инвентарные номера присваиваются с номерами 00000007 и +1
Нужно изменить, чтобы они начинались с 6007090 и т.д.+1

Где это поправить?
41. anitakh 24.05.19 12:28 Сейчас в теме
(29) В последнем ОС - меняешь в ручную и и все последующие будут формироваться в формате 6007090+1
30. Evgen13 21.05.19 13:52 Сейчас в теме
То есть вот здесь, чтобы нумерация пошла с моего значения и +1
Прикрепленные файлы:
31. пользователь 21.05.19 14:19
Сообщение было скрыто модератором.
...
32. Evgen13 22.05.19 08:41 Сейчас в теме
38. Rish_a 22 23.05.19 12:37 Сейчас в теме
Нужно смотреть отладчиком откуда он берет значение инвентарного номера
40. anitakh 24.05.19 12:27 Сейчас в теме
Кто то из пользователей поменял руками инвентарный номер. Поэтому программа и показывает его не совсем корректно
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот