|   |   | 
| 
 | Проблема с регистром | ☑ | ||
|---|---|---|---|---|
| 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) Старая методика тоже имеет место быть на экзамене. Павел Станиславович на своем курсе четко рассказывал, когда какую применять.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |