Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Рег.Временный Расчет() чтобы поддерживался в актуальном состоянии при добавлении движений

v7: Рег.Временный Расчет() чтобы поддерживался в актуальном состоянии при добавлении движений
Я
   Злопчинский
 
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: пробовал тупо (да, я такой, пробую тупо) ВремРегистры.РассчитатьРегистрыПО() / !_ПО_! - не помогло
.
где неверно именно в работе с временными итогами чтобы они подхватывали уже сделанные движения по текущему документу?
(саму концепцию расход-возврат-расход итп - не обсуждаем).
   AAA
 
1 - 03.05.20 - 14:48
а зачем это? в 99% вполне достаточно рассчитать итоги без учета движений документа, а затем проверять остатки
Так сделано и в типовых конфигурациях. Кто мешает к исходным остатками добавить таблицу движений по регистру и получить то, что надо ?
   Злопчинский
 
2 - 03.05.20 - 15:17
(1) "рассчитать итоги без учета движений документа, а затем проверять остатки
Так сделано и в типовых конфигурациях."
- в типовой нигде я не нашел/нет варианта когда получаются временные итоги с учетом уже сформированных движений проводимого этого же документа, но еще не все движения документа отработаны. мне во временных итогах хочется при обработке 25 строки "одной командой" получить итог с учетом например 24 строки.
а дописывать ручками - это конечно можно - я над этим и думал, почему и ветку написал, что не хочется так делать...
   AAA
 
3 - 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..?
   AAA
 
8 - 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
Облазил оттрасировал. все переменные вроде правильно, вся логика тоже вроде ок. Но вот в каком-то из случаев - ну не хочет и все... непонятно. пока обходным способо закрыл, но неизвестно полученный вариант всегда ли будет давать нужные даннеы. трабл где-то в последовательности/взаимодействии фильтров, накладываемых на выгрузку временных итогов и фильтров накладываемых на выборку движенйи регистра.. короче пок анепонятно. может сваяю нулевой тест.
   vcv
 
12 - 04.05.20 - 07:11
(2) > в типовой нигде я не нашел/нет варианта когда получаются временные итоги с учетом уже сформированных движений проводимого этого же документа
В типовых так и работает. И за это отвечает ВремРегистры.Актуальность(1);
Например, в расходной накладной несколько строк одной номенклатуры. Списание в ТиС идёт построчно. Первая строка при списании получит полный начальный остаток на складе, вторая строка - за вычетом первой и так далее. Именно из-за Актуальность(1)
   Salimbek
 
13 - 04.05.20 - 07:46
(7) Вообще говоря - странно.

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

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

Когда-то на Т1С вроде он вскользь рассказал, а чем уже закончилось то дело?
   Mihenius
 
16 - 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 года..." - это вот как раз решается и решается быстро с точки зрения ресурсов во время вычисления, то есть практически мгновенно

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.