Имя: Пароль:
1C
 
остатки номенклатуры
,
0 who respawn
 
29.11.23
15:46
Привет, подскажите, как получить свободный остаток номенклатуры

Я получаю общий остаток, вычитаю из него резерв, вот пример

Общий остаток 100  Свободный 20   Резерв 75
а 5 штук эта те, которые в документах но в них нет расходников
из какого регистра мне эти 5 получать?
УТ 10
1 mikecool
 
29.11.23
15:59
в 10ке есть набор регистров, поищи по конфигурации СвободныйОстаток()
2 who respawn
 
29.11.23
16:16
(1) нет ничего со содержащее "Свобод"
3 who respawn
 
29.11.23
16:23
ТоварыКПередачеСоСкладовОстатки это те самые без расходника?
4 Homer
 
29.11.23
16:24
РегистрНакопления.СвободныеОстатки
РегистрНакопления.ТоварыВРезервеНаСкладах
РегистрНакопления.ТоварыВРознице
РегистрНакопления.ТоварыКПередачеОрганизаций
РегистрНакопления.ТоварыКПередачеСоСкладов
РегистрНакопления.ТоварыНаСкладах
РегистрНакопления.ТоварыОрганизаций
РегистрНакопления.ТоварыПереданные
5 who respawn
 
29.11.23
16:25
(4) у меня нетиповая, видимо из-за этого СвободныеОстатки - нет такого
6 Homer
 
29.11.23
16:30
(5) у вас древня конфигурация. СвободныеОстатки появился через какое-то время и он заменил другие регистры.
7 Homer
 
29.11.23
16:34
как вариант глянуть данный отчет
АнализДоступностиТоваровНаСкладах
8 Tatitutu
 
29.11.23
17:39
(0) а как ты Свободный =  20 получил ?

а 5 штук эта те, которые в документах но в них нет расходников
из какого регистра мне эти 5 получать?


МАТЕМАТИКА

100 - 75 -20 = 5

Не , благодари !
9 who respawn
 
29.11.23
17:48
(8) спасибо, но мне нужен регистр где эти 5 хранятся
10 who respawn
 
29.11.23
17:48
(6) да, древняя, я разобрался
спасибо
11 who respawn
 
01.12.23
07:47
не разобрался
что не так делаю?

Запрос1 = Новый запрос;
               Запрос1.Текст = "ВЫБРАТЬ
                               |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
                               |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
                               |    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК Количество,
                               |    ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток КАК Количество1
                               |ИЗ
                               |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
                               |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки КАК ТоварыВРезервеНаСкладахОстатки
                               |        ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
                               |            И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры
                               |            И ТоварыНаСкладахОстатки.Склад = ТоварыВРезервеНаСкладахОстатки.Склад
                               |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки КАК ТоварыКПередачеСоСкладовОстатки
                               |        ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыКПередачеСоСкладовОстатки.Номенклатура
                               |            И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыКПередачеСоСкладовОстатки.ХарактеристикаНоменклатуры
                               |            И ТоварыНаСкладахОстатки.Склад = ТоварыКПередачеСоСкладовОстатки.Склад
                               |ГДЕ
                               |    ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура
                               |    И ТоварыНаСкладахОстатки.Склад = &Склад
                               |    И ТоварыКПередачеСоСкладовОстатки.Склад = &Склад
                               |    И ТоварыНаСкладахОстатки.Склад = &Склад
                               |    И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры";
               Запрос1.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоКоду("Ц123"));
               Запрос1.УстановитьПараметр("Номенклатура",ВыборкаСтрокТовары.Номенклатура);
               Запрос1.УстановитьПараметр("ХарактеристикаНоменклатуры", ВыборкаСтрокТовары.Характеристика);
        
                           
               Рез1 = Запрос1.Выполнить().Выгрузить();
                             Для каждого ОстаткиНом из Рез1 цикл
                   ОстатокКонечный = ОстаткиНом.КоличествоОстаток - ОстаткиНом.КОличество - ОстаткиНом.Количество1;
                   ОбластьДанных.Параметры.КолВоСклад = ОстатокКонечный;
                   Если ОстатокКонечный > 0 Тогда
                      
                       ОбластьДанных.Параметры.Остаток = "Да"
                   иначе
                       ОбластьДанных.Параметры.Остаток = "Нет"  
                       КонецЕсли;
                   КонецЦикла;
12 who respawn
 
01.12.23
07:51
Хочу получить свободный остаток и потом заполнить печатную форму строки ТЧ им но у меня что-то не так видимо в коде
13 Галахад
 
гуру
01.12.23
08:09
1С не любит когда в арифметических операциях встречаются данные других типов.
14 who respawn
 
01.12.23
08:35
(13) так везде число?
15 who respawn
 
01.12.23
08:37
(13) у меня проблема не в арифметических операциях, а я думаю проблема в коде в целом потому что у меня например идёт так

Перчатки Остаток 2222
потом в отладчике идёт
Ботинки Остаток 234, а в печатной форме Ботинки Остаток 2222
16 Галахад
 
гуру
01.12.23
09:09
(15) Вероятно, потому что Рез1 пустой.
17 who respawn
 
01.12.23
09:25
(16) так как пустой, я ж отладкой прохожу по циклу рез1
18 who respawn
 
01.12.23
09:32
(16) не пустой, но нет в результате некоторой номенклатуры, да

вопрос, почему Остатки товаров на складах и Ведомость по товарам на складах показывает что остаток есть а мой запрос

ВЫБРАТЬ
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК Количество,
    ЕСТЬNULL(ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток, 0) КАК Количество1
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки КАК ТоварыВРезервеНаСкладахОстатки
        ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
            И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры
            И ТоварыНаСкладахОстатки.Склад = ТоварыВРезервеНаСкладахОстатки.Склад
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки КАК ТоварыКПередачеСоСкладовОстатки
        ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыКПередачеСоСкладовОстатки.Номенклатура
            И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыКПередачеСоСкладовОстатки.ХарактеристикаНоменклатуры
            И ТоварыНаСкладахОстатки.Склад = ТоварыКПередачеСоСкладовОстатки.Склад
ГДЕ
    ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура
    И ТоварыНаСкладахОстатки.Склад = &Склад
    И ТоварыКПередачеСоСкладовОстатки.Склад = &Склад
    И ТоварыНаСкладахОстатки.Склад = &Склад
    И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры
не показывает остатки
19 who respawn
 
01.12.23
09:41
ВЫБРАТЬ
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
ГДЕ
    ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура
    И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры
    И ТоварыНаСкладахОстатки.Склад = &Склад

если так, то остаток есть
что не так в моём запросе?
20 who respawn
 
01.12.23
09:54
??? подскажите пожалуйста что я не так сделал в запросе своём, Что он перестал остатки показывать
21 Галахад
 
гуру
01.12.23
10:02
(20) Ты же в (15) говоришь, что показывает.
22 Homer
 
01.12.23
10:04
(18)
Убери
И ТоварыКПередачеСоСкладовОстатки.Склад = &Склад
23 who respawn
 
01.12.23
10:20
(21) да, показывает, но не всю номенклатуру, просто в доке много
24 who respawn
 
01.12.23
10:23
(22) да, можешь пожалуйста объяснить почему это мешало запросу?
25 who respawn
 
01.12.23
11:41
Вопрос ещё такой, в счёте 2 номенклатуры одинаковые с разными характеристиками

1)абв 102
2)абв 103

если так стоят, то некорректно в печатную форму выводит, а точнее в 1ой строке просто ничего не пишет, а если их поменять в документе местами, то и по 1 и по 2 корректно пишет
почему так может быть?
26 Homer
 
01.12.23
12:01
(24) https://forum.infostart.ru/forum76/topic145929/
(25) тут магия бессильна
27 who respawn
 
01.12.23
12:06
Я чёто не понял, а как мне быть, если остатков нет, получается результат запроса пустой и как мне обрабатывать его? он же не пишет остаток = 0, он просто записи не выводит
28 who respawn
 
01.12.23
12:23
(26) Если в условиях оставить только по основному регистру Склад = &Склад, то остатки неверные показывает, если добавить склады из двух других регистров то остатки верные
29 who respawn
 
01.12.23
12:25
НО как я понял если убрать СКлад = &склад двух других регистров то он начинает смотреть не по выбранному складу а по всем не смотря на то что в "Связи" я указал РН1 склад = РН2 склад и РН1 склад = РН 3 склад
30 Homer
 
01.12.23
12:53
(29) вы не правильно поняли.
(27) Обычно делают соединение со справочником Номенклатура. Отбор номенклатуры накладывают на данный справочник и делают соединение с регистрами
+ куда удобнее работать в запросе с объединением
31 who respawn
 
01.12.23
13:02
(30) можете подсказать что изменить в моём запросе и как? я честно не понимаю
32 who respawn
 
01.12.23
13:06
Запрос1 = Новый запрос;
               Запрос1.Текст = "ВЫБРАТЬ
                               |    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
                               |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
                               |    ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК Количество,
                               |    ЕСТЬNULL(ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток, 0) КАК Количество1
                               |ИЗ
                               |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
                               |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки КАК ТоварыКПередачеСоСкладовОстатки
                               |        ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыКПередачеСоСкладовОстатки.Номенклатура
                               |            И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыКПередачеСоСкладовОстатки.ХарактеристикаНоменклатуры
                               |            И ТоварыНаСкладахОстатки.Склад = ТоварыКПередачеСоСкладовОстатки.Склад
                               |            И ТоварыНаСкладахОстатки.Склад = ТоварыКПередачеСоСкладовОстатки.Склад
                               |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки КАК ТоварыВРезервеНаСкладахОстатки
                               |        ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
                               |            И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры
                               |            И ТоварыНаСкладахОстатки.Склад = ТоварыВРезервеНаСкладахОстатки.Склад
                               |            И ТоварыНаСкладахОстатки.Склад = ТоварыВРезервеНаСкладахОстатки.Склад
                               |ГДЕ
                               |    ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура
                               |    И ТоварыНаСкладахОстатки.Склад = &Склад
                               |    И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры";
               Запрос1.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоКоду("Ц0021"));
               Запрос1.УстановитьПараметр("Номенклатура",ВыборкаСтрокТовары.Номенклатура);
               Запрос1.УстановитьПараметр("ХарактеристикаНоменклатуры", ВыборкаСтрокТовары.Характеристика);
                       
               Рез11 = Запрос1.Выполнить();
               Рез1 = рез11.Выгрузить();
                                        Для каждого ОстаткиНом из Рез1 цикл
                        ОстатокКонечный = ОстаткиНом.КоличествоОстаток - ОстаткиНом.КОличество - ОстаткиНом.Количество1;
                                 ОбластьДанных.Параметры.КолВоСклад = ОстатокКонечный;
                                 Если ОстатокКонечный > 0 Тогда
                        

                       ОбластьДанных.Параметры.ОстатокКомплекс = "Да"
                  
                   иначеесли ОстатокКонечный <= 0 тогда
                       ОбластьДанных.Параметры.ОстатокКомплекс = "Нет"
                   КонецЕсли;
                
                   КонецЦикла;

этот код показывает неверные остатки
33 Homer
 
01.12.23
13:11
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    мНоменклатура.Ссылка КАК Номенклатура,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    0 КАК Количество,
    0 КАК Количество1
ПОМЕСТИТЬ м1
ИЗ
    Справочник.Номенклатура КАК мНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
                ,
                Склад = &Склад
                    И ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры) КАК ТоварыНаСкладахОстатки
        ПО мНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
ГДЕ
    мНоменклатура.Ссылка В(&Номенклатура)

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

ВЫБРАТЬ
    мНоменклатура.Ссылка,
    0,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0),
    0
ИЗ
    Справочник.Номенклатура КАК мНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
                ,
                Склад = &Склад
                    И ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры) КАК ТоварыНаСкладахОстатки
        ПО мНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
ГДЕ
    мНоменклатура.Ссылка В(&Номенклатура)

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

ВЫБРАТЬ
    мНоменклатура.Ссылка,
    0,
    0,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
ИЗ
    Справочник.Номенклатура КАК мНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(
                ,
                Склад = &Склад
                    И ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры) КАК ТоварыНаСкладахОстатки
        ПО мНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
ГДЕ
    мНоменклатура.Ссылка В(&Номенклатура)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    м1.Номенклатура,
    СУММА(м1.КоличествоОстаток) КАК КоличествоОстаток,
    СУММА(м1.Количество) КАК Количество,
    СУММА(м1.Количество1) КАК Количество1
ИЗ
    м1 КАК м1

СГРУППИРОВАТЬ ПО
    м1.Номенклатура
34 Галахад
 
гуру
01.12.23
13:35
(33) А для чего соединение с Номенклатурой?
35 who respawn
 
01.12.23
13:36
(33) спасибо огромное, так всё работает, надо запросы учить начать...
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший