Имя: Пароль:
1C
 
Проблема с регистром
,
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) Старая методика тоже имеет место быть на экзамене. Павел Станиславович на своем курсе четко рассказывал, когда какую применять.
Основная теорема систематики: Новые системы плодят новые проблемы.