|
Контроль остатков при проведении | ☑ | ||
---|---|---|---|---|
0
xupypg
18.11.18
✎
04:02
|
Подскажите пожалуйста, сделал запрос на контроль остатков, он не работает, в чём ошибка?
Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток, | ТоварыНаСкладахОстатки.Товар КАК Товар, | РасходнаяНакладнаяТовары.Склад КАК Склад |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | , | Товар В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары | ПО ТоварыНаСкладахОстатки.Склад = РасходнаяНакладнаяТовары.Склад |ГДЕ | ТоварыНаСкладахОстатки.КоличествоОстаток < 0"; |
|||
1
MSOliver
18.11.18
✎
04:05
|
Кто такое НоменклатураДокумента?
|
|||
2
runoff_runoff
18.11.18
✎
04:08
|
(Товар, Склад) В (
ВЫБРАТЬ НоменклатураДокумента.Номенклатура, НоменклатураДокумента.Склад ИЗ НоменклатураДокумента) |
|||
3
xupypg
18.11.18
✎
04:10
|
Номенклатура Документа- временная таблица, Руноф, я добавил склад, не получилось.... может отправить как-то вам выгрузку?
|
|||
4
xupypg
18.11.18
✎
04:11
|
Вот весь блок
Если Режим = РежимПроведенияДокумента.Оперативный Тогда //проверим отрицательные остатки Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток, | ТоварыНаСкладахОстатки.Товар КАК Товар, | РасходнаяНакладнаяТовары.Склад КАК Склад |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | , | Товар, Склад В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура, | НоменклатураДокумента.Склад | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары | ПО ТоварыНаСкладахОстатки.Склад = РасходнаяНакладнаяТовары.Склад | И ТоварыНаСкладахОстатки.КоличествоОстаток = РасходнаяНакладнаяТовары.Склад |ГДЕ | ТоварыНаСкладахОстатки.КоличествоОстаток < 0"; РезультатЗапроса = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) +" единиц материала """ + ВыборкаДетальныеЗаписи.Товар + """"; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецЕсли; |
|||
5
hhhh
18.11.18
✎
08:08
|
(4) а Движения.Записать() есть перед этим блоком?
|
|||
6
РусКомп
18.11.18
✎
08:36
|
Проведение оперативное, раз дата остатков не указана?
|
|||
7
xupypg
18.11.18
✎
08:45
|
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ТоварыНаСкладах.Записывать = Истина; МенеджерВТ = Новый МенеджерВременныхтаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК КоличествоВДокументе, | СУММА(РасходнаяНакладнаяТовары.Сумма) КАК СуммаВДокументе |ПОМЕСТИТЬ НоменклатураДокумента |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары |ГДЕ | РасходнаяНакладнаяТовары.Номенклатура.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); Запрос2 = Новый Запрос; Запрос2.МенеджерВременныхТаблиц = МенеджерВт; Запрос2.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура, | РасходнаяНакладнаяТовары.Склад КАК Склад, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары |ГДЕ | РасходнаяНакладнаяТовары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура, | РасходнаяНакладнаяТовары.Склад"; Запрос2.УстановитьПараметр("Ссылка", Ссылка); Движения.ТоварыНаСкладах.Записать(); РезультатЗапроса = Запрос2.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи Движение = Движения.ТоварыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Товар = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = ВыборкаДетальныеЗаписи.Склад; Движение.Количество = ВыборкаДетальныеЗаписи.Количество; КонецЦикла; Движения.Записать(); Если Режим = РежимПроведенияДокумента.Оперативный Тогда //проверим отрицательные остатки Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток, | ТоварыНаСкладахОстатки.Товар КАК Товар, | РасходнаяНакладнаяТовары.Склад КАК Склад |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | , | (Товар, Склад) В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура, | НоменклатураДокумента.Склад | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары | ПО ТоварыНаСкладахОстатки.КоличествоОстаток = РасходнаяНакладнаяТовары.Склад |ГДЕ | ТоварыНаСкладахОстатки.КоличествоОстаток < 0"; РезультатЗапроса = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) +" единиц материала """ + ВыборкаДетальныеЗаписи.Товар + """"; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
8
xupypg
18.11.18
✎
08:46
|
Попытался выгрузить результат 3 запроса в таблицу, он не выгружается, как я понял процедура просто сюда не попадает, а почему я понятия не имею, вроде всё по Радченко делал....
|
|||
9
hhhh
18.11.18
✎
09:26
|
режим неоперативный
|
|||
10
xupypg
18.11.18
✎
10:01
|
а как сделать оперативный?
|
|||
11
xupypg
18.11.18
✎
10:15
|
У меня в документе оперативное проведение документа разрешено
|
|||
12
_Дайвер_
18.11.18
✎
11:04
|
Почему в условии у тебя КоличествоОстаток = Склад?
|
|||
13
_Дайвер_
18.11.18
✎
11:12
|
Пробуй:
Запрос3.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток, | ТоварыНаСкладахОстатки.Товар КАК Товар |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | , | Товар В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента) | И Склад = &Склад) КАК ОстаткиТоваров |ГДЕ | ТоварыНаСкладахОстатки.КоличествоОстаток < 0"; |
|||
14
xupypg
18.11.18
✎
11:18
|
Дайвер, так не получится, потому, что у меня "Склад" не в реквизитах документа, а в таблице) в том-то и проблема))))
|
|||
15
hhhh
18.11.18
✎
11:26
|
(14) дата документа сегодня?
|
|||
16
Остап Сулейманович
18.11.18
✎
11:26
|
(0) Все здесь :
ГДЕ ТоварыНаСкладахОстатки.КоличествоОстаток < 0 у вас разрешены отрицательные остатки? Или это контроль по новой методике уже после записи движений? |
|||
17
xupypg
18.11.18
✎
11:33
|
Если перепровожу уже готовый документ, тогда он проводится левым числом, если создаю новый, то он проводится оперативно.... Это методика контроля остатков после проведения документа... по крайней мере попытка этой методики)
|
|||
18
hhhh
18.11.18
✎
11:44
|
(17) ну вот это
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары | ПО ТоварыНаСкладахОстатки.КоличествоОстаток = РасходнаяНакладнаяТовары.Склад какая-то невероятная хрень. Может, чего покурил? Потому что в адекватном состоянии такое невозможно придумать. |
|||
19
xupypg
18.11.18
✎
11:51
|
как правильно будет? я не догоняю прост
|
|||
20
hhhh
18.11.18
✎
11:58
|
| ЛЕВОЕ СОЕДИНЕНИЕ НоменктатураДокумента КАК НоменктатураДокумента
| ПО НоменктатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура И НоменктатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад |
|||
21
xupypg
18.11.18
✎
12:14
|
не работает так)) думешь я не пробовал))) я уже неделю с этим разбираюсь) логически думал- не прокатило, начал всё подряд пробовать, тоже не прокатило) в моих глазах безнадёжность) я не уверен даже в том, что у меня выборка правильно составлена)
|
|||
22
hhhh
18.11.18
✎
12:20
|
(21) не работает, значит надо найти где ошибка. а не бросаться сразу писать откровенный бред.
|
|||
23
xupypg
18.11.18
✎
12:37
|
не могу ошибку найти, думал тут помогут
|
|||
24
hhhh
18.11.18
✎
12:55
|
(23) нашли же
КоличествоОстаток = Склад написал |
|||
25
azernot
18.11.18
✎
12:56
|
ВЫБРАТЬ
РасходнаяНакладнаяТовары.Склад КАК Склад, РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура, СУММА(РасходнаяНакладнаяТовары.Количество) КАК КоличествоВДокументе, СУММА(РасходнаяНакладнаяТовары.Сумма) КАК СуммаВДокументе ПОМЕСТИТЬ НоменклатураДокумента ИЗ Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары ГДЕ РасходнаяНакладнаяТовары.Ссылка = &Ссылка СГРУППИРОВАТЬ ПО РасходнаяНакладнаяТовары.Номенклатура, РасходнаяНакладнаяТовары.Склад ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ НоменклатураДокумента.Номенклатура, НоменклатураДокумента.КоличествоВДокументе, ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНаОстатке, НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНедостаточно ИЗ НоменклатураДокумента КАК НоменклатураДокумента ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( , (Склад, Номенклатура) В (ВЫБРАТЬ НоменклатураДокумента.Склад, НоменклатураДокумента.Номенклатура ИЗ НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад ГДЕ НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) |
|||
26
xupypg
19.11.18
✎
03:32
|
Азернот, не получилось, документ проводится...
|
|||
27
xupypg
19.11.18
✎
03:35
|
Даже если удалить приходную накладную с определённым товаром, то всё равно в расходной он будет списываться, хотя по факту прихода даже не было
|
|||
28
xupypg
19.11.18
✎
03:42
|
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ТоварыНаСкладах.Записывать = Истина; МенеджерВТ = Новый МенеджерВременныхтаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Склад КАК Склад, | РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК КоличествоВДокументе, | СУММА(РасходнаяНакладнаяТовары.Сумма) КАК СуммаВДокументе |ПОМЕСТИТЬ НоменклатураДокумента |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары |ГДЕ | РасходнаяНакладнаяТовары.Номенклатура.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура, | РасходнаяНакладнаяТовары.Склад"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); Запрос2 = Новый Запрос; Запрос2.МенеджерВременныхТаблиц = МенеджерВт; Запрос2.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура, | РасходнаяНакладнаяТовары.Склад КАК Склад, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары |ГДЕ | РасходнаяНакладнаяТовары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура, | РасходнаяНакладнаяТовары.Склад"; Запрос2.УстановитьПараметр("Ссылка", Ссылка); Движения.ТоварыНаСкладах.Записать(); РезультатЗапроса = Запрос2.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи Движение = Движения.ТоварыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Товар = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = ВыборкаДетальныеЗаписи.Склад; Движение.Количество = ВыборкаДетальныеЗаписи.Количество; КонецЦикла; Движения.Записать(); Если Режим = РежимПроведенияДокумента.Оперативный Тогда //проверим отрицательные остатки Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе, | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНаОстатке, | НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНедостаточно |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | , | (Склад, Номенклатура) В | (ВЫБРАТЬ | НоменклатураДокумента.Склад, | НоменклатураДокумента.Товар | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Товар | И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад |ГДЕ | НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)"; РезультатЗапроса = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) +" единиц материала """ + ВыборкаДетальныеЗаписи.Товар + """"; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
29
xupypg
19.11.18
✎
03:46
|
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
| , | (Склад, Товар) В | (ВЫБРАТЬ | НоменклатураДокумента.Склад, | НоменклатураДокумента.Номенклатура |
|||
30
xupypg
19.11.18
✎
03:47
|
исправил третий запрос вот так, потому. что если в скобках указать "Номенклатура" то пишет поле не найдено, точки остановки проходят по всем строкам, но ошибку не выдаёт
|
|||
31
hhhh
19.11.18
✎
05:27
|
(30) А куда далась самая основная строчка КоличествоОстаток < 0 ?? Ты самую главную проверку выбросил.
|
|||
32
xupypg
19.11.18
✎
05:57
|
Вернул строчку, ничего не изменилось, документ по прежнему проводится
|
|||
33
hhhh
19.11.18
✎
06:03
|
(32) дата документа сегодня? Потому что если вчера, то считается, что не оперативное.
|
|||
34
xupypg
19.11.18
✎
06:16
|
Проведение оперативное, дата и время изменяется на дату и время на компьютере
|
|||
35
hhhh
19.11.18
✎
06:21
|
(34) какой запрос в итоге получился?
|
|||
36
xupypg
19.11.18
✎
06:32
|
Запрос3 = Новый Запрос;
Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе, | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНаОстатке, | НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНедостаточно |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | , | (Склад, Товар) В | (ВЫБРАТЬ | НоменклатураДокумента.Склад, | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Товар | И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад |ГДЕ | НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) | И ТоварыНаСкладахОстатки.КоличествоОстаток < 0"; РезультатЗапроса = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл |
|||
37
hhhh
19.11.18
✎
08:01
|
(36) Вроде нормально. Отладчиком заходит внутрь цикла? И точно есть отрицательный остаток? Расход больше прихода?
|
|||
38
xupypg
19.11.18
✎
08:06
|
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
//проверим отрицательные остатки Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе, | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНаОстатке, | НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНедостаточно |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | , | (Склад, Товар) В | (ВЫБРАТЬ | НоменклатураДокумента.Склад, | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Товар | И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад |ГДЕ | НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) | И ТоварыНаСкладахОстатки.КоличествоОстаток < 0"; РезультатЗапроса = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) +" единиц материала """ + ВыборкаДетальныеЗаписи.Товар + """"; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
39
xupypg
19.11.18
✎
08:07
|
Попадает в запрос, после запроса в результат, потом в выборку, после выборки в "Пока ВыборкаДетальныеЗаписи...." и после этой строки сразу в "КонецЕсли"
|
|||
40
xupypg
19.11.18
✎
08:08
|
в сообщение пользователю он вообще не попадает, остатки точно отрицательные
|
|||
41
Мимохожий Однако
19.11.18
✎
08:10
|
(40) Отладчик включил?
|
|||
42
xupypg
19.11.18
✎
08:11
|
в смысле? точку остановки поставил и вот так проверил
|
|||
43
hhhh
19.11.18
✎
08:19
|
(40) вот в самом первом запросе откровенная хрень
|ГДЕ | РасходнаяНакладнаяТовары.Номенклатура.Ссылка = &Ссылка Как обычно ваш фирменный стиль: сравнивает номенклатуру с расходной накладной. Ну с какого бодуна вдруг номенклатура будет равной расходной накладной? |
|||
44
xupypg
19.11.18
✎
08:24
|
(43) СРАБОТАЛО)))
|
|||
45
xupypg
19.11.18
✎
08:24
|
Спасибо всем огромное, где тут лайк ставить?)
|
|||
46
Мимохожий Однако
19.11.18
✎
08:25
|
(45) Фломастером на экране )
|
|||
47
xupypg
19.11.18
✎
08:27
|
Я несмываемым поставлю))))
|
|||
48
xupypg
19.11.18
✎
09:04
|
А как сделать чтоб не только по количеству, но и по сумме учёт шёл?
|
|||
49
Мимохожий Однако
19.11.18
✎
09:06
|
(48) Добавь ресурс Сумма
|
|||
50
xupypg
19.11.18
✎
09:18
|
в условиях тоже? и в какой регистр добавлять?
|
|||
51
Мимохожий Однако
19.11.18
✎
09:22
|
(50) регистр Товары на складах. Но обычно используют другой регистр Товары организаций, в которых есть измерение Организация. Какая у тебя типовая конфигурация пока не известно. Возможно, велосипед с суммой уже существует
|
|||
52
xupypg
19.11.18
✎
09:26
|
всё что есть в коде написано, у меня 2 документа, 2 справочника и 1 регистр накоплений
|
|||
53
xupypg
19.11.18
✎
09:26
|
в какой запрос, а не регистр*)
|
|||
54
Мимохожий Однако
19.11.18
✎
09:29
|
(53) Если у тебя один регистр, то добавь в него ресурс Сумма.
Потом добавь аналогичное поле в запрос. |
|||
55
xXeNoNx
19.11.18
✎
10:35
|
(4) а зачем:
Если Режим = РежимПроведенияДокумента.Оперативный Тогда ?? |
|||
56
xXeNoNx
19.11.18
✎
10:36
|
Это задачи подготовки к спецу
|
|||
57
xXeNoNx
19.11.18
✎
10:37
|
(29) Соединение с подзапросом - плохая практика
|
|||
58
xXeNoNx
19.11.18
✎
10:40
|
Без указания периода будешь читать же свои остатки...
|
|||
59
xXeNoNx
19.11.18
✎
10:42
|
(36) Хреновый подход решения, а именно: решение можно сделать по новой методике проведения, сначала пишем, потом читаем.
|
|||
60
azernot
19.11.18
✎
10:57
|
(28) |ГДЕ
| РасходнаяНакладнаяТовары.Номенклатура.Ссылка = &Ссылка Запрос.УстановитьПараметр("Ссылка", Ссылка); Что за бред?! У тебя ВТ НоменклатураДокумента всегда будет пустая! Надо так |ГДЕ | РасходнаяНакладнаяТовары.Ссылка = &Ссылка |
|||
61
azernot
19.11.18
✎
10:59
|
А, в (43) уже написали...
|
|||
62
xXeNoNx
19.11.18
✎
11:03
|
(38) яб не принял такое решение и экзаменатор не примет
|
|||
63
xupypg
19.11.18
✎
12:05
|
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ТоварыНаСкладах.Записывать = Истина; МенеджерВТ = Новый МенеджерВременныхтаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Склад КАК Склад, | РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК КоличествоВДокументе, | СУММА(РасходнаяНакладнаяТовары.Сумма) КАК СуммаВДокументе |ПОМЕСТИТЬ НоменклатураДокумента |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура, | РасходнаяНакладнаяТовары.Склад"; РезультатЗапроса = Запрос.Выполнить(); Запрос2 = Новый Запрос; Запрос2.МенеджерВременныхТаблиц = МенеджерВт; Запрос2.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура, | РасходнаяНакладнаяТовары.Склад КАК Склад, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары |ГДЕ | РасходнаяНакладнаяТовары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура, | РасходнаяНакладнаяТовары.Склад"; Запрос2.УстановитьПараметр("Ссылка", Ссылка); Движения.ТоварыНаСкладах.Записать(); РезультатЗапроса = Запрос2.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи Движение = Движения.ТоварыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Товар = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = ВыборкаДетальныеЗаписи.Склад; Движение.Количество = ВыборкаДетальныеЗаписи.Количество; КонецЦикла; Движения.Записать(); Если Режим = РежимПроведенияДокумента.Оперативный Тогда //проверим отрицательные остатки Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе, | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНаОстатке, | НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНедостаточно, | ТоварыНаСкладахОстатки.СуммаОстаток КАК СуммаОстаток |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | , | (Склад, Товар) В | (ВЫБРАТЬ | НоменклатураДокумента.Склад, | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Товар | И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад |ГДЕ | НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) | И ТоварыНаСкладахОстатки.КоличествоОстаток < 0 | И ТоварыНаСкладахОстатки.СуммаОстаток < 0"; РезультатЗапроса = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоНаОстатке) +" единиц материала """; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
64
xupypg
19.11.18
✎
12:06
|
Добавил сумму, в последнем регистре установил условие, вообще перестало работать)
|
|||
65
xupypg
19.11.18
✎
12:06
|
Суммовой учёт надо добавить, реквизит создал
|
|||
66
azernot
19.11.18
✎
12:47
|
(65) А что значит "суммовой учёт"?
В учёте обычно сумму списания ТМЦ рассчитывается по какой-то методике (ФИФО, Средняя). Если есть количественный остаток, как может не быть суммового? |
|||
67
xupypg
19.11.18
✎
13:09
|
Вот я в смысле так же подумал, но экзаменатор сказал сделать...
|
|||
68
xupypg
19.11.18
✎
13:09
|
я себе этот суммовой учёт в принципе не особо представляю
|
|||
69
xupypg
20.11.18
✎
03:26
|
//проверим отрицательные остатки
Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе, | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНаОстатке, | НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНедостаточно, | ЕСТЬNULL(ТоварыНаСкладахОстатки.СуммаОстаток, 0) КАК СуммаОстаток, | НоменклатураДокумента.Склад КАК Склад, | НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.СуммаОстаток, 0) КАК КоличествоВДокументе1 |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | , | (Склад, Товар) В | (ВЫБРАТЬ | НоменклатураДокумента.Склад, | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Товар | И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад | И НоменклатураДокумента.КоличествоВДокументе = ТоварыНаСкладахОстатки.СуммаОстаток |ГДЕ | НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) | И ТоварыНаСкладахОстатки.КоличествоОстаток < 0 | И ТоварыНаСкладахОстатки.СуммаОстаток < 0 | И НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.СуммаОстаток, 0)"; |
|||
70
xupypg
20.11.18
✎
03:27
|
Добавил реквизит "Сумма" построил запрос по примеру количества, документ вообще перестал проводиться оперативно... он проводится, ошибка не выходит о недостаточном количестве и дата со временем не меняется на текущее, а остаётся прежней....
|
|||
71
azernot
20.11.18
✎
10:32
|
И ТоварыНаСкладахОстатки.КоличествоОстаток < 0
| И ТоварыНаСкладахОстатки.СуммаОстаток < 0 Зачем это? |
|||
72
azernot
20.11.18
✎
10:39
|
Вообще же, если уж это учебная задача - надо уточнять у экзаменатора, что же нужно сделать.
С точки зрения прикладной логики учётных задач контроль суммового остатка (и уж тем более сравнение суммового остатка с количеством из документа) - бред. P.S. Мне кажется, что я оказываю медвежью услугу... Поэтому рекомендую автору всё же сначала подумать самостоятельно, что он хочет, сформулировать, а уж потом, если возникнут именно технические вопросы - задавать их. |
|||
73
xupypg
20.11.18
✎
12:45
|
Экзаменатор по поводу суммового учёта сказал: "Да там в 2 местах склад поменять, всё что нужно переделать". В каких местах я чё-то не вдупляю.....
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |