Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
01 авг 2021, 14:49

Вывести номенклатуру с истекшим сроком гарантии

Автор Алексей_1985_06, 05 ноя 2020, 13:38

0 Пользователей и 1 гость просматривают эту тему.

Алексей_1985_06

Всем привет! Сразу к вопросу:
необходимо выводить список номенклатуры которую необходимо перевести во 2-ю категорию (это, та номенклатура у которой закончилась гарантия),в справочнике номенклатура есть реквизит "Гарантийный срок" - с типом строка, куда записывается количество месяцев гарантии и регистр сведений в котором указывается дата присвоения 1-ой категории, затруднения вызывает вывод списка номенклатуры с условием что на текущую дату, гарантия закончилась (т.е дата присвоения 1-й категории из регистра свед. + количество месяцев гарантии из справочника номенклатура => текущей даты).
Помогите пожалуйста, кто может!

Код сейчас такой, выводит всю номенклатуру с 1-й категорией, а нужно чтобы выводилась только, та у которой истек гарантийный срок:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| МатериальныеЦенности.Наименование КАК Наименование,
| МатериальныеЦенности.ГарантийныйСрок КАК ГарантийныйСрок,
| КатегорияМатериальныхСредствСрезПервых.Категория КАК Категория,
| КатегорияМатериальныхСредствСрезПервых.Период КАК ДатаПрисвоенияКатегории
|ИЗ
| Справочник.МатериальныеЦенности КАК МатериальныеЦенности
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КатегорияМатериальныхСредств.СрезПервых КАК КатегорияМатериальныхСредствСрезПервых
| ПО МатериальныеЦенности.Ссылка = КатегорияМатериальныхСредствСрезПервых.МатериальноеСредство
|ГДЕ
| НЕ МатериальныеЦенности.ЭтоГруппа
| И КатегорияМатериальныхСредствСрезПервых.Категория = &Категория";

Запрос.УстановитьПараметр("Категория",Перечисления.КатегорииМС.Категория1);

РезультатЗапроса = Запрос.Выполнить();
Если  РезультатЗапроса.Пустой()Тогда
Элементы.МатериальныеСредства.Видимость = Ложь;
Возврат
Иначе
МатериальныеСредства.Загрузить(РезультатЗапроса.Выгрузить()); // выгружаем данные в ТЗ "МатериальныеСредства"
КонецЕсли;
КонецПроцедуры
                          

antoneus

"Строка, куда записывается количество" - это плохо, конечно, если уж писать количество - надо писать его в число. Советую переделать, тогда и запрос можно будет составить вменяемый.

Алексей_1985_06

Цитата: antoneus от 05 ноя 2020, 14:09
"Строка, куда записывается количество" - это плохо, конечно, если уж писать количество - надо писать его в число. Советую переделать, тогда и запрос можно будет составить вменяемый.

antoneus переделал, сделал числом.... Подскажите пожалуйста как дальше.... :dfbsdfbsdf:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| МатериальныеЦенности.ГарантийныйСрок КАК ГарантийныйСрок,
| КатегорияМатериальныхСредствСрезПервых.Категория КАК Категория,
| КатегорияМатериальныхСредствСрезПервых.Период КАК ДатаПрисвоенияКатегории,
| МатериальныеЦенности.Ссылка КАК Наименование
|ИЗ
| Справочник.МатериальныеЦенности КАК МатериальныеЦенности
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КатегорияМатериальныхСредств.СрезПервых КАК КатегорияМатериальныхСредствСрезПервых
| ПО МатериальныеЦенности.Ссылка = КатегорияМатериальныхСредствСрезПервых.МатериальноеСредство
|ГДЕ
| НЕ МатериальныеЦенности.ЭтоГруппа
| И КатегорияМатериальныхСредствСрезПервых.Категория = ЗНАЧЕНИЕ(Перечисление.КатегорииМС.Категория1)";

РезультатЗапроса = Запрос.Выполнить();
Если  РезультатЗапроса.Пустой()Тогда
Элементы.МатериальныеСредства.Видимость = Ложь;
Возврат
Иначе
МатериальныеСредства.Загрузить(РезультатЗапроса.Выгрузить()); // выгружаем данные в ТЗ "МатериальныеСредства"
КонецЕсли;
КонецПроцедуры
                          

LexaK

не успел, вот пока ответ под старый вариант, когда Гарантийный срок - строка

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    СпрМЦ.Наименование КАК Наименование, //почему наименование, а не ссылка?
    |    СпрМЦ.ГарантийныйСрок КАК ГарантийныйСрок,
    |    РегКатегория.Категория КАК Категория,
    |    РегКатегория.Период КАК ДатаПрисвоенияКатегории
    |ИЗ
