1с проверка наличия

1. SweaterHen 10.05.23 07:49 Сейчас в теме
Я делаю поступление оборудования на склад
 
Процедура ОбработкаПроведения(Отказ, Режим)
	
	Движения.РегистрОстатка.Записывать = Истина;
	Для Каждого ТекСтрокаТаблица Из Таблица Цикл
		Движение = Движения.РегистрОстатка.Добавить();
		Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
		Движение.Период = Дата;
		Движение.Оборудование = ТекСтрокаТаблица.Оборудование;
		Движение.Склад = Склад;
		Движение.Количество = ТекСтрокаТаблица.Количество;
	КонецЦикла;

КонецПроцедуры
Показать
, потом передаю оборудование со склада сотруднику
 
Процедура ОбработкаПроведения(Отказ, Режим) 
	
//  1. Получение запросом данных документа
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   Таблица.Оборудование КАК Оборудование,
        |   СУММА(Таблица.Количество) КАК Количество
        |ПОМЕСТИТЬ Таблица
        |ИЗ
        |   Документ.Выдача.Таблица КАК Таблица
        |ГДЕ
        |   Таблица.Ссылка = &Ссылка
        |
        |СГРУППИРОВАТЬ ПО
        |   Таблица.Оборудование
        |
        |ИНДЕКСИРОВАТЬ ПО
        |   Оборудование
        |;
        |
        |////////////////////////////////////////////////////////////­////////////////////
        |ВЫБРАТЬ
        |   Таблица.Оборудование КАК Оборудование,
        |   Таблица.Количество КАК Количество
        |ИЗ
        |   Таблица КАК Таблица";
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    РезультатЗапроса = Запрос.Выполнить(); 
    
    //  2. Формирование движений-расход регистра
    Движения.РегистрОстатка.Очистить();
    ВыборкаТаблица = РезультатЗапроса.Выбрать();
    Пока ВыборкаТаблица.Следующий() Цикл
        Движение = Движения.РегистрОстатка.ДобавитьРасход();
        Движение.Период = Дата;
        Движение.Оборудование = ВыборкаТаблица.Оборудование;
        Движение.Количество = ВыборкаТаблица.Количество;
        Движение.Склад = Склад;
        Движение.Сотрудник = Сотрудник;
    КонецЦикла; 
    
     //  3. Запись движений в БД
    Движения.РегистрОстатка.Записывать = Истина;
    Движения.Записать();
    
    //  4. Запрос, получающий отрицательные остатки из регистра
    Запрос.Текст =
        "ВЫБРАТЬ
        |   Остатки.Оборудование КАК Оборудование,
        |   ПРЕДСТАВЛЕНИЕССЫЛКИ(Остатки.Оборудование) КАК ОборудованиеПредставление,
        |   -Остатки.КоличествоОстаток КАК Дефицит
        |ИЗ
        |   РегистрНакопления.РегистрОстатка.Остатки(
        |           &МоментВремени,
        |           Оборудование В
        |               (ВЫБРАТЬ
        |                   Таблица.Оборудование КАК Оборудование
        |               ИЗ
        |                   Таблица КАК Таблица)) КАК Остатки
        |ГДЕ
        |   Остатки.КоличествоОстаток < 0";
   
    ГраницаКонтроля = Новый Граница(МоментВремени(), ВидГраницы.Включая);
    Запрос.УстановитьПараметр("МоментВремени", ГраницаКонтроля);
    РезультатЗапроса = Запрос.Выполнить();
    
    //  5. Вывод сообщений о недостатке товаров
    Если Не РезультатЗапроса.Пустой() Тогда
        Отказ = Истина;
        ВыборкаОшибки = РезультатЗапроса.Выбрать();
        Пока ВыборкаОшибки.Следующий() Цикл
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Оборудования "+ВыборкаОшибки.ОборудованиеПредставление+" недостаточно в количестве "+ВыборкаОшибки.Дефицит+" шт.";
            Сообщение.Сообщить();
        КонецЦикла;
    КонецЕсли;
    
   КонецПроцедуры

Показать
, а теперь хочу реализовать возврат оборудования через приход у конкретного сотрудника (если это оборудование ему вообще выдавали) обратно, но знания не позволяют самому сделать это(в интернете ничего, что могло бы помочь не нашёл). Можете показать пример кода для данной задачи
По теме из базы знаний
Найденные решения
14. ZergKRSK 129 10.05.23 09:54 Сейчас в теме
(13) блин, два регистра три документа.
Назову первый регистр ОборудованиеНаСкладах, второй ОборудованиеВЭксплуатации.
Так вот:
1. Приход на склад. Просто приход на регистр ОборудованиеНаСкладах.
2. Выдача сотруднику. Расход по регистру ОборудованиеНаСкладах с обязательным контролем остатка и Приход по регистру ОборудованиеВЭксплуатации.
3. Возврат от сотрудника. Расход по регистру ОборудованиеВЭксплуатации с контролем остатка и Приход по регистру ОборудованиеНаСкладах.
Anchoret; succub1_5; +2 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. SweaterHen 10.05.23 07:59 Сейчас в теме
На данный момент у меня фигня получается. Происходит обычный приход
3. ZergKRSK 129 10.05.23 09:13 Сейчас в теме
(2) а нужен волшебный приход? Подробнее опишите.
4. SweaterHen 10.05.23 09:21 Сейчас в теме
(3)Нужен приход от сотрудника на склад, чтоб нельзя было прибавить больше того, что я ему выдал. а получается просто приход на склад схожий с тем что делает вот это
Процедура ОбработкаПроведения(Отказ, Режим)
    
    Движения.РегистрОстатка.Записывать = Истина;
    Для Каждого ТекСтрокаТаблица Из Таблица Цикл
        Движение = Движения.РегистрОстатка.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.Оборудование = ТекСтрокаТаблица.Оборудование;
        Движение.Склад = Склад;
        Движение.Количество = ТекСтрокаТаблица.Количество;
    КонецЦикла;
Показать
5. SweaterHen 10.05.23 09:24 Сейчас в теме
(4)Вот выдал я Ивану 2 монитора и захотел вернуть их, но получается что я могу хоть 100 мониторов на склад отправить
6. ZergKRSK 129 10.05.23 09:24 Сейчас в теме
(4) тогда очевидно нужен отдельный регистр где будет храниться выданное оборудование сотрудникам.
При передаче оборудования РегистрОстатка Расход, а на тот регистр Приход.
Рекомендую также в отдельном регистре сделать измерение, в котором будет храниться ссылка на документ передачи оборудования.
7. SweaterHen 10.05.23 09:26 Сейчас в теме
(6)Ладно, пока попробую так сделать, может и получится что-то
8. ZergKRSK 129 10.05.23 09:27 Сейчас в теме
(7) в типовых так и реализовано. Вас что-то смущает в этой схеме?
Забыл сказать что измерение "Сотрудник" в РегистрОстатка будет лишним.
9. SweaterHen 10.05.23 09:30 Сейчас в теме
(8)То что 1С-ом и пользуюсь только 4 неделю. Поэтому то, что для вас очевидная вещь, для меня будет мудрёным решением
10. ZergKRSK 129 10.05.23 09:32 Сейчас в теме
(9) пихать всё в один регистр путь в никуда
11. SweaterHen 10.05.23 09:37 Сейчас в теме
(10)Вот по одному регистру происходит поступление оборудования и его выдача, а в другом получается будет возврат, а как сослаться в нем на сотрудника и на количество его оборудования
12. ZergKRSK 129 10.05.23 09:43 Сейчас в теме
(11) в одном регистре только приход и расход оборудования по складам.
Второй для хранения выданного оборудования по сотрудникам, приход - выдали сотруднику, расход - сотрудник вернул.
13. SweaterHen 10.05.23 09:48 Сейчас в теме
(12)А разве выдаваемое со склада оборудование не должно быть расходом? Я к тому, что у меня работает так, что не сделав приход в документе "Приход" я не смогу выдать оборудование в документе "Выдача", а если есть нехватка оборудования на складе в момент выдачи то проведение не произойдёт и появится сообщение не хватает такого то кол-ва
14. ZergKRSK 129 10.05.23 09:54 Сейчас в теме
(13) блин, два регистра три документа.
Назову первый регистр ОборудованиеНаСкладах, второй ОборудованиеВЭксплуатации.
Так вот:
1. Приход на склад. Просто приход на регистр ОборудованиеНаСкладах.
2. Выдача сотруднику. Расход по регистру ОборудованиеНаСкладах с обязательным контролем остатка и Приход по регистру ОборудованиеВЭксплуатации.
3. Возврат от сотрудника. Расход по регистру ОборудованиеВЭксплуатации с контролем остатка и Приход по регистру ОборудованиеНаСкладах.
Anchoret; succub1_5; +2 Ответить
15. SweaterHen 10.05.23 09:56 Сейчас в теме
(14)Вот теперь понял как примерно должно получится
16. SweaterHen 11.05.23 08:17 Сейчас в теме
(14)У меня получилось, но теперь другой вопрос. Как прописать контроль сотрудника, в том смысле, что я могу возвращать оборудование, но не важно у кого до тех пор пока оборудование есть в регистреЭксплуатации
17. ZergKRSK 129 11.05.23 09:31 Сейчас в теме
(16) что значит не важно у кого? Очень даже важно. Какие измерения в вашем регистре?
18. SweaterHen 11.05.23 09:40 Сейчас в теме
(17)я в том смысле, что можно возвращать оборудование даже у тех кому я его не выдавал. В консоли запросов показывает у сотрудника которому я не выдавал ничего отрицательные остатки
19. SweaterHen 11.05.23 09:41 Сейчас в теме
(17)Просто я пока не знаю как написать контроль сотрудника. Вроде как ссылку на него нужна или как-то так. Как код должен выглядеть тогда?
20. ZergKRSK 129 11.05.23 09:42 Сейчас в теме
(19) ну аналогично как вы рисовали контроль перемещения со склада на сотрудника. Всё очень похоже только регистр другой.
21. SweaterHen 11.05.23 10:00 Сейчас в теме
(20)я не знаю как и где это тут прописывать
Процедура ОбработкаПроведения(Отказ, Режим) 
	//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
	// Данный фрагмент построен конструктором.
	//  1. Получение запросом данных документа
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   Возвращает.Оборудование КАК Оборудование,
        |   СУММА(Возвращает.Количество) КАК Количество
        |ПОМЕСТИТЬ Возвращает
        |ИЗ
        |   Документ.Возврат.Возвращает КАК Возвращает
        |ГДЕ
        |   Возвращает.Ссылка = &Ссылка
        |
        |СГРУППИРОВАТЬ ПО
        |   Возвращает.Оборудование
        |
        |ИНДЕКСИРОВАТЬ ПО
        |   Оборудование
        |;                         
        |
        |////////////////////////////////////////////////////////////­////////////////////
        |ВЫБРАТЬ
        |   Возвращает.Оборудование КАК Оборудование,
        |   Возвращает.Количество КАК Количество
        |ИЗ
        |   Возвращает КАК Возвращает";
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    РезультатЗапроса = Запрос.Выполнить(); 
    
    //  2. Формирование движений-расход регистра
    Движения.РегистрХранения.Очистить();
    ВыборкаВозвращает = РезультатЗапроса.Выбрать();
    Пока ВыборкаВозвращает.Следующий() Цикл
        Движение = Движения.РегистрХранения.ДобавитьРасход();
        Движение.Период = Дата;
        Движение.Оборудование = ВыборкаВозвращает.Оборудование;
        Движение.Количество = ВыборкаВозвращает.Количество;
        Движение.Склад = Склад;
        Движение.Сотрудник = Сотрудник;
    КонецЦикла; 
    
     //  3. Запись движений в БД
    Движения.РегистрХранения.Записывать = Истина;
    Движения.Записать();
    
    //  4. Запрос, получающий отрицательные остатки из регистра
    Запрос.Текст =
        "ВЫБРАТЬ
        |   Остатки.Оборудование КАК Оборудование,
        |   ПРЕДСТАВЛЕНИЕССЫЛКИ(Остатки.Оборудование) КАК ОборудованиеПредставление,
        |   -Остатки.КоличествоОстаток КАК Дефицит
        |ИЗ
        |   РегистрНакопления.РегистрХранения.Остатки(
        |           &МоментВремени,
        |           Оборудование В
        |               (ВЫБРАТЬ
        |                   Возвращает.Оборудование КАК Оборудование
        |               ИЗ
        |                   Возвращает КАК Возвращает)) КАК Остатки
        |ГДЕ
        |   Остатки.КоличествоОстаток < 0";
   
    ГраницаКонтроля = Новый Граница(МоментВремени(), ВидГраницы.Включая);
    Запрос.УстановитьПараметр("МоментВремени", ГраницаКонтроля);
    РезультатЗапроса = Запрос.Выполнить();
    
    //  5. Вывод сообщений о недостатке товаров
    Если Не РезультатЗапроса.Пустой() Тогда
        Отказ = Истина;
        ВыборкаОшибки = РезультатЗапроса.Выбрать();
        Пока ВыборкаОшибки.Следующий() Цикл
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Оборудования "+ВыборкаОшибки.ОборудованиеПредставление+" недостаточно в количестве "+ВыборкаОшибки.Дефицит+" шт.";
            Сообщение.Сообщить();
        КонецЦикла;
    КонецЕсли;
    
	// регистр РегистрОстатка Приход
	Движения.РегистрОстатка.Записывать = Истина;
	Для Каждого ТекСтрокаВозвращает Из Возвращает Цикл
		Движение = Движения.РегистрОстатка.Добавить();
		Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
		Движение.Период = Дата;
		Движение.Оборудование = ТекСтрокаВозвращает.Оборудование;
		Движение.Склад = Склад;
		Движение.Сотрудник = Сотрудник;
		Движение.Количество = ТекСтрокаВозвращает.Количество;
	КонецЦикла;

	//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
   КонецПроцедуры                         
Показать
22. ZergKRSK 129 11.05.23 10:09 Сейчас в теме
(21) где в п.4 проверка на сотрудника?
Кроме того, при возврате можно не рисовать расход в регистр чтобы понять будет минус или нет.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)