Не присваивается статус к номенклатуре! Не могу найти ошибку
Функция ОбновитьСтатусыНоменклатуры(Знач Номенклатура, ВернутьПервоеНайденноеЗначение = Ложь) Экспорт
Если Не ТипЗнч(Номенклатура) = Тип("Массив") Тогда
ЗначениеНоменклатура = Номенклатура;
Номенклатура = Новый Массив;
Номенклатура.Добавить(ЗначениеНоменклатура);
КонецЕсли;
НоменклатураКопия = Новый Массив;
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(НоменклатураКопия, Номенклатура, Истина);
Номенклатура = НоменклатураКопия;
УзелERP = БИТ_СТ_ПовторноеИспользованиеЗначений.ПолучитьЗначениеКонстанты("СТ_НСИ_УзелERP");
СтатусыНоменклатуры = СтатусыНоменклатуры();
СхемаКомпоновкиДанных = ПолучитьМакет("СхемаКомпоновкиДанныхОтбора");
Для Каждого Статус Из СтатусыНоменклатуры Цикл
Если Не Номенклатура.Количество() Тогда
Прервать;
КонецЕсли;
НастройкиКомпоновкиХранилище = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Статус, "НастройкиОтбора");
НастройкиКомпоновки = НастройкиКомпоновкиХранилище.Получить();
Если НастройкиКомпоновки = Неопределено Тогда
Продолжить;
КонецЕсли;
// Настройки могут меняться. Перезаполняем используемые параметры
НастройкиКомпоновки.ПараметрыДанных.Элементы.Очистить();
Для Каждого Параметр Из СхемаКомпоновкиДанных.Параметры Цикл
НовыйПараметр = НастройкиКомпоновки.ПараметрыДанных.Элементы.Добавить();
НовыйПараметр.Параметр = Новый ПараметрКомпоновкиДанных(Параметр.Имя);
НовыйПараметр.Использование = Истина;
КонецЦикла;
//
ПараметрНастройки = Новый ПараметрКомпоновкиДанных("Номенклатура");
НастройкиКомпоновки.ПараметрыДанных.УстановитьЗначениеПараметра(ПараметрНастройки, Номенклатура);
ПараметрНастройки = Новый ПараметрКомпоновкиДанных("УзелERP");
НастройкиКомпоновки.ПараметрыДанных.УстановитьЗначениеПараметра(ПараметрНастройки, УзелERP);
ПараметрНастройки = Новый ПараметрКомпоновкиДанных("ГруппаПроектные");
НастройкиКомпоновки.ПараметрыДанных.УстановитьЗначениеПараметра(ПараметрНастройки, БИТ_СТ_ПовторноеИспользованиеЗначений.ПолучитьЗначениеКонстанты("СТ_ГруппаПроектныхСветильников"));
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
МакетКомпоновки = КомпоновщикМакета.Выполнить(
СхемаКомпоновкиДанных,
НастройкиКомпоновки,
,
,
Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ТаблицаРезультат = Новый ТаблицаЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Если ТаблицаРезультат.Количество() И ВернутьПервоеНайденноеЗначение Тогда
Возврат Статус;
КонецЕсли;
Если ТаблицаРезультат.Количество() Тогда
НоменклатураКОбновлениюСтатуса = ТаблицаРезультат.ВыгрузитьКолонку("Номенклатура");
УстановитьОбновитьСтатусыНоменклатуры(НоменклатураКОбновлениюСтатуса, Статус);
Номенклатура = ОбщегоНазначенияКлиентСервер.СократитьМассив(Номенклатура, НоменклатураКОбновлениюСтатуса);
КонецЕсли;
КонецЦикла;
Возврат Номенклатура;
КонецФункции
Показать
Процедура УстановитьОбновитьСтатусыНоменклатуры(Номенклатура, Статус, ЗаписатьСтатусВОбъект = Истина) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТНоменклатура.Ссылка,
| ЕСТЬNULL(СТ_СтатусыНоменклатурыСрезПоследних.Статус, НЕОПРЕДЕЛЕНО) КАК Статус
|ИЗ
| Справочник.Номенклатура КАК ТНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СТ_СтатусыНоменклатуры.СрезПоследних КАК СТ_СтатусыНоменклатурыСрезПоследних
| ПО ТНоменклатура.Ссылка = СТ_СтатусыНоменклатурыСрезПоследних.Номенклатура
|ГДЕ
| ТНоменклатура.Ссылка В(&Ссылка)
| И НЕ ЕСТЬNULL(СТ_СтатусыНоменклатурыСрезПоследних.Статус, НЕОПРЕДЕЛЕНО) = &СТ_Статус";
Запрос.УстановитьПараметр("Ссылка", Номенклатура);
Запрос.УстановитьПараметр("СТ_Статус", Статус);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
//Если ЗаписатьСтатусВОбъект Тогда
// ЗаписатьСтатусВОбъект(ВыборкаДетальныеЗаписи.Ссылка, Статус);
//КонецЕсли;
ЗаписатьСведенияОСтатусе(ВыборкаДетальныеЗаписи.Ссылка, Статус);
КонецЦикла;
КонецПроцедуры
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
1. Непонятно что такое СтатусыНоменклатуры - таблица значений, массив или что?
2. В цикле по статусам номенклатуры у вас есть выход из функции:
Если ТаблицаРезультат.Количество() И ВернутьПервоеНайденноеЗначение Тогда
Возврат Статус;
КонецЕсли;
То есть цикл прерывается и дальше ничего не произойдёт. Вообще это уже как-то неправильно. Ну да ладно.
Функция Количество() возвращает число, которое у вас ни с чем не сравнивается. Или я то-то не догоняю?
3. После проверки этих условий у вас дальше вообще идёт выполнение?
4. Поскольку непонятен тип Статус - то непонятно почему не присваивается.
5. В общем, мало информации.
2. В цикле по статусам номенклатуры у вас есть выход из функции:
Если ТаблицаРезультат.Количество() И ВернутьПервоеНайденноеЗначение Тогда
Возврат Статус;
КонецЕсли;
То есть цикл прерывается и дальше ничего не произойдёт. Вообще это уже как-то неправильно. Ну да ладно.
Функция Количество() возвращает число, которое у вас ни с чем не сравнивается. Или я то-то не догоняю?
3. После проверки этих условий у вас дальше вообще идёт выполнение?
4. Поскольку непонятен тип Статус - то непонятно почему не присваивается.
5. В общем, мало информации.
(2)
По пунктам:
1)
2) Статус - это справочник
По пунктам:
1)
Функция СтатусыНоменклатуры() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СТ_СтатусыНоменклатуры.Ссылка КАК Статус
|ИЗ
| Справочник.СТ_СтатусыНоменклатуры КАК СТ_СтатусыНоменклатуры
|ГДЕ
| НЕ СТ_СтатусыНоменклатуры.ПометкаУдаления";
РезултатЗапроса = Запрос.Выполнить();
РезультатТЗ = РезултатЗапроса.Выгрузить();
СтатусыНоменклатуры = РезультатТЗ.ВыгрузитьКолонку("Статус");
Возврат СтатусыНоменклатуры;
КонецФункции
Показать2) Статус - это справочник
(2) не по всем позициям номен-ры отрабатывается это условие :
Если ТаблицаРезультат.Количество() Тогда
НоменклатураКОбновлениюСтатуса = ТаблицаРезультат.ВыгрузитьКолонку("Номенклатура");
УстановитьОбновитьСтатусыНоменклатуры(НоменклатураКОбновлениюСтатуса, Статус);
Номенклатура = ОбщегоНазначенияКлиентСервер.СократитьМассив(Номенклатура, НоменклатураКОбновлениюСтатуса);
КонецЕсли;
ПоказатьЕсли ТаблицаРезультат.Количество() И ВернутьПервоеНайденноеЗначение Тогда ==== Если 1 и 2 Тогда - такое условие у вас?
Возврат Статус; ================================================ Вот здесь уже дальше ничего не будет выполняться.
КонецЕсли;
Если ТаблицаРезультат.Количество() Тогда
НоменклатураКОбновлениюСтатуса = ТаблицаРезультат.ВыгрузитьКолонку("Номенклатура");
УстановитьОбновитьСтатусыНоменклатуры(НоменклатураКОбновлениюСтатуса, Статус); ============ Что в этой функции?
Номенклатура = ОбщегоНазначенияКлиентСервер.СократитьМассив(Номенклатура, НоменклатураКОбновлениюСтатуса);
КонецЕсли;
ПоказатьПроцессорВывода.УстановитьОбъект(ТаблицаРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
//Если ТаблицаРезультат.Количество() И ВернутьПервоеНайденноеЗначение Тогда
// Возврат Статус;
//КонецЕсли;
Если ТаблицаРезультат.Количество() > 0 Тогда
НоменклатураКОбновлениюСтатуса = ТаблицаРезультат.ВыгрузитьКолонку("Номенклатура");
УстановитьОбновитьСтатусыНоменклатуры(НоменклатураКОбновлениюСтатуса, Статус);
Номенклатура = ОбщегоНазначенияКлиентСервер.СократитьМассив(Номенклатура, НоменклатураКОбновлениюСтатуса);
КонецЕсли;
Показать
(11) Вчера сидел над этой задачей целый день, удалось определить, что :
- при первом создании номенклатуре, статус не присваивается.
- статус присваивается после второго-третьего проведения.
Если новая позиция, то это условие во время отладки мы не попадаем.
То есть если статус равен N, который возвращается тут:
то мы должны попасть в то условие
- при первом создании номенклатуре, статус не присваивается.
- статус присваивается после второго-третьего проведения.
Если новая позиция, то это условие во время отладки мы не попадаем.
Если ТаблицаРезультат.Количество() Тогда
НоменклатураКОбновлениюСтатуса = ТаблицаРезультат.ВыгрузитьКолонку("Номенклатура");
УстановитьОбновитьСтатусыНоменклатуры(НоменклатураКОбновлениюСтатуса, Статус);
Номенклатура = ОбщегоНазначенияКлиентСервер.СократитьМассив(Номенклатура, НоменклатураКОбновлениюСтатуса);
КонецЕсли;
ПоказатьТо есть если статус равен N, который возвращается тут:
Если ТаблицаРезультат.Количество() И ВернутьПервоеНайденноеЗначение Тогда
Возврат Статус;
КонецЕсли;
то мы должны попасть в то условие
(13) Ахааха) Сейчас скину.
А так я добавил проверку на ссылку :
А так я добавил проверку на ссылку :
Если Не ЭтоГруппа И Не Отказ
И Не ДополнительныеСвойства.Свойство("СТ_НеОбновлятьСтатус") Тогда
Если Ссылка.Пустая() Тогда
ЭтотОбъект.УстановитьСсылкуНового(Справочники.Номенклатура.ПолучитьСсылку());
НоваяСсылка = ПолучитьСсылкуНового();
Справочники.СТ_СтатусыНоменклатуры.ОбновитьСтатусыНоменклатуры(НоваяСсылка);
КонецЕсли;
КонецЕсли;
Показать
(17) Понятно, что нужно смотреть тут
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура,
ВЫБОР
КОГДА Номенклатура.Родитель В ИЕРАРХИИ (&ГруппаПроектные)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ВГруппеПроектных
ПОМЕСТИТЬ ВтНоменклатура
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Ссылка В(&Номенклатура)
И НЕ Номенклатура.ЭтоГруппа
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВтНоменклатура.Номенклатура,
ВЫБОР
КОГДА СТ_НоменклатураВРаспродаже.Номенклатура ЕСТЬ NULL
ТОГДА ЛОЖЬ
ИНАЧЕ ИСТИНА
КОНЕЦ КАК Распродажа,
ВтНоменклатура.ВГруппеПроектных,
ЕСТЬNULL(БлокировкаПродаж.Значение, ЛОЖЬ) КАК БлокировкаПродаж,
ЕСТЬNULL(БлокировкаПроизводства.Значение, ЛОЖЬ) КАК БлокировкаПроизводства,
РеквизитВидНоменклатуры.Значение КАК ВидНоменклатура
ИЗ
ВтНоменклатура КАК ВтНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СТ_НоменклатураВРаспродаже КАК СТ_НоменклатураВРаспродаже
ПО ВтНоменклатура.Номенклатура = СТ_НоменклатураВРаспродаже.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.БИТ_СТ_ЗначенияПериодическихПараметровНоменклатуры.СрезПоследних КАК БлокировкаПродаж
ПО ВтНоменклатура.Номенклатура = БлокировкаПродаж.Номенклатура
И (БлокировкаПродаж.Параметр = ЗНАЧЕНИЕ(ПланВидовХарактеристик.БИТ_СТ_ПериодическиеПараметрыНоменклатуры.БлокировкаПродаж))
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.БИТ_СТ_ЗначенияПериодическихПараметровНоменклатуры.СрезПоследних КАК БлокировкаПроизводства
ПО ВтНоменклатура.Номенклатура = БлокировкаПроизводства.Номенклатура
И (БлокировкаПроизводства.Параметр = ЗНАЧЕНИЕ(ПланВидовХарактеристик.БИТ_СТ_ПериодическиеПараметрыНоменклатуры.БлокировкаПроизводства))
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.БИТ_НСИ_ЗначенияУникальныхРеквизитов КАК РеквизитВидНоменклатуры
ПО ВтНоменклатура.Номенклатура = РеквизитВидНоменклатуры.Объект
И (РеквизитВидНоменклатуры.Реквизит = ЗНАЧЕНИЕ(ПланВидовХарактеристик.БИТ_НСИ_УникальныеРеквизиты.ВидНоменклатуры))
И (РеквизитВидНоменклатуры.Узел = &УзелERP)
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот