|
Регистр заполненности склада | ☑ | ||
---|---|---|---|---|
0
Serglih
20.03.13
✎
15:31
|
Доброго времени суток. Подскажите, пожалуйста, метод решения такого вопроса: есть склад, объем которого равен константе(задается пользователем). Необходим регистр заполненности склада, то есть Приход товаров заполняет склад, Расход освобождает. Склад всего один и по товарам разбиение не нужно. Как лучше реализовать регистр? В последствии будет отчет выдающий диаграмму свободно/заполнено. Насколько я понимаю, делов на 5 минут. Но опыта сделать самому не хватило. Сам попытался примерно так: регистр накоплений(Остатки) без реквизитов и измерений с одним ресурсом "Занято" числового типа. Документы прихода и расхода двигают его(соответственно приход в плюс, расход в минус). Но в таком случае не нашел как ограничить максимальный объем пользовательской константой. Может кто поможет, или скажет что делаю не так и как переделать, буду очень благодарен. Заранее спасибо.
|
|||
1
Maxus43
20.03.13
✎
15:35
|
не взлетит. 1000 марок и 1000 кирпичей занимают разное место
|
|||
2
Maxus43
20.03.13
✎
15:40
|
По сабжу - регистр не нужен дополнительный. Пир поступлении делай запрос к регистру где лежат товары, запрос по остаткам в общем, и сравнивай с константой
|
|||
3
Serglih
20.03.13
✎
15:41
|
Товары забиты в справочнике и имеют разный объем. В документе прихода(соответственно расхода так же) в табличную часть заносятся товары и их количество. Дальше рассчитывается суммарный объем всех и он должен заносится в регистр(при расходе выносится). Регистр количества товаров пока не нужен(будет позже, но сейчас не об этом). Нужен именно такой - заполненность склада по объему. И при проведении документа Приход если с ним заполненность превысит максимальный объем склада, то не проводит документ и выдавать ошибку.
|
|||
4
Maxus43
20.03.13
✎
15:42
|
в какой регистр пишется Объём?
|
|||
5
Serglih
20.03.13
✎
15:44
|
Конфигурация пишется с нуля. Создан регистр ЗаполненностьСклада(название не совсем удачно наверно, но еще подумаем). А в документах есть реквизит ОбщийОбъем. Вот он и должен двигать регистр.
|
|||
6
Kondarat
20.03.13
✎
15:45
|
(5) Ну двигайте, что мешает?
|
|||
7
Serglih
20.03.13
✎
15:52
|
Недостаток опыта. Основная проблема пока как проверить что еще не заполнится склад выше меры(То что было+то что пришло должно быть <=Максимальный объем склада заданный пользователем в константе).
|
|||
8
Maxus43
20.03.13
✎
15:53
|
(7) не зная как работает ваша самописка - этого никто тут не напишет за вас.
Логика в (2), что там непонятно? |
|||
9
mehfk
20.03.13
✎
15:55
|
(0) Единица измерения мест.
|
|||
10
Maxus43
20.03.13
✎
15:56
|
(8) не типовая у него, а в типовой разобраться с малым опытом сложней ещё
|
|||
11
mikecool
20.03.13
✎
15:58
|
нахрена доп. регистр, если будет/есть остатки товаров?
|
|||
12
sapphire
20.03.13
✎
15:58
|
(0) Бред, ИМХО.
Плевать какими величинами забит склад? Что нужно? Учет в разрезе ячеек? |
|||
13
Serglih
20.03.13
✎
15:58
|
Самописка слишком хорошо сказано для того что сделано. 2 справочника, 3 константы, 2 документа, несколько отчетов. И этот регистр на котором все застопорилось. Документы пока что только заполняются(из справочников берется объем товаров и еще пара реквизитов). И теперь нужно сделать движение документов по регистру заполненности склада. Там двигать то нужно лишь один ресурс. Числового типа. То есть нужно что то подобное:
|
|||
14
mikecool
20.03.13
✎
16:01
|
(13) омг, что же там за писька то само?
|
|||
15
Serglih
20.03.13
✎
16:01
|
Конструктором сделанная обработка проведения документа приход:
Движения.ЗаполненностьСклада.Записывать = Истина; Движение = Движения.ЗаполненностьСклада.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Занято =Движение.Занято + ОбщийОбъем; //тут нужно что то подобное. Но вот загвоздка, не придумаю никак как это правильно написать. |
|||
16
Serglih
20.03.13
✎
16:02
|
(11) Задача на преддипломной практике знакомой. Какое ТЗ так и делаю. Сам понимаю что нет смысла в доп регистрах.
|
|||
17
Serglih
20.03.13
✎
16:03
|
(12) Важно только на какой объем забит. Чем не важно. Объем в данном случае просто число.
|
|||
18
ivanov-i-i
20.03.13
✎
16:04
|
(15) В чем проблема? При проведении получаешь запросом текущую заполненность склада, к ней прибавляешь объем по накладной и полученную цифру сравниваешь с константой.
|
|||
19
Serglih
20.03.13
✎
16:08
|
(18) Так и предполагал. Такие затруднения:
1). Код в движении: Движение.Занято =РезультатЗапроса + ОбщийОбъем; - так? 2). Если получится больше чем нужно как делается отказ проведения? |
|||
20
Maxus43
20.03.13
✎
16:10
|
(19) отказ проведения - Отказ = Истина;
писать в регистр не надо ничего кроме объёма этого документа, запрос на Остатки в регистре делать и сверять с константой просто. Регистр Остаточный же? |
|||
21
ivanov-i-i
20.03.13
✎
16:10
|
(19) Не в обиду, не подставляй знакомую.
|
|||
22
Serglih
20.03.13
✎
16:16
|
(20) Да, регистр остаточный.
Вроде все понятно. Еще один(надеюсь последний) глупый вопрос: Запрос и проверку делать сразу и если выход за границу то отказ проведения, а если нормально все то стандартная процедура проведения. Так? |
|||
23
Maxus43
20.03.13
✎
16:19
|
(22) в обработке проведения проверку, если облом то отказ = истина, норм - идём дальше
|
|||
24
Serglih
20.03.13
✎
16:20
|
(23) Спасибо щас попробуем.
|
|||
25
mistеr
20.03.13
✎
16:21
|
(22) Делай все движения, потом проверяй остаток. Если превышен - отказ и откат транзакции.
|
|||
26
Serglih
20.03.13
✎
16:23
|
(25) А не проще сразу проверку? Чтоб не делать лишнее движение если оно не нужно.
|
|||
27
Maxus43
20.03.13
✎
16:24
|
(25) чем лучше? мучать субд бесполезными записями?
|
|||
28
sapphire
20.03.13
✎
16:25
|
(17) Так объем объему рознь, или у тебя сыпучка?
|
|||
29
Serglih
20.03.13
✎
16:27
|
(27) Не совсем понял. Какими бесполезными? Проверка ведь все равно нужна, ее можно сделать после движения и если не пройдет проверку сделать откат, либо сделать сразу и не делать движения если не нужно. Вроде же второй предпочтительнее? Или нет?
|
|||
30
Serglih
20.03.13
✎
16:28
|
(28) Не указано. Наверно используют такое допущение что Склад заполняется равномерно и непрерывно.
|
|||
31
AndyD
20.03.13
✎
16:28
|
а зачем вообще движения эти?
есть регистр остаткот товаров на складе? умножай на объем попозиционно и сравнивай сумму с общей емкостью |
|||
32
AndyD
20.03.13
✎
16:29
|
и самый ценный совет на сегодня: купи УТ и загрузи в нее все остатки
|
|||
33
AndyD
20.03.13
✎
16:30
|
аа, это вообще не реальная задача. тогда не надо ут
|
|||
34
Serglih
20.03.13
✎
16:30
|
(31) (32) Все советы такие хороши. Тем более что есть УТ. Но есть одно но: задание учебное и нужно реализовать ТЗ. Не смотря на его нелогичность.
|
|||
35
Maxus43
20.03.13
✎
16:31
|
(29) это не тебе, а то что человек предлагает сначала записать движения, потом проверять. В этом случае писать ничего не надо, ибо бессмысленно
|
|||
36
Serglih
20.03.13
✎
16:32
|
(35) Спасибо за ответы. Всем спасибо. Пойду пробовать реализовать.
|
|||
37
mistеr
20.03.13
✎
16:40
|
(29) Пока логика движений простая, второй предпочтительнее. Но вот в последних версиях УТ все-таки перешли на первый способ, ибо там столько всего наворочено, что легко допустить ошибку при проверках.
Раз задача учебная, думаю разницы нет. |
|||
38
MSII
20.03.13
✎
16:41
|
(37) Первый способ хорош тем, что не требует блокировки между чтением остатков и записью.
|
|||
39
mistеr
20.03.13
✎
16:56
|
(38) Как это не требует? Оперативный контроль без блокировки не сделать.
|
|||
40
Serglih
20.03.13
✎
17:06
|
Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаполненностьСклада.Занято |ИЗ | РегистрНакопления.ЗаполненностьСклада КАК ЗаполненностьСклада"; РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Выбрать().Занято+ОбщийОбъем > Константы.ОбъемСклада.Получить() Тогда Отказ=Истина Иначе // регистр ЗаполненностьСклада Приход Движения.ЗаполненностьСклада.Записывать = Истина; Движение = Движения.ЗаполненностьСклада.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Занято =ОбщийОбъем; КонецЕсли; КонецПроцедуры |
|||
41
Serglih
20.03.13
✎
17:07
|
РезультатЗапроса.Выбрать().Занято через отладчик показывает что значение не определено. Что я сделал не так?
Завтра надо уже сдать, потому времени кропотливо искать ошибку нет. Может кто увидит сразу? |
|||
42
ScreamSaw
20.03.13
✎
17:09
|
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий(); Если Выборка.Занято + ОбщийОбъем > Константы.ОбъемСклада.Получить() Тогда |
|||
43
ScreamSaw
20.03.13
✎
17:09
|
Судя по всему, дело в этом.
|
|||
44
Maxus43
20.03.13
✎
17:16
|
|ИЗ
| РегистрНакопления.ЗаполненностьСкладаОстатки(&ДатаПроверки) КАК ЗаполненностьСклада"; |
|||
45
Maxus43
20.03.13
✎
17:18
|
>>Завтра надо уже сдать
Аминь. З.ы. нашёл бы знакомого 1сника, за пивко бы сделал за 30 минут всё |
|||
46
Serglih
20.03.13
✎
17:24
|
(42) Так тоже не определено.
|
|||
47
Serglih
20.03.13
✎
17:24
|
(45) Так уж вышло что я и есть "знакомый 1сник"
|
|||
48
ScreamSaw
20.03.13
✎
17:34
|
(46) тогда попробуй (44)
|
|||
49
Serglih
20.03.13
✎
17:44
|
(48) Как это поможет? Это, как я понимаю, просто использование виртуальной таблицы, может ускорить работу базы, но не исправить мою ошибку.
|
|||
50
ScreamSaw
20.03.13
✎
17:51
|
(46) а не определено что? Выборка.Занято?
Почему-то мне это кажется странным. |
|||
51
Serglih
20.03.13
✎
17:57
|
Да. Нельзя скрин приложить жаль. Выдает ошибку "Невозможно привести к типу Число". Начинаю отладку, высчитываю выражение Выборка.Занято показывает значение Неопределено
|
|||
52
ivanov-i-i
20.03.13
✎
19:07
|
Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаполненностьСкладаОстатки.ЗанятоОстаток КАК УжеЗанято |ИЗ | РегистрНакопления.ЗаполненностьСклада.Остатки КАК ЗаполненностьСкладаОстатки"; Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Темп = ВыборкаДетальныеЗаписи.УжеЗанято; КонецЦикла; Если (Темп + Объем) > Константы.ОбъемСклада.Получить() Тогда Отказ = Истина; КонецЕсли; Движения.ЗаполненностьСклада.Записывать = Истина; Движение = Движения.ЗаполненностьСклада.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Занято = Объем; КонецПроцедуры Попробуй так, надеюсь у тебя и константа, и ресурс регистра, и реквизит объем в документе - это числа. |
|||
53
Serglih
21.03.13
✎
11:51
|
(52) Спасибо. Все получилось. Разумеется числа. Еще не до конца понял почему раньше не получалось, но думаю разберусь. Сначала нужно сделать отчет о заполненности склада.
|
|||
54
Serglih
21.03.13
✎
14:36
|
Возникла еще загвоздка с отчетом. В общем используется схема компоновки данных, в ней данные берутся запросом. Берется из регистра заполненный объем склада и берем рассчитанное поле КонстантаМаксимальныйОбъем-ЗаполненныйОбъем как Свободно. В СКД берем это все в качестве ресурсов и закидываем в диаграмму. Все работает правильно за исключением одного момента: Свободный объем склада увеличивается при проведении документа на константу. То есть если у нас проведены 3 документа с занятыми объемами 100, 200 и 300, а константа равна 1000, то в диаграмме покажет, что занято 600 а свободно 2400. Хотя должно быть занято 600 а свободно 400. Что я делаю не так?
|
|||
55
ivanov-i-i
21.03.13
✎
19:00
|
Посмотри здесь http://yadi.sk/d/4pvHuvMY3RM2g
|
|||
56
Serglih
22.03.13
✎
11:55
|
(55) Спасибо, сейчас посмотрим.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |