|
Проблема с регистром | ☑ | ||
---|---|---|---|---|
0
Dan12345
26.02.23
✎
22:17
|
Есть регистр накопления "УчетПоступленияСписанияКниг", в нем ведется учет поступления и списания книг.
В документе "Списание книг" в табличной части создаю несколько строк, в каждой из которых указываю книгу и экземпляр. Стоит проверка на ввод существующего экземпляра. И пользователю так же предлагается выбор только из тех экземпляров, которые есть в регистре для конкретной книги. Но если я укажу один и тот же экземпляр, то документ проведется и и в регистр запишутся 2 записи списания одного экземпляра. Как сделать так, чтобы значение измерения "Экземпляр" было так сказать уникальным? (хотя, я думал, оно и так должно быть таким). |
|||
1
saaken
26.02.23
✎
22:29
|
проводи документ после каждого выбора эксземпляра
|
|||
2
DCEP
26.02.23
✎
22:29
|
(0) Не проводить
|
|||
3
mkalimulin
26.02.23
✎
22:31
|
(0) Не проводить документ, если в нем есть дубли
|
|||
4
Dan12345
26.02.23
✎
22:39
|
Я и думаю, как сделать так, чтобы не проводить документ, в случае, если для каждой книги выбран один и тот же экземпляр.
Вот код: Процедура ОбработкаПроведения(Отказ, Режим) Движения.УчётПоступленияСписанияКниг.Записывать = Истина; Для Каждого ТекСтрокаСписанныеКниги Из СписанныеКниги Цикл Движение = Движения.УчётПоступленияСписанияКниг.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Книга = ТекСтрокаСписанныеКниги.Книга; Движение.Экземпляр = ТекСтрокаСписанныеКниги.Экземпляр; Движение.Количество = 1; Движение.Статус = "Списание"; КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | УчётПоступленияСписанияКнигОстатки.Экземпляр КАК Экземпляр |ИЗ | РегистрНакопления.УчётПоступленияСписанияКниг.Остатки(, ) КАК УчётПоступленияСписанияКнигОстатки |ГДЕ | УчётПоступленияСписанияКнигОстатки.Книга = &Книга | И УчётПоступленияСписанияКнигОстатки.Экземпляр = &Экземпляр | |СГРУППИРОВАТЬ ПО | УчётПоступленияСписанияКнигОстатки.Экземпляр | |ИМЕЮЩИЕ | КОЛИЧЕСТВО(УчётПоступленияСписанияКнигОстатки.Экземпляр) > 0"; Для Каждого ТекСтрокаСписанныеКниги Из СписанныеКниги Цикл Запрос.УстановитьПараметр("Книга", ТекСтрокаСписанныеКниги.Книга); Запрос.УстановитьПараметр("Экземпляр", ТекСтрокаСписанныеКниги.Экземпляр); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Отказ = Истина; Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Экземпляра " + ТекСтрокаСписанныеКниги.Экземпляр + " книги '" + ТекСтрокаСписанныеКниги.Книга + "' нет в наличии"; Сообщение.Сообщить(); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
5
mistеr
26.02.23
✎
22:44
|
(0) Уникальность есть в регистрах сведений, в регистрах накопления нет.
То, что ты хочешь, называется контроль остатков, если я правильно понял. По этим словам и гугли. |
|||
6
Donkey_hot
26.02.23
✎
22:55
|
(4) Выбираете запросом данные из табличной части документа (он уже записан на момент обработки проведения), группируете по двум полям - Книга, Экземпляр. Если есть строки, ИМЕЮЩИЕ КОЛИЧЕСТВО(*) > 1, не проводите.
|
|||
7
Dan12345
26.02.23
✎
23:20
|
(6) Спасибо!
|
|||
8
bolder
26.02.23
✎
23:47
|
(0) Элементарно.На языке специалистов 1С это называется новая методикапроведения. Суть ее в проверке неотрицательные остатки после проведения документа.Если обнаружены отрицательные остатки - выводим сообщение и отказываем в проведении.
|
|||
9
Donkey_hot
27.02.23
✎
00:02
|
(8) Да остатки у него сделаны, требуется проверить на дубли в самом доке.
|
|||
10
bolder
27.02.23
✎
00:10
|
(9) Это тоже проверитьсяпри проведении по новой методике, все универсально получается.
|
|||
11
bolder
27.02.23
✎
00:12
|
(10) Если он решает такую задачу на экзамене - и не использует упомянутый приём - то сразу неуд.
|
|||
12
bolder
27.02.23
✎
00:15
|
(9) Очень советую ознакомился и использовать.Значительно ускоряет проведение и контрольостатков.
А замечание остатки сформированы не понял как относится к данной задаче недопущения двойных и более списаний . |
|||
13
Donkey_hot
27.02.23
✎
00:17
|
(10) Не очень понятно, причем тут новая методика. Если дубли в самом документе, нет смысла блокировать что-то, все равно в отказ пойдем. По идее, это вообще лучше сделать ПередЗаписью.
|
|||
14
Злопчинский
27.02.23
✎
03:17
|
(12) "Значительно ускоряет проведение и контрольостатков."
то есть записать что-то, потом удалить записанное - это реально быстрее чем просчитать перед записью? |
|||
15
Bigbro
27.02.23
✎
05:57
|
(14) видимо да, по крайней мере в 1с8 это стандартный механизм.
|
|||
16
JeHer
27.02.23
✎
06:07
|
Если юзер скопирует документ, то снова в минус уйдет регистр. Это тоже надо учесть
|
|||
17
Злопчинский
27.02.23
✎
06:08
|
(15) ..реализованный программно. А в реальности быстрее это или нет - никто не проверял...
|
|||
18
Donkey_hot
27.02.23
✎
06:17
|
(15) Если речь идет о контроле остатков, почему бы и нет. Но тут предлагают товарищу по новой методике проверять, есть ли в табличной части самого объекта дубли по двум колонкам.
|
|||
19
Bigbro
27.02.23
✎
06:32
|
(18) ну если экземпляр штука уникальная, и на остатке может быть ноль либо один, то таким образом как раз гарантируется несписание "в минус", если один и тот же в разных строках по ошибке дважды указали. вроде именно то что нужно.
|
|||
20
Bigbro
27.02.23
✎
06:37
|
(17) проверяли, там запросы проще, для экзамена на спеца вроде как обязательное условие использование нового механизма для контроля.
на курсах 1с тоже было описано, в комментах подробности. https://xn----1-bedvffifm4g.xn--p1ai/articles/2017-02-12-two-methods-for-inventory-check/ не реклама если что. |
|||
21
Donkey_hot
27.02.23
✎
07:17
|
(19) По-моему это все-таки немного разные вещи. Если конечно он на остатке один, тогда да. А если его ноль? Тогда хоть одной строчкой его списывай, хоть десятью - все равно в минус уйдет. Поэтому против контроля остатков по новой методике ничего не имею, но предварительно же надо проверить на дубли. И все, что нужно для такого контроля, есть в самом объекте. Смысл его записывать? Дубль может возникнуть же не просто из-за того, что одну строчку дважды ввели, а, например, опечатались в экземпляре. И если юзер получит просто сообщение о превышении остатка, оно не будет указывать на причину.
|
|||
22
Donkey_hot
27.02.23
✎
07:18
|
(20) Старая методика тоже имеет место быть на экзамене. Павел Станиславович на своем курсе четко рассказывал, когда какую применять.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |