Я делаю поступление оборудования на склад , потом передаю оборудование со склада сотруднику , а теперь хочу реализовать возврат оборудования через приход у конкретного сотрудника (если это оборудование ему вообще выдавали) обратно, но знания не позволяют самому сделать это(в интернете ничего, что могло бы помочь не нашёл). Можете показать пример кода для данной задачи
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.РегистрОстатка.Записывать = Истина;
Для Каждого ТекСтрокаТаблица Из Таблица Цикл
Движение = Движения.РегистрОстатка.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Оборудование = ТекСтрокаТаблица.Оборудование;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаТаблица.Количество;
КонецЦикла;
КонецПроцедуры
Показать
Процедура ОбработкаПроведения(Отказ, Режим)
// 1. Получение запросом данных документа
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| Таблица.Оборудование КАК Оборудование,
| СУММА(Таблица.Количество) КАК Количество
|ПОМЕСТИТЬ Таблица
|ИЗ
| Документ.Выдача.Таблица КАК Таблица
|ГДЕ
| Таблица.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| Таблица.Оборудование
|
|ИНДЕКСИРОВАТЬ ПО
| Оборудование
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Таблица.Оборудование КАК Оборудование,
| Таблица.Количество КАК Количество
|ИЗ
| Таблица КАК Таблица";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
// 2. Формирование движений-расход регистра
Движения.РегистрОстатка.Очистить();
ВыборкаТаблица = РезультатЗапроса.Выбрать();
Пока ВыборкаТаблица.Следующий() Цикл
Движение = Движения.РегистрОстатка.ДобавитьРасход();
Движение.Период = Дата;
Движение.Оборудование = ВыборкаТаблица.Оборудование;
Движение.Количество = ВыборкаТаблица.Количество;
Движение.Склад = Склад;
Движение.Сотрудник = Сотрудник;
КонецЦикла;
// 3. Запись движений в БД
Движения.РегистрОстатка.Записывать = Истина;
Движения.Записать();
// 4. Запрос, получающий отрицательные остатки из регистра
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Оборудование КАК Оборудование,
| ПРЕДСТАВЛЕНИЕССЫЛКИ(Остатки.Оборудование) КАК ОборудованиеПредставление,
| -Остатки.КоличествоОстаток КАК Дефицит
|ИЗ
| РегистрНакопления.РегистрОстатка.Остатки(
| &МоментВремени,
| Оборудование В
| (ВЫБРАТЬ
| Таблица.Оборудование КАК Оборудование
| ИЗ
| Таблица КАК Таблица)) КАК Остатки
|ГДЕ
| Остатки.КоличествоОстаток < 0";
ГраницаКонтроля = Новый Граница(МоментВремени(), ВидГраницы.Включая);
Запрос.УстановитьПараметр("МоментВремени", ГраницаКонтроля);
РезультатЗапроса = Запрос.Выполнить();
// 5. Вывод сообщений о недостатке товаров
Если Не РезультатЗапроса.Пустой() Тогда
Отказ = Истина;
ВыборкаОшибки = РезультатЗапроса.Выбрать();
Пока ВыборкаОшибки.Следующий() Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Оборудования "+ВыборкаОшибки.ОборудованиеПредставление+" недостаточно в количестве "+ВыборкаОшибки.Дефицит+" шт.";
Сообщение.Сообщить();
КонецЦикла;
КонецЕсли;
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Проверка наличия счетов-фактур у документов поступления и реализации
- Проверка наличия счетов-фактур у регистраторов счетов 19.03,19.04 и 76.АВ (УПП 1.3)
- Проверка наличия неудержанного НДФЛ. ЗУП 3.1
- Заполнение данных на начало 2020 года для СЗВ-ТД. УПП 1.3. Проверка наличия сведений на 01.01.2020 по сотрудникам
- Отчет-проверка наличия выписанных СНТ, СФ, ЭСФ (1С: Бухгалтерия для Казахстана)
Найденные решения
(13) блин, два регистра три документа.
Назову первый регистр ОборудованиеНаСкладах, второй ОборудованиеВЭксплуатации.
Так вот:
1. Приход на склад. Просто приход на регистр ОборудованиеНаСкладах.
2. Выдача сотруднику. Расход по регистру ОборудованиеНаСкладах с обязательным контролем остатка и Приход по регистру ОборудованиеВЭксплуатации.
3. Возврат от сотрудника. Расход по регистру ОборудованиеВЭксплуатации с контролем остатка и Приход по регистру ОборудованиеНаСкладах.
Назову первый регистр ОборудованиеНаСкладах, второй ОборудованиеВЭксплуатации.
Так вот:
1. Приход на склад. Просто приход на регистр ОборудованиеНаСкладах.
2. Выдача сотруднику. Расход по регистру ОборудованиеНаСкладах с обязательным контролем остатка и Приход по регистру ОборудованиеВЭксплуатации.
3. Возврат от сотрудника. Расход по регистру ОборудованиеВЭксплуатации с контролем остатка и Приход по регистру ОборудованиеНаСкладах.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3)Нужен приход от сотрудника на склад, чтоб нельзя было прибавить больше того, что я ему выдал. а получается просто приход на склад схожий с тем что делает вот это
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.РегистрОстатка.Записывать = Истина;
Для Каждого ТекСтрокаТаблица Из Таблица Цикл
Движение = Движения.РегистрОстатка.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Оборудование = ТекСтрокаТаблица.Оборудование;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаТаблица.Количество;
КонецЦикла;
Показать
(4) тогда очевидно нужен отдельный регистр где будет храниться выданное оборудование сотрудникам.
При передаче оборудования РегистрОстатка Расход, а на тот регистр Приход.
Рекомендую также в отдельном регистре сделать измерение, в котором будет храниться ссылка на документ передачи оборудования.
При передаче оборудования РегистрОстатка Расход, а на тот регистр Приход.
Рекомендую также в отдельном регистре сделать измерение, в котором будет храниться ссылка на документ передачи оборудования.
(12)А разве выдаваемое со склада оборудование не должно быть расходом? Я к тому, что у меня работает так, что не сделав приход в документе "Приход" я не смогу выдать оборудование в документе "Выдача", а если есть нехватка оборудования на складе в момент выдачи то проведение не произойдёт и появится сообщение не хватает такого то кол-ва
(13) блин, два регистра три документа.
Назову первый регистр ОборудованиеНаСкладах, второй ОборудованиеВЭксплуатации.
Так вот:
1. Приход на склад. Просто приход на регистр ОборудованиеНаСкладах.
2. Выдача сотруднику. Расход по регистру ОборудованиеНаСкладах с обязательным контролем остатка и Приход по регистру ОборудованиеВЭксплуатации.
3. Возврат от сотрудника. Расход по регистру ОборудованиеВЭксплуатации с контролем остатка и Приход по регистру ОборудованиеНаСкладах.
Назову первый регистр ОборудованиеНаСкладах, второй ОборудованиеВЭксплуатации.
Так вот:
1. Приход на склад. Просто приход на регистр ОборудованиеНаСкладах.
2. Выдача сотруднику. Расход по регистру ОборудованиеНаСкладах с обязательным контролем остатка и Приход по регистру ОборудованиеВЭксплуатации.
3. Возврат от сотрудника. Расход по регистру ОборудованиеВЭксплуатации с контролем остатка и Приход по регистру ОборудованиеНаСкладах.
(20)я не знаю как и где это тут прописывать
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// 1. Получение запросом данных документа
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| Возвращает.Оборудование КАК Оборудование,
| СУММА(Возвращает.Количество) КАК Количество
|ПОМЕСТИТЬ Возвращает
|ИЗ
| Документ.Возврат.Возвращает КАК Возвращает
|ГДЕ
| Возвращает.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| Возвращает.Оборудование
|
|ИНДЕКСИРОВАТЬ ПО
| Оборудование
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Возвращает.Оборудование КАК Оборудование,
| Возвращает.Количество КАК Количество
|ИЗ
| Возвращает КАК Возвращает";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
// 2. Формирование движений-расход регистра
Движения.РегистрХранения.Очистить();
ВыборкаВозвращает = РезультатЗапроса.Выбрать();
Пока ВыборкаВозвращает.Следующий() Цикл
Движение = Движения.РегистрХранения.ДобавитьРасход();
Движение.Период = Дата;
Движение.Оборудование = ВыборкаВозвращает.Оборудование;
Движение.Количество = ВыборкаВозвращает.Количество;
Движение.Склад = Склад;
Движение.Сотрудник = Сотрудник;
КонецЦикла;
// 3. Запись движений в БД
Движения.РегистрХранения.Записывать = Истина;
Движения.Записать();
// 4. Запрос, получающий отрицательные остатки из регистра
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Оборудование КАК Оборудование,
| ПРЕДСТАВЛЕНИЕССЫЛКИ(Остатки.Оборудование) КАК ОборудованиеПредставление,
| -Остатки.КоличествоОстаток КАК Дефицит
|ИЗ
| РегистрНакопления.РегистрХранения.Остатки(
| &МоментВремени,
| Оборудование В
| (ВЫБРАТЬ
| Возвращает.Оборудование КАК Оборудование
| ИЗ
| Возвращает КАК Возвращает)) КАК Остатки
|ГДЕ
| Остатки.КоличествоОстаток < 0";
ГраницаКонтроля = Новый Граница(МоментВремени(), ВидГраницы.Включая);
Запрос.УстановитьПараметр("МоментВремени", ГраницаКонтроля);
РезультатЗапроса = Запрос.Выполнить();
// 5. Вывод сообщений о недостатке товаров
Если Не РезультатЗапроса.Пустой() Тогда
Отказ = Истина;
ВыборкаОшибки = РезультатЗапроса.Выбрать();
Пока ВыборкаОшибки.Следующий() Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Оборудования "+ВыборкаОшибки.ОборудованиеПредставление+" недостаточно в количестве "+ВыборкаОшибки.Дефицит+" шт.";
Сообщение.Сообщить();
КонецЦикла;
КонецЕсли;
// регистр РегистрОстатка Приход
Движения.РегистрОстатка.Записывать = Истина;
Для Каждого ТекСтрокаВозвращает Из Возвращает Цикл
Движение = Движения.РегистрОстатка.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Оборудование = ТекСтрокаВозвращает.Оборудование;
Движение.Склад = Склад;
Движение.Сотрудник = Сотрудник;
Движение.Количество = ТекСтрокаВозвращает.Количество;
КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот