Автоматическое создание элементов основных средств в справочнике ОС

1. swk_swetlana 1 15.12.11 12:22 Сейчас в теме
При поступлении ОС автоматически формируются инвентарные номера.
При отмене проведения документа поступления, основные средства, созданные этим документом, помечаются на удаление.
Как сделать, чтоб при повторном проведении элмементы восстанавливались(убрать пометку удаления) и новые не формировались?
Мой код из помеченных на удаление элементов восстанавливает только первый из созданных документом, а остальные нет :(

Функция ПроверкаУИД();
спрОС=СоздатьОбъект("Справочник.ОсновныеСредства");
спрОС.ВыбратьЭлементы();
Пока спрОС.ПолучитьЭлемент()=1 цикл
Если спрОС.УИД=НомерДок+формат(ДатаДок,"дддммгггг") тогда
СпрОС.СнятьПометкуУдаления();
сообщить("ВОССТАНОВЛЕН "+СпрОС.Код+" "+СпрОС.Наименование);
возврат 1;
КонецЕсли;
КонецЦикла;
КонецФункции

Процедура СоздатьОС()
спрОС=СоздатьОбъект("Справочник.ОсновныеСредства");

Если ПроверкаУИД()=1 тогда
возврат;
КонецЕсли;

ВыбратьСтроки();
Пока получитьСтроку()=1 цикл
Для счетчик=1 по Количество цикл
спрОС.ИспользоватьДату(ДатаДок);
спрОС.Новый();
спрОС.УстановитьНовыйКод("58");
спрОС.Наименование=Номенклатура.Наименование;
СпрОС.УИД=НомерДок+формат(ДатаДок,"дддммгггг");
СпрОС.МОЛ=Сотрудник;
СпрОС.СрокПолезногоИспользования=СрокПолезногоИспользования;
СпрОС.Состояние=Перечисление.СостоянияОС.В_эксплуатации;
...
СпрОС.Записать();
сообщить("Присвоен инв.номер "+спрОС.Код+" "+спрОС.Наименование);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. pvase 401 15.12.11 12:30 Сейчас в теме
Надо сделать так:
Функция ПроверкаУИД(); 
	спрОС=СоздатьОбъект("Справочник.ОсновныеСредства"); 
	спрОС.ВыбратьЭлементы(); 
	Пока спрОС.ПолучитьЭлемент()=1 цикл 
		Если спрОС.УИД=НомерДок+формат(ДатаДок,"дддммгггг") тогда 
			СпрОС.СнятьПометкуУдаления(); 
			сообщить("ВОССТАНОВЛЕН "+СпрОС.Код+" "+СпрОС.Наименование); 
		КонецЕсли; 
	КонецЦикла; 
	возврат 1; 
КонецФункции
Показать

Но лучше сделать так:
1. В Справочнике спрОС.УИД - сделать не строкой а ссылкой на документ (Тип = Документ).
2. Установить отбор по реквизиту УИД.
3. Выборку делать по реквизиту УИД
Функция ПроверкаУИД(); 
	спрОС=СоздатьОбъект("Справочник.ОсновныеСредства"); 
	спрОС.ВыбратьЭлементыПоРеквизиту("УИД",ТекущийДокумент(),0,0); 
	Пока спрОС.ПолучитьЭлемент()=1 цикл 
		СпрОС.СнятьПометкуУдаления(); 
		сообщить("ВОССТАНОВЛЕН "+СпрОС.Код+" "+СпрОС.Наименование); 
		КонецЕсли; 
	КонецЦикла; 
	возврат 1; 
КонецФункции
Показать
3. swk_swetlana 1 15.12.11 12:40 Сейчас в теме
первый вариант восстанавливает помеченные на удаление элементы и создает еще такое же количество новых. Так мне не нужно.
Второй вариант попробую сделать.
4. swk_swetlana 1 15.12.11 12:41 Сейчас в теме
хотя, думаю и со вторым вариантом будет то же самое
6. dusha0020 1107 15.12.11 15:42 Сейчас в теме
(4) swk_swetlana, Во-первых в (2) не хватает нулевого возврата, точнее ПроверкаУИД всегда вернет 1, независимо от того есть или нет созданные документом основные средства.
Во - вторых сообщение выдается независимо от того восстановлен ли элемент (то есть без проверки был ли он удален или никто его не трогал).
Нужно так:

Функция ПроверкаУИД();
   Результат = 0; 
   спрОС=СоздатьОбъект("Справочник.ОсновныеСредства"); 
   спрОС.ВыбратьЭлементы(); 
   Пока спрОС.ПолучитьЭлемент()=1 цикл 
      Если спрОС.УИД=НомерДок+формат(ДатаДок,"дддммгггг") тогда 
         Результат = 1;
         Если СпрОС.ПометкаУдаления() = 1 Тогда
              СпрОС.СнятьПометкуУдаления(); 
              сообщить("ВОССТАНОВЛЕН "+СпрОС.Код+" "+СпрОС.Наименование);
         КонецЕсли; 
      КонецЕсли; 
   КонецЦикла; 
   возврат Результат; 
КонецФункции
Показать


И в третьих. Неверна сама логика процесса. Во первых ПроверкаУИД не позволяет установить все ли созданные удаленным документом основные средства восстановлены, то есть мы тупо восстанавливаем некоторое их количество, но не проверяем сколько их и какие они были. Например если мы вводили данным документом Станок и Телефон, потом удалили его, потом передумали и исправили Станок на Авто, Телефон на Компьютер и добавили еще Принтер.
В итоге мы восстановим Станок и Телефон, а Авто,Компьютер и Принтер даже не создадим!
Проверять нужно не перед вводом новых ОС, а по ходу, для каждой позиции, и УИД в этой проверке далеко не главный признак того что ОС уже было создано. Писать всю процедуру мне не когда, да и признаки сравнения, Вы из сути справочника выделите лучше, а как напишете, и не будет работать - выложите я посмотрю.
5. kouki 15.12.11 12:54 Сейчас в теме
Да второй тоже самое будет
7. dmitriy_d 15.12.11 17:21 Сейчас в теме
В итоге мы восстановим Станок и Телефон, а Авто,Компьютер и Принтер даже не создадим!
Проверять нужно не перед вводом новых ОС, а по ходу, для каждой позиции, и УИД в этой проверке далеко не главный признак того что ОС уже было создано. Писать всю процедуру мне не когда, да и признаки сравнения, Вы из сути справочника выделите лучше, а как напишете, и не будет работать - выложите я посмотрю.

Согласен. Я бы проверял на ходу.
Оставьте свое сообщение

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