1 / 1 / 2
Регистрация: 04.08.2013
Сообщений: 83
1
1C 8.x

Запрос об остатках номенклатуры на конкретном складе не возвращает ничего

11.02.2014, 22:45. Показов 5602. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем, есть РегистрНакопления ОстаткиНоменклатуры по которому проводятся приходные и расходные, так вот, мне нужно узнать остаток товара на конкретном складе но запрос не возвращает ничего (хотя товар на складе есть) Вот обработка проведения которая постоянно выводит что товара на складе нет(Запрос2):
:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Процедура ОбработкаПроведения(Отказ, Режим)
 
    Движения.ОстаткиНоменклатуры.Записывать = Истина;
    Движения.ОборотыНоменклатуры.Записывать = Истина;
    Запрос1 = Новый Запрос;
    Запрос1.Текст="ВЫБРАТЬ
                  | Расходная.Номенклатура КАК Номенклатура,
                  | СУММА(Расходная.Количество) КАК Количество,
                  | СУММА(Расходная.Сумма) КАК Сумма
                  |ИЗ
                  | Документ.Расходная.Товар КАК Расходная
                  |ГДЕ
                  | Расходная.Ссылка = &Ссылка
                  |
                  |СГРУППИРОВАТЬ ПО
                  | Расходная.Номенклатура";
      Запрос1.УстановитьПараметр("Ссылка",Ссылка);
      Результат1=Запрос1.Выполнить();
      ВыборкаДетальныеЗаписи = Результат1.Выбрать();
      Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
          Если ВыборкаДетальныеЗаписи.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Услуга Тогда
              
            Движение = Движения.ОборотыНоменклатуры.Добавить();
            Движение.Период = Дата;
            Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
            Движение.Склад = Склад;
            Движение.Количество = ВыборкаДетальныеЗаписи.Количество;
            Движение.Сумма = ВыборкаДетальныеЗаписи.Сумма;
 
        Иначе
            Запрос2 = Новый Запрос;
            Запрос2.Текст = "ВЫБРАТЬ
                            |   ОстаткиНоменклатурыОстатки.Номенклатура,
                            |   ОстаткиНоменклатурыОстатки.Склад,
                            |   ОстаткиНоменклатурыОстатки.КоличествоОстаток
                            |ИЗ
                            |   РегистрНакопления.ОстаткиНоменклатуры.Остатки(
                            |           &Дата,
                            |           Номенклатура = &Номенклатура
                            |               И Склад = &Склад) КАК ОстаткиНоменклатурыОстатки";
            Запрос2.УстановитьПараметр("Номенклатура",ВыборкаДетальныеЗаписи.Номенклатура);
            Запрос2.УстановитьПараметр("Склад", Склад);
            Запрос2.УстановитьПараметр("Дата",Дата);
            Результат2 = Запрос2.Выполнить();
            ОстаткиНоменклатуры = Результат2.Выгрузить();
            Если ОстаткиНоменклатуры.Количество()=0 ИЛИ ОстаткиНоменклатуры[0].Остаток < ВыборкаДетальныеЗаписи.Количество Тогда
                Сообщение = Новый СообщениеПользователю();
                Сообщение.Текст = "Недостаточно товара на складе!";
                Сообщение.Сообщить();
                Отказ = Истина;
            Иначе
                Движение = Движения.ОстаткиНоменклатуры.Добавить();
                Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
                Движение.Период = Дата;
                Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
                Движение.Склад = Склад;
                Движение.Количество = ВыборкаДетальныеЗаписи.Количество;
                Движение.Сумма = ВыборкаДетальныеЗаписи.Сумма;
            
                Движение = Движения.ОборотыНоменклатуры.Добавить();
                Движение.Период = Дата;
                Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
                Движение.Склад = Склад;
                Движение.Количество = ВыборкаДетальныеЗаписи.Количество;
                Движение.Сумма = ВыборкаДетальныеЗаписи.Сумма;
            КонецЕсли;
        КонецЕсли;
 
      КонецЦикла;
 
КонецПроцедуры
Неправильно работает второй запрос почему-то....через отладку смотрел передаваемые значения параметров, все вроде-бы нормально.Заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2014, 22:45
Ответы с готовыми решениями:

Запрос с LIKE ничего не возвращает
Доброго времени суток. есть след код SQLiteCommand comd =...

Простой запрос ничего не возвращает
Добрый день! Чет я въехать не могу, после трудового дня! Выполняю запрос, элементарный, в таблице...

RX и Retrofit запрос, который ничего не возвращает
Делаю запросы так: subscription = getApi().getData(token) ...

HTTP запрос через Apache HTTP Client ничего не возвращает
У меня есть один сайт. Простой сайт на php. И есть второй сайт, где используется java на JBoss. Я...