| РегистрСведений.КатегорияМатериальныхСредств.СрезПоследних КАК РегКатегория
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |   Справочник.МатериальныеЦенности КАК СпрМЦ
    |        ПО СпрМЦ.Ссылка = РегКатегория.МатериальноеСредство
    |ГДЕ
    |   РегКатегория.Категория = &Категория";
   
    Запрос.УстановитьПараметр("Категория",Перечисления.КатегорииМС.Категория1);
   
РезультатЗапроса = Запрос.Выполнить();

//Если  РезультатЗапроса.Пустой()Тогда
//Элементы.МатериальныеСредства.Видимость = Ложь;
//Возврат
//Иначе
//МатериальныеСредства.Загрузить(РезультатЗапроса.Выгрузить()); // выгружаем данные в ТЗ "МатериальныеСредства"
//КонецЕсли;

Элементы.МатериальныеСредства.Видимость = Не РезультатЗапроса.Пустой();
МатериальныеСредства.Очистить();
лкВыборка = РезультатЗапроса.Выбрать();
Пока лкВыборка.Следующий() Цикл
Попытка
лкЧислоМесяцев = Число(лкВыборка.ГарантийныйСрок);
Исключение
лкОшибка = ОписаниеОшибки();
Сообщить(лкОшибка);
Продолжить;
КонецПопытки;
Если ДобавитьМесяц(лкВыборка.ДатаПрисвоенияКатегории, лкЧислоМесяцев) < ТекущаяДата() Тогда
//товар просрочен, добавляем в таблицу
НоваяСтрока = МатериальныеСредства.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, лкВыборка);
КонецЕсли;
КонецЦикла;

КонецПроцедуры
ответ Понравился? (в смысле пригодился?)

antoneus

Как-то так:

ВЫБРАТЬ
спрНоменклатура.Ссылка
ИЗ
Справочник.Номенклатура КАК спрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КатегорииМатериальныхСредств.СрезПоследних(, Категория = ЗНАЧЕНИЕ(Перечисление.КатегорииМС.Категория1)) КАК КатегорииМатериальныхСредствСрезПоследних
ПО спрНоменклатура.Ссылка = КатегорииМатериальныхСредствСрезПоследних.Номенклатура
ГДЕ
ДОБАВИТЬКДАТЕ(КатегорииМатериальныхСредствСрезПоследних.Период, МЕСЯЦ, спрНоменклатура.ГарантийныйСрок) < &ТекущаяДата

Алексей_1985_06

Цитата: LexaK от 05 ноя 2020, 14:36
не успел, вот пока ответ под старый вариант, когда Гарантийный срок - строка

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    СпрМЦ.Наименование КАК Наименование, //почему наименование, а не ссылка?
    |    СпрМЦ.ГарантийныйСрок КАК ГарантийныйСрок,
    |    РегКатегория.Категория КАК Категория,
    |    РегКатегория.Период КАК ДатаПрисвоенияКатегории
    |ИЗ
| РегистрСведений.КатегорияМатериальныхСредств.СрезПоследних КАК РегКатегория
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |   Справочник.МатериальныеЦенности КАК СпрМЦ
    |        ПО СпрМЦ.Ссылка = РегКатегория.МатериальноеСредство
    |ГДЕ
    |   РегКатегория.Категория = &Категория";
   
    Запрос.УстановитьПараметр("Категория",Перечисления.КатегорииМС.Категория1);
   
РезультатЗапроса = Запрос.Выполнить();

//Если  РезультатЗапроса.Пустой()Тогда
//Элементы.МатериальныеСредства.Видимость = Ложь;
//Возврат
//Иначе
//МатериальныеСредства.Загрузить(РезультатЗапроса.Выгрузить()); // выгружаем данные в ТЗ "МатериальныеСредства"
//КонецЕсли;

Элементы.МатериальныеСредства.Видимость = Не РезультатЗапроса.Пустой();
МатериальныеСредства.Очистить();
лкВыборка = РезультатЗапроса.Выбрать();
Пока лкВыборка.Следующий() Цикл
Попытка
лкЧислоМесяцев = Число(лкВыборка.ГарантийныйСрок);
Исключение
лкОшибка = ОписаниеОшибки();
Сообщить(лкОшибка);
Продолжить;
КонецПопытки;
Если ДобавитьМесяц(лкВыборка.ДатаПрисвоенияКатегории, лкЧислоМесяцев) < ТекущаяДата() Тогда
//товар просрочен, добавляем в таблицу
НоваяСтрока = МатериальныеСредства.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, лкВыборка);
КонецЕсли;
КонецЦикла;

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


Огромное вам спасибо!!!! Все работает как надо!:zebzdr::zebzdr::zebzdr:

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск