Имя: Пароль:
1C
1C 7.7
v7: Рег.Временный Расчет() чтобы поддерживался в актуальном состоянии при добавлении движений
,
0 Злопчинский
 
03.05.20
13:26
77, ТиС 9.2,
Суть: как через ВремРегистр.ВыгрузитьИтоги() сделать так, чтобы в выгрузку итогов попадали сформированные движения этого же документа сфорированные чуть ранее..?
.
не получается как-то.. никак..
собственно стандартный код, партионка
.
Модуль документа.

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

1. дописал оприходование партий - выясняю автоматом партию возврата - она могла быть списана и в предыдущих документах и в этом - тут все норм получается
2. провожу в текущем документе в этом же алгоритме возврат - все ок получается.
3. на следующем проходе этой же номенклатуры     ВремПартии.ВыгрузитьИтоги(ТаблИтогов,1,1);  //прим.2 - выгрузка итогов не видит проведенный в этом же документе возврат в предыдущих проведенных строках документа.
.
что делаю не так?
.
    ВремРегистры.Актуальность(1);
    ВремРегистры.РассчитатьРегистрыНа(ТекущийДокумент()); // _НА_ - прим.1
- в01: вот это обеспечивает учет во временных итогах уже записанных движений документа?
- в02: пробовал тупо (да, я такой, пробую тупо) ВремРегистры.РассчитатьРегистрыПО() / !_ПО_! - не помогло
.
где неверно именно в работе с временными итогами чтобы они подхватывали уже сделанные движения по текущему документу?
(саму концепцию расход-возврат-расход итп - не обсуждаем).
1 AAA
 
03.05.20
14:48
а зачем это? в 99% вполне достаточно рассчитать итоги без учета движений документа, а затем проверять остатки
Так сделано и в типовых конфигурациях. Кто мешает к исходным остатками добавить таблицу движений по регистру и получить то, что надо ?
2 Злопчинский
 
03.05.20
15:17
(1) "рассчитать итоги без учета движений документа, а затем проверять остатки
Так сделано и в типовых конфигурациях."
- в типовой нигде я не нашел/нет варианта когда получаются временные итоги с учетом уже сформированных движений проводимого этого же документа, но еще не все движения документа отработаны. мне во временных итогах хочется при обработке 25 строки "одной командой" получить итог с учетом например 24 строки.
а дописывать ручками - это конечно можно - я над этим и думал, почему и ветку написал, что не хочется так делать...
3 AAA
 
03.05.20
15:25
(2)Так ты не нашел, потому что это практически никогда не надо. Цель то какая на смысловом уровне? Я думаю, что если 30 лет без этого обходились, то и еще 30 можно))
Там дописывать то 5 строчек, по одним итогам в цикле пройтись, а в таблице движений поиском найти нужную строку
4 Злопчинский
 
03.05.20
15:31
Сек.. очень странно. сейчас провожу задним числом - тоже все норм...
а вчера не норма...
старнно..
или клинит меня...
5 Злопчинский
 
03.05.20
15:34
ааааА!!! сейчас стоит РассчитатьРегистрыПО
а штатно - НА
это я вчера изгалялся...
сек..
6 Злопчинский
 
03.05.20
15:39
так. ПАУЗА. надо все проверить.
7 Злопчинский
 
03.05.20
16:07
что-то ничего непонятно.
Чем отличаются РассчитатьРегистрыНА(Текдок) и РассчитатьРегистрыПо(текдок) -
в начале модуля проведения очищаются движения.
потом устанавливается временный расчет.
потом пишем движения документа.
.
вар1.
РассчитатьРегистрыНА(Текдок)
записали движение1
записали движение2
ВремРегистр.ВыгрузитьИтоги() - здесь будут присутсовать итоги по движение1 и движение2..?

вар2.
РассчитатьРегистрыПО(Текдок)
записали движение1
записали движение2
ВремРегистр.ВыгрузитьИтоги() - здесь будут присутсовать итоги по движение1 и движение2..?
8 AAA
 
03.05.20
16:14
Если очищаются, то ничем. Но можно же не очищать
9 Злопчинский
 
03.05.20
16:53
(8) понял. спсб.
10 Злопчинский
 
03.05.20
17:02
по проблемному сабжу  - идут исследования...
предварительные "исследования" показали что есть зависимость в каком порядке идет обработка временных итогов
по сути сводится к

Пока ТаблНоменклатура.ПолучитьСтроку()=1 Цикл

    ВремПартии.УстановитьЗначениеФильтра("Номенклатура",Номенклатура,1); //???!!! вот здесь что-то... не так.. сбивается что-то..?
    ВремПартии.ВыгрузитьИтоги(ТаблИтогов)
    //обработка ТаблИтогов и запись в регистр
КонецЦикла

если в цикле обепечеить подряд (нач ост=1)
Номенклатура1, расход 1шт
Номенклатура1, возврат 1шт
Номенклатура1, расход 1шт //здесь в выгрузке временных итогов ЕСТЬ остаток

А если выполнение в цикле идет (нач ост=1)
   Номенклатура1, расход 1шт
   //какие-то другие номенклатуры
   Номенклатура1, возврат 1шт
   Номенклатура1, расход 1шт //здесь в выгрузке временных итогов НЕТ остаток..?!

// непонятно...
11 Злопчинский
 
04.05.20
01:24
Облазил оттрасировал. все переменные вроде правильно, вся логика тоже вроде ок. Но вот в каком-то из случаев - ну не хочет и все... непонятно. пока обходным способо закрыл, но неизвестно полученный вариант всегда ли будет давать нужные даннеы. трабл где-то в последовательности/взаимодействии фильтров, накладываемых на выгрузку временных итогов и фильтров накладываемых на выборку движенйи регистра.. короче пок анепонятно. может сваяю нулевой тест.
12 vcv
 
04.05.20
07:11
(2) > в типовой нигде я не нашел/нет варианта когда получаются временные итоги с учетом уже сформированных движений проводимого этого же документа
В типовых так и работает. И за это отвечает ВремРегистры.Актуальность(1);
Например, в расходной накладной несколько строк одной номенклатуры. Списание в ТиС идёт построчно. Первая строка при списании получит полный начальный остаток на складе, вторая строка - за вычетом первой и так далее. Именно из-за Актуальность(1)
13 Salimbek
 
04.05.20
07:46
(7) Вообще говоря - странно.

Т.к. РассчитатьРегистрыНА - они рассчитывают именно НА документ, т.е. на момент непосредственно перед этим документом. Далее предполагается, что ты сам на основе этих данных полностью в документе формируешь движения.
А РассчитатьРегистрыПО - это движения уже вместе с данным документом. т.е. на момент, непосредственно после данного документа.

И если тебе надо получать остатки с текущими движениями, то нужен именно второй вариант.
14 Провинциальный 1сник
 
04.05.20
08:23
Регистры в семерке примитивны и из задача сводится к получению итогов на точку актуальности. Временный расчет - кривой тормозной костыль. Если надо получать итоги произвольно, то лучше уж использовать более эффективный костыль в виде прямых запросов.
15 Mihenius
 
04.05.20
09:33
(0) Ты лучше расскажи, раскопал ли ты знаменитое "решение по ускорению от pit-а за 500$"?

Когда-то на Т1С вроде он вскользь рассказал, а чем уже закончилось то дело?
16 Mihenius
 
04.05.20
11:30
(15) Даже обсуждение старое нашел Покритикуйте идею выборочного восстановления последовательности
(0) Ты там тоже был )
17 Злопчинский
 
04.05.20
15:37
(12) это ка краз норм. движуха идет в одном направлении.. а тут приходится вне процесса такого движения отдельно искать партии для возвратов..
18 Злопчинский
 
04.05.20
15:40
(15) не 500 а 800. там речь шла о недопущении ухода в минус на всем промежутке от исправления до сейчас.
для количественного учета - решено.
для суммового - в принципе тоже - зависит что имеется в виду про сумму
19 Злопчинский
 
04.05.20
15:44
(16) "а "решение" простое - при проведении (создании, корректировке) задним числом документ либо проводится (при этом нет красноты по партиям), либо не проводится (ибо в случае проведения возникнет краснота по партиям/остаткам). Решение работает с 01.01.2002 года..." - это вот как раз решается и решается быстро с точки зрения ресурсов во время вычисления, то есть практически мгновенно