Вход | Регистрация


1С:Предприятие ::

Метки:

Учет остатков на складе

Я
   GVS13
 
11.11.17 - 16:51
Привет всем! Ребятки, помогите пожалуйста. С 0 пишу конфу, учет прихода, расхода и перемещения товаров по складам.
Сделала запрос в документе расход на вывод ошибки, если на остатках не достаточно товара. Подобное действо должно происходить в документе перемещение с одного склада на другой. При отладке ошибка не выскакивает и перемещение проводится в минус((( Посмотрите, пожалуйста, где ошибка в тексте запроса.


    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                  |    ОстаткиОстатки.Номенклатура,
                  |    ОстаткиОстатки.Склад,
                  |    ОстаткиОстатки.КоличествоОстаток,
                  |    ПеремещениеТовара.СкладОткуда,
                  |    ПеремещениеТовара.ТабличнаяЧасть1.(
                  |        Номенклатура
                  |    )
                  |ИЗ
                  |    РегистрНакопления.Остатки.Остатки КАК ОстаткиОстатки
                  |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПеремещениеТовара КАК ПеремещениеТовара
                  |        ПО ОстаткиОстатки.Номенклатура = ПеремещениеТовара.ТабличнаяЧасть1.Номенклатура
                  |            И ОстаткиОстатки.Склад = ПеремещениеТовара.СкладОткуда
                  |ГДЕ
                  |    ОстаткиОстатки.КоличествоОстаток < 0"
    ;
    Запрос.УстановитьПараметр("Склад", СкладОткуда);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Не хватает"+ Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток)
    + "единиц материала"""
    + ВыборкаДетальныеЗаписи.Номенклатура + """";
    Сообщение.Сообщить();
    Отказ = Истина;
КонецЦикла

П.С. я совсем новичок, не судите строго)
 
  Рекламное место пустует
   deaddy64
 
1 - 11.11.17 - 17:04
(0) рекомендую посмотреть как это сделано в типовых. Будет четкое понимание.
в запросе слишком многое не так. Нет фильтров, не используются вирт таблицы, соединение тоже вроде как не совсем верное...
   deaddy64
 
2 - 11.11.17 - 17:07
(1) "не используются вирт таблицы" = "не используются параметры в вирт таблицах"
   Фрэнки
 
3 - 11.11.17 - 17:26
если не слишком глубоко ломать голову, то принимаем следующее:
1) документ уже записан.
2) выбираем данные из табчасти документа.
3) левое соединение данных остатков с табчастью документа
   h-sp
 
4 - 11.11.17 - 17:26
(2) но вроде этот кусок должен работать, ошибка в чем-то другом.
   jsmith82
 
5 - 11.11.17 - 17:28
зачем внутреннее?!
   jsmith82
 
6 - 11.11.17 - 17:29
у тебя заранее отсекаются товары, которых нет в остатках на складе
   jsmith82
 
7 - 11.11.17 - 17:30
табчасть левое остатки
   AlvlSpb
 
8 - 12.11.17 - 11:54
(0) Ошибка в выборе таблиц для соединения. Ваше ПеремещениеТовара.ТабличнаяЧасть1.(Номенклатура) возвращает не поле, а результат запроса. Нужен либо доп Цикл, чтобы из этого результата извлечь поле или (значительно проще и правильней) обращаться сразу не к документу, а к его таблице

ВЫБРАТЬ
 | ОстаткиОстатки.Номенклатура,
 |    ОстаткиОстатки.Склад,
 |    ОстаткиОстатки.КоличествоОстаток,
 |    ПеремещениеТовараТабличнаяЧасть1.Ссылка.СкладОткуда,
 |    ПеремещениеТовараТабличнаяЧасть1.Номенклатура
 |ИЗ
 |    РегистрНакопления.Остатки.Остатки КАК ОстаткиОстатки
 |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПеремещениеТовара.ТабличнаяЧасть1 КАК ПеремещениеТовараТабличнаяЧасть1
 |        ПО ОстаткиОстатки.Номенклатура = ПеремещениеТовара.ТабличнаяЧасть1.Номенклатура
 |            И ОстаткиОстатки.Склад = ПеремещениеТовара.ТабличнаяЧасть1.Ссылка.СкладОткуда
 |ГДЕ
 |    ОстаткиОстатки.КоличествоОстаток < 0"

Ну и прислушайся к (1).
   GVS13
 
9 - 14.11.17 - 08:50
Добавила вирт таблицу. Теперь выскакивает ошибка
{(6, 2)}: Таблица не найдена "НоменклатураДокумента"
<<?>>НоменклатураДокумента КАК НоменклатураДокумента

Текст

Если Режим = РежимПроведенияДокумента.Оперативный Тогда
        

    МенеджерВТ = Новый МенеджерВременныхТаблиц;
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ОстаткиОстатки.Номенклатура,
                   |    ОстаткиОстатки.КоличествоОстаток
                   |ПОМЕСТИТЬ НоменклатураДокумента
                   |ИЗ
                   |    НоменклатураДокумента КАК НоменклатураДокумента
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Остатки.Остатки(
                   |                ,
                   |                Номенклатура В
                   |                        (ВЫБРАТЬ
                   |                            НоменклатураДокумента.Номенклатура
                   |                        ИЗ
                   |                            НоменклатураДокумента)
                   |                    И Склад = &Склад) КАК ОстаткиОстатки
                   |        ПО НоменклатураДокумента.Номенклатура = ОстаткиОстатки.Номенклатура
                   |ГДЕ
                   |    ОстаткиОстатки.КоличествоОстаток < 0"
    ;
    Запрос.УстановитьПараметр("СкладОткуда", СкладОткуда);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Не хватает"+ Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток)
    + "единиц материала"""
    + ВыборкаДетальныеЗаписи.Номенклатура + """";
    Сообщение.Сообщить();
    Отказ = Истина;
КонецЦикла;
КонецЕсли;
   Фрэнки
 
10 - 14.11.17 - 08:57
(9) Вам бы для начала запросики научиться составлять с использованием Конструктора запросов, да посмотреть какие тексты получаются у него на выходе, как с виртуальными таблицами оно работает и т.д. и т.п.
 
 
   Фрэнки
 
11 - 14.11.17 - 09:02
потому что вся процедура ручками делается на пустом тексте процедуры нажатием на ПКМ и затем запуске конструктора с обработкой результатов и затем уже в цикле выборка. Кстати, номер строки тоже нужен.

Поищите видео на ютубах обучающее таким приемам работы в конфигураторе. Там реально визуализация всего обучения нужна, а не текстом в форуме расписывать, что и куда нажимать.
   Фрэнки
 
12 - 14.11.17 - 09:03
И забудьте уже про это ВНУТРЕННЕЕ СОЕДИНЕНИЕ несчастное - откуда Вам вообще в голову идея пришла, что его в этой задачке нужно приспособить???
   GVS13
 
13 - 14.11.17 - 09:10
Запрос пишу через конструктор, после выбора необходимых таблиц и установки условий текст запроса выводится в таком виде.
   Фрэнки
 
14 - 14.11.17 - 09:21
(13) насколько я понимаю, их конструктора просто не получится выйти с таким текстом запроса. В нем нет основной выборки или как там ее правильно называют. После этой конструкции
|ПОМЕСТИТЬ НоменклатураДокумента

где-то дальше должно быть еще раз ВЫБРАТЬ в которой не будет указано ПОМЕСТИТЬ

А у Вас не так - значит это не Конструктор сделал
   FIXXXL
 
15 - 14.11.17 - 09:45
(14) нормально конструктор сформирует
результатом запроса будет число строк в таблице :)
   Фрэнки
 
16 - 14.11.17 - 11:27
(13) если это еще нужно, могу скинуть файл чистой базы с решением только данного примера
   azernot
 
17 - 14.11.17 - 11:46
Ошибка везде. И не только в запросе (даже если его поправить с учётом (8).

На остатке 1 шт (не отрицательный остаток, запрос его не поймает). Перемещение списывает 2 штуки.
Вуаля, отрицательный остаток на складе.
   azernot
 
18 - 14.11.17 - 11:59
Вот так должен выглядеть ваш запрос, если пытаться решить именно вашу задачу, именно вашим способом.


ВЫБРАТЬ
    ПеремещениеТабличнаяЧасть1.Номенклатура КАК Номенклатура,
    СУММА(ПеремещениеТабличнаяЧасть1.Количество) КАК Количество
ПОМЕСТИТЬ НоменклатураКСписанию
ИЗ
    Документ.Перемещение.ТабличнаяЧасть1 КАК ПеремещениеТабличнаяЧасть1
ГДЕ
    ПеремещениеТабличнаяЧасть1.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
    ПеремещениеТабличнаяЧасть1.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    НоменклатураКСписанию.Номенклатура КАК Номенклатура,
    НоменклатураКСписанию.Количество КАК Количество,
    ЕСТЬNULL(ОстаткиОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    НоменклатураКСписанию.Количество - ЕСТЬNULL(ОстаткиОстатки.КоличествоОстаток, 0) КАК КоличествоНехватает
ИЗ
    НоменклатураКСписанию КАК НоменклатураКСписанию
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Остатки.Остатки(
                ,
                Склад = &СкладОткуда
                    И Номенклатура В
                        (ВЫБРАТЬ
                            НоменклатураКСписанию.Номенклатура
                        ИЗ
                            НоменклатураКСписанию)) КАК ОстаткиОстатки
        ПО (ОстаткиОстатки.Номенклатура = НоменклатураКСписанию.Номенклатура)
ГДЕ
    ЕСТЬNULL(ОстаткиОстатки.КоличествоОстаток, 0) < НоменклатураКСписанию.Количество
   GVS13
 
19 - 14.11.17 - 19:31
Да, вопрос все еще актуален, спасибо всем кто помогает!
   vicof
 
20 - 14.11.17 - 20:29
Почему еще никто не затребовал фотку?
   Волшебник
 
Модератор
21 - 14.11.17 - 21:37
(0) Зачем Вы пишете с нуля конфу, которых уже тысячи?
   jsmith82
 
22 - 14.11.17 - 21:46
(21) хелловорлд же
   jsmith82
 
23 - 14.11.17 - 21:47
Просто у 1сников требования повыше к хелловорлду
Как минимум - мини-конфа по складу
   Фрэнки
 
24 - 14.11.17 - 21:47
(21) вероятно, что изучает программирование. Есть даже целая книга, построенная целиком на разработке простейшей конфигурации "с нуля" для демонстрации основных приемов программирования
   Фрэнки
 
25 - 14.11.17 - 21:48
правда, книга эта идет в комплекте с учебной версией 1С, но ТС почему то не хочет искать примеры там, а пытается вытащить что-то здесь...
   Волшебник
 
Модератор
26 - 14.11.17 - 21:49
(24) Ага, Митичкин писал ещё по 7.7
http://old.mista.ru/tutor_1c/example_sklad.htm
   GVS13
 
27 - 14.11.17 - 22:03
Изучаю 1С по пособию Радченко, но не все мне там понятно((
   Волшебник
 
Модератор
28 - 14.11.17 - 22:05
(27) Вы можете задавать вопросы самому Радченко. Не надо плодить на мисте темы по книге Радченко. Имейте совесть!
   jsmith82
 
29 - 14.11.17 - 22:32
(27) Я даже знаю что. Раздел Зарплата и Планы обмена
   KSN
 
30 - 14.11.17 - 23:00
(0) Теряют хватку одинесники... ФОТО где???
   azernot
 
31 - 15.11.17 - 10:14
(19) Чем не устраивает (18)? Почему вопрос ещё актуален?
   GVS13
 
32 - 15.11.17 - 13:48
Всем спасибо за помощь! Получилось



Список тем форума
Рекламное место пустует   Рекламное место пустует
AdBlock убивает бесплатный контент. 1Сергей
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует