Имя: Пароль:
1C
1С v8
В ОбработкаПроведения не видно движений документа для последующей работы с ними
0 Повелитель
 
02.04.15
13:07
Конфигурация допилиная управление торговлей 10.3

Ситуация такая.
Есть документ Поступление товаров и услуг, типовые движения.
Есть новый документ "Приемка товара", который должен выполнять 2 действия.
1. В случае если не хватает\лишний товар во время приемки товара, создается типовые документы Списание товаров и оприходование товаров. Это уже реализовано.
2. В документе приемка товара вносят транспортные расходы, которые проводятся этим документом в регистр "Партии товаров на складах". Чем то похоже на документ "Поступление доп. расходов."

Проблема.
В поступлении Товар1 количество 10 по цене 100, итого стоимость 1000 рублей.
При приемке указали транспортные расходы 100 рублей, стоимость составляет 1100 рублей.
Потом создаем Списание товаров. Списывается 1000, а 100 остается висеть. Документ списания не хочет видеть то что мы в обработке проведения только что записали 100 рублей расходов.

Подскажите как быть?

Код примерно такой:

Процедура ОбработкаПроведения(Отказ, РежимПроведения) //Обработка проведения документа Приемка товара
            
        //2015.04.02
        Для Каждого СтрТаб Из мТовары Цикл
            СтрТаб.Стоимость = СтрТаб.Себестоимость-СтрТаб.Стоимость;
            Если СтрТаб.Стоимость = 0 Тогда
                мТовары.Удалить(СтрТаб);
            КонецЕсли;    
        КонецЦикла;    
        СтруктураТаблиц = Новый Структура("ТаблицаТоваров", мТовары);
        ТаблицыДанныхДокумента = ОбщегоНазначения.ЗагрузитьТаблицыДокументаВСтруктуру( Движения.ПартииТоваровНаСкладах, СтруктураТаблиц);
        
        ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "Склад", Склад);
        ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "Количество", 0);
        ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "ДокументОприходования", ПоступлениеТоваров);
        ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "СтатусПартии", Перечисления.СтатусыПартийТоваров.Купленный);
        ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "КодОперации", Перечисления.КодыОперацийПартииТоваров.ПоступлениеРасходовКС);
                
        ОбщегоНазначения.ЗаписатьТаблицыДокументаВРегистр(Движения.ПартииТоваровНаСкладах, ВидДвиженияНакопления.Приход, ТаблицыДанныхДокумента, ПоступлениеТоваров.Дата);
        //----------
        
        //по расхождениям документа создать документы на основании Оприходование товаров и Списание товаров
        НачатьТранзакцию();
        СоздатьОприходование();
        СоздатьСписаниеТоваров();    //Дата списания на 1 секунду больше, чем дата документа Приемка товара    
        ЗафиксироватьТранзакцию();
    
КонецПроцедуры // ОбработкаПроведения()


Если вынести:
НачатьТранзакцию();
        СоздатьОприходование();
        СоздатьСписаниеТоваров();    //Дата списания на 1 секунду больше, чем дата документа Приемка товара    
        ЗафиксироватьТранзакцию();

В процедуру формы ПослеЗаписи, то работает, но так мы делать не будем.
1 DrShad
 
02.04.15
13:11
да и вообще так делать как вы неправильно
2 asady
 
02.04.15
13:14
(0) транзакция ещё не завершена поэтому и не видно.
Ты тупо ручками допиши код который учтет твои 5 копеек в этой транзакции - тебе же надо искать эти данные они у тебя уже есть.
3 Повелитель
 
02.04.15
13:15
(1) Подскажите как правильно, в двух словах?
4 DrShad
 
02.04.15
13:16
(3) в двух словах - нельзя начинать транзакцию в еще не завершенной другой, а вы их аж две начинаете
5 Повелитель
 
02.04.15
13:16
(2) Понимаю что транзакция.
Решение видим такое, не создавать типовые документы, а в регистр писать самим. Это имеете ввиду?
6 DrShad
 
02.04.15
13:17
(5) нет, имеется в виду разделить транзакции
7 Повелитель
 
02.04.15
13:19
(6) Каким образом их можно разделить если ОбработкаПроведения() проходит в одной транзакции.
Подписка события ОбработкаПроведения, тоже все в той же.
8 DrShad
 
02.04.15
13:20
ну вариантов может быть масса
9 Повелитель
 
02.04.15
13:24
(8) Поделитесь, я пока вариантов не вижу, кроме как все движения самому создавать, пока этого делать не хочется.
10 DrShad
 
02.04.15
13:27
(9) можно реализовать что-то типа отложенного проведения как в УПП
11 butterbean
 
02.04.15
13:29
(0) убрать автоматическую запись движений и записывать самим
12 hhhh
 
02.04.15
13:30
(9) всё-таки ПослеЗаписи рулит. Непонятно, что у вас за религия там, что не пользуетесь.
13 Повелитель
 
02.04.15
13:32
(12) Потому что этого метода нет в модуле объекта.
А так бы да с радостью ))
14 Повелитель
 
02.04.15
13:33
Мы же не всегда из формы документ проводим.
15 Повелитель
 
02.04.15
13:34
(10) Проще думаю свои движения организовать.
(11) Сомневаюсь что поможет, транзакция ОбработкаПроведения()  все равно ведь будет.
16 DrShad
 
02.04.15
13:35
(15) ну тогда флаг вам в руки
17 butterbean
 
02.04.15
13:36
(15) поможет, записи уже будут в регистрах и запрос вытащит остатки как надо
18 Повелитель
 
02.04.15
13:38
(17) Спасибо, попробуем сейчас
19 hhhh
 
02.04.15
13:41
(14) если не из формы, то не надо ничего создавать документы. Например юзер просто перепроводит документы, там ничего не надо создавать. Только при проведении из формы.
20 ssh2006
 
02.04.15
13:44
(7) к слову, вложенная транзакция не нужна, и так в транзакции все выполняется.
21 Повелитель
 
02.04.15
14:03
(20) Согласен, это лишнее.
(19) Так попробовали. Если из формы проводить то да работает. Если даже ничего не менять в форме, а провести документ Приемка товара из списка, то 100 рублей транспортных остается висеть.
22 Повелитель
 
02.04.15
14:05
(16) Подумал, да неплохой тоже вариант. С одной стороны простой.
23 ssh2006
 
02.04.15
14:08
(21) напиши перед вызовом процедур создания документов
Движения.ПартииТоваровНаСкладах.Записать();

А так, не очень это хорошо, потом еще раз движения записаны будут автоматически. Переделывать на Записывать Выбранные
24 Повелитель
 
03.04.15
06:59
(23) Спасибо. Это решило данную задачу.
Всем спасибо за помощь.
Тему можно закрывать.