|   |   | 
| 
 | Обработка проведения - не могу понять поведение | ☑ | ||
|---|---|---|---|---|
| 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 | 
        обращайся     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |