|
Странно отрабатывает "Проведен" | ☑ | ||
---|---|---|---|---|
0
Nillos
10.10.19
✎
17:23
|
Почему, Если отменить проведенный документ, при проверке на Документ.Проведен выдает Истину?
Процедура ОбработкаПроведения(Отказ, Режим) Если ЭтотОбъект.Проведен Тогда Отказ = Истина; КонецЕсли; КонецПроцедуры Отменил проведение, Документ в статусе "Записан" (Без галочки), пытаюсь провести снова, выдает ошибку (Отказ). Ведь документ не проведен по идее. |
|||
1
Волшебник
10.10.19
✎
17:24
|
Убери эту строчку. Дай ему нормально провестись повторно.
|
|||
2
dka80
10.10.19
✎
17:28
|
При записи с проведением, кроме обычных действий, выполняемых при записи, выполняется установка значения Истина в поле Проведен и вызов обработчика ОбработкаПроведения().
Т.е сначала устанавливается признак, а потом обработка проведения https://its.1c.ru/db/metod8dev#content:2713:hdoc |
|||
3
hhhh
10.10.19
✎
17:28
|
(0) ты не поверишь, сначала заполняется поле Проведен, а потом уже запускается ОбработкаПроведения(). Поэтому твой метод не прокатит.
|
|||
4
RomanYS
10.10.19
✎
17:30
|
(0) проверяй ПередЗаписью или в обработке проверки заполнения (только для проведения из форм)
|
|||
5
Nillos
10.10.19
✎
17:30
|
(1) При проведении у меся списывается оборудование со склада. если повторно провести, то оно спишется еще на одну позицию. И так можно списать одним проведенным документом весь склад. Поэтому и хочу ограничить повторное проведение.
|
|||
6
dka80
10.10.19
✎
17:32
|
(5) эээ как бы логика хромает. При отмене проведения движения не отменяются что ли? Я бы над логикой подумал сначала
|
|||
7
RomanYS
10.10.19
✎
17:34
|
(5) оригинально. Поставь флаг очищать движения
|
|||
8
Nillos
10.10.19
✎
17:37
|
(6) При отмене проведения, движения очищаются. Дело в другом. Если документ проведен и перепровести его ещё раз, то оборудование списывается со склада и так до бесконечности, пока оборудование не закончится.
|
|||
9
dka80
10.10.19
✎
17:39
|
(8) значит не очищаются. Посмотри твой регистр накопления
|
|||
10
Nillos
10.10.19
✎
17:40
|
Вот код:
Просто документ записывает не в один регистр. При отмене проведения один регистр очищается, второй нет. Процедура ОбработкаПроведения(Отказ, Режим) Движения.РСЗаявки.Записывать = Истина; Движение = Движения.РСЗаявки.Добавить(); Движение.Статус = Статус; Движение.Мастер = Мастер; Движение.ДатаВыполнения = ДатаВыполнения; Движение.Комментарий = Комментарий; Движение.Период = Дата; Если Статус = Перечисления.СтатусЗаказа.Выполнен Тогда Для Каждого Строка Из Оборудование Цикл Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РНСкладаМонтажниковОстатки.Монтажник КАК Монтажник, | РНСкладаМонтажниковОстатки.Оборудование КАК Оборудование, | РНСкладаМонтажниковОстатки.КоличествоОстаток КАК КоличествоОстаток, | РНСкладаМонтажниковОстатки.ЦенаОстаток КАК Цена, | РегистрНЗакупок.ЗакупочнаяЦена КАК ЗакупочнаяЦена |ИЗ | РегистрНакопления.РНСкладаМонтажников.Остатки КАК РНСкладаМонтажниковОстатки, | РегистрНакопления.РегистрНЗакупок КАК РегистрНЗакупок |ГДЕ | РНСкладаМонтажниковОстатки.Оборудование = &Оборудование | И РНСкладаМонтажниковОстатки.Монтажник = &Монтажник | И РегистрНЗакупок.Оборудование = &Оборудование"; Запрос.УстановитьПараметр("Оборудование", Строка.Оборудование); Запрос.УстановитьПараметр("Монтажник", Мастер); Выборка = Запрос.Выполнить(); Если Выборка.Пустой() Тогда Сообщить(Строка.Оборудование.Наименование + " нет на складе " + Мастер); Отказ = Истина; Возврат; Иначе Выборка = Запрос.Выполнить().Выгрузить(); КонецЕсли; КоличествоСпис = Строка.Количество; // Списываемое количество Для Нмр = 0 По (Выборка.Количество()-1) Цикл СтрВыборка = Выборка.Получить(Нмр); СтрВыборкаКол_во = СтрВыборка.КоличествоОстаток; // Остаок на складе Если СтрВыборкаКол_во >= КоличествоСпис И СтрВыборкаКол_во > 0 Тогда //РС УстановленноеОборудование Движения.РСУстановленноеОборудование.Записывать = Истина; Движение = Движения.РСУстановленноеОборудование.Добавить(); Движение.Мастер = Мастер; Движение.ДатаВыполнения = ДатаВыполнения; Движение.Оборудование = СтрВыборка.Оборудование; Движение.Количество = КоличествоСпис; Движение.ЦенаПродажи = СтрВыборка.Цена; Движение.ЦенаЗакупочная = СтрВыборка.ЗакупочнаяЦена; Движение.Период = Дата; //Расход со склада монтажника Движения.РНСкладаМонтажников.Записывать = Истина; Движение = Движения.РНСкладаМонтажников.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Монтажник = Мастер; Движение.Оборудование = СтрВыборка.Оборудование; Движение.ДатаПеремещения = Дата; Движение.Количество = КоличествоСпис; Движение.СоСклада = Ссылка; Прервать; Сообщить("Оборудование списано со склада " + Мастер); Иначе НеХватает = КоличествоСпис - СтрВыборкаКол_во; Сообщить("Для списания оборудования не хватает " + Строка.Оборудование + " в количестве " + НеХватает + " шт!"); Отказ = Истина; Возврат; КонецЕсли; КонецЦикла; КонецЦикла; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПриЗаписи(Отказ) Оповестить("ОбновлениеОтчетов", "Обновить", "Заявки"); Если ЭтотОбъект.Ссылка.ПолучитьОбъект().Проведен Тогда Отказ = Истина; Сообщение("Для повторного проведения необходимо сначала снять документ с проведения"); Возврат; КонецЕсли; КонецПроцедуры |
|||
11
3achem
10.10.19
✎
17:40
|
(5) уволен
|
|||
12
RomanYS
10.10.19
✎
17:41
|
(8) У тебя стоит "Удалять автоматически при отмене проведения", нужно "Удалять автоматически". Если конечно нет другой логики расчитанной на ручное удаление движений
|
|||
13
Жан Пердежон
10.10.19
✎
17:42
|
(10) на курсы сходи, книжки почитай, в типовых посмотри примеры
|
|||
14
H A D G E H O G s
10.10.19
✎
17:48
|
А хлопец хорош, отличную западлюху закопал будущему прогу.
Если это выйдет в продакшн, это прям, ммммм, персик! |
|||
15
Nillos
10.10.19
✎
17:50
|
(11) Да я это для себя делаю для развития, а не для кого-то.
Наткнулся на проблему, интересно, как она решается. Вот и спрашиваю у мастеров 1С |
|||
16
Nillos
10.10.19
✎
17:54
|
(12) Спасибо за решение проблемы! Как раз было "Удалять автоматически при отмене проведения".
"Удалять автоматически" - работает, как мне нужно. |
|||
17
RomanYS
10.10.19
✎
17:59
|
(16) Пожалуйста. Столько новых костылей не выросло))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |