Имя: Пароль:
1C
1С v8
как красиво исключить движения документа из остатков по регистру?
0 vde69
 
модератор
18.12.13
10:26
сейчас использую границу как параметр виртуальной таблицы остатков, вроде все хорошо, но только до того момента пока не поменяем время документа на будущее (такое автоматом идет при оперативном проведении).

Разумеется при этом остатки уже включают в себя движения дока по регисту, понятно, что можно в запросе получать движения, сравнимать момент времени и если двинули вперед - то вычитать. Короче громоздкая конструкция выходит...

Может есть какой более изящный способ?
1 Ненавижу 1С
 
гуру
18.12.13
10:28
очищать остатки перед проверкой?
2 butterbean
 
18.12.13
10:28
граница типа Исключая на момент документа
3 vde69
 
модератор
18.12.13
10:29
(1) не хочется, ибо это сильно замедлит все
(2) читай внимательно....
4 rphosts
 
18.12.13
10:30
(3) время сдвинул, но хочешь учесть все движения кроме движений этого документа?
5 Ненавижу 1С
 
гуру
18.12.13
10:40
в новой же концепции, сначала пишем движения (они уже будут с новым временем), потом делаем проверку (у тебя с границей "исключая")
6 vde69
 
модератор
18.12.13
10:43
(4) да
(5) пытаюсь осознать....
7 rphosts
 
18.12.13
10:49
(6) ну если не хочешь по новой концепции, то делай запрос остатков из 2 частей(во второй части движения самого документа) если время документа двигается (если оно то-же то граница не включая для ускорения).
8 GROOVY
 
18.12.13
10:51
(3) Про "замедлит" - не сильно отличаться от запроса+корректировки остатков по движениям документа. И все равно блокировать старые движения нужно... Короче читай: http://1c.chistov.pro/2013/07/blog-post_25.html
9 GROOVY
 
18.12.13
10:52
+8 там же "очистка" в транзакции идет, физически на диск ничего не упадет.
10 mikecool
 
18.12.13
10:56
обычный юнион с минусом по данным документа?
11 kumena
 
18.12.13
11:01
в типовой делают так

ВЫБРАТЬ
    РасчетыНалоговыхАгентовСБюджетомПоНДФЛОстатки.ФизЛицо,
    РасчетыНалоговыхАгентовСБюджетомПоНДФЛОстатки.СуммаОстаток КАК Сумма
ПОМЕСТИТЬ ВТОстатки
ИЗ
    РегистрНакопления.РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.Остатки(
            &ДатаОперации,
            Организация = &Организация
                И Ставка = &Ставка
                И (ФизЛицо В (&ФизическиеЛица)
                    ИЛИ &НеОтбирать)
                И МесяцНалоговогоПериода = &МесяцНалоговогоПериода
                И ОКАТО_КПП = &ОКАТО_КПП) КАК РасчетыНалоговыхАгентовСБюджетомПоНДФЛОстатки

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.ФизЛицо,
    РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.Сумма
ИЗ
    РегистрНакопления.РасчетыНалоговыхАгентовСБюджетомПоНДФЛ КАК РасчетыНалоговыхАгентовСБюджетомПоНДФЛ
ГДЕ
    &УчитыватьДвиженияРегистратора
    И РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.Регистратор = &Регистратор
    И (РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.ФизЛицо В (&ФизическиеЛица)
            ИЛИ &НеОтбирать)
    И РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.Организация = &Организация
    И РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.Ставка = &Ставка
    И РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.МесяцНалоговогоПериода = &МесяцНалоговогоПериода
    И РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.ОКАТО_КПП = &ОКАТО_КПП
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Остатки.ФизЛицо,
    СУММА(Остатки.Сумма) КАК Сумма
ИЗ
    ВТОстатки КАК Остатки

СГРУППИРОВАТЬ ПО
    Остатки.ФизЛицо

ИМЕЮЩИЕ
    СУММА(Остатки.Сумма) > 0
12 kumena
 
18.12.13
11:03
документ ПеречислениеНДФЛвБюджет
13 ptiz
 
18.12.13
11:10
(3) "не хочется" - но самый удобный вариант: не придется переписывать запросы.
Если ситуация редкая, то не сильно скажется на скорости.
14 vde69
 
модератор
18.12.13
11:12
(5) новая концепция мне не спасет жизнь, по тому что у меня есть документы типа "сторно" и "закрытия", которые делают движения не на основании данных в документе а на основании остатков или движений регистров.

(1) очистка перед формированием движений наверно подойдет, только нужно будет повозится с частичным проведением и востановлением последовательности
15 ProgAL
 
18.12.13
11:25
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если Ссылка.Дата <> '00010101' И Дата > Ссылка.Дата Тогда // дата документа сдвинута вперед
        ДополнительныеСвойства.Вставить("ДатаСдвинутаВперед", Истина);    
    Иначе
        ДополнительныеСвойства.Вставить("ДатаСдвинутаВперед", Ложь);    
    КонецЕсли;    
КонецПроцедуры


Внутри ОбработкиПроведения()

    флПолучитьОстаткиБезДвиженийДокумента = Истина;
    //
    Если ДополнительныеСвойства.ДатаСдвинутаВперед ИЛИ РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
        флПолучитьОстаткиБезДвиженийДокумента = Истина;
    Иначе
        флПолучитьОстаткиБезДвиженийДокумента = Ложь;
    КонецЕсли;    

и соответственно запрос с джоином как писали выше.