Имя: Пароль:
1C
1С v8
Запоминать результат проведения документа перед перепроведением
,
0 DmitryPavlik
 
04.04.13
15:37
Всем привет!
Такая задача: необходимо перед ПЕРЕпроведеним документов запоминать текущий результат (выборочно по регистрам) и потом вставлять его назад.
Вопрос: каким образом лучше реализовать это?
Используется управляемое и обычное приложение. Суть в том, чтобы не городить в модулях документов процедуры - нужно глобально.

Пока идея такая:
1. Делаем параметр сеанса "АдресХранилищаПроводок"
2. В подписке на событие в ТЗ переводим результат и её помещаем во врем. хранилище.
3. Опять же в подписке после окончания всех процедур вытаскиваем запомненый результат и подставляем его назад.

Может быть у кого-то были подобные ситуации?
Беспокоит то, что подписок может быть несколько и как отследить самую последнюю...
1 Mickeleangelo
 
04.04.13
15:50
Для хранения текущего результата лучше использовать ДополнительныеСвойства объекта.
А управлять последовательностью подписок и их приоритетом штатными средствами нельзя.
2 Defender aka LINN
 
04.04.13
15:51
(0) Удаление движений - не удалять.
Развели тут теории...
3 DmitryPavlik
 
04.04.13
16:06
(2) сделал-же оговорку: без массового изменения модулей объектов и нужны выборочные регистры.

(1) действительно, совсем забыл про доп. свойства; можно попробовать туда закинуть.
4 Турист
 
04.04.13
16:07
(0) а смысл?
5 Defender aka LINN
 
04.04.13
16:08
(3) Это не в модуле делается
6 Турист
 
04.04.13
16:09
+(4) дешевле и правильнее привести базу в порядок
7 Mort
 
04.04.13
16:10
Такая задача: необходимо перед ПЕРЕпроведеним документов запоминать текущий результат (выборочно по регистрам) и потом вставлять его назад.

Надо бы для архитектуры решения придумать аналог слова "г*код".
8 Kreont
 
04.04.13
16:10
Через одну только подписку как раз такое нормально делается.

Только не пойму логики "перед ПЕРЕпроведеним", если 13-й раз перепроводится документ, тогда что будет результатом?
движения 12-го шага + еще опять добавишь что то и т.д.?
9 Турист
 
04.04.13
16:14
(8) логика простая
- купили товар
- продали товар
- сдали отчетность
- вспомнили про допрасходу на покупку товара и ввели их задним числом
- перепрровели документы
- аааааааааа, прибыль поменялась, мы все умрем и т.д.
10 DmitryPavlik
 
04.04.13
16:14
Суть проста: в консолидирующей базе происходит массовая корректировка документов, но результат проведения по некоторым регистрам не должен отличаться от источника.
Если происходит отмена проведения, тогда ничего не запоминается.
11 Kreont
 
04.04.13
16:18
(9) Логика так дожна выглядеть:
- за введением задним числом - растрел
- если очень надо, за последсвия - отвечает не прог.1С, а  Гла.бух, за то что открыл период прошлый для редактирования
- все изменения (что хочется внести задним числом) можно (100%) за прошлые любые периоды отразить полность законно в бух.учете в текущих датах
12 Kreont
 
04.04.13
16:19
(10) фигня какая то :)
Толку тогда от консолидируещей базы, если данные в ней через месяц вовсе не будут отвечать данным из баз-источников.
13 Турист
 
04.04.13
16:19
(11) молодец, только большиство прогов считают что нужно всегда делать так как ГБ скажет ))
14 Жан Пердежон
 
04.04.13
16:20
(10) пусть редактируют в источнике
15 Турист
 
04.04.13
16:21
(12) ага, открываешь док, там реализация на миллион, а по проводкам на два миллиона ))
16 Kreont
 
04.04.13
16:24
ТС, сделай две консолид.базы :)
Одна пусть отвечает тому что есть и пусть меняется, а в другую данные только один раз закачивай, без обновления.

И через квартал пусть сравнят че получилось и чему верить...
17 Fragster
 
гуру
04.04.13
16:24
лучше отдельно записывать нужные наборы а ненужные не записывать
18 Fragster
 
гуру
04.04.13
16:25
а вообще бред какой-то
19 samozvanec
 
04.04.13
16:27
(9) на 8 марта дарить вазелин. если не дойдет, на следующее - мыло и веревку
20 H A D G E H O G s
 
04.04.13
16:29
(1) Скажи это управляемым формам, умник.
22 H A D G E H O G s
 
04.04.13
16:32
Мне кажется, это надо делать "наоборот".
23 H A D G E H O G s
 
04.04.13
16:33
ДокументОтраженияОбъект=СтрокаТЗ.ДокументОтражения.ПолучитьОбъект();
           НачатьТранзакцию();
           
           ДокументОтраженияОбъект.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
           СтрокаТЗ.Успешно=Истина;
           СтрокаТЗ.Пометка=Ложь;
           НаборЗаписей=РегистрыНакопления.ТоварыОрганизации.СоздатьНаборЗаписей();
           НаборЗаписей.Отбор.Регистратор.Установить(СтрокаТЗ.ДокументОтражения);
           НаборЗаписей.Прочитать();
           ТаблицаЗаписей=НаборЗаписей.Выгрузить();
           
           ОтменитьТранзакцию();

       Если ТаблицаЗаписей.Количество()>0 Тогда
           НаборЗаписей=РегистрыНакопления.ТоварыОрганизации.СоздатьНаборЗаписей();
           НаборЗаписей.Отбор.Регистратор.Установить(СтрокаТЗ.ДокументОтражения);
           НаборЗаписей.Загрузить(ТаблицаЗаписей);
           НаборЗаписей.Записать(Истина);
       КонецЕсли;
24 H A D G E H O G s
 
04.04.13
16:33
Господи, что сделали с форматированием кода.
25 Defender aka LINN
 
04.04.13
16:35
(20) А какая разница, какие у автора формы?
26 H A D G E H O G s
 
04.04.13
16:37
(25) УР не хранит ДополнительныеСвойства между серверными вызовами.

Или у него там в одном вызове?
27 Mickeleangelo
 
04.04.13
16:41
(20) Если делать в модуле объекта, то без разницы, какие формы. Но, судя по (10), согласен с (18).
28 Defender aka LINN
 
04.04.13
16:41
(26) Аффтару при проведении надо, там формы вообще может не быть.
29 DmitryPavlik
 
04.04.13
16:50
Из форм здесь одна - форма обработки, из которой стартует корректировка.

Модуль объекта не надо трогать вообще.

Возможно, как раз-таки следует ориентироваться на (23).
30 DmitryPavlik
 
04.04.13
16:52
//ДокументОтраженияОбъект.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
//            СтрокаТЗ.Успешно=Истина;
 //          СтрокаТЗ.Пометка=Ложь;
           НаборЗаписей=РегистрыНакопления.ТоварыОрганизации.СоздатьНаборЗаписей();
           НаборЗаписей.Отбор.Регистратор.Установить(СтрокаТЗ.ДокументОтражения);
           НаборЗаписей.Прочитать();
           ТаблицаЗаписей=НаборЗаписей.Выгрузить();
           
           ОтменитьТранзакцию();

       Если ТаблицаЗаписей.Количество()>0 Тогда
           НаборЗаписей=РегистрыНакопления.ТоварыОрганизации.СоздатьНаборЗаписей();
           НаборЗаписей.Отбор.Регистратор.Установить(СтрокаТЗ.ДокументОтражения);
           НаборЗаписей.Загрузить(ТаблицаЗаписей);
           НаборЗаписей.Записать(Истина);
       КонецЕсли;


как-то так....
31 Maxus43
 
04.04.13
17:00
всё не читал. а спрашивали, нафига это?
32 H A D G E H O G s
 
04.04.13
17:03
(31) Иногда.
Душа. Просит.
33 Maxus43
 
04.04.13
17:06
душа одинэсника может просить невпихуемого в здравый смысл, так что лучше пересмотреть сразу, а не выносить мозг