Имя: Пароль:
1C
 
как обнулить текущие остатки в регистре накопления
,
0 fdgd98
 
04.03.15
08:21
есть документ, при проведении которого делается приход номенклатуры в регистр накопления, но мне надо сделать так чтобы при проведении документа если уже такая номенклатура встречается, то ее текущие остатки убрать или удалить обнулить и записать новые остатки(т.е. новое количество). каким образом это сделать?
1 Molinor
 
04.03.15
08:24
Движениями.
2 fdgd98
 
04.03.15
08:25
(1) по подробнее можешь?
3 el7cartel
 
04.03.15
08:30
(2) ну а чео сложного-то? напиши проверку, если остаток есть, то сделай движение по формуле (- текущий остаток + новый остаток), и получишь то что хочешь видеть! вариантов множество, это как один из
4 BuHu
 
04.03.15
08:30
(0) сделайте инвентаризацию со списанием недостачи и оприходыванием излишков .
5 fdgd98
 
04.03.15
08:33
щас попробуем
6 fdgd98
 
04.03.15
11:32
помогите разобраться с ситуацией сделал запрос но похоже что он работает не верно..допустим есть 2 записи в регистре:

1)телевизор самсунг - 20 шт  - 03.03.2015 15:00
2)телевизор самсунг - 10 шт - 04.03.2015 08:00


мой запрос вытаскивает сначала первую запись т.е. 20 шт а потом вторую запись где 10 шт. Мне получается надо обнулить и первую и вторую строку?


Запрос = Новый Запрос();
            Запрос.Текст = "ВЫБРАТЬ
                           |    ЭлементарнаяЕдиницаНаСкладОстатки.КоличествоОстаток КАК Остаток,
                           |    ЭлементарнаяЕдиницаНаСкладОстатки.Наименование КАК Наименование,
                           |    ЭлементарнаяЕдиницаНаСкладОстатки.ЕдИзмерения КАК ЕдИзмерения,
                           |    ЭлементарнаяЕдиницаНаСкладОстатки.СпециальноеНаименование КАК СпециальноеНаименование,
                           |    ЭлементарнаяЕдиницаНаСкладОстатки.Склады
                           |ИЗ
                           |    РегистрНакопления.ЭлементарнаяЕдиницаНаСклад.Остатки КАК ЭлементарнаяЕдиницаНаСкладОстатки
                           |ГДЕ
                           |    ЭлементарнаяЕдиницаНаСкладОстатки.Наименование = &Наименование";
            Запрос.УстановитьПараметр("Наименование", ТекСтрокаПриходная.Наименование);
            ЗапросРезультат = Запрос.Выполнить().Выбрать();
            Если ЗапросРезультат.Количество()>0 тогда
                
                Пока ЗапросРезультат.Следующий() цикл
                    Остаток = ЗапросРезультат.Остаток;
                    Наименование = ЗапросРезультат.Наименование;
                    ЕдИзмерения    = ЗапросРезультат.ЕдИзмерения;
                    СпецНаименование = ЗапросРезультат.СпециальноеНаименование;
                    если Остаток> 0 или Остаток<0 тогда
                        Движение = Движения.ЭлементарнаяЕдиницаНаСклад.Добавить();
                        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
                        Движение.Период = Дата;
                        Движение.Склады = Склады;
                        Движение.Наименование = ТекСтрокаПриходная.Наименование;
                        Движение.СпециальноеНаименование = результат.СпециальноеНаименование;
                        Движение.ЕдИзмерения = ТекСтрокаПриходная.ЕдиницаИзмерения;
                        Движение.Количество = 0;
                    конецесли;
                конеццикла;
7 fdgd98
 
04.03.15
11:33
проблема в том что я знаю период только одной записи, а как узнать период второй записи т.к. запрос не выводит по найденным строкам периоды
8 ДенисЧ
 
04.03.15
11:34
ммм.... А зачем обнулять строки? Две строки складываются и получается итог -сумма. Её и списываем
9 palpetrovich
 
04.03.15
11:36
(7) тебе остатки списать или строки из регистра накопления?
10 fdgd98
 
04.03.15
11:37
(8) можно подробнее, запрос возвращает 2 строки как раз таки, я то думал что вернет одну строку и покажет суммированный остаток.
11 fdgd98
 
04.03.15
11:37
(9) остатки списать т.е. чтоб остатки = 0
12 fdgd98
 
04.03.15
11:51
ап
13 Бубка Гоп
 
04.03.15
12:03
(12) ну во первых, в запросе искать по наименованию не комильфо, во вторых таблице остатков попробуйте скормить дату, на которую собственно берется остаток
14 Бубка Гоп
 
04.03.15
12:07
ну и логически - если количество > 0, делайте расход, если < 0, делайте приход.
15 Бубка Гоп
 
04.03.15
12:09
ну и откройте для себя ЗаполнитьЗначенияСвойств(), придется меньше кода писать
16 palpetrovich
 
04.03.15
12:24
(11) остатки списать - смотри (4). Только так
17 bodri
 
04.03.15
12:39
РегистрНакопления.ЭлементарнаяЕдиницаНаСклад.Остатки(&ДатаОстатков, Номенклатура = &Номенклатура)

может для начала дату остатков указать и все таки номенклатуру а не наименование номенклатуры
18 fdgd98
 
04.03.15
13:19
Запрос = Новый Запрос();
            Запрос.Текст = "ВЫБРАТЬ
                           |    ЭлементарнаяЕдиницаНаСкладОстатки.Склады,
                           |    ЭлементарнаяЕдиницаНаСкладОстатки.Наименование,
                           |    ЭлементарнаяЕдиницаНаСкладОстатки.ЕдИзмерения,
                           |    ЭлементарнаяЕдиницаНаСкладОстатки.СпециальноеНаименование,
                           |    ЭлементарнаяЕдиницаНаСкладОстатки.КоличествоОстаток
                           |ИЗ
                           |    РегистрНакопления.ЭлементарнаяЕдиницаНаСклад.Остатки(&ДатаОстатков, Наименование = &Наименование)  КАК ЭлементарнаяЕдиницаНаСкладОстатки";




сделал вот так запрос, запрос возвращает 2 строки..первая строка: Остаток - 20шт вторая строка 10 шт
19 bodri
 
04.03.15
13:29
Наименование  - это справочник или строка?
20 bodri
 
04.03.15
13:34
Может ещё склад добавить?
Запрос = Новый Запрос();
            Запрос.Текст = "ВЫБРАТЬ
                           |    ЭлементарнаяЕдиницаНаСкладОстатки.Склады,
                           |    ЭлементарнаяЕдиницаНаСкладОстатки.Наименование,
                           |    ЭлементарнаяЕдиницаНаСкладОстатки.ЕдИзмерения,
                           |    ЭлементарнаяЕдиницаНаСкладОстатки.СпециальноеНаименование,

                           |    ЭлементарнаяЕдиницаНаСкладОстатки.КоличествоОстаток
                           |ИЗ
                           |    РегистрНакопления.ЭлементарнаяЕдиницаНаСклад.Остатки(&ДатаОстатков, Наименование = &Наименование и Склады = &Склад)  КАК ЭлементарнаяЕдиницаНаСкладОстатки";
21 fdgd98
 
04.03.15
13:35
(19) справочник
22 fdgd98
 
04.03.15
13:35
(20) нет
23 bodri
 
04.03.15
13:39
(22) тогда и будет 2 строки если 2 склада, а если 3 склада - 3 строки и т.д.
24 palpetrovich
 
04.03.15
13:47
(22) если отстаки на разных складах, ОбщийОстаток тебе не поможет, все-равно списывать надо со складов где товар числится
ну,а если надо увидеть ОбщийОстаток, то добавь в свой запрос ИТОГИ по ЭлементарнаяЕдиницаНаСкладОстатки.Наименование
зы: кто интересно так Измерение обозвал... :)
25 fdgd98
 
04.03.15
14:09
блин
26 fdgd98
 
04.03.15
14:10
сделал щас так...если по этой номенлкатуре остаток >0 или то делаем расход

Запрос = Новый Запрос();
            Запрос.Текст =     "ВЫБРАТЬ
                               |    ЭлементарнаяЕдиницаНаСкладОстатки.Склады,
                               |    ЭлементарнаяЕдиницаНаСкладОстатки.Наименование,
                               |    ЭлементарнаяЕдиницаНаСкладОстатки.ЕдИзмерения,
                               |    ЭлементарнаяЕдиницаНаСкладОстатки.СпециальноеНаименование,
                               |    СУММА(ЭлементарнаяЕдиницаНаСкладОстатки.КоличествоОстаток) КАК КоличествоОстаток
                               |ИЗ
                               |    РегистрНакопления.ЭлементарнаяЕдиницаНаСклад.Остатки(&ДатаОстатков, Наименование = &Наименование) КАК ЭлементарнаяЕдиницаНаСкладОстатки
                               |
                               |СГРУППИРОВАТЬ ПО
                               |    ЭлементарнаяЕдиницаНаСкладОстатки.Наименование,
                               |    ЭлементарнаяЕдиницаНаСкладОстатки.Склады,
                               |    ЭлементарнаяЕдиницаНаСкладОстатки.ЕдИзмерения,
                               |    ЭлементарнаяЕдиницаНаСкладОстатки.СпециальноеНаименование";
                            
                            
            Запрос.УстановитьПараметр("Наименование", ТекСтрокаПриходная.Наименование);
            Запрос.УстановитьПараметр("ДатаОстатков", ТекущаяДата());
            
            ЗапросРезультат = Запрос.Выполнить().Выбрать();
            Если ЗапросРезультат.Количество()>0 тогда
                
                Пока ЗапросРезультат.Следующий() цикл
                    Остаток = ЗапросРезультат.КоличествоОстаток;
                    Наименование = ЗапросРезультат.Наименование;
                    ЕдИзмерения    = ЗапросРезультат.ЕдИзмерения;
                    СпецНаименование = ЗапросРезультат.СпециальноеНаименование;
                    если Остаток> 0 или Остаток<0 тогда
                        Движение = Движения.ЭлементарнаяЕдиницаНаСклад.Добавить();
                        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
                        Движение.Период = Дата;
                        Движение.Склады = Склады;
                        Движение.Наименование = ТекСтрокаПриходная.Наименование;
                        Движение.СпециальноеНаименование = результат.СпециальноеНаименование;
                        Движение.ЕдИзмерения = ТекСтрокаПриходная.ЕдиницаИзмерения;
                        Движение.Количество = Остаток;
                    конецесли;
                конеццикла;
27 fdgd98
 
04.03.15
14:15
и вообщем получается так:


вчера осталось допустим телевизоров самсунг 10 шт. а сегодня привезли такие же телевизоры самсунг 5 шт . в моем случае получиться что будет -5 телевизоров а надо чтобы эти вчерашние 10 телевизоров превратились в 0 . и соотвественно получиться 5 телевизоров. как это организовать?
28 fdgd98
 
04.03.15
14:20
удалять записи из регитстра чтоли?
29 bodri
 
04.03.15
14:25
(28) не, что-то здесь не так...
30 fdgd98
 
04.03.15
14:26
(29) заказчик так требует))))
31 bodri
 
04.03.15
14:44
(26) для красоты
если Остаток> 0 или Остаток<0 тогда

можно заменить

Если Остаток <> 0 тогда

или

Если Не Остаток = 0 тогда

//***
Может группировку убрать или обход по группировкам сделать
32 bodri
 
04.03.15
14:46
+(31) просто при группировке может получится такая табличка:

телевизор Самсунг  -  10
   телевизор Самсунг  -  10

в итоге цикл 2 раза его обрабатывает, ну и соответственно 2 раза списывает.
от туда -5 телеков
33 fdgd98
 
04.03.15
15:13
(32) а как тогда быть без группировки? подскажите пожалуйста
34 fdgd98
 
04.03.15
15:24
(32) вернее тогда как получить сумму по количеству не используя группировки
35 fdgd98
 
04.03.15
15:31
ап
36 GROOVY
 
04.03.15
15:35
(35) http://1c.chistov.pro/2014/01/2009-youtube.html
Мое мнение: вся тема неправильная. Куда девать прошлые 10. Не путаете ли Вы остатки с движениями?
37 bodri
 
05.03.15
06:54
Можно попробовать так:
Запрос = Новый Запрос();
            Запрос.Текст =     "ВЫБРАТЬ
                               |    ЭлементарнаяЕдиницаНаСкладОстатки.Склады КАК Склады,
                               |    ЭлементарнаяЕдиницаНаСкладОстатки.Наименование КАК Наименование,
                               |    ЭлементарнаяЕдиницаНаСкладОстатки.ЕдИзмерения,
                               |    ЭлементарнаяЕдиницаНаСкладОстатки.СпециальноеНаименование,
                               |    СУММА(ЭлементарнаяЕдиницаНаСкладОстатки.КоличествоОстаток) КАК КоличествоОстаток
                               |ИЗ
                               |    РегистрНакопления.ЭлементарнаяЕдиницаНаСклад.Остатки(&ДатаОстатков, Наименование = &Наименование) КАК ЭлементарнаяЕдиницаНаСкладОстатки
                               |
                               |ИТОГИ
                               |    СУММА(КоличествоОстаток)
                               |ПО
                               |    Наименование"
            Запрос.УстановитьПараметр("Наименование", ТекСтрокаПриходная.Наименование);
            Запрос.УстановитьПараметр("ДатаОстатков", ТекущаяДата());
            
            ЗапросРезультат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
            Если ЗапросРезультат.Количество()>0 тогда
                
                Пока ЗапросРезультат.Следующий() цикл
                    Остаток = ЗапросРезультат.КоличествоОстаток;
                    Наименование = ЗапросРезультат.Наименование;
                    ЕдИзмерения    = ЗапросРезультат.ЕдИзмерения;
                    СпецНаименование = ЗапросРезультат.СпециальноеНаименование;
                    если Не Остаток = 0 тогда
                        Движение = Движения.ЭлементарнаяЕдиницаНаСклад.Добавить();
                        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
                        Движение.Период = Дата;
                        Движение.Склады = Склады;
                        Движение.Наименование = ТекСтрокаПриходная.Наименование;
                        Движение.СпециальноеНаименование = результат.СпециальноеНаименование;
                        Движение.ЕдИзмерения = ТекСтрокаПриходная.ЕдиницаИзмерения;
                        Движение.Количество = Остаток;
                    конецесли;
                конеццикла;
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.