Имя: Пароль:
1C
 
Перемещение товаров между складами.
0 Haosmedi
 
19.07.18
14:24
Есть некий справочник с номенклатурой и Регистр накопления " Товары на складах" с измерениями: Склад,Номенклатура; ресурс: Количество.

Необходимо реализовать механизм перемещения номенклатуры между складами посредством документа "Перемещение товара". Склады определяются в документе с помощью реквизитов "Склад отправитель" и "Склад получатель". Данный документ регистрирует изменение складских остатков и так же в нём должен быть реализован контроль остатков.

Подскажите пожалуйста подробно,как с помощью конструктора запроса в Обработке проведения это реализовать?
1 Джинн
 
19.07.18
14:30
За Вас все сделать? В чем тогда смысл такого обучения?
2 Garykom
 
гуру
19.07.18
14:33
Ну человек хочет "найти зарплатодателя, работодателей просьба не беспокоиться"©
3 ColonelAp4u
 
19.07.18
14:38
(0) в регистре при записи делаешь контроль остатков, в документе в обработке проведения делаешь движения, склад отправитель расход, склад получатель приход. Все!
4 Serg_1960
 
19.07.18
14:39
"Злые вы все, уйду я от вас"(цы)

“Новая” и “старая” методики контроля отрицательных остатков при проведении документов в системе 1С:Предприятие 8.3
https://курсы-по-1с.рф/articles/2017-02-12-two-methods-for-inventory-check/
5 ColonelAp4u
 
19.07.18
14:39
(3) контроль в регистре делаешь на дату документа и на текущую дату.
6 leonidk
 
19.07.18
14:43
(0)   Практическое пособие разработчика. Радченко.
Занятие 14.
7 Garykom
 
гуру
19.07.18
16:52
(5) Ты еще скажи что проверку при отмене проведения делать да?
Чтобы остатки в минуса не ушли, а то переместили/продали пришедшее ранее а потом некто умный хочет задним числом отменить.
8 Haosmedi
 
20.07.18
18:37
Правильно ли я понимаю, что приход можно отразить в запросе 1(Склад получатель), а расход уже во 2-ом Запросе(Склад отправитель)? И потом уже в Запросе 3(изменение складских остатков с выводом сообщения) ?!
9 lodger
 
20.07.18
18:53
там вроде один запрос?
10 Haosmedi
 
20.07.18
19:33
По идее два запроса. В одном перемещение товаров. Во втором учёт остатков. Ума не приложу как в один запрос  приход и расход добавить.
11 hhhh
 
20.07.18
19:45
(10) ну у тебя приход = расход. С одного склада забираешь товар и перевозишь на второй склад.
12 Мимохожий Однако
 
20.07.18
19:52
(10) делай пакетный запрос
13 Serg_1960
 
20.07.18
22:27
PS: Нафига я ссылку в (4) давал? Автор даже не удосужился её открыть (если бы открыл и бегло прочитал - то и вопросов бы не было).
14 Haosmedi
 
22.07.18
15:05
(13) Я прочитал.Как вести учёт остатков я понял.
Непонятно только как "Склад отправитель" и "Склад получатель" сопоставить с измерением "Склад" регистра накопления "Товары на складах" !
15 Haosmedi
 
22.07.18
18:53
Процедура ОбработкаПроведения(Отказ, Режим)
    
    
    Запрос = Новый Запрос ("ВЫБРАТЬ
                           |    Товары.Ссылка КАК Регистратор,
                           |    Товары.Ссылка.Дата КАК Период,
                           |    Товары.Ссылка.СкладПолучатель КАК Склад,
                           |    Товары.Номенклатура КАК Номенклатура,
                           |    ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК ВидДвижения,
                           |    Товары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                           |    Товары.Количество КАК Количество,
                           |    Товары.СерияНоменклатуры КАК СерияНоменклатуры,
                           |    Товары.Цена КАК Цена
                           |ИЗ
                           |    Документ.ПеремещениеТовара.Номенклатура КАК Товары
                           |ГДЕ
                           |    Товары.Ссылка = &Ссылка
                           |
                           |ОБЪЕДИНИТЬ ВСЕ
                           |
                           |ВЫБРАТЬ
                           |    Товары.Ссылка,
                           |    Товары.Ссылка.Дата,
                           |    Товары.Ссылка.СкладОтправитель,
                           |    Товары.Номенклатура,
                           |    ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход),
                           |    Товары.ХарактеристикаНоменклатуры,
                           |    Товары.Количество,
                           |    Товары.СерияНоменклатуры,
                           |    Товары.Цена
                           |ИЗ
                           |    Документ.ПеремещениеТовара.Номенклатура КАК Товары
                           |ГДЕ
                           |    Товары.Ссылка = &Ссылка");
    Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка);
    
    данные = Запрос.Выполнить().Выгрузить();
    
    Движения.ТоварыНаСкладах.Загрузить(данные);
    Движения.ТоварыНаСкладах.Записать();
    
     // проверка на остатки
    Запрос = Новый Запрос ("ВЫБРАТЬ
                           |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
                           |    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                           |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
                           |ИЗ
                           |    РегистрНакопления.ТоварыНаСкладах.Остатки(
                           |            &Дата,
                           |            (Номенклатура, СерияНоменклатуры, Склад, ХарактеристикаНоменклатуры) В
                           |                (ВЫБРАТЬ
                           |                    ПеремещениеТовараНоменклатура.Номенклатура КАК Номенклатура,
                           |                    ПеремещениеТовараНоменклатура.СерияНоменклатуры КАК СерияНоменклатуры,
                           |                    ПеремещениеТовараНоменклатура.Ссылка.СкладОтправитель КАК Склад,
                           |                    ПеремещениеТовараНоменклатура.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
                           |                ИЗ
                           |                    Документ.ПеремещениеТовара.Номенклатура КАК ПеремещениеТовараНоменклатура)) КАК ТоварыНаСкладахОстатки
                           |ГДЕ
                           |    ТоварыНаСкладахОстатки.КоличествоОстаток < 0");
    Запрос.УстановитьПараметр("Склад", СкладОтправитель);    
    Запрос.УстановитьПараметр("Ссылка",     ЭтотОбъект.Ссылка);    
    Запрос.УстановитьПараметр("Дата",             Новый Граница(Ссылка.МоментВремени(), ВидГраницы.Включая) );
    
    данные = запрос.Выполнить().Выгрузить();
    
    Если данные.Количество() > 0 Тогда
        Отказ = Истина;
        
        Для Каждого стр Из данные Цикл
            Сообщить("Не хватает товара на складе. Товар:" + стр.Номенклатура + "; Характеристика: " + стр.ХарактеристикаНоменклатуры + " Не хватает: " +  Строка(-стр.КоличествоОстаток));
        КонецЦикла;
    КонецЕсли;

КонецПроцедуры


Подскажите,что не так? Движения в приход и расход получились в первом запросе,но остатки так и не учитывает!
16 hhhh
 
22.07.18
19:16
(15) во-первых вот это забыл, как в первом запросе.

   |ГДЕ
                           |    Товары.Ссылка = &Ссылка");

может у тебя 1000000 перемещений, ты их все в запрос загнал.
17 Haosmedi
 
22.07.18
21:11
(16) И правда забыл, но проблему с выводом сообщения это не решает.
18 hhhh
 
22.07.18
22:21
(17) возможно Сообщить в другую форму выводится.
19 Haosmedi
 
22.07.18
22:56
(18) В какую другую ?)

Хотите сказать всё правильно в моём коде значит?
20 hhhh
 
22.07.18
23:32
(19) ну вот это херня какая-то

(Номенклатура, СерияНоменклатуры, Склад, ХарактеристикаНоменклатуры) В

за 20 лет первый раз такой выпендреж вижу. Еще серии какие-то всобачил.

попробуй это условие выкинуть временно, появятся сообщения или нет?
21 Haosmedi
 
23.07.18
00:10
(20) Нет, не помогло. Видимо происходит расход и приход одновременно, поэтому остатков нет. Или я не так понимаю?
22 hhhh
 
23.07.18
00:43
(21) ну добавь условие Склад = &Склад
23 Haosmedi
 
23.07.18
00:52
(22) А как я потом складу установлю параметр &Склад? У меня же два склада.
24 hhhh
 
23.07.18
00:55
(23) почему 2? один склад

Ссылка.СкладОтправитель
25 Haosmedi
 
23.07.18
01:21
(24)  Безуспешно! Попробовал через точку останова посмотреть,до срабатывания условия "Отказ = Истина" дело не доходит никак.
26 Haosmedi
 
23.07.18
03:36
(24) Выгрузил базу. Посмотрите пожалуйста кто-нибудь, если вам не сложно.

https://my-files.ru/pmzyll
27 Мимохожий Однако
 
23.07.18
07:41
(25) Поставь точку останова на начало команды и шаг за шагом, шаг за шагом.
28 Haosmedi
 
23.07.18
15:28
(27) Я уже пробовал, срабатывание этого не происходит ни при каких условиях: " Если данные.Количество() > 0 Тогда "
29 Haosmedi
 
23.07.18
18:10
ВОПРОС ИСЧЕРПАН. Была ошибка в типах всего лишь моя невнимательность.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.