![]() |
![]() |
![]() |
|
Обработка проведения - не могу понять поведение | ☑ | ||
---|---|---|---|---|
0
live in sky dreams
27.06.13
✎
14:32
|
Суть задачи - по факту проведения "партияобразующего" дока - проверить было ли заполнено значение партии товара в ТЧ товаров.
Если не заполнено - проверить нет ли партии, созданной этим доком. -Если партия такая есть(док был распроведен, потом снова проводим) - то просто подставить ее в строку ТЧ, реквизит "партия". -Если такой партии нет(окумент новый) - то создать партию и подставить в строку ТЧ так же в реквизит "партия". Условия: Использовать подписки на события + общие модули, код поставки своими каракулями не осквернять :) Трабла: Проводим док интерактивно. Поведение по кнопке "провести": все отрабатывает согласно задачи. Все заполняется, все прекрасно. Проводим док интерактивно. Проведение по кнопке "Провести и закрыть": 1) В случае, если такой партии ранее не было, - партия создается, в реквизит "партия" ТЧ товаров не добавляется. 2) В случае, если такая партия уже была создана, - так же в реквизит "партия" ТЧ товаров не добавляется. Код механизма (Общий модуль): Функция СоздатьНовуюПартиюЗапаса(Запас, ДокументСсылка, ВладелецПартии) ДокументОбъект = ДокументСсылка.ПолучитьОбъект(); НоваяПартия = Справочники.ПартииНоменклатуры.СоздатьЭлемент(); НоваяПартия.ВладелецПартии = ВладелецПартии; НоваяПартия.Владелец = Запас; НоваяПартия.ФА_Документ = ДокументСсылка; НоваяПартия.Наименование = ДокументОбъект.Метаданные().Синоним + " №" + ДокументСсылка.Номер + " от " + Формат(ДокументСсылка.Дата, "ДФ=""дд.ММ.гг 'г.'"""); НоваяПартия.Записать(); Возврат НоваяПартия.Ссылка КонецФункции Процедура ОпределитьПартиюЗапаса(СтрокаТЧЗапасы, СсылкаНаДокумент) ТекущийЗапас = СтрокаТЧЗапасы.Номенклатура; ТекущийВладелец = Неопределено; //Задаем владельца партии на случай, если таковой может быть определен //Элемент справочника контрагенты, указаный в документе, образующем партию. Если ТипЗнч(СсылкаНаДокумент) = Тип("ДокументСсылка.ПриходнаяНакладная") ИЛИ ТипЗнч(СсылкаНаДокумент) = Тип("ДокументСсылка.ФА_ОтчетПрораба") Тогда ТекущийВладелец = СсылкаНаДокумент.Контрагент; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | Партия.Ссылка КАК Партия |ИЗ | Справочник.ПартииНоменклатуры КАК Партия |ГДЕ | Партия.ФА_Документ = &ТекущийДокумент | И Партия.Владелец = &ТекущийЗапас"; Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаДокумент); Запрос.УстановитьПараметр("ТекущийЗапас", ТекущийЗапас); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда ПартияЗапаса = СоздатьНовуюПартиюЗапаса(ТекущийЗапас, СсылкаНаДокумент, ТекущийВладелец); Иначе ПартияЗапаса = РезультатЗапроса.Выгрузить()[0].Партия; КонецЕсли; СтрокаТЧЗапасы.Партия = ПартияЗапаса; КонецПроцедуры Процедура ФА_КонтрольПартийОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт Для Каждого СтрокаТЧЗапасы из Источник.Запасы Цикл Если НЕ ЗначениеЗаполнено(СтрокаТЧЗапасы.Партия) Тогда ОпределитьПартиюЗапаса(СтрокаТЧЗапасы, Источник.Ссылка); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
1
live in sky dreams
27.06.13
✎
14:32
|
Точка входа: Процедура "ФА_КонтрольПартийОбработкаПроведения"
|
|||
2
live in sky dreams
27.06.13
✎
14:34
|
То есть кратко и просто: Жмакаем "провести" - все прекрасно заполняется, жмакаем "провести и закрыть" - не заполняется ТЧ.
|
|||
3
Cyberhawk
27.06.13
✎
14:36
|
А что за "Провести и закрыть"? УФ что ли?
|
|||
4
live in sky dreams
27.06.13
✎
14:36
|
Ога.
|
|||
5
live in sky dreams
27.06.13
✎
14:38
|
Сори не указал:
Платформа 1с: 8.2.18.61 УФ тонкий клиент |
|||
6
Cyberhawk
27.06.13
✎
14:39
|
А проведение из списка документов подхватывается?
|
|||
7
samozvanec
27.06.13
✎
14:40
|
а если нажать провести, а потом уже - закрыть?
|
|||
8
live in sky dreams
27.06.13
✎
14:41
|
(6)Что ты имеешь ввиду?
Срабатывает ли подписка на событие? Если так - то да, срабатывает Иначе Не понял что ты имеешь ввиду КонецЕсли |
|||
9
live in sky dreams
27.06.13
✎
14:41
|
(7) тогда все работает
|
|||
10
live in sky dreams
27.06.13
✎
14:43
|
В толстом клиенте такая ж фигня.
В момент проведения загрузил вот еще систему (Win) по полной. Поймал момент - увидел что реквизит "партия" в ТЧ перед самим закрытием реально заполняется. Тут же открываю этот док - реквизит не заполнен |
|||
11
live in sky dreams
27.06.13
✎
14:45
|
+в движениях документа значение реквизита "Партия" не фигурирует.
Ну не писать же ему насильно в обработке проведения Записать()? |
|||
12
Cyberhawk
27.06.13
✎
14:51
|
Скрой кнопку "Провести и закрыть" из УФ, и будет счастье
|
|||
13
samozvanec
27.06.13
✎
14:51
|
после подписки твоей что происходит?
|
|||
14
live in sky dreams
27.06.13
✎
14:56
|
(12)
- Доктор, у меня болит рука; - Сестра, ножовку мне и лидокаин! :) (13)ээээ... а вот это интересно. Что раньше? Подписка или сам метод проведения? |
|||
15
samozvanec
27.06.13
✎
15:03
|
(14) вот смотри. сначала отрабатывает проведение, потом подписка. на последней строке точку поставь и глянь, что там вообще на этот момент? есть разница, на какую кнопку жать?
|
|||
16
live in sky dreams
27.06.13
✎
15:08
|
ща
|
|||
17
live in sky dreams
27.06.13
✎
15:15
|
Точка останова - "КонецПроцедуры" в подписке.
результат в отладчике: 1) "Провести и закрыть" - Все значения в ТЧ заполнены как надо. 2) "Провести" - Все значения в ТЧ заполнены как надо. результат в интерактиве: 1) "Провести и закрыть" - перед тем как форма закрывается видно, что значение реквизита "партия" в ТЧ заполняется. После открытия дока - значение реквизита "партия" в ТЧ не заполнено. В проводках так же "партия" пустая. 2) "Провести" - Значение реквизита ТЧ "партия" заполняется. Если документ закрыть, затем снова открыть - реквизит не заполнено о.О (ранее не проверял). |
|||
18
live in sky dreams
27.06.13
✎
15:17
|
Я так понимаю, что на момент проведения что либо пихать или менять в доке бессмысленно. Надо до записи еще менять. НО:
1) В подписках нет метода "ПередЗаписью". 2) Создавать элемент справочника "Партии" и подставлять их в ТЧ нужно только если документ не был проведен И проводится. Как решить задачу? :( |
|||
19
live in sky dreams
27.06.13
✎
15:21
|
Проведен или нет документ я могу в подписке "ПриЗаписи" впихнуть в структуру "ДополнительныеСвйства".
Загвоздка в том, что Узнать проводится док или просто записывается - можно только "ПередЗаписью". В методе "ПриЗаписи" это значение недоступно. То есть тут в подписке этого не узнать получается. Как можно еще узнать РежимЗаписиДокумента? |
|||
20
live in sky dreams
27.06.13
✎
15:23
|
Ой, че я нему. ПередЗаписью в подписках же есть. Ща попробую
|
|||
21
live in sky dreams
27.06.13
✎
15:32
|
Вроде решил как выполнить задачу.
В подписке "ПередЗаписью" 1)Узнаю проводится док или записывается. 2)Узнаю был ли док до настоящего действия проведен. 3)Если условия удовлетворяют(не был проведен и становится проведен), то запускаю требуемые действия по созданию и подстановке партий в ТЧ дока. Вроде выглядит стройно |
|||
22
live in sky dreams
27.06.13
✎
15:37
|
Да, все работает, всем спасибо! =)
|
|||
23
samozvanec
27.06.13
✎
15:39
|
обращайся
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |