|
Помогите пожалуйста разобраться с контролем остатков. | ☑ | ||
---|---|---|---|---|
0
MihaSerb
17.02.13
✎
14:34
|
Контроль остатков работает только тогда когда номенклатура есть на складе(при вводе сверх лимита), когда на складе нет товара документ расходная накладная все равно проводится хотя в регистр не показывается
ВЫБРАТЬ | ТоварыНаСкладеОстатки.Номенклатура, | ТоварыНаСкладеОстатки.КоличествоОстаток, | ТоварыНаСкладеОстатки.Склад |ИЗ | РегистрНакопления.ТоварыНаСкладе.Остатки( | , | Номенклатура В | (ВЫБРАТЬ | ДокТЧ.Номенклатура | ИЗ | ДокТЧ КАК ДокТЧ) | И Склад В | (ВЫБРАТЬ | ДокТЧ.Склад | ИЗ | ДокТЧ КАК ДокТЧ)) КАК ТоварыНаСкладеОстатки |ГДЕ | ТоварыНаСкладеОстатки.КоличествоОстаток <= 0"; Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) + " единиц материала """ + ВыборкаДетальныеЗаписи.Номенклатура + """"; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; |
|||
1
GROOVY
17.02.13
✎
14:43
|
Нулевые остатки ты из регистра не получишь.
|
|||
2
GROOVY
17.02.13
✎
14:44
|
И еще условие в ВТ я бы переписал:
(Номенклатура, Склад) В | (ВЫБРАТЬ | ДокТЧ.Номенклатура, Склад | ИЗ | ДокТЧ КАК ДокТЧ) |
|||
3
MihaSerb
17.02.13
✎
14:49
|
А как быть тогда если нулевые остьтки не получить?
|
|||
4
GROOVY
17.02.13
✎
14:57
|
Левым соединением таблицу документа с таблицей регистра.
|
|||
5
GROOVY
17.02.13
✎
14:59
|
ВЫБРАТЬ
ДокТЧ.Номенклатура, ISNULL(Рег.КоличествоОстаток) ИЗ ДокТЧ КАК ДокТЧ ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладе.Остатки( | , (Номенклатура, Склад) В | (ВЫБРАТЬ | ДокТЧ.Номенклатура, Склад | ИЗ | ДокТЧ КАК ДокТЧ) КАК Рег ПО ДокТЧ.Номенклатура = Рег.Номенклатура Как то так. |
|||
6
GROOVY
17.02.13
✎
15:01
|
||||
7
MihaSerb
17.02.13
✎
15:13
|
Спасибо!!!
|
|||
8
MihaSerb
17.02.13
✎
16:30
|
Попробовал ваш вариант при проведении документа всегда вылезает ошибка, По ссылке я пробовал делать там я не могу понять что делать с складом у меня просто он в реквезите табличной части а в ссылке в реквезите документа.
|
|||
9
GROOVY
17.02.13
✎
16:58
|
По ссылке есть мультики по основам запросов.
текст ошибки приведите, я как до нормальной клавы доберусь - помогу. |
|||
10
MihaSerb
18.02.13
✎
16:26
|
"ВЫБРАТЬ
| ДокТЧ.Номенклатура, | ЕСТЬNULL(ТоварыНаСкладе.КоличествоОстаток, 0) КАК КоличествоОстаток |ИЗ | ДокТЧ КАК ДокТЧ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладе.Остатки( | , | (Номенклатура, Склад) В | (ВЫБРАТЬ | ДокТЧ.Номенклатура, | ДокТЧ.Склад | ИЗ | ДокТЧ КАК ДокТЧ)) КАК ТоварыНаСкладе | ПО ДокТЧ.Номенклатура = ТоварыНаСкладе.Номенклатура"; Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) + " единиц материала """ + ВыборкаДетальныеЗаписи.Номенклатура + """"; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; Происходит следующие: при проведении документа всегда выскакивает ошибка, если вбить количество меньше чем есть на складе то КолОстаток - Количество = число с минусом показывается в ошибке, если вбить больше то от колтчества отнимается количество остаток и высвечивается. Если вбить склад на котором нет номенклатуры то в ошибке всегда высвечивается не хватает 0 материала. |
|||
11
GROOVY
18.02.13
✎
16:28
|
Так может стоит условие добавить на количество?
|
|||
12
MihaSerb
18.02.13
✎
16:38
|
А как сделать так чтобы при выборе других складов при проведении тоже выдавалась ошибка?
|
|||
13
MihaSerb
18.02.13
✎
16:40
|
А то сейчас на складе товара нет а документ все равно проводится хоть и в регистре не указывается?
|
|||
14
MihaSerb
18.02.13
✎
17:22
|
И Получилось у меня что и было(((
|
|||
15
Леха Дум
18.02.13
✎
17:41
|
(0) попробуй разобраться с контролем остатков в УТ11, там механизм реализован немного по-другому, запросы для контроля остатков производятся не в каждом документе, а в контролируемом регистре.
|
|||
16
MihaSerb
19.02.13
✎
00:07
|
у меня строго регламентированиое задание.
|
|||
17
iceman2112
19.02.13
✎
06:06
|
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.Установитьпараметр("Склад", Склад); Запрос.УстановитьПараметр("Дата", Дата); Запрос.Текст = "ВЫБРАТЬ | ДокТЧ.Номенклатура, | ЕСТЬNULL(ТоварыНаСкладе.КоличествоОстаток, 0) КАК КоличествоОстаток |ИЗ | ДокТЧ КАК ДокТЧ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладе.Остатки( | &Дата, | Номенклатура В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ДокТЧ.Номенклатура, | ИЗ | ДокТЧ КАК ДокТЧ) | ГДЕ ДокТЧ.Ссылка = &Ссылка) | И Склад = &Склад | КАК ТоварыНаСкладе | | ПО ДокТЧ.Номенклатура = ТоварыНаСкладе.Номенклатура |ГДЕ ДокТЧ.Ссылка = &Ссылка |
|||
18
Лефмихалыч
19.02.13
✎
08:02
|
(0) ты забыл соединить регистр левым соединеним с табличной частью. Ветку не читал, иболень
|
|||
19
Xapac_2
19.02.13
✎
08:13
|
(10)дак ты условие ставь, если количество меньше 0.
|
|||
20
MihaSerb
19.02.13
✎
13:53
|
У меня склад в реквезитах табличной части расходной накладной.
|
|||
21
iceman2112
19.02.13
✎
14:46
|
ну тогда как в (10) только дату добавь и ссылку
|
|||
22
MihaSerb
20.02.13
✎
15:51
|
Сейчас он мне постоянно выдает одну и туже ошибку, что не хватает материала.
|
|||
23
MihaSerb
20.02.13
✎
15:54
|
Может я что то не так делаю, что то совсем врубиться не могу, Мне необходимо Организовать количественно-суммовой учёт товара в регистре"ТоварыНаСкладах". Измерения "Номенклатура" и "Склад" Ресурсы:"Сумма", "Количество". Создать документ "Расходная накладная". Реквизитов в шапке нет.Табличная часть "товары" содержит реквизиты: номенклатура, склад,количество, цена, сумма. (Склад в табличной части, следовательнодокументом можно продать товары с нескольких складов).
Документ Расходная накладная списывает товары со складов по себестоимости (определяет стоимость товара в регистре и делает движение "расход"). Если товара на складе не хватает, документсообщает об этом и не проводится. |
|||
24
MihaSerb
20.02.13
✎
15:55
|
Может я в начале гдето ошибся, гляньте пожалуйста а то не знаю что уже делать.
Процедура ОбработкаПроведения(Отказ, Режим) Движения.ТоварыНаСкладе.Записывать = Истина; МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; // Укажем, какой менеджер временных таблиц использует этот запрос Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Номенклатура, | СУММА(РасходнаяНакладнаяТовары.Сумма) КАК Сумма, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество, | РасходнаяНакладнаяТовары.Склад, | РасходнаяНакладная.Ссылка |ПОМЕСТИТЬ ДокТЧ |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная | ПО РасходнаяНакладнаяТовары.Ссылка = РасходнаяНакладная.Ссылка |ГДЕ | РасходнаяНакладнаяТовары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура, | РасходнаяНакладнаяТовары.Склад, | РасходнаяНакладная.Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЕСТЬNULL(ТоварыНаСкладеОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ЕСТЬNULL(ТоварыНаСкладеОстатки.СуммаОстаток, 0) КАК СуммаОстаток, | ДокТЧ.Номенклатура, | ДокТЧ.Склад, | ДокТЧ.Сумма, | ДокТЧ.Количество, | ТоварыНаСкладеОстатки.СуммаОстаток / ТоварыНаСкладеОстатки.КоличествоОстаток КАК Себестоимость |ИЗ | РегистрНакопления.ТоварыНаСкладе.Остатки( | , | Номенклатура В | (ВЫБРАТЬ | ДокТЧ.Номенклатура | ИЗ | ДокТЧ КАК ДокТЧ) | И Склад В | (ВЫБРАТЬ | ДокТЧ.Склад | ИЗ | ДокТЧ КАК ДокТЧ)) КАК ТоварыНаСкладеОстатки | ЛЕВОЕ СОЕДИНЕНИЕ ДокТЧ КАК ДокТЧ | ПО ТоварыНаСкладеОстатки.Номенклатура = ДокТЧ.Номенклатура"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Движение = Движения.ТоварыНаСкладе.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = ВыборкаДетальныеЗаписи.Склад; Движение.Сумма = ВыборкаДетальныеЗаписи.Себестоимость*ВыборкаДетальныеЗаписи.Количество; Движение.Количество = ВыборкаДетальныеЗаписи.Количество; КонецЦикла; Движения.ТоварыНаСкладе.Записать(); Запрос.Текст = "ВЫБРАТЬ | ДокТЧ.Номенклатура, | ЕСТЬNULL(ТоварыНаСкладе.КоличествоОстаток, 0) КАК КоличествоОстаток |ИЗ | ДокТЧ КАК ДокТЧ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладе.Остатки( | &Дата, | (Номенклатура, Склад) В | (ВЫБРАТЬ | ДокТЧ.Номенклатура, | ДокТЧ.Склад | ИЗ | ДокТЧ КАК ДокТЧ | ГДЕ | ДокТЧ.Ссылка = &Ссылка)) КАК ТоварыНаСкладе | ПО ДокТЧ.Номенклатура = ТоварыНаСкладе.Номенклатура |ГДЕ | ДокТЧ.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Дата", Дата); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) + " единиц материала """ + ВыборкаДетальныеЗаписи.Номенклатура + """"; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецПроцедуры |
|||
25
GANR
20.02.13
✎
16:07
|
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ТоварыНаСкладе.Записывать = Истина; МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; // Укажем, какой менеджер временных таблиц использует этот запрос Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Номенклатура, | СУММА(РасходнаяНакладнаяТовары.Сумма) КАК Сумма, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество, | РасходнаяНакладнаяТовары.Склад, | РасходнаяНакладная.Ссылка |ПОМЕСТИТЬ ДокТЧ |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная | ПО РасходнаяНакладнаяТовары.Ссылка = РасходнаяНакладная.Ссылка |ГДЕ | РасходнаяНакладнаяТовары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура, | РасходнаяНакладнаяТовары.Склад, | РасходнаяНакладная.Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЕСТЬNULL(ТоварыНаСкладеОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ЕСТЬNULL(ТоварыНаСкладеОстатки.СуммаОстаток, 0) КАК СуммаОстаток, | ДокТЧ.Номенклатура, | ДокТЧ.Склад, | ДокТЧ.Сумма, | ДокТЧ.Количество |ИЗ | ДокТЧ КАК ДокТЧ | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.ТоварыНаСкладе.Остатки(&МоментВремени | , | (Номенклатура, Склад) В | (ВЫБРАТЬ | ДокТЧ.Номенклатура, ДокТЧ.Склад | ИЗ | ДокТЧ КАК ДокТЧ)) КАК ТоварыНаСкладеОстатки | | ПО ТоварыНаСкладеОстатки.Номенклатура = ДокТЧ.Номенклатура"; // открой и сохрани запрос конструктором Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.Количество > ВыборкаДетальныеЗаписи.КоличествоОстаток Тогда сообщить("Не хватает " + ВыборкаДетальныеЗаписи.Номенклатура + " из "ВыборкаДетальныеЗаписи.Количество +" есть только "+ ВыборкаДетальныеЗаписи.КоличествоОстаток); отказ = истина; КонецЕсли если отказ = истина тогда продолжить; конецесли; Движение = Движения.ТоварыНаСкладе.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = ВыборкаДетальныеЗаписи.Склад; Движение.Сумма = ВыборкаДетальныеЗаписи.СуммаОстаток/ВыборкаДетальныеЗаписи.КоличествоОстаток*ВыборкаДетальныеЗаписи.Количество; Движение.Количество = ВыборкаДетальныеЗаписи.Количество; КонецЦикла; КонецПроцедуры |
|||
26
Aleks73
20.02.13
✎
16:16
|
Такое впечатление, что это студент(подаван) сдает курсовую(тест на знание 1с).
Если так, лучше поискать ответ в интернете. |
|||
27
GANR
20.02.13
✎
16:20
|
(26) задачка на спеца по полатформе
|
|||
28
Aleks73
20.02.13
✎
16:25
|
(27) Тогда - я мельком просмотрел ссылку (6) - может там на форуме и разбирается решение ?
Если да - интересно, в какой ветке ? |
|||
29
Aleks73
20.02.13
✎
16:31
|
(27) по (25) - для чего в ВТ помещается "ссылка" ?
| РасходнаяНакладная.Ссылка |
|||
30
MihaSerb
21.02.13
✎
02:10
|
(26) Да я пробовал но нечего не смог найти, если вы найдете я буду очень благодарен.
|
|||
31
MihaSerb
21.02.13
✎
02:12
|
(29) эту строчку сам не понял, но выше на форуме посоветовали так сделать.
|
|||
32
MihaSerb
21.02.13
✎
15:51
|
Я почти также делал как предлагают в (25) но уменя что не получилось, а это правельный вариант, только небольшой нюанс при выборе склада где нет товара он выдает ошибку нехватает 0 товара, а требуется что бы выдавал сколько нехватает.
|
|||
33
MihaSerb
21.02.13
✎
16:01
|
Спасибо большое уже разобрался!!!!!!!!!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |