Имя: Пароль:
1C
1С v8
Изменение статуса в документе Заказ
0 sergqwert
 
07.07.19
19:15
Документ заказ клиента прилетает в 1с с сайта. Менеджеры обрабатывают документ и отправляют в "отборку на складе".(документ отборка),и документ посылка.
После того как заказ отобран и понятно сколько товаров, какой объем, количество мест и т.д. будет, проводится документ "Посылка" В этот документ может быть включено много заказов одного клиента,
которые проходили отборку.
Далее в какой то момент посылку начинают паковать(это время называют время "Ч". Это тот момент когда до отправки осталось 30 минут. Заказы которые приходят после времени ч,
попадают в следующий маршрут, время отправки которого еще не пришло). При этом перед упаковкой генерируется документ РТУ(расходная), печатается печатные формы.
После роспечатки документов, посылку пакуют и клеят на нее наклейки с местами.
После этого посылку включают в документ "Маршрутный лист". Водитель при получении своего маршрутного листа, перепикивает сканером все места, и таким образом фиксирует факт погрузки.

Как при проведении документа посылка, или при погрузке посылки в маршруте изменять статус товара в заказе клиента? Если есть расходная(при проведении расходной), статус должен быть "готов к погрузке". Если он прошел погрузку то статус "в пути"(при проведении маршрутного листа). Документ Маршрутный лист не имеет движений.

Процедура ПередЗаписьюДокументаЗаказКлиентаПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения)
    
   Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ЗаказКлиента.Ссылка КАК Ссылка
                   |ИЗ
                   |    Документ.ЗаказКлиента КАК ЗаказКлиента
                   |ГДЕ
                   |    ЗаказКлиента.СтатусДляСайта = &СтатусДляСайта
                   |    ЗаказКлиента.Проведен
                   |    ЗаказКлиента.ПометкаУдаления = ЛОЖЬ";

    Запрос.УстановитьПараметр("СтатусДляСайта", Справочники.СтатусыЗаказов.НайтиПоНаименованию("Shipped"));
    тз=запрос.выполнить().выгрузить();
    Для Каждого ссылка из ТЗ Цикл
    ДокЗаказ = тз.Ссылка.ПолучитьОбъект();
    ДокЗаказ.Статус = тз.Статус;
    ДокЗаказ.Записать(РежимЗаписидокумента.Запись);

  КонецЕсли;  

Конецпроцедуры
1 Лефмихалыч
 
07.07.19
19:19
А откуда взялась светлая идея двигать эти статусы заказом? Может логичнее их двигать теми документами, которые регистрируют сам факт возникновения этих статусов?
2 PuhUfa
 
07.07.19
19:22
(0) У тебя в МЛ, в табличной части есть "Посылка". В самой "Посылка" есть ссылки на заказы включенные в эту посылку. Ну и при проведении МЛ, перебирай Посылки и заказы в них и меняй статус. В чем проблема то?
3 sergqwert
 
08.07.19
11:40
Процедура ПередЗаписьюДокументаЗаказКлиентаПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения)

Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| МаршрутныйЛистПосылки.Ссылка,
| МаршрутныйЛистПосылки.Посылка,
| МаршрутныйЛистПосылки.Ответственный,
| ПосылкаЗаказыКлиента.ЗаказКлиента,
| ПосылкаЗаказыКлиента.ЗаказКлиента.СтатусДляСайта
|ИЗ
| Документ.МаршрутныйЛист.Посылки КАК МаршрутныйЛистПосылки
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.Посылка.ЗаказыКлиента КАК ПосылкаЗаказыКлиента
| ПО МаршрутныйЛистПосылки.Ссылка = ПосылкаЗаказыКлиента.Ссылка
|ГДЕ
| МаршрутныйЛистПосылки.Ссылка = &Ссылка
| И МаршрутныйЛистПосылки.Ссылка.Проведен = ИСТИНА
| И МаршрутныйЛистПосылки.Ссылка.ПометкаУдаления = ЛОЖЬ
| И ПосылкаЗаказыКлиента.ЗаказКлиента.СтатусДляСайта = &СтатусДляСайта"

Запрос.УстановитьПараметр("СтатусДляСайта", Справочники.СтатусыЗаказов.НайтиПоНаименованию("Shipped"));
Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);
тз=запрос.выполнить().выгрузить();
Для Каждого ссылка из ТЗ Цикл
ДокОбъект = тз.Ссылка.ПолучитьОбъект();
ДокОбъект.Статус = тз.Статус;
ДокОбъект.Записать(РежимЗаписидокумента.Запись);

КонецЕсли;

Конецпроцедуры
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший