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

Получение суммы

Автор Дмитрий1992, 14 мая 2018, 12:33

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

Дмитрий1992

Здравствуйте прошу помощи т.к начал изучать 1с.
Исходные данные есть два документа пусть документ1 и документ2
Документ1 содержит табличную часть в которой есть поле вес.

Документ2 содержит также табличную часть с полем тип ссылка на документ1

Нужно сделать так чтобы при проведении документа2 выдавалась ошибка если сумма по полу вес превышает нужне значение.

Я сделал запросом получение веса но проблема в том что при попытке проведения я получаю только крайнюю запись табличной части документа2 но ведь я могу выбрать 1 и 2 итд как это сделать пока знаний не хватает.

Пробовал ещё сделать так: при изменении табличной части документа2 полученное значение помещал в массив и там эти значения накапливал а при проведении выводил сумму массива но что то мне подсказывает что это решение не гуд)
Подскажите пожалуйста.

buketov.av

Цитата: Дмитрий1992 от 14 мая 2018, 12:33Здравствуйте прошу помощи т.к начал изучать 1с.
Исходные данные есть два документа пусть документ1 и документ2
Документ1 содержит табличную часть в которой есть поле вес.

Документ2 содержит также табличную часть с полем тип ссылка на документ1

Нужно сделать так чтобы при проведении документа2 выдавалась ошибка если сумма по полу вес превышает нужне значение.

Я сделал запросом получение веса но проблема в том что при попытке проведения я получаю только крайнюю запись табличной части документа2 но ведь я могу выбрать 1 и 2 итд как это сделать пока знаний не хватает.

Пробовал ещё сделать так: при изменении табличной части документа2 полученное значение помещал в массив и там эти значения накапливал а при проведении выводил сумму массива но что то мне подсказывает что это решение не гуд)
Подскажите пожалуйста.


что-то я не могу понять, что Вы хотите.
Пишите, чтобы при проведении была проверка, а потом пишете, чтобы при изменении.
так же не понятно, что значит в Вашем понимании "нужное значение"?
а так же Вы не показали нам запрос


Дмитрий1992

Цитата: buketov.av от 14 мая 2018, 12:49
Цитата: Дмитрий1992 от 14 мая 2018, 12:33Здравствуйте прошу помощи т.к начал изучать 1с.
Исходные данные есть два документа пусть документ1 и документ2
Документ1 содержит табличную часть в которой есть поле вес.

Документ2 содержит также табличную часть с полем тип ссылка на документ1

Нужно сделать так чтобы при проведении документа2 выдавалась ошибка если сумма по полу вес превышает нужне значение.

Я сделал запросом получение веса но проблема в том что при попытке проведения я получаю только крайнюю запись табличной части документа2 но ведь я могу выбрать 1 и 2 итд как это сделать пока знаний не хватает.

Пробовал ещё сделать так: при изменении табличной части документа2 полученное значение помещал в массив и там эти значения накапливал а при проведении выводил сумму массива но что то мне подсказывает что это решение не гуд)
Подскажите пожалуйста.


что-то я не могу понять, что Вы хотите.
Пишите, чтобы при проведении была проверка, а потом пишете, чтобы при изменении.
так же не понятно, что значит в Вашем понимании "нужное значение"?
а так же Вы не показали нам запрос


Модуль объекта.Документ Рейс

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
   
   
   //Получение тоннажа

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

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

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

KOI8-R

...
   ЗапросТоннаж.УстановитьПараметр("Ссылка",ТранспортноеСредство.Ссылка);
   ВыборкаМашина = ЗапросТоннаж.Выполнить().Выбрать();
   ТоннажАвтомобиля = 0;
   Пока ВыборкаМашина.Следующий() Цикл
        ТоннажАвтомобиля = ТоннажАвтомобиля + ВыборкаМашина.Тоннаж;
      //Сообщить ("Тоннаж" + " = " + ВыборкаМашина.Тоннаж + " кг ");
   КонецЦикла;
   
   
   //Получение Суммы
   
   МассивЗаявок = Новый Массив;

   Для Каждого Стр Из Заявки Цикл
      Если Стр.Заявка = истина Тогда
        МассивЗаявок.Добавить(Стр.Заявка);
      КонецЕсли;
   КонецЦикла;
   

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

Дмитрий1992

Большое спасибо за ответ. Буду пробовать
Тоже думал и делал массив, правда думал что возможно через запрос но не выходило.

Добавлено: 14 мая 2018, 17:40


Цитата: KOI8-R от 14 мая 2018, 15:32
...
   ЗапросТоннаж.УстановитьПараметр("Ссылка",ТранспортноеСредство.Ссылка);
   ВыборкаМашина = ЗапросТоннаж.Выполнить().Выбрать();
   ТоннажАвтомобиля = 0;
   Пока ВыборкаМашина.Следующий() Цикл
        ТоннажАвтомобиля = ТоннажАвтомобиля + ВыборкаМашина.Тоннаж;
      //Сообщить ("Тоннаж" + " = " + ВыборкаМашина.Тоннаж + " кг ");
   КонецЦикла;
   
   
   //Получение Суммы
   
   МассивЗаявок = Новый Массив;

   Для Каждого Стр Из Заявки Цикл
      Если Стр.Заявка = истина Тогда
        МассивЗаявок.Добавить(Стр.Заявка);
      КонецЕсли;
   КонецЦикла;
   

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


Ошибка Преобразование значения к типу число не может быть выполнено. В (ОбщийТоннаж=ОбщийТоннажПоЗаявкам+Выборка.Вес)

KOI8-R

Цитата: Дмитрий1992 от 14 мая 2018, 15:41
Ошибка Преобразование значения к типу число не может быть выполнено. В (ОбщийТоннаж=ОбщийТоннажПоЗаявкам+Выборка.Вес)
Отладчик в помощь.
Ставьте точку на этой строке и проверяйте, где косяк.
Проверьте заодно имена переменных, так как вы их меняли. Я вижу например ВыборкаВес но не вижу просто Выборка.

Дмитрий1992

Цитата: KOI8-R от 14 мая 2018, 17:44
Цитата: Дмитрий1992 от 14 мая 2018, 15:41
Ошибка Преобразование значения к типу число не может быть выполнено. В (ОбщийТоннаж=ОбщийТоннажПоЗаявкам+Выборка.Вес)
Отладчик в помощь.
Ставьте точку на этой строке и проверяйте, где косяк.
Проверьте заодно имена переменных, так как вы их меняли. Я вижу например ВыборкаВес но не вижу просто Выборка.

Да конечно.
Просто Выборки небыло.

AIFrame

Цитата: KOI8-R от 14 мая 2018, 15:32//Получение Суммы
   
   МассивЗаявок = Новый Массив;

   Для Каждого Стр Из Заявки Цикл
      Если Стр.Заявка = истина Тогда
        МассивЗаявок.Добавить(Стр.Заявка);
      КонецЕсли;
   КонецЦикла;
Нужно избегать циклов там, где без них можно обойтись. Ненативная итерация занимает очень много времени.
МассивЗаявок = Новый СписокЗначений;
МассивЗаявок.ЗагрузитьЗначения(Заявки.ВыгрузитьКолонку("Заявка"));

Цитата: Дмитрий1992 от 14 мая 2018, 15:41ВыборкаВес = ЗапросСумма.Выполнить().Выбрать();
   ОбщийТоннажПоЗаявкам = 0;
   Пока ВыборкаВес.Следующий() Цикл
      ОбщийТоннажПоЗаявкам = ОбщийТоннажПоЗаявкам + ВыборкаВес.Вес;
      //Сообщить ("Суммарный вес" + " = " + ВыборкаВес.Вес + " кг ");
   КонецЦикла;

ТЧСуммы = ЗапросСумма.Выполнить().Выгрузить();
ОбщийТоннажПоЗаявкам  = ТЧСуммы.Итог("Вес");


Дмитрий1992

Цитата: AIFrame от 15 мая 2018, 02:00
Цитата: KOI8-R от 14 мая 2018, 15:32//Получение Суммы
   
   МассивЗаявок = Новый Массив;

   Для Каждого Стр Из Заявки Цикл
      Если Стр.Заявка = истина Тогда
        МассивЗаявок.Добавить(Стр.Заявка);
      КонецЕсли;
   КонецЦикла;
Нужно избегать циклов там, где без них можно обойтись. Ненативная итерация занимает очень много времени.
МассивЗаявок = Новый СписокЗначений;
МассивЗаявок.ЗагрузитьЗначения(Заявки.ВыгрузитьКолонку("Заявка"));

Цитата: Дмитрий1992 от 14 мая 2018, 15:41ВыборкаВес = ЗапросСумма.Выполнить().Выбрать();
   ОбщийТоннажПоЗаявкам = 0;
   Пока ВыборкаВес.Следующий() Цикл
      ОбщийТоннажПоЗаявкам = ОбщийТоннажПоЗаявкам + ВыборкаВес.Вес;
      //Сообщить ("Суммарный вес" + " = " + ВыборкаВес.Вес + " кг ");
   КонецЦикла;

ТЧСуммы = ЗапросСумма.Выполнить().Выгрузить();
ОбщийТоннажПоЗаявкам  = ТЧСуммы.Итог("Вес");


Все работает большое спасибо.

Кирилл Иванович

Не знаю даже как помочь, но знаю одного спеца по этой теме. У него даже свой сайт есть. Просто пишешь ему на электронную почту, она есть внизу сайта, или на телефон позвони. Вот сайт его - pro1c-alfa.ru
Парень реально шарит в этой теме!

Теги: Сумма 

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

Рейтинг@Mail.ru

Поиск