Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Реализация резервирования и продажи товара.  (Прочитано 5705 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Glebby
Интересующийся

ua
Offline Offline

« : 10-06-2011 13:03 » 

Подскажите пожалуйста, как лучше реализовать резервирование и продажу(списание) товара(груза) одним документом, при этом, в отчетах, необходимо видеть, когда был зарезервирован товар и когда товар продан, так же и его количество?
В текущей реализации резервирование товара производится путем списания его из одного регистра остатков(Накопления) и оприходования во второй регистр остатков(Резервирования), а списание пытаюсь реализовать путем изменения значения реквизита "Списан", тип реквизита - Булево. При такой реализации постоянно возникает проблема двух одинаковых записей в регистре отличающимися только лишь значением реквизита "Списан". Если груз сначала зарезервировать, потом закрыть документ и после повторного открытия документа произвести списание, то в регистре производится одна запись с корректными данными.

Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 10-06-2011 13:29 » 

Glebby, конфигурация своя что-ли?
В типовых вроде механизмы резервирования работают корректно...
Записан
Glebby
Интересующийся

ua
Offline Offline

« Ответ #2 : 10-06-2011 13:58 » 

Да, конфигурация своя, пишется с 0, под нужды компании.
Смотрю постоянно типовую "Управление торговлей для Украины 2.3", там для резервирования свой документ, для списания свой, так же там и отдельные регистры.
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 10-06-2011 14:24 » 

Не знаю как в УТ, в УПП механизмы резервирования вынесены в отдельные модули, чтобы доступаться к ним из разных документов.
Навскидку (в УПП оперируют с резервами на складах, есть еще резервы в заказах): Перемещение, РеализацияТоваров, ТребованиеНакладная, РазмещениеЗаказа, ЗаказНаПроизводство, КорректировкаЗаказаНаПроизводство, т.е. достаточное количество, чтобы это было вынесено и отлажено в отдельном модуле.
Как именно ты реализуешь это в структуре регистров - вариантов много. Самый простой - в регистр остатков добавить измерение Резерв: если заполнено - значит зарезервировано (по соответствующему документу), если нет - значит свободный остаток
Записан
Glebby
Интересующийся

ua
Offline Offline

« Ответ #4 : 14-06-2011 07:51 » 

Через несколько минут буду разбираться с УПП.
Текущая реализация: Один документ, который и "резервирует", и "списывает", при резервировании производится списание необходимого товара из регистра наличия и оприходование в регистр резервирования. Списание выполняется путем изменения значения реквизита(булево) регистра. Если создать документ, провести им резервирование, потом закрыть документ и после снова открыть и провести списание, то в регистре отображается одна запись с реквизитом, имеющим значение - "0". Если резервирование и списание проводить без закрытия документа, то получаются 2 набора записей в регистре и наборы отличаются только этим реквизитом, в одном наборе реквизит имеет значение "1", во втором - "0". Изменять набор записей в регистре я пытаюсь с помощью метода "Вставить". Я так понимаю что, проводя 2 операции сразу, документ просто не сохраняется в промежутках между операциями и, соответственно, система просто вставляет новый набор записей в регистр. Собственно, вопрос скорее: "Как сохранить документ, не закрывая его при выполнении этих операций?"
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 14-06-2011 08:03 » 

Документ являтся регистратором соотвествущих регистров?
Какое значение реквизита "Удаление движений" в документе?
В каком месте ты изменяешь набор записей?
Где код, чтобы судить о правильности, а не гадать?
Записан
Glebby
Интересующийся

ua
Offline Offline

« Ответ #6 : 14-06-2011 08:27 » 

1. Да, Документ является регистратором для соответствующих регистров.
2. Значение - "Не удалять движения автоматически"
3,4. Процедура Резервирования
Код:
Процедура ЗарезервироватьНажатие(Элемент)

Для Каждого ТекСтрокаTab Из Tab Цикл
// запись в регистрРезервирования
Движение = Движения.РегистрРезервирования.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = ТекСтрокаTab.ДатаПриема;
Движение.Cargo = Cargo;
Движение.CarNumber = ТекСтрокаTab.Вагон;
Движение.RWNumber=ТекСтрокаTab.ПриемныйАкт;
Движение.Size = Размер;
Движение.Amount = ТекСтрокаTab.Amount;
Движение.NETTO = ТекСтрокаTab.NETTO;
Движение.BRUTTO = ТекСтрокаTab.BRUTTO;
Движение.Реквизит1=Истина;
//Движение.Доступность=Ложь;
Записать();

//списание из регистраНакопления
Движение=Движения.РегистрНакопления.Добавить();
Движение.ВидДвижения=ВидДвиженияНакопления.Расход;
Движение.Период= ТекСтрокаTab.ДатаПриема;
Движение.Cargo = Cargo;
Движение.CarNumber = ТекСтрокаTab.Вагон;
Движение.RWNumber=ТекСтрокаTab.ПриемныйАкт;
Движение.Size = Размер;
Движение.Amount = ТекСтрокаTab.Amount;
Движение.NETTO = ТекСтрокаTab.NETTO;
Движение.BRUTTO = ТекСтрокаTab.BRUTTO;


Записать();
КонецЦикла;

КонецПроцедуры


Процедура списания:
Код:
Процедура ПогрузитьНажатие(Элемент)
Для Каждого ТекСтрокаTab Из Tab Цикл
Движение = Движения.РегистрРезервирования.Вставить(0);

Движение.ВидДвижения = ВидДвиженияНакопления;
Движение.Период = ТекСтрокаTab.ДатаПриема;
Движение.Cargo = Cargo;
Движение.CarNumber = ТекСтрокаTab.Вагон;
Движение.RWNumber=ТекСтрокаTab.ПриемныйАкт;
Движение.Size = Размер;
Движение.Amount = ТекСтрокаTab.Amount;
Движение.NETTO = ТекСтрокаTab.NETTO;
Движение.BRUTTO = ТекСтрокаTab.BRUTTO;
Движение.Реквизит1=Ложь;
Записать();
КонецЦикла;


КонецПроцедуры
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 14-06-2011 08:31 » 

Самая главная ошибка - все движения должны происходить в модуле документа при проведении, а не на форме.
Второе - если стоит "Не удалять движения автоматически" - значит ты сам должен позаботиться об очистке двжений:
Движения.РегистрРезервирования.Очистить(); // в самом начале процедуры
Записан
Glebby
Интересующийся

ua
Offline Offline

« Ответ #8 : 14-06-2011 10:26 » 

Спасибо, все работает, перенес движения в модуль документа, прописал очистку движений.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines