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

Сравнение значения из табличной части документа с данными в регистре сведений

Автор dashae, 19 апр 2020, 22:52

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

dashae

Добрый вечер! Есть регистр сведений "Лимиты отходов" (периодический; подчиненный документу). Есть документ "Факт вывоза". В нем есть табличная часть "Вывоз отходов". В табличной части содержится наименование и количество отходов, которое надо вывезти.
Мне нужно сравнить количество отходов из табличной части "Вывоз отходов" с последней записью по данному отходу в регистре сведений. Если значение в документе будет превышать значение, хранящееся в регистре, то документ не должен будет проводиться.
Регистратором для регистра сведений является другой документ.
Уже много всего перепробовала, но ничего не выходит(( Подскажите, пожалуйста.

Из последнего, но ничего не происходит(

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

&НаКлиенте
Процедура ВывозОтходовКоличествоОтходовПриИзменении(Элемент)
   ВывозОтходовКоличествоОтходовПриИзмененииНаСервере();
КонецПроцедуры

bsn-chita

Если предположить что лимиты на каждый день то примерно вот так.

&НаКлиенте
Процедура ПроверитьДокумент(Команда)
ПроверитьДокументНаСервере();
КонецПроцедуры

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

dashae

я так поняла, что надо эту процедуру прописать в кнопке?)
спасибо большое!)

Теги:

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

Рейтинг@Mail.ru

Поиск