Автоматическое создание элементов основных средств в справочнике ОС
При поступлении ОС автоматически формируются инвентарные номера.
При отмене проведения документа поступления, основные средства, созданные этим документом, помечаются на удаление.
Как сделать, чтоб при повторном проведении элмементы восстанавливались(убрать пометку удаления) и новые не формировались?
Мой код из помеченных на удаление элементов восстанавливает только первый из созданных документом, а остальные нет :(
Функция ПроверкаУИД();
спрОС=СоздатьОбъект("Справочник.ОсновныеСредства");
спрОС.ВыбратьЭлементы();
Пока спрОС.ПолучитьЭлемент()=1 цикл
Если спрОС.УИД=НомерДок+формат(ДатаДок,"дддммгггг") тогда
СпрОС.СнятьПометкуУдаления();
сообщить("ВОССТАНОВЛЕН "+СпрОС.Код+" "+СпрОС.Наименование);
возврат 1;
КонецЕсли;
КонецЦикла;
КонецФункции
Процедура СоздатьОС()
спрОС=СоздатьОбъект("Справочник.ОсновныеСредства");
Если ПроверкаУИД()=1 тогда
возврат;
КонецЕсли;
ВыбратьСтроки();
Пока получитьСтроку()=1 цикл
Для счетчик=1 по Количество цикл
спрОС.ИспользоватьДату(ДатаДок);
спрОС.Новый();
спрОС.УстановитьНовыйКод("58");
спрОС.Наименование=Номенклатура.Наименование;
СпрОС.УИД=НомерДок+формат(ДатаДок,"дддммгггг");
СпрОС.МОЛ=Сотрудник;
СпрОС.СрокПолезногоИспользования=СрокПолезногоИспользования;
СпрОС.Состояние=Перечисление.СостоянияОС.В_эксплуатации;
...
СпрОС.Записать();
сообщить("Присвоен инв.номер "+спрОС.Код+" "+спрОС.Наименование);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
При отмене проведения документа поступления, основные средства, созданные этим документом, помечаются на удаление.
Как сделать, чтоб при повторном проведении элмементы восстанавливались(убрать пометку удаления) и новые не формировались?
Мой код из помеченных на удаление элементов восстанавливает только первый из созданных документом, а остальные нет :(
Функция ПроверкаУИД();
спрОС=СоздатьОбъект("Справочник.ОсновныеСредства");
спрОС.ВыбратьЭлементы();
Пока спрОС.ПолучитьЭлемент()=1 цикл
Если спрОС.УИД=НомерДок+формат(ДатаДок,"дддммгггг") тогда
СпрОС.СнятьПометкуУдаления();
сообщить("ВОССТАНОВЛЕН "+СпрОС.Код+" "+СпрОС.Наименование);
возврат 1;
КонецЕсли;
КонецЦикла;
КонецФункции
Процедура СоздатьОС()
спрОС=СоздатьОбъект("Справочник.ОсновныеСредства");
Если ПроверкаУИД()=1 тогда
возврат;
КонецЕсли;
ВыбратьСтроки();
Пока получитьСтроку()=1 цикл
Для счетчик=1 по Количество цикл
спрОС.ИспользоватьДату(ДатаДок);
спрОС.Новый();
спрОС.УстановитьНовыйКод("58");
спрОС.Наименование=Номенклатура.Наименование;
СпрОС.УИД=НомерДок+формат(ДатаДок,"дддммгггг");
СпрОС.МОЛ=Сотрудник;
СпрОС.СрокПолезногоИспользования=СрокПолезногоИспользования;
СпрОС.Состояние=Перечисление.СостоянияОС.В_эксплуатации;
...
СпрОС.Записать();
сообщить("Присвоен инв.номер "+спрОС.Код+" "+спрОС.Наименование);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
По теме из базы знаний
- Перенос данных из УПП 1.3 / КА 1.1 в БП 3. Переносятся документы, справочники и начальные остатки
- Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки
- Перенос данных из КА 1.1 в ERP 2. Переносятся остатки, документы и справочники
- Перенос данных из ERP 2/ КА 2 / УТ 11 в УПП 1.3 / КА 1.1 / УТ 10.3. Переносятся все возможные документы и справочники
- Учет ОС и НМА - расширение для конфигурации "INFOSTART ERP community edition"
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Надо сделать так:
Но лучше сделать так:
1. В Справочнике спрОС.УИД - сделать не строкой а ссылкой на документ (Тип = Документ).
2. Установить отбор по реквизиту УИД.
3. Выборку делать по реквизиту УИД
Функция ПроверкаУИД();
спрОС=СоздатьОбъект("Справочник.ОсновныеСредства");
спрОС.ВыбратьЭлементы();
Пока спрОС.ПолучитьЭлемент()=1 цикл
Если спрОС.УИД=НомерДок+формат(ДатаДок,"дддммгггг") тогда
СпрОС.СнятьПометкуУдаления();
сообщить("ВОССТАНОВЛЕН "+СпрОС.Код+" "+СпрОС.Наименование);
КонецЕсли;
КонецЦикла;
возврат 1;
КонецФункции
ПоказатьНо лучше сделать так:
1. В Справочнике спрОС.УИД - сделать не строкой а ссылкой на документ (Тип = Документ).
2. Установить отбор по реквизиту УИД.
3. Выборку делать по реквизиту УИД
Функция ПроверкаУИД();
спрОС=СоздатьОбъект("Справочник.ОсновныеСредства");
спрОС.ВыбратьЭлементыПоРеквизиту("УИД",ТекущийДокумент(),0,0);
Пока спрОС.ПолучитьЭлемент()=1 цикл
СпрОС.СнятьПометкуУдаления();
сообщить("ВОССТАНОВЛЕН "+СпрОС.Код+" "+СпрОС.Наименование);
КонецЕсли;
КонецЦикла;
возврат 1;
КонецФункции
Показать
(4) swk_swetlana, Во-первых в (2) не хватает нулевого возврата, точнее ПроверкаУИД всегда вернет 1, независимо от того есть или нет созданные документом основные средства.
Во - вторых сообщение выдается независимо от того восстановлен ли элемент (то есть без проверки был ли он удален или никто его не трогал).
Нужно так:
И в третьих. Неверна сама логика процесса. Во первых ПроверкаУИД не позволяет установить все ли созданные удаленным документом основные средства восстановлены, то есть мы тупо восстанавливаем некоторое их количество, но не проверяем сколько их и какие они были. Например если мы вводили данным документом Станок и Телефон, потом удалили его, потом передумали и исправили Станок на Авто, Телефон на Компьютер и добавили еще Принтер.
В итоге мы восстановим Станок и Телефон, а Авто,Компьютер и Принтер даже не создадим!
Проверять нужно не перед вводом новых ОС, а по ходу, для каждой позиции, и УИД в этой проверке далеко не главный признак того что ОС уже было создано. Писать всю процедуру мне не когда, да и признаки сравнения, Вы из сути справочника выделите лучше, а как напишете, и не будет работать - выложите я посмотрю.
Во - вторых сообщение выдается независимо от того восстановлен ли элемент (то есть без проверки был ли он удален или никто его не трогал).
Нужно так:
Функция ПроверкаУИД();
Результат = 0;
спрОС=СоздатьОбъект("Справочник.ОсновныеСредства");
спрОС.ВыбратьЭлементы();
Пока спрОС.ПолучитьЭлемент()=1 цикл
Если спрОС.УИД=НомерДок+формат(ДатаДок,"дддммгггг") тогда
Результат = 1;
Если СпрОС.ПометкаУдаления() = 1 Тогда
СпрОС.СнятьПометкуУдаления();
сообщить("ВОССТАНОВЛЕН "+СпрОС.Код+" "+СпрОС.Наименование);
КонецЕсли;
КонецЕсли;
КонецЦикла;
возврат Результат;
КонецФункции
ПоказатьИ в третьих. Неверна сама логика процесса. Во первых ПроверкаУИД не позволяет установить все ли созданные удаленным документом основные средства восстановлены, то есть мы тупо восстанавливаем некоторое их количество, но не проверяем сколько их и какие они были. Например если мы вводили данным документом Станок и Телефон, потом удалили его, потом передумали и исправили Станок на Авто, Телефон на Компьютер и добавили еще Принтер.
В итоге мы восстановим Станок и Телефон, а Авто,Компьютер и Принтер даже не создадим!
Проверять нужно не перед вводом новых ОС, а по ходу, для каждой позиции, и УИД в этой проверке далеко не главный признак того что ОС уже было создано. Писать всю процедуру мне не когда, да и признаки сравнения, Вы из сути справочника выделите лучше, а как напишете, и не будет работать - выложите я посмотрю.
В итоге мы восстановим Станок и Телефон, а Авто,Компьютер и Принтер даже не создадим!
Проверять нужно не перед вводом новых ОС, а по ходу, для каждой позиции, и УИД в этой проверке далеко не главный признак того что ОС уже было создано. Писать всю процедуру мне не когда, да и признаки сравнения, Вы из сути справочника выделите лучше, а как напишете, и не будет работать - выложите я посмотрю.
Проверять нужно не перед вводом новых ОС, а по ходу, для каждой позиции, и УИД в этой проверке далеко не главный признак того что ОС уже было создано. Писать всю процедуру мне не когда, да и признаки сравнения, Вы из сути справочника выделите лучше, а как напишете, и не будет работать - выложите я посмотрю.
Согласен. Я бы проверял на ходу.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот