Имя: Пароль:
1C
 
Остаток после проведения документа
0 aleks100
 
19.02.15
13:25
В в самом конце обработке проведения выборка по регистру остатки товаров на складе документа показывает остаток до проведения документа,почему?Транзакция не завершилась?
Просто надо было в документ записать остатки после проведения данного документа..
1 butterbean
 
19.02.15
13:27
записывать надо по ходу проведения
2 aleks100
 
19.02.15
13:29
в смысле?
3 palpetrovich
 
19.02.15
13:31
наверное будет нелишним озвучить конфигурацию. Ну и когда, в какой момент происходит " в документ записать остатки "
4 aleks100
 
19.02.15
13:34
ут 10.3 после // Движения по документу
    Если Не Отказ Тогда
        ДвиженияПоРегистрам(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоТаре, Отказ, Заголовок);
        // процедура в которой происходит запись
        ДополнениеДляПеремещения()    
        //
    КонецЕсли;
5 aleks100
 
19.02.15
13:38
может просто выбирать остатки до проведения документа и вычитая перемещаемый товар(документ перемещения)?
6 palpetrovich
 
19.02.15
13:42
(5) наверное надо попробовать вынести ДополнениеДляПеремещения из ОбработкаПроведения в другую поцедуру
7 Timon1405
 
19.02.15
13:43
(5) а может запилить подписку?
8 palpetrovich
 
19.02.15
13:45
(7) подписка не спасет, хотя такие, левые действия, лучше в подписку
9 aleks100
 
19.02.15
13:48
(6) мне сказали делать изменения именно в обработке проведения
10 vicof
 
19.02.15
13:49
"по регистру остатки товаров на складе документа показывает остаток до проведения документа"
как узнал?
11 ShoGUN
 
19.02.15
13:50
(9) Если уверен, что остаток правильно получаешь, то делай Движения.Записать() и дальше пляши.
12 D_E_S_131
 
19.02.15
13:52
(0) А если в отладчике остановиться после проведения, но ДО получения остатков, постоять секунду и прочитать остатки, то поменяется результат?
13 Крошка Ру
 
19.02.15
13:53
(0) Да, транзакция не завершилась
14 aleks100
 
19.02.15
13:56
(10) устанавливал точку остатовкив процедуре ДополнениеДляПеремещения()  и в запросе проверял  

Процедура ДополнениеДляПеремещения()
    
    Если ТипЦен=Справочники.ТипыЦенНоменклатуры.ПустаяСсылка() Тогда
        ТипЦен = Константы.ютТипЦены.Получить();                
        
    КонецЕсли;                              

    //  выбираю остатки до проведения документа и вычитая перемещаемый товар
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ПеремещениеТоваровТовары.НомерСтроки КАК НомерСтроки,
                   |    ПеремещениеТоваровТовары.Номенклатура,
                   |    ПеремещениеТоваровТовары.Количество,
                   |    ЕСТЬNULL(Цены.Цена, 0) КАК Цена,
                   |    ЕСТЬNULL(Остаток.КоличествоОстаток, 0) - ПеремещениеТоваровТовары.Количество КАК КоличествоОстаток,
                   |    ПеремещениеТоваровТовары.Количество * ЕСТЬNULL(Цены.Цена, 0) КАК Сумма
                   |ИЗ
                   |    Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
                   |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   |            ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
                   |            ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
                   |        ИЗ
                   |            РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
                   |                    &дата,
                   |                    Номенклатура В
                   |                            (ВЫБРАТЬ
                   |                                ПеремещениеТоваровТовары.Номенклатура
                   |                            ИЗ
                   |                                Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
                   |                            ГДЕ
                   |                                ПеремещениеТоваровТовары.Ссылка = &Ссылка)
                   |                        И типцен = &типцен) КАК ЦеныНоменклатурыСрезПоследних) КАК Цены
                   |        ПО ПеремещениеТоваровТовары.Номенклатура = Цены.Номенклатура
                   |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   |            ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
                   |            ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
                   |        ИЗ
                   |            РегистрНакопления.ТоварыНаСкладах.Остатки(
                   |                    &дата,
                   |                    Номенклатура В
                   |                            (ВЫБРАТЬ
                   |                                ПеремещениеТоваровТовары.Номенклатура
                   |                            ИЗ
                   |                                Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
                   |                            ГДЕ
                   |                                ПеремещениеТоваровТовары.Ссылка = &Ссылка)
                   |                        И склад = &склад) КАК ТоварыНаСкладахОстатки) КАК Остаток
                   |        ПО ПеремещениеТоваровТовары.Номенклатура = Остаток.Номенклатура
                   |ГДЕ
                   |    ПеремещениеТоваровТовары.Ссылка = &Ссылка
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    НомерСтроки";
    
    
    Граница = Новый Граница(ссылка.МоментВремени(), ВидГраницы.Исключая);
    
    Запрос.УстановитьПараметр("Дата", Граница);
    Запрос.УстановитьПараметр("Дата",ТекущаяДата() );    
    Запрос.УстановитьПараметр("Ссылка",Ссылка );
    Запрос.УстановитьПараметр("Типцен",ТипЦен );
    Запрос.УстановитьПараметр("Склад",СкладОтправитель );
    

    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл             
        Текстрока=Товары.Получить(выборка.номерстроки-1);
        Текстрока.ЦенаОпт = Выборка.Цена;
        Текстрока.ОстатокПосле = Выборка.КоличествоОстаток ;
        Текстрока.Сумма = Выборка.Сумма;        

        
    КонецЦикла;
    
    Записать(РежимЗаписиДокумента.Запись);    
    
КонецПроцедуры
15 palpetrovich
 
19.02.15
13:57
(9) кто сказал? или это тестовая задача? ну, ежели низзя в других - тогда считай :)
хотя, после проведения, из формы вызываются
ПриЗаписи
ПослеЗаписи
ПередЗакрытием
ПриЗакрытии
16 aleks100
 
19.02.15
14:00
(16) руководитель,ну если можно в другом месте можно попробовать
17 vicof
 
19.02.15
14:02
(14) см (1)
18 palpetrovich
 
19.02.15
14:05
(17) ваще-т, там в
ДвиженияПоРегистрам(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоТаре, Отказ, Заголовок);
конечно-же присутсвует что-то типа
Движения.ТутЧтоТоНЕЗнюЧто.Записать(Истина);
19 D_E_S_131
 
19.02.15
14:06
(13) Не обязательно. Если допускается "грязное чтение", то можно и не ждать завершения транзакции. А вот не успеть посчитаться итог вполне мог.
20 aleks100
 
19.02.15
15:02
()В книге радченко и хрусталевой по контролю остатков посмотрел  надо было добавить    движения.записать();  

  Если Не Отказ Тогда
        ДвиженияПоРегистрам(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоТаре, Отказ, Заголовок);

        движения.записать();  
        ДополнениеДляПеремещения()    
        //

    КонецЕсли;
21 aleks100
 
19.02.15
15:04
Радченко и Хрусталева Практическое пособие разработчика,контроль остатков
22 Dmitrii
 
гуру
19.02.15
15:08
(0) > в документ записать остатки после проведения данного документа

Феерический маразм.
Для хранения показателей состояния существует отдельный класс объектов, который называется Регистры сведений.

Хотя сама задача - бред еще тот...
23 D_E_S_131
 
19.02.15
15:24
(20) А в обработке проведения до этого не было такого кода с записью движений?
24 D_E_S_131
 
19.02.15
15:26
Хотя ступил...
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн