Имя: Пароль:
1C
1С v8
Как получить остатки без учета движений проводимого документа?
,
0 Помогите
 
31.08.13
09:28
Перепровожу расходную, а она видит свои движения. Как исправить?

Процедура ОбработкаПроведения(Отказ, Режим)
    Для Каждого ТекСтрокаТЧасть Из ТЧасть Цикл
        ТабОстатков = РегистрыНакопления.Партии.Остатки(Новый МоментВремени(Дата, Ссылка), Новый Структура("Товар", ТекСтрокаТЧасть.Товар), , );
    КонецЦикла;
КонецПроцедуры
1 DarKySiK
 
31.08.13
09:29
Очистить Движения перед сбором. Или поставить удалять движения автоматически.
2 Помогите
 
31.08.13
09:30
Удалять автоматически при отмене проведения
Уже стоит
3 ILM
 
гуру
31.08.13
09:41
Видит - Отмена проведения - Не видит - Проведение - Видит

Как нужно то?
4 Feunoir
 
31.08.13
09:42
Отмена проведения и перепроведение - разные понятия.
5 Помогите
 
31.08.13
09:43
Сейчас покопался, оказалось что видит еще и движения более поздних документов. А мне нужно получить остатки на момент проведения. Где у меня ошибка?
6 DarKySiK
 
31.08.13
09:43
(2) смотри список вариантов удаления движений внимательно.
7 Помогите
 
31.08.13
09:44
(6) Спасибо!" ! !
В окошко не вся надпись влезла, хотя на форум я всю целиком скопировал, но сам не прочитал.
8 Помогите
 
31.08.13
09:46
(5) Это я опять ошибся. При перепроведении документ вставал на текущую дату, и становился позже всех, так что все правильно
9 Dmitry1c
 
31.08.13
10:23
Движения.Остатки.Записать();
Движения.Остатки.Записывать = Истина;

Удачи на спеце.
10 DEVIce
 
31.08.13
10:34
За то, что написано в (0) надо отрывать руки. Выбери остатки по табличной части одним запросом. В качестве момента времени укажи границу на документ с параметром "Исключая".
11 Помогите
 
31.08.13
10:59
(10) >>В качестве момента времени укажи границу на документ с параметром "Исключая".

Как это сделать? Там есть параметр Период, Исключая не нашел
12 Помогите
 
31.08.13
11:06
Запрос.Текст =
        "ВЫБРАТЬ
        |    ПартииОстатки.Номенклатура,
        |    ПартииОстатки.Партия,
        |    ПартииОстатки.КоличествоОстаток,
        |    ПартииОстатки.СуммаОстаток
        |ИЗ
        |    РегистрНакопления.Партии.Остатки(&Граница, Номенклатура В (&СписокТоваров)) КАК ПартииОстатки";

    Запрос.УстановитьПараметр("Граница", Новый Граница(Ссылка, ВидГраницы.Исключая ) );


Так?
13 DarKySiK
 
31.08.13
11:38
Летс гугл! етить... ать.. http://help1c.com/faq/view/503.html
14 DEVIce
 
31.08.13
12:24
(12) Приблизительно так. Только можно на список товаров передавать, в делать соединение с табличной частью документа или в одном запросе сначала получить табличную часть во временную таблицу и указать как список товаров в параметрах. Так будет значительно быстрее работать.
15 DEVIce
 
31.08.13
12:25
Кстати. Если мне память не изменяет, то в запросе с виртуальной таблицей остатков по умолчанию исключается граница.
16 Помогите
 
31.08.13
12:52
Вот так:


ВЫБРАТЬ
    ПартииОстатки.Партия КАК Партия,
    ЕСТЬNULL(ПартииОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    ПартииОстатки.СуммаОстаток КАК СуммаОстаток,
    РасходнаяНакладнаяТЧасть.Количество КАК Количество,
    РасходнаяНакладнаяТЧасть.Сумма КАК Сумма,
    РасходнаяНакладнаяТЧасть.Номенклатура КАК Номенклатура
ИЗ
    Документ.РасходнаяНакладная.ТЧасть КАК РасходнаяНакладнаяТЧасть
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Партии.Остатки(&Граница, ) КАК ПартииОстатки
        ПО РасходнаяНакладнаяТЧасть.Номенклатура.Ссылка = ПартииОстатки.Номенклатура.Ссылка
ГДЕ
    (ПартииОстатки.КоличествоОстаток > 0
            ИЛИ ПартииОстатки.КоличествоОстаток ЕСТЬ NULL )
    И РасходнаяНакладнаяТЧасть.Ссылка = &Ссылка
ИТОГИ
    СУММА(КоличествоОстаток),
    СУММА(СуммаОстаток),
    СУММА(Количество),
    СУММА(Сумма)
ПО
    Номенклатура,
    Партия
17 DEVIce
 
31.08.13
13:17
(16) Вот так вот не надо писать: РасходнаяНакладнаяТЧасть.Номенклатура.Ссылка = ПартииОстатки.Номенклатура.Ссылка


Достаточно сделать: РасходнаяНакладнаяТЧасть.Номенклатура = ПартииОстатки.Номенклатура

Поле Номеклатура это уже ссылка. Если после точки еще указать Ссылка, то на каждую такую хрень будет соединение, что конечно не в лучшую сторону скажется на производительности.
18 DEVIce
 
31.08.13
13:20
И еще. Лучше все-таки список номенклатуры передавать в качестве параметра в виртуальную таблицу. Т.е. в запросе должно быть две выборки. Одна получает список номенклатуры из табличной части документа и запихивает его в таблицу, а вторая выборка получает остатки, где таблица со списком номенклатуры передается в качестве параметра. При этом, если надо и некие параметры из табличной части, то соединение тоже оставляем. Опять же в секции ГДЕ написана фигня. Щас дам тебе запрос.
19 DEVIce
 
31.08.13
13:26
Вот так должно быть:
ВЫБРАТЬ
    РасходнаяНакладнаяТЧасть.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ СписокНоменклатуры
ИЗ
    Документ.РасходнаяНакладная.ТЧасть КАК РасходнаяНакладнаяТЧасть
ГДЕ
   РасходнаяНакладнаяТЧасть.Ссылка = &Ссылка;

ВЫБРАТЬ
    ПартииОстатки.Партия КАК Партия,
    СУММА(ЕСТЬNULL(ПартииОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток,
    СУММА(ПартииОстатки.СуммаОстаток) КАК СуммаОстаток,
    СУММА(РасходнаяНакладнаяТЧасть.Количество) КАК Количество,
    СУММА(РасходнаяНакладнаяТЧасть.Сумма) КАК Сумма,
    РасходнаяНакладнаяТЧасть.Номенклатура КАК Номенклатура
ИЗ
    Документ.РасходнаяНакладная.ТЧасть КАК РасходнаяНакладнаяТЧасть
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Партии.Остатки(&Граница, Номенклатура В (ВЫБРАТЬ Номенклатура ИЗ СписокНоменклатуры)) КАК ПартииОстатки
        ПО РасходнаяНакладнаяТЧасть.Номенклатура = ПартииОстатки.Номенклатура
ГДЕ
    ЕСТЬNULL(ПартииОстатки.КоличествоОстаток, 0) > 0
    И РасходнаяНакладнаяТЧасть.Ссылка = &Ссылка
СГРУППИРОВАТЬ ПО
    ПартииОстатки.Партия,
    РасходнаяНакладнаяТЧасть.Номенклатура
20 DEVIce
 
31.08.13
13:27
Только вместо: СУММА(ПартииОстатки.СуммаОстаток) КАК СуммаОстаток

Надо: СУММА(ЕСТЬNULL(ПартииОстатки.СуммаОстаток, 0)) КАК СуммаОстаток

Ошибся трохи.
21 Помогите
 
31.08.13
16:48
(20) Я специально так сделал, потому что когда ПартииОстатки.КоличествоОстаток не NULL, тогда и ПартииОстатки.СуммаОстаток тоже не NULL. А условие ЕСТЬNULL(ПартииОстатки.КоличествоОстаток, 0) > 0 отсекает все ПартииОстатки.КоличествоОстаток и ПартииОстатки.СуммаОстатоксо значением NULL

Или я ошибся?
22 Помогите
 
31.08.13
16:52
(17) Спасибо! !! Это я прохлопал.
23 Помогите
 
31.08.13
16:57
(18) Вообще спасибо! ! !1 Это не слишком для теста на спеца?
Куда деньги слать?
24 DEVIce
 
31.08.13
16:57
(21) У тебя нет "не NULL", у тебя как раз на NULL проверка. По сути, в данном случае, если при соединении с партиями есть NULL, это тоже самое что 0. У тебя же получается ерунда. Типа берем все положительные остатки и всю ту номенклатуру у которой остаток не просто нулевой, а в принципе никогда его не было (нет записей в регистре). Чем отсутствие записей в регистре отличается от нулевого количества, лично мне не понятно. Может у тебя какая-то другая логика?
25 DEVIce
 
31.08.13
16:59
(23) Да какие деньги? Тебе от чистого сердца помогли, для чего форумы и нужны. Но если денег много и не жалко, то можешь заслать на номер +79134523412. :)
26 GROOVY
 
31.08.13
17:14
(15) За исключением оперативного проведения.
27 Помогите
 
31.08.13
18:38
(24) Забыл. У меня дальше в коде есть проверка на КоличествоОстаток > 0.
28 Помогите
 
31.08.13
18:39
(25) Денег не много, но как иначе отблагодарить не знаю.