|
Исключающая граница в РН для получения остатков | ☑ | ||
---|---|---|---|---|
0
BaldKiwi
12.01.22
✎
15:32
|
Добрый день, возникла такая проблема, для контроля остатков использую грацину(Момент времени документа, Исключающая), допустим пришел товар 10шт, расходка списала 10шт и после расходку распроводим, создаём копированием распроведённую приходку, проводим, остатки списываются, проводим ранее распроведённую приходку, по итогу получаем на остатках -100, подскажите, может не так понимаю работу границы?
|
|||
1
Мультук
гуру
12.01.22
✎
15:40
|
(0)
Два метода контроля остатков https://xn----1-bedvffifm4g.xn--p1ai/articles/2017-02-12-two-methods-for-inventory-check/ P.S. Ничего не понял из написанного вами. |
|||
2
BaldKiwi
12.01.22
✎
15:45
|
(1) Статейку почитаю, спасибо.
По поводу написанного. Пользователь создал приходку на 10 товара, тут же создал расходку на эти же 10 товаров, после эту расходку распровёл. Создаёт такую же расходку новую, проводит и списывает 10 товара, сейчас остатки нулевые, после он заходит в ранее распроведённую расходку, проводит её и она проводится успешно, списывая товар в минус, чего категорически быть не должно, граница почему-то исключает не текущий документ, а уже ранее проведённый. |
|||
3
BaldKiwi
12.01.22
✎
15:49
|
(1) Посмотрел на методы контроля в статье, они не совсем подходят, свойства документа - "Удалять автоматически при отмене проведения", чистить в ручную - у нас не применяется в компании, записывать, а потом проверять, тоже не подходит, для базы нашей компании слишком затратные эти 2 метода, поэтому мы делаем контроль остатков в обработке проведения, а если документ проводится, то получаем остатки без учета движений самого документа, интересно была именна работа - Новый Граница(); не пойму, почему она исключает проведенный документ, а не тот, который проводят, по итогу получается остатки 2мя документами можно списать и уйти в минус по остаткам
|
|||
4
Dmitrii
гуру
12.01.22
✎
15:53
|
(2) Что такое по-вашему граница?
Граница - это Дата+Ссылка. Дата у обоих документов расхода одинаковая. Какая ссылка будет раньше? Разумеется та, что была раньше создана. Поэтому, когда пользователь проводит ранее распроведённую расходную накладную, её граница раньше, чем у второй расходной накладной. А ты почему-то решил, что на тот документ, который проведен. Признак "Проведен" вообще никакого отношения к границе не имеет. |
|||
5
Мультук
гуру
12.01.22
✎
15:54
|
(3)
Очень любопытно увидеть ваш код. Блокировки автоматические? |
|||
6
Курцвейл
12.01.22
✎
16:00
|
ПРичем тут Исключая? В новом методе явно написано про использование Включая.
Хотя сами методы ес-но вызваны ограниченностью самой платформы из-за которого программист должны писать бредятину в примерах (1) Для нормальной платформы, взаимодействующей с СУБД достаточно триггера на отрицательные остатки |
|||
7
BaldKiwi
12.01.22
✎
16:00
|
(4) Изначально было предствление, что как раз документ который и указывается в момент времени, и будет являться указанием что именно исключать, теперь более понятнее стало как работает граница, спасибо
(5) Естественно) с автоматическими был бы плачевный опыт проведения документов) |
|||
8
Dmitrii
гуру
12.01.22
✎
16:03
|
+ к (4). Расход № 1 от 12.01.2022 00:00:00. Ссылка <........-0001>.
Расход № 2 от 12.01.2022 00:00:00 Ссылка <........-0002>. При проведении расхода №1 проверяются остатки на 12.01.2022 00:00:00 + Ссылка <........-0001>. На этот момент времени все остатки есть. И ещё уточнение к (4). "Граница - это Дата+Ссылка" читать как "Момент времени - это Дата+Ссылка". Глова другим забита. Там почти весь пост надо переписать с "граница" на "момент времени". |
|||
9
Курцвейл
12.01.22
✎
16:05
|
(8) Откуда вывод что Ссылки расположены на временной оси? Ничего такого нету.
|
|||
10
BaldKiwi
12.01.22
✎
16:06
|
(6) Если я правильно понял, то использование Включая, не подойдёт, потому что движения документа при перепроведении будут учитываться
(8) Нет, именно граница, я прекрасно понимаю, что такое момент времени, имелось ввиду, _МоментВремени = Новый МоментВремени(Дата, Ссылка); _Граница = Новый Граница(_МоментВремени, ВидГраницы.Исключая); |
|||
11
BaldKiwi
12.01.22
✎
16:08
|
(8) Никто не говорил, что документы имеют дату 12.01.2022, проводит, после пересоздаёт, на это уходит какой-то опр. промежуток времени, документы будут созданы не в одну и ту же секунду.
Расход № 1 от 12.01.2022 00:00:00. Ссылка <........-0001>. Расход № 2 от 12.01.2022 00:00:10 Ссылка <........-0002>. |
|||
12
Курцвейл
12.01.22
✎
16:09
|
(10) Наоборот. Расчёт Остатка делают включая, чтобы увидеть будет остаток отрицательный или нет.
|
|||
13
Курцвейл
12.01.22
✎
16:11
|
Формируются записи регистра. Потом записи записывают/фиксируют. После этого снимают остатки регистра Включая движения текущего документа. После смотрят отрицательные они или нет.
|
|||
14
BaldKiwi
12.01.22
✎
16:13
|
(12) Да, обычно делают так, выше писал, что по идеологии компании, не правильно будет использовать границу включая, потому что записать документ, а после проверить и откатить, это очень уж дорогостоящее занятие, самый верный вариант в моём случае, это получить остатки без учета движений тек. документа и если всё нормально, то провести
|
|||
15
Dmitrii
гуру
12.01.22
✎
16:13
|
(9) >> Ничего такого нету.
Формально ты прав. 1С сама говорит, что последовательность ссылок внутри одной секунды не определена. Но по факту, если два документа одного вида (в нашем случае расходных накладных) создаются последовательно в одной базе с одинаковым временем, то ссылка созданного первым будет меньше ссылки созданного вторым. Исключение - если ссылки устанавливались программно методами типа ПолучитьСсылкуНового. Естественно ссылки не будут последовательны если документы создавались в разных базах и оказались в одной в результате обмена данными. |
|||
16
Dmitrii
гуру
12.01.22
✎
16:15
|
(11) >> документы будут созданы не в одну и ту же секунду.
Тогда вообще не понятно в чём вопрос. При проведении более ранней расходной накладной остатки проверяются на момент времени этой накладной. Естественно в этот момент времени в остатках нет информации о том, что несколькими минутами (или даже секундами) позже кто-то что-то списал. |
|||
17
Курцвейл
12.01.22
✎
16:23
|
Думаю автору топика следует ознакомимся с понятием "Оперативный учет документа", чтобы не было проблем с копированием и последующим распроведением.
|
|||
18
BaldKiwi
12.01.22
✎
16:26
|
(17) Думаю, если бы мне нужно было применить знание именно "Оперативного учета документов", то я бы их применил, задал вопрос, потому что пытаюсь решить ситуацию, которая недавно произошла, и если бы она решалась каким-то другим методом, то я бы не заморачивался с контролем остатков, но документ имеет свою определённую специфику, поэтому я и полез за ответом, почему не работает граница, на что в принципе я уже и получил свой ответ, за что спасибо отдельное.
|
|||
19
Курцвейл
12.01.22
✎
16:34
|
(18) Если вам нужно максимальное быстрое решение, то логичнее всего использовать триггеры в СУБД. Правда придется обходиться не только кодом 1С
|
|||
20
BaldKiwi
12.01.22
✎
16:37
|
(19) Да, знаю, что так можно решить данную проблему, но тут к сожалению тоже не совсем правильно, поэтому и ковыряю запрос.
Всем спасибо, вопрос темы исчерпан. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |