По теме из базы знаний
- Начисление процентов по займов за произвольный период, процентные ставки могут меняться
- 50+ советов для успешной сдачи 1С: Специалист по платформе
- Последний раз про срез последних (на каждую дату в запросе)
- Определение количества лет между двумя датами в запросе
- API-интеграция 1С с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress для УТ11, КА2, ERP2, УНФ, БП3, Розница, УТ10, УПП1.3
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) есть в запросе такая функция "РазностьДАТ"
Соответственно вычисляешь количество секунд, или часов между датами - а дальше обычная математика.
Ну и да, как заметил (2) - должен быть параметр, чему равно 100%. День, неделя, год... иначе математика не поможет
Соответственно вычисляешь количество секунд, или часов между датами - а дальше обычная математика.
Ну и да, как заметил (2) - должен быть параметр, чему равно 100%. День, неделя, год... иначе математика не поможет
(1) вот, наваял пример. Возможно требует доработки и оптимизации, но идея должна быть понятна.
ВЫБРАТЬ
"03182001" КАК Серия,
ДАТАВРЕМЯ(2021, 4, 1) КАК СрокГодности
ПОМЕСТИТЬ вт_серии
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"01172001",
ДАТАВРЕМЯ(2019, 4, 1)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"03172001",
ДАТАВРЕМЯ(2021, 4, 1)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"05182001",
ДАТАВРЕМЯ(2021, 4, 1)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"07182001",
ДАТАВРЕМЯ(2021, 4, 1)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
1 КАК Число,
"01" КАК Строка
ПОМЕСТИТЬ втМесяцы
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2,
"02"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
3,
"03"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
4,
"04"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
5,
"05"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
6,
"06"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
7,
"07"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
8,
"08"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
9,
"09"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
10,
"10"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
11,
"11"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
12,
"12"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
2010 КАК Число,
"10" КАК Строка
ПОМЕСТИТЬ втГода
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2011,
"11"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2012,
"12"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2013,
"13"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2014,
"14"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2015,
"15"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2016,
"16"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2017,
"17"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2018,
"18"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2019,
"19"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2020,
"20"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2021,
"21"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
вт_серии.Серия КАК Серия,
вт_серии.СрокГодности КАК СрокГодности
ИЗ
вт_серии КАК вт_серии
ЛЕВОЕ СОЕДИНЕНИЕ втГода КАК втГода
ПО (ПОДСТРОКА(вт_серии.Серия, 3, 2) = втГода.Строка)
ЛЕВОЕ СОЕДИНЕНИЕ втМесяцы КАК втМесяцы
ПО (ПОДСТРОКА(вт_серии.Серия, 1, 2) = втМесяцы.Строка)
ГДЕ
ГОД(ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, -РАЗНОСТЬДАТ(&ТекущаяДата, вт_серии.СрокГодности, МЕСЯЦ) * 0.9)) * 100 + МЕСЯЦ(ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, -РАЗНОСТЬДАТ(&ТекущаяДата, вт_серии.СрокГодности, МЕСЯЦ) * 0.9)) < втГода.Число * 100 + втМесяцы.Число
Показать
(1),
1. Разность дат в секундах между датой изготовления и датой окончания срока годности
2. Разность дат в секундах между датой изготовления и текущей датой
3. [2] / [3]
(5) можно, конечно, попробовать поизгаляться с ПОДСТРОКА() и ДАТАВРЕМЯ() в запросе. Но по-моему лучше бы данные подготовить, либо добавить реквизит в серию, либо регистр завести - серия/дата-изготовления.
1. Разность дат в секундах между датой изготовления и датой окончания срока годности
2. Разность дат в секундах между датой изготовления и текущей датой
3. [2] / [3]
(5) можно, конечно, попробовать поизгаляться с ПОДСТРОКА() и ДАТАВРЕМЯ() в запросе. Но по-моему лучше бы данные подготовить, либо добавить реквизит в серию, либо регистр завести - серия/дата-изготовления.
Постановщик задачи говорит следующее:
Есть серия, в названии которой зашифрована дата изготовления - первые 4 цифры номера(тип номера - строка) серии это месяц и год(0318, например, март 2018-го года). Также у серии есть дата "Годен до"(тип - дата, 01.04.2021). Разница между датой в номере и датой "Годен до" - это 100%. Разница между текущей датой и сроком годности - это некий процент(в подавляющем большинстве случаев меньший) от разницы даты из номера серии и ее датой "Годен до".
Итого:
Товар 1. Серия номер: 03182244. Годен до: 01.04.2021
Получаем: дата изготовления - 01.03.2018(по первым 4-м цифрам номера). Годен до - 01.04.2021. Итого срок годности - 13 месяцев.
Текущая дата - 19.07.2018. 01.04.2021 - 19.07.2018 = 9 месяцев или сколько то там секунд(много). Так вот, эта разница(между тек. датой и сроком годности) не должна быть более 10 процентов от разности даты изготовления и окончания срока годности.
Есть серия, в названии которой зашифрована дата изготовления - первые 4 цифры номера(тип номера - строка) серии это месяц и год(0318, например, март 2018-го года). Также у серии есть дата "Годен до"(тип - дата, 01.04.2021). Разница между датой в номере и датой "Годен до" - это 100%. Разница между текущей датой и сроком годности - это некий процент(в подавляющем большинстве случаев меньший) от разницы даты из номера серии и ее датой "Годен до".
Итого:
Товар 1. Серия номер: 03182244. Годен до: 01.04.2021
Получаем: дата изготовления - 01.03.2018(по первым 4-м цифрам номера). Годен до - 01.04.2021. Итого срок годности - 13 месяцев.
Текущая дата - 19.07.2018. 01.04.2021 - 19.07.2018 = 9 месяцев или сколько то там секунд(много). Так вот, эта разница(между тек. датой и сроком годности) не должна быть более 10 процентов от разности даты изготовления и окончания срока годности.
(5) можно, только это геморное дело прям в запросе парсить. В запрос надо параметры подготовленные загонять.
Общая информация для ознакомленияhttps://infostart.ru/public/170336/
Общая информация для ознакомления
(8) вот еще
https://forum.infostart.ru/forum9/topic10377/
и вот наоборот
https://infostart.ru/public/331805/
и вот наоборот
(8) Примерно ))
Выразить из Строки в число - не реализовано фирмой 1с.
Получается более менее простой способ - это выгрузить в Таблицу значений из запроса 0318 и на языке 1С разобрать.
А потом присоеденить к запросу снова.
Выразить из Строки в число - не реализовано фирмой 1с.
МояДата = "0318";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Подстрока(&МояДата,3,2) КАК Год,
| Подстрока(&МояДата,1,2) КАК Месяц,
| ""20"" + Подстрока(&МояДата,3,2) КАК Год,
| ВЫРАЗИТЬ(Подстрока(&МояДата,1,2) КАК ЧИСЛО) КАК В3";
//"ВЫБРАТЬ ДАТАВРЕМЯ(Подстрока(МоеПоле,3,2),Подстрока(МоеПоле,1,2),1,0,0,0) КАК Поле1";
Запрос.УстановитьПараметр("МояДата", МояДата);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
d =1;
КонецЦикла;
F = ТекстЗапросаИзСтрокиВЧисло("МояДата", 2); // https://kb.mista.ru/article.php?id=666
ПоказатьПолучается более менее простой способ - это выгрузить в Таблицу значений из запроса 0318 и на языке 1С разобрать.
А потом присоеденить к запросу снова.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот