Пишу код для Второго Вычисляемого поля в СКД.
Для поля по линии Заказа надо вывести общий статус в колонку СрокПоставки
Для номенклатурных позиций (временно закрасил белым) Срокпоставки подтягивается из общего модуля в Первое вычисляемое поле СКД.
Функция Первого вычисляемого поля СКД к примеру имеет вид ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки). Получаю напротив номенклатурных позиций статусы "Готов к отгрузке", "В резерве" (на фото).
Во втрое вычисляемое поле Пишу такой код, итог которого должен вывестись в поля по линии Заказа.
Как результат все хорошо, кроме заказа 5. (на фото) его разрывает, не смотря на первое условие в коде (КОГДА ... И .. ТОГДА)
"ИЛИ" срабатывает аналогично.
Какие еще варианты можно, чтобы в итоге получить для Заказа 5 именно "Отгружен частично" ?
Для поля по линии Заказа надо вывести общий статус в колонку СрокПоставки
Для номенклатурных позиций (временно закрасил белым) Срокпоставки подтягивается из общего модуля в Первое вычисляемое поле СКД.
Функция Первого вычисляемого поля СКД к примеру имеет вид ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки). Получаю напротив номенклатурных позиций статусы "Готов к отгрузке", "В резерве" (на фото).
Во втрое вычисляемое поле Пишу такой код, итог которого должен вывестись в поля по линии Заказа.
ВЫБОР
КОГДА (ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки) ПОДОБНО "Поставка:%"
И ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки) ПОДОБНО "Всё отгружено")
ТОГДА "Отгружен частично"
КОГДА ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки) ПОДОБНО "Всё отгружено"
ТОГДА "Всё отгружено!"
КОГДА ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки) ПОДОБНО "Всё в резерве"
ТОГДА "Готов к отгрузке"
КОГДА ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки) ПОДОБНО "В%%наличии% резерв%%"
ТОГДА "В резерве"
КОГДА ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки) ПОДОБНО "В%резерв%Отгружено:%"
ТОГДА "Отгружен частично"
КОГДА ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки) ПОДОБНО "В%%наличии%%поставк%%резерв%%"
ТОГДА "В резерве"
КОГДА ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки) ПОДОБНО "Поставка:%"
ИЛИ ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки) ПОДОБНО "Поставка %"
ТОГДА "Поставка " + ФОРМАТ(КоличествоДнейПоставки, "ЧЦ=; ЧДЦ=0")+ " дн."
ИНАЧЕ ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки)
КОНЕЦ
ПоказатьКак результат все хорошо, кроме заказа 5. (на фото) его разрывает, не смотря на первое условие в коде (КОГДА ... И .. ТОГДА)
"ИЛИ" срабатывает аналогично.
Какие еще варианты можно, чтобы в итоге получить для Заказа 5 именно "Отгружен частично" ?
Прикрепленные файлы:
По теме из базы знаний
- Помощник (мастер) оформления производственного заказа
- Реестр накладных по зонам доставки - отчет выводит заказы, зоны доставки, номенклатуру, вес и объем со статусами - УТ 11, КА 2, ЕРП
- Автоматическая обработка заказов, получаемых по электронной почте для 1С: Бухгалтерия предприятия 3.0
- Закрытие заказов клиента
- Помощник (мастер) оформления производственного заказа
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) У заказа 5 получаются разные статусы, отсюда и разрыв. Выведите колонку по который определяете статус и все станет понятно. Не надо гадать что не так.
Если срабатывает не то условие, значит значение не то, которое Вы ожидаете. Программа сама ничего придумывать не будет.
Если срабатывает не то условие, значит значение не то, которое Вы ожидаете. Программа сама ничего придумывать не будет.
(6)
вот эта функция (ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки) определяет статус по отдельным номенклатурным позициям.
Статус по отдельным номенклатурным позициям выводится верным.
Для заказа общего статуса нет.
Я его формирую на основании статусов номенклатурных позиций, во втором вычисляемом поле СКД.
вот эта функция (ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки) определяет статус по отдельным номенклатурным позициям.
Статус по отдельным номенклатурным позициям выводится верным.
Для заказа общего статуса нет.
Я его формирую на основании статусов номенклатурных позиций, во втором вычисляемом поле СКД.
Так и проверяйте этот алгоритм, скорее всего там и кроется ошибка или просто именно этот заказ по разным позициям имеет разный статус.
Я вижу результат условия:
КОГДА (ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки) ПОДОБНО "Поставка:%"
И ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки) ПОДОБНО "Всё отгружено")
ТОГДА "Отгружен частично" //Это мы видим
//а сам текст для сравнения не видим
//может выражение (ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки) =" Поставка:%, Поставка: % Поставка %"
(12)
там же видно, в Заказе 5.
В первой части "Все отгружено", вторая часть - что вывелось выражение "Поставка: 90 дн."
Вот хотя бы на основании этих двух статусов двух номенклатурных позиций надо вывести один общий статус для Заказа №5 " "Отгружен частично".
там же видно, в Заказе 5.
В первой части "Все отгружено", вторая часть - что вывелось выражение "Поставка: 90 дн."
Вот хотя бы на основании этих двух статусов двух номенклатурных позиций надо вывести один общий статус для Заказа №5 " "Отгружен частично".
Вообщем добавьте еще одно поле в запросе ОпределитьСрокПоставки(ЗаказКлиента,КодСтроки) без всяких условий и выведите в таблицу.
1) Либо сделать в документе статус отгрузки и по нему определять.
Либо сделать отдельную таблицу в которой каждому статусу присваиваете порядковый номер (по нему сортируете) и выбираете из нее 1 только первую запись.
Либо сделать отдельную таблицу в которой каждому статусу присваиваете порядковый номер (по нему сортируете) и выбираете из нее 1 только первую запись.
1) Можно выгрузить данные в промежуточную таблицу, обработать её программно и загрузить обратно в СКД.
Можно подготовить таблицу и загрузить в СКД.
Или помучится и "искаверкать" как нить так запрос, что бы брать один статус для всех строк из заказа.
На вскидку, создаете временную таблицу со всеми статусами, из этой таблицы выбираем наш заказ и после правильно сортировки выбираем первую запись. И эта запись и будет статусом для всех строк заказа.
Можно подготовить таблицу и загрузить в СКД.
Или помучится и "искаверкать" как нить так запрос, что бы брать один статус для всех строк из заказа.
На вскидку, создаете временную таблицу со всеми статусами, из этой таблицы выбираем наш заказ и после правильно сортировки выбираем первую запись. И эта запись и будет статусом для всех строк заказа.
(23)
Как такое можно сделать, если я знаю все статусы номенклатурных позиций?
Можно выгрузить данные в промежуточную таблицу, обработать её программно и загрузить обратно в СКД.
Можно подготовить таблицу и загрузить в СКД.
Можно подготовить таблицу и загрузить в СКД.
Как такое можно сделать, если я знаю все статусы номенклатурных позиций?
Если предварительно подготовить таблицу, то добавить не набор данных запрос, а надор данных объект, описываем все поля из таблицы. И при компоновке подключить таблицу:
СтандартнаяОбработка = Ложь;
Таблица = ПолучаемНужнуюТаблицу();
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
//Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
// - Если сделать так, как показано выше(рекомендуют на некоторых ресурсах), то при изменении настроек в режиме клиента
// этих изменений Вы не увидите, потому что настройки всегда будут по умолчанию. Как правильно - вариант ниже
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ВнешнийНаборДанных = Новый Структура("Таблица", Таблица);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки);
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Показать
Если выгрузить в промежуточную, тут сложнее, и с кодом сейчас не подскажу. Но будет два набора данных, один запрос (выгружаем итоги в таблицу), а второй объект (загружаем из таблицы обработанные данные).
А под обработать таблицу я подразумеваю, что по каждому заказу-номенклатуре проверяем статус и если их больше одного, то во всех "неправильных строках" меняем на нужный.
В любом случае простого решения не будет.
А почему добавить реквизит статуса в документ это не вариант?
А почему добавить реквизит статуса в документ это не вариант?
Перечисление - это не где хранится, а всего лишь ограниченный список значений.
А статус заказа либо в самом заказе (ЗаказКлиента.СтатусЗаказа), либо рассчитывается динамически, либо хранится в регистре сведений. Так сказать в зависимости от того как придумали разработчики.
А статус заказа либо в самом заказе (ЗаказКлиента.СтатусЗаказа), либо рассчитывается динамически, либо хранится в регистре сведений. Так сказать в зависимости от того как придумали разработчики.
(30)
а как можно в СКД обратиться к процедуре модуля менеджера документа Заказ Клиента, чтобы вытянуть статус?
функция имеет вид
возвращает текст запроса, который предположительно и будет Статусом
а как можно в СКД обратиться к процедуре модуля менеджера документа Заказ Клиента, чтобы вытянуть статус?
функция имеет вид
Функция ТекстЗапросаДляРасчетаСостоянийЗаказов() Экспорт
возвращает текст запроса, который предположительно и будет Статусом
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот