Имя: Пароль:
1C
1С v8
Как получать остатки в модуле проведения с учетом выполненных движений в рег
,
0 oleg_prg
 
28.10.12
17:28
Добрый день Подскажите пожалуйста, можно ли в модуле проведения получать остатки с учетом проведения
например: см.комментарии

Процедура ОбработкаПроведения(Отказ, Режим)
Для Каждого ТекСтрокаТовары Из Товары Цикл
       Если ТекСтрокаТовары.Номенклатура.Комиссионный = Истина Тогда
           Продолжить;
       КонецЕсли;        
       
       ТЗ = ПолучитьОстатки();  //!!!!Получаю остатки до проведения
       
       ПартияОпт = Справочники.ол_ПартияОпт.ПустаяСсылка();
       
       Движение = Движения.Хозрасчетный.Добавить();
       Движение.Период        = Дата;
       Движение.Организация    = Организация;            
       Движение.СчетДт        = ПланыСчетов.Хозрасчетный.НайтиПоКоду("000");
       Движение.СчетКт        = ТекСтрокаТовары.СчетДебет;        
       Движение.СубконтоКт[Движение.СчетКт.ВидыСубконто[0].ВидСубконто] = ТекСтрокаТовары.Номенклатура;
       Движение.СубконтоКт[Движение.СчетКт.ВидыСубконто[1].ВидСубконто] = СкладОтправитель;    
       Движение.СубконтоКт[Движение.СчетКт.ВидыСубконто[2].ВидСубконто] = ПартияОпт;                    
       Движение.КоличествоКт    = ТекСтрокаТовары.Количество;
       Движение.Сумма            = 100;
       Движение.Содержание        = "Перемещены товары";
       
       Движения.Хозрасчетный.Записать();
       
       ТЗ = ПолучитьОстатки();  //!!!!Получаю остатки после проведения, и ничего не изменилось, как получить остаток с учетом проведения????
               
   КонецЦикла;
КонецПроцедуры
1 oleg_prg
 
28.10.12
17:30
Дополнение, вот функция которая получает остатки

Функция ПолучитьОстатки()
   
   Запрос = новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    ХозрасчетныйОстатки.Субконто1,
                  |    ХозрасчетныйОстатки.Субконто2,
                  |    ХозрасчетныйОстатки.Субконто3,
                  |    ХозрасчетныйОстатки.КоличествоОстаток,
                  |    ХозрасчетныйОстатки.Организация
                  |ИЗ
                  |    РегистрБухгалтерии.Хозрасчетный.Остатки(
                  |            &Дата,
                  |            Счет = &Счет,
                  |            ,
                  |            Субконто1 = (&МассивНоменклатуры)
                  |                И Субконто2 = &Склад) КАК ХозрасчетныйОстатки
                  |ГДЕ
                  |    (ХозрасчетныйОстатки.Организация = &Организация) и (ХозрасчетныйОстатки.Субконто3.Характеристика = &Характеристика)";
   Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01"));
   Запрос.УстановитьПараметр("Дата", КонецДня(Дата));
   Запрос.УстановитьПараметр("Склад", СкладОтправитель);
   Запрос.УстановитьПараметр("Организация", Организация);
   Запрос.УстановитьПараметр("Характеристика", Справочники.ол_ХарактеристикаНоменклатуры.НайтиПоКоду("000000005"));
   Запрос.УстановитьПараметр("МассивНоменклатуры", Справочники.Номенклатура.НайтиПоКоду("1111104"));
   ТЗ = Запрос.Выполнить().Выгрузить();
   Возврат ТЗ;
КонецФункции
2 oleg_prg
 
28.10.12
17:43
В 1С7.7. можно было в модуле проведения написать Операция.Записать(); и после этого остатки можно получить с учетом проведения, а как это сделать в 1С8 и вообще, реально ли это?
3 Живой Ископаемый
 
28.10.12
17:58
dj первых копро-код детектед

ГДЕ
                  |    (ХозрасчетныйОстатки.Организация = &Организация) и (ХозрасчетныйОстатки.Субконто3.Характеристика = &Характеристика)

должно быть в параметрах вирутальной таблицы... по крайней мере Организация
4 Живой Ископаемый
 
28.10.12
18:01
не, во-вторых, по сути ветки лень искать. поищи сам в типовых...
5 ВалераОшкин
 
28.10.12
18:02
в параметр &Дата запихай границу с ВидГраницы = Включая
6 ВалераОшкин
 
28.10.12
18:03
(2) все реально
7 oleg_prg
 
28.10.12
18:04
(3) - согласен, но это проблему не решает
PS этот код был набросан для примера, просто чтобы показать ситуацию в которой делаю получаю остатки, делаю движение, получаю остатки без изменений
(5) - "Дата", КонецДня(Дата) куда уже дальше границу пихать, документ от 27.10.2012 14:03:05 :)
8 oleg_prg
 
28.10.12
18:05
(5)Граница нужна если документ проведен в 0час 00 мин. О остатки надо получить в тот же день, но до документа с этим временем, так что это не то
9 oleg_prg
 
28.10.12
18:07
(4) Спасибо за совет, на вскидку не подскажете где глянуть - какая конфигурация и какой документ. Очень буду признателен
10 ВалераОшкин
 
28.10.12
18:07
(8) нафига ты в цикле применяешь метод Движения.Записать()?
11 oleg_prg
 
28.10.12
18:08
Думал вдруг после этого  Движения.Хозрасчетный.Записать(); остатки начнут правильные отображаться, обычно так не делаю, просто ради эксперимента поставил
12 oleg_prg
 
28.10.12
18:09
(10) я подумал что системе надо неким образом показать, что вот оно то самое место где надо записать остатки в таблицу регистра
13 ВалераОшкин
 
28.10.12
18:10
(11) у тебя проблема в запросе. Что-то ты там накосячил.
В обработке проведения после формирования движений можно получить остаток с учетом уже сделанных движений.
14 oleg_prg
 
28.10.12
18:11
(13) ОК, ща упрощу запрос, уберу все условия, посмотрю что будет
15 ВалераОшкин
 
28.10.12
18:14
(14) а что тебе мешает получить обычный остаток и отнять от него внутри запроса сформированные движения?
Имхо, простой запрос с обединением.
16 oleg_prg
 
28.10.12
18:18
Все, вопрос снят. Спасибо всем за участие. Ответ простой - туплю, заработался...
Извините за отнятое время
17 oleg_prg
 
28.10.12
18:22
(14) Это не всегда подходит. Например взять документ закрытие месяца, там куча манипуляций с проводками, и если все это держать в таблицах для вычисления каких-то результатов, то ... короче это сложно. Другое дело когда сделал например распределение 26 счета. А потом тупо снял остатки с 20-го и загнал все это на продукцию.