31 августа 2024 в 14:03:47
(11 недель 6 дней 2 часа назад)
122549
V8.x Управление торговлей
29.05.2017 09:40:30
Текст задания
Приветствую!
Процедура обходит табличную часть и проверяет остатки по организациям. Делает это для каждой строки. Нужно загнать всю таблицу в запрос, чтобы делать это только 1 раз. Как это работает: Товар может передаваться только от 2-х ИП в ООО. с ООО не передаются никуда. НельзяПередавать - не передаются.
Процедура ПроверитьОстаткиОрганизаций(Отказ)
сч=0;
Для Каждого ст из Товары Цикл
сч=сч+1;
Если НельзяПередавать(ст.Номенклатура) Тогда
СвободныеПоОрганизации=проверкаСвОстатков(ст.Номенклатура, Организация);
Если ст.Количество>СвободныеПоОрганизации Тогда
Сообщить("В строке № "+сч+" по номенклатуре "+ст.Номенклатура+
" не хватает "+СвободныеПоОрганизации+" шт.");
отказ=Истина;
КонецЕсли;
Иначе
СвободныеПоОрганизации = 0;
СвободныеПоОрганизацииТК = проверкаСвОстатков(ст.Номенклатура, получитьОрганизациюПоИНН("7715970514"));
СвободныеПоОрганизацииПэтлак = проверкаСвОстатков(ст.Номенклатура, получитьОрганизациюПоИНН("9715251873"));
СвободныеПоОрганизацииДенис = проверкаСвОстатков(ст.Номенклатура, получитьОрганизациюПоИНН("771401697419"));
СвободныеПоОрганизацииНастя = проверкаСвОстатков(ст.Номенклатура, получитьОрганизациюПоИНН("771506834101"));
Если Организация = получитьОрганизациюПоИНН("7715970514") Тогда //ТК
СвободныеПоОрганизации = СвободныеПоОрганизацииТК+СвободныеПоОрганизацииДенис+СвободныеПоОрганизацииНастя;
ИначеЕсли Организация = получитьОрганизациюПоИНН("9715251873") Тогда //Пэтлак
СвободныеПоОрганизации = СвободныеПоОрганизацииПэтлак+СвободныеПоОрганизацииДенис+СвободныеПоОрганизацииНастя;
Иначе
СвободныеПоОрганизации = СвободныеПоОрганизацииДенис+СвободныеПоОрганизацииНастя;
КонецЕсли;
Если ст.Количество>СвободныеПоОрганизации Тогда
Сообщить("В строке № "+сч+" по номенклатуре "+ст.Номенклатура+
" не хватает "+(ст.Количество-СвободныеПоОрганизации)+" шт.");
отказ=Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция получитьОрганизациюПоИНН(ИНН)
Возврат Справочники.Организации.НайтиПоРеквизиту("ИНН",ИНН);
КонецФункции
Функция проверкаСвОстатков(Номенклатура, Организация)
ост=0;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|ТоварыОрганизацийОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыОрганизаций.Остатки КАК ТоварыОрганизацийОстатки
|ГДЕ
| ТоварыОрганизацийОстатки.Организация = &Организация
| И ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры.Номенклатура = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Организация", Организация);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
ттт = Выборка.Следующий();
Если ттт Тогда
ост= Выборка.КоличествоОстаток;
Иначе
ост = 0;
КонецЕсли;
Возврат ост-ОстатокПоТоварамВОтгрузке(Номенклатура, Организация);
КонецФункции
Функция ОстатокПоТоварамВОтгрузке(Номенклатура, Организация)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|ТоварыКОтгрузке.ВРезерве КАК ВРезерве,
|ТоварыКОтгрузке.КОтгрузке КАК КОтгрузке
|ИЗ
|РегистрНакопления.ТоварыКОтгрузке КАК ТоварыКОтгрузке
|ГДЕ
| ТоварыКОтгрузке.Номенклатура = &Номенклатура
| И ТоварыКОтгрузке.ДокументОтгрузки.Организация = &Организация
| И ТоварыКОтгрузке.ДокументОтгрузки.ДатаОтгрузки > &ДатаОтгрузки
|ИТОГИ
| СУММА(ВРезерве),
| СУММА(КОтгрузке)
|ПО
| ОБЩИЕ";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ДатаОтгрузки", ТекущаяДата());
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
ллл = Выборка.Следующий();;
Если ллл Тогда
Возврат Выборка.ВРезерве + Выборка.КОтгрузке;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
Функция НельзяПередавать(Номенклатура)
грвита=Справочники.Номенклатура.НайтиПоНаименованию("Вита",истина);
грДомОбеды=Справочники.Номенклатура.НайтиПоНаименованию("Домашние обеды",истина);
Возврат Номенклатура.ПринадлежитЭлементу(грвита) или Номенклатура.ПринадлежитЭлементу(грДомОбеды);
КонецФункции