17
Модератор
Эксперт 1С
3783 / 2963 / 589
Регистрация: 10.03.2011
Сообщений: 11,665
Записей в блоге: 1
11.02.2014, 22:50 2
Перепиши запрос регистр левым соединение к табличной части и все данные получишь в одном наборе
1
1 / 1 / 2
Регистрация: 04.08.2013
Сообщений: 83
11.02.2014, 23:03  [ТС] 3
Таким образом?
1C
1
2
3
4
5
6
7
8
9
10
11
Запрос2.Текст = "ВЫБРАТЬ
                            |   ОстаткиНоменклатурыОстатки.Номенклатура,
                            |   ОстаткиНоменклатурыОстатки.Склад,
                            |   ОстаткиНоменклатурыОстатки.КоличествоОстаток
                            |ИЗ
                            |   Документ.Расходная.Товар КАК РасходнаяТовар
                            |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
                            |               &Дата,
                            |               Номенклатура = &Номенклатура
                            |                   И Склад = &Склад) КАК ОстаткиНоменклатурыОстатки
                            |       ПО РасходнаяТовар.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура";
0
Модератор
Эксперт 1С
3783 / 2963 / 589
Регистрация: 10.03.2011
Сообщений: 11,665
Записей в блоге: 1
11.02.2014, 23:14 4
Тут описана целая методика
http://1c.chistov.pro/2013/07/blog-post_25.html
1
1 / 1 / 2
Регистрация: 04.08.2013
Сообщений: 83
11.02.2014, 23:22  [ТС] 5
да мне бы просто остаток вытащить и все(
0
Модератор
Эксперт 1С
3783 / 2963 / 589
Регистрация: 10.03.2011
Сообщений: 11,665
Записей в блоге: 1
11.02.2014, 23:27 6
Лучший ответ Сообщение было отмечено ildwine как решение

Решение

Ну примерно так

ВЫБРАТЬ Расходная.Номенклатура, Расходная.Ссылка.Склад, Расходная.Количество, isNull(Остаток.КоличествоОстаток, 0) КАК КоличествоОстаток
ИЗ Документ.Расходная.Товар КАК Расходная
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
&Дата, Склад = &Склад) КАК Остаток
ПО Расходная.Номенклатура = Остаток.Номенклатура
И Расходная.Ссылка.Склад= Остаток.Склад
ГДЕ расходная.Ссылка = &Ссылка
1
1 / 1 / 2
Регистрация: 04.08.2013
Сообщений: 83
11.02.2014, 23:43  [ТС] 7
Возвращает 0 хоть там и есть товар =\
Запрос об остатках номенклатуры на конкретном складе не возвращает ничего
0
Модератор
Эксперт 1С
3783 / 2963 / 589
Регистрация: 10.03.2011
Сообщений: 11,665
Записей в блоге: 1
11.02.2014, 23:45 8
На какую дату там есть товар?
1
1 / 1 / 2
Регистрация: 04.08.2013
Сообщений: 83
11.02.2014, 23:53  [ТС] 9
на сегодня
0
Модератор
Эксперт 1С
3783 / 2963 / 589
Регистрация: 10.03.2011
Сообщений: 11,665
Записей в блоге: 1
11.02.2014, 23:54 10
А получаешь остаток на какую дату (точность должна быть до секунды)?
1
1 / 1 / 2
Регистрация: 04.08.2013
Сообщений: 83
12.02.2014, 00:04  [ТС] 11
да, тоже до секунды
0
Модератор
Эксперт 1С
3783 / 2963 / 589
Регистрация: 10.03.2011
Сообщений: 11,665
Записей в блоге: 1
12.02.2014, 00:12 12
Что бы исключить ошибку в дате, уберите параметр &Дата из запроса

Добавлено через 2 минуты
Если вы используете запрос тот что я запостил сюда, то получается условие такое:
1. На Дату в параметре &Дата
2. На складе "Склад1"
3. По Товару "Товар1" остатка НЕТ
1
1 / 1 / 2
Регистрация: 04.08.2013
Сообщений: 83
12.02.2014, 00:32  [ТС] 13
убрал дату, все равно 0
Вложения
Тип файла: rar vopros.rar (38.8 Кб, 4 просмотров)
0
Модератор
Эксперт 1С
3783 / 2963 / 589
Регистрация: 10.03.2011
Сообщений: 11,665
Записей в блоге: 1
12.02.2014, 01:24 14
Лучше выложи *.dt (Администрирование - Выгрузить информационную базу)
1
1 / 1 / 2
Регистрация: 04.08.2013
Сообщений: 83
12.02.2014, 01:45  [ТС] 15
zzzzzzz.rar
0
Модератор
Эксперт 1С
3783 / 2963 / 589
Регистрация: 10.03.2011
Сообщений: 11,665
Записей в блоге: 1
12.02.2014, 02:56 16
Ну ты герой... Почему в регистре Строки а не элементы справочника?

Добавлено через 1 минуту
Меняй тип у Измерений регистра и перепроводи приходные

Добавлено через 19 минут
Вот тебе код обработки проведения (более понятный)
З.Ы. у документа расходная нужно установить свойство "Удаление движений" = Удалять автоматически
Кликните здесь для просмотра всего текста
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
Процедура ОбработкаПроведения(Отказ, Режим)
 
    Движения.ОстаткиНоменклатуры.Записывать = Истина;
    Движения.ОборотыНоменклатуры.Записывать = Истина;
        
    Запрос = Новый Запрос("ВЫБРАТЬ
                          | РасходнаяТовар.Номенклатура,
                          | СУММА(РасходнаяТовар.Количество) КАК Количество,
                          | СУММА(РасходнаяТовар.Сумма) КАК Сумма,
                          | РасходнаяТовар.Ссылка.Склад
                          |ПОМЕСТИТЬ ВТ_Документа
                          |ИЗ
                          | Документ.Расходная.Товар КАК РасходнаяТовар
                          |ГДЕ
                          | РасходнаяТовар.Ссылка = &Ссылка
                          |
                          |СГРУППИРОВАТЬ ПО
                          | РасходнаяТовар.Номенклатура,
                          | РасходнаяТовар.Ссылка.Склад
                          |;
                          |
                          |////////////////////////////////////////////////////////////////////////////////
                          |ВЫБРАТЬ
                          | ВТ_Документа.Номенклатура,
                          | ВТ_Документа.Количество,
                          | ВТ_Документа.Сумма,
                          | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
                          | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
                          | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) - ВТ_Документа.Количество КАК КоличествоПерерасход,
                          | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) - ВТ_Документа.Сумма КАК СуммаПерерасход,
                          | ВТ_Документа.Номенклатура.Представление,
                          | ВТ_Документа.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры
                          |ИЗ
                          | ВТ_Документа КАК ВТ_Документа
                          |     ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
                          |             &ДатаДокумента,
                          |             Склад = &Склад
                          |                 И Номенклатура В
                          |                     (ВЫБРАТЬ
                          |                         ВТ_Документа.Номенклатура
                          |                     ИЗ
                          |                         ВТ_Документа КАК ВТ_Документа)) КАК ОстаткиНоменклатурыОстатки
                          |     ПО ВТ_Документа.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
                          |         И ВТ_Документа.Склад = ОстаткиНоменклатурыОстатки.Склад");
                          
    Запрос.УстановитьПараметр("Ссылка",Ссылка);
    Запрос.УстановитьПараметр("Склад",Склад);
    Запрос.УстановитьПараметр("ДатаДокумента",Новый Граница(МоментВремени(), ВидГраницы.Включая));
    
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        
        Если Выборка.ВидНоменклатуры = ПредопределенноеЗначение("Перечисление.ВидыНоменклатуры.Товар") Тогда
            
            Если Выборка.КоличествоПерерасход < 0 Тогда
                
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "Для списания товара <"+Выборка.НоменклатураПредставление+"> на складе <"+
                    Склад.Наименование+">, не хватает товара в количестве <"+(-Выборка.КоличествоПерерасход)+">
                    |Остаток на складе - <"+Выборка.КоличествоОстаток+">";
                Сообщение.Сообщить();
                Отказ = Истина;
                                
            КонецЕсли;
            
            Если не Отказ Тогда
                
                Движение = Движения.ОстаткиНоменклатуры.Добавить();
                Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
                Движение.Период = Дата;
                Движение.Номенклатура = Выборка.Номенклатура;
                Движение.Склад = Склад;
                Движение.Количество = Выборка.Количество;
                Движение.Сумма = Выборка.Сумма;
                
            КонецЕсли; 
            
        КонецЕсли;
        
        Если Не Отказ Тогда
                        
            Движение = Движения.ОборотыНоменклатуры.Добавить();
            Движение.Период = Дата;
            Движение.Номенклатура = Выборка.Номенклатура;
            Движение.Склад = Склад;
            Движение.Количество = Выборка.Количество;
            Движение.Сумма = Выборка.Сумма;
            
        КонецЕсли; 
        
    КонецЦикла; 
    
КонецПроцедуры
1
Модератор
Эксперт 1С
3783 / 2963 / 589
Регистрация: 10.03.2011
Сообщений: 11,665
Записей в блоге: 1
12.02.2014, 02:59 17
Лучший ответ Сообщение было отмечено Deodatus как решение

Решение

Ну и сама база
zzzzz2.rar
1
1 / 1 / 2
Регистрация: 04.08.2013
Сообщений: 83
12.02.2014, 09:06  [ТС] 18
о боги))я проверял раза 3 это) наверное постоянно путал и смотрел по регистру оборотов....спасибо огромное и прости что время отнял)
0
12.02.2014, 09:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.02.2014, 09:06
Помогаю со студенческими работами здесь

Как вернуть в запросе значение по умолчанию, если SELECT возвращает NULL или ничего не возвращает?
Добрый день! Например я хочу чтобы донное выражение возвращало мне 0 или скажем 1, если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru