Расчет общего объема и веса номенклатуры

1. user1008893 29.12.18 08:15 Сейчас в теме
Есть справочник Шаблоны Схем Пакования,там есть пакеты в которых есть объем и вес. Надо чтобы в справочнике номенклатура считался объем и вес со всех пакетов.
ERP Дописанная. Подготовила вот такой запрос:
ВЫБРАТЬ
	ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Длина,
	ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Ширина,
	ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Высота,
	ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Вес,
	ШаблоныСхемПакования.Владелец.Наименование,
	ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Объем
ИЗ
	Справочник.ШаблоныСхемПакования.ТЧСостав КАК ШаблоныСхемПакованияТЧСостав
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ШаблоныСхемПакования КАК ШаблоныСхемПакования
		ПО ШаблоныСхемПакованияТЧСостав.Ссылка = ШаблоныСхемПакования.Ссылка
Показать

Подскажите пожалуйста,как это выполнить?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Dmitrij-2 45 29.12.18 08:37 Сейчас в теме
ВЫБРАТЬ
СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Длина),
СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Ширина),
СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Высота),
СУММА( ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Вес),
ШаблоныСхемПакованияТЧСостав.Ссылка.Владелец,
СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Объем)
ИЗ
Справочник.ШаблоныСхемПакования.ТЧСостав КАК ШаблоныСхемПакованияТЧСостав
ГРУППИРОВАТЬ ПО
ШаблоныСхемПакования.Владелец

Наверное как-то так, если я правильно понимаю, что владелец - это номенклатура
3. user1008893 29.12.18 08:44 Сейчас в теме
(2)Сделала вот так. Но неправильно считает. Должно быть 2,а он пишет 0,02
ЗапросОбъем=Новый Запрос;
ЗапросОбъем.Текст= "ВЫБРАТЬ
                   |	СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Вес) КАК Вес,
                   |	ШаблоныСхемПакования.Владелец.Наименование,
                   |	СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Объем) КАК Объем
                   |ИЗ
                   |	Справочник.ШаблоныСхемПакования.ТЧСостав КАК ШаблоныСхемПакованияТЧСостав
                   |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ШаблоныСхемПакования КАК ШаблоныСхемПакования
                   |		ПО ШаблоныСхемПакованияТЧСостав.Ссылка = ШаблоныСхемПакования.Ссылка
                   |ГДЕ
                   |	ШаблоныСхемПакования.Владелец.Наименование = &Наименование
                   |
                   |СГРУППИРОВАТЬ ПО
                   |	ШаблоныСхемПакования.Владелец.Наименование" ;
 ЗапросОбъем.УстановитьПараметр("Наименование", Ссылка);
	          РезультатЗапроса = ЗапросОбъем.Выполнить();
   ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		 Объем=ВыборкаДетальныеЗаписи.Объем;	
		КонецЦикла;    
	
КонецПроцедуры
Показать
5. vovan_victory 63 29.12.18 09:23 Сейчас в теме
(3)Группировать по наименованию плохая идея.

Думаю так надо
|СГРУППИРОВАТЬ ПО
|    ШаблоныСхемПакования.Владелец
user1008893; +1 Ответить
6. user1008893 29.12.18 09:26 Сейчас в теме
(5)Поменяла и нашла вот такую ошибку
ЗапросОбъем=Новый Запрос;
ЗапросОбъем.Текст= "ВЫБРАТЬ
                   |	СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Вес) КАК Вес,
                   |	ШаблоныСхемПакования.Владелец.Наименование,
                   |	СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Объем) КАК Объем
                   |ИЗ
                   |	Справочник.ШаблоныСхемПакования.ТЧСостав КАК ШаблоныСхемПакованияТЧСостав
                   |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ШаблоныСхемПакования КАК ШаблоныСхемПакования
                   |		ПО ШаблоныСхемПакованияТЧСостав.Ссылка = ШаблоныСхемПакования.Ссылка
                   |ГДЕ
                   |	ШаблоныСхемПакования.Владелец.Наименование = &Наименование
                   |
                   |СГРУППИРОВАТЬ ПО
                   |	ШаблоныСхемПакования.Владелец" ;
 ЗапросОбъем.УстановитьПараметр("Наименование", Ссылка);
	          Выборка = ЗапросОбъем.Выполнить().Выбрать();
   //ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
	       Элемент = Выборка.Ссылка.ПолучитьОбъект();
		   Элемент.Объем= Выборка.Объем;
			// ЭлементыФормы.Объем=ВыборкаДетальныеЗаписи.Объем;	
		// ЭлементыФормы.Вес=ВыборкаДетальныеЗаписи.Вес;
	 КонецЦикла;    
	
КонецПроцедуры
Показать
Прикрепленные файлы:
4. user1008893 29.12.18 08:52 Сейчас в теме
(2)Неправильно присваиваю значение.
7. vovan_victory 63 29.12.18 09:29 Сейчас в теме
(4)
А вот это как надо понять?
ЗапросОбъем.УстановитьПараметр("Наименование", Ссылка)

Что Вы ожидали получить после такого условия?
8. user1008893 29.12.18 09:31 Сейчас в теме
(7)а как правильно то написать? Я хотела чтобы он сравнивал наименования
9. vovan_victory 63 29.12.18 09:32 Сейчас в теме
(8)
       |ГДЕ
                   |    ШаблоныСхемПакования.Владелец = &Ссылка


ЗапросОбъем.УстановитьПараметр("Ссылка", Ссылка)
user1008893; +1 Ответить
10. user1008893 29.12.18 09:36 Сейчас в теме
(9)Спасибо,ошибка пропала,но не могу записать. Если делаю через элементформы,то пишет что недоступно для записи
12. vovan_victory 63 29.12.18 09:38 Сейчас в теме
(10)код на выполнение записи покажите
13. user1008893 29.12.18 09:39 Сейчас в теме
(12)
   Пока Выборка.Следующий() Цикл
           Элемент = Выборка.Ссылка.ПолучитьОбъект();
           Элемент.Объем= Выборка.Объем;
            // ЭлементыФормы.Объем=ВыборкаДетальныеЗаписи.Объем;    
        // ЭлементыФормы.Вес=ВыборкаДетальныеЗаписи.Вес;
     КонецЦикла;    
    
КонецПроцедуры
15. vovan_victory 63 29.12.18 09:42 Сейчас в теме
(13)в это коде не хватает
Элемент.Записать();
16. user1008893 29.12.18 09:45 Сейчас в теме
(15){Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(183)}: Поле объекта не обнаружено (Ссылка)
Элемент = Выборка.Ссылка.ПолучитьОбъект();
19. vovan_victory 63 29.12.18 09:46 Сейчас в теме
17. vovan_victory 63 29.12.18 09:45 Сейчас в теме
(13)И, судя по
Выборка.Ссылка.ПолучитьОбъект();
в запросе Вы должны выбрать поле ссылка

"ВЫБРАТЬ
                   |    СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Вес) КАК Вес,
                   |    ШаблоныСхемПакования.Владелец.Наименование,
                   |    ШаблоныСхемПакования.Ссылка, //ВОТ ЭТОЙ СТРОКИ НЕ ХВАТАЕТ
                   |    СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Объем) КАК Объем
                   |ИЗ
                   |    Справочник.ШаблоныСхемПакования.ТЧСостав КАК ШаблоныСхемПакованияТЧСостав
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ШаблоныСхемПакования КАК ШаблоныСхемПакования
                   |        ПО ШаблоныСхемПакованияТЧСостав.Ссылка = ШаблоныСхемПакования.Ссылка
                   |ГДЕ
                   |    ШаблоныСхемПакования.Владелец.Наименование = &Наименование
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    ШаблоныСхемПакования.Владелец"
Показать
18. user1008893 29.12.18 09:46 Сейчас в теме
(17)
ЗапросОбъем=Новый Запрос;
ЗапросОбъем.Текст= "ВЫБРАТЬ
                   |	СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Вес) КАК Вес,
                   |	ШаблоныСхемПакования.Владелец,
                   |	СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Объем) КАК Объем
                   |ИЗ
                   |	Справочник.ШаблоныСхемПакования.ТЧСостав КАК ШаблоныСхемПакованияТЧСостав
                   |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ШаблоныСхемПакования КАК ШаблоныСхемПакования
                   |		ПО ШаблоныСхемПакованияТЧСостав.Ссылка = ШаблоныСхемПакования.Ссылка
                   |ГДЕ
                   |	ШаблоныСхемПакования.Владелец = &Ссылка
                   |
                   |СГРУППИРОВАТЬ ПО
                   |	ШаблоныСхемПакования.Владелец" ;
 ЗапросОбъем.УстановитьПараметр("Ссылка", Ссылка);
	          Выборка = ЗапросОбъем.Выполнить().Выбрать();
   //ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл    
	       Элемент = Выборка.Ссылка.ПолучитьОбъект();
		   Элемент.Объем= Выборка.Объем;
		   Элемент.Записать();
			// ЭлементыФормы.Объем=ВыборкаДетальныеЗаписи.Объем;	
		// ЭлементыФормы.Вес=ВыборкаДетальныеЗаписи.Вес;
	 КонецЦикла;    
	
КонецПроцедуры
Показать

Сейчас у меня вот так
20. user1008893 29.12.18 09:50 Сейчас в теме
(17)добавила ссылку,теперь объем не находит
21. vovan_victory 63 29.12.18 09:52 Сейчас в теме
22. user1008893 29.12.18 09:56 Сейчас в теме
(21){Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(186)}: Поле объекта не обнаружено (Объем)
Элемент.Объем= Выборка.Объем;
23. vovan_victory 63 29.12.18 09:57 Сейчас в теме
(20)Объем у Вас в каком справочнике ? В Справочник.ШаблоныСхемПакования? Или Справочник.ШаблоныСхемПакования.Владелец?

Если у владельца, то
Элемент = Выборка.Владелец.ПолучитьОбъект();
Элемент.Объем= Выборка.Объем;
Элемент.Записать();
user1008893; +1 Ответить
24. user1008893 29.12.18 10:20 Сейчас в теме
(23)Так все работает,но срабатывает со второго раза. Не могу понять почему так. Пробовала вставить ког в процедуру перед открытием все равно так же
25. vovan_victory 63 29.12.18 10:37 Сейчас в теме
(24)не понятно, что значит со второго раза? И в чем суть задумки?
26. user1008893 29.12.18 10:38 Сейчас в теме
(25)то есть если я впервый раз захожу в какую нибудь номенклатуру,то не срабатывает. Если еще раз зайду то сработает.
27. vovan_victory 63 29.12.18 10:46 Сейчас в теме
(26)При первом входе происходит обработка и запись данных. На сколько я понял, Вы свою доработку выставили в процедуру перед открытием, а это событие происходит уже после того как данные получены на сервере и переданы на клиента. Чтобы увидеть актуальные данные сразу, Вам необходимо выполнять свой код в процедуре "ПриСозданииНаСервере".
28. user1008893 29.12.18 10:48 Сейчас в теме
(27)что то не нашла ее,Создать новую?
30. vovan_victory 63 29.12.18 10:58 Сейчас в теме
(28)
Смотрим в модуль формы.
Прикрепленные файлы:
31. user1008893 29.12.18 11:02 Сейчас в теме
(30)Создала процедуру,вставила туда весь код. Теперь в процедуре перед отрытием или при открытии,что надо написать?
32. vovan_victory 63 29.12.18 11:06 Сейчас в теме
(31)Если ее нет, то смотрим какие процедуры из тех, что срабатывают до "ПриСозданииНаСервер" есть(29). Если нет ни каких, то конечно, создаем.
33. user1008893 29.12.18 11:07 Сейчас в теме
(32)создала,теперь надо на клиенте получить
34. vovan_victory 63 29.12.18 11:09 Сейчас в теме
(33)Нет. Все действия(получение и запись данных) ведутся только на сервере. На клиенте данные только просматриваюся. Вставляйте свой код в созданную процедуру и все. Больше ни чего не надо
35. user1008893 29.12.18 11:12 Сейчас в теме
(34)у меня у формы нет такого события
Прикрепленные файлы:
36. vovan_victory 63 29.12.18 11:16 Сейчас в теме
(35)ПриСозданииНаСервере - это серверная часть. Ее там не будет.
Прикрепленные файлы:
37. user1008893 29.12.18 11:18 Сейчас в теме
(36)
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЗапросОбъем=Новый Запрос;
ЗапросОбъем.Текст= "ВЫБРАТЬ
|	СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Вес) КАК Вес,
|	ШаблоныСхемПакования.Владелец,
|	СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Объем) КАК Объем,
|	ШаблоныСхемПакования.Ссылка
|ИЗ
|	Справочник.ШаблоныСхемПакования.ТЧСостав КАК ШаблоныСхемПакованияТЧСостав
|	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ШаблоныСхемПакования КАК ШаблоныСхемПакования
|	ПО ШаблоныСхемПакованияТЧСостав.Ссылка = ШаблоныСхемПакования.Ссылка
|ГДЕ
|	ШаблоныСхемПакования.Владелец = &Ссылка
|
|СГРУППИРОВАТЬ ПО
|	ШаблоныСхемПакования.Владелец,
|	ШаблоныСхемПакования.Ссылка" ;
ЗапросОбъем.УстановитьПараметр("Ссылка", Ссылка);
Выборка = ЗапросОбъем.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл 
Элемент = Выборка.Владелец.ПолучитьОбъект();
Элемент.Объем= Выборка.Объем;
Элемент.Вес=Выборка.Вес;
Элемент.Записать();
КонецЦикла;	
КонецПроцедуры
Показать

Ничего не срабатывает
38. vovan_victory 63 29.12.18 11:22 Сейчас в теме
(37)Есть подозрение, что Вы процедуру создали руками, а не средствами платформы...Нужно сделать средствами платформы(смотрим скрины с предыдущего поста)
39. user1008893 29.12.18 11:27 Сейчас в теме
(38)там нет такой процедуры
40. vovan_victory 63 29.12.18 11:32 Сейчас в теме
(39)Как это нет? Внимательно смотрите где Вы ищите. Это должен быть МОДУЛЬ ФОРМЫ, а не модуль объекта
Прикрепленные файлы:
42. vovan_victory 63 29.12.18 11:36 Сейчас в теме
(39)А что за конфигурация у Вас? Формы управляемые или обычные?
43. user1008893 29.12.18 11:37 Сейчас в теме
(42)1С:Предприятие 8.3 (8.3.13.1644)
3.0 ERP» (3.0.3.19)
обычные формы
Прикрепленные файлы:
44. vovan_victory 63 29.12.18 11:40 Сейчас в теме
(43)Понятно. Тогда пробуйте "ПередОткрытием"
45. user1008893 29.12.18 11:41 Сейчас в теме
(44)тоже только со второго раза
11. vovan_victory 63 29.12.18 09:37 Сейчас в теме
(8)Наименование сравнивать как минимум не корректно.... В справочнике могут быть записи наподобие: "Тара стекло", "тара стекло", " тара Стекло", "Тара стекло", "Тара Стекло " и при условии поиска по наименованию "Тара стекло" в результате окажется только 1 строка. А если еще и это наименование пользователь случайно изменит(например поставит лишний пробел), то в результате запроса будет вообще 0
14. user1008893 29.12.18 09:40 Сейчас в теме
(11)у меня в шаблоне,автоматически номенклатура сама подставляется
41. user1008893 29.12.18 11:35 Сейчас в теме
(40)нет вот
Прикрепленные файлы:
46. vovan_victory 63 29.12.18 11:42 Сейчас в теме
(41)Как Вы сделали доработку? покажите
47. user1008893 29.12.18 11:43 Сейчас в теме
(46)
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
	
	 ЗапросОбъем=Новый Запрос;
ЗапросОбъем.Текст= "ВЫБРАТЬ
|	СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Вес) КАК Вес,
|	ШаблоныСхемПакования.Владелец,
|	СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Объем) КАК Объем,
|	ШаблоныСхемПакования.Ссылка
|ИЗ
|	Справочник.ШаблоныСхемПакования.ТЧСостав КАК ШаблоныСхемПакованияТЧСостав
|	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ШаблоныСхемПакования КАК ШаблоныСхемПакования
|	ПО ШаблоныСхемПакованияТЧСостав.Ссылка = ШаблоныСхемПакования.Ссылка
|ГДЕ
|	ШаблоныСхемПакования.Владелец = &Ссылка
|
|СГРУППИРОВАТЬ ПО
|	ШаблоныСхемПакования.Владелец,
|	ШаблоныСхемПакования.Ссылка" ;
ЗапросОбъем.УстановитьПараметр("Ссылка", Ссылка);
Выборка = ЗапросОбъем.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл 
Элемент = Выборка.Владелец.ПолучитьОбъект();
Элемент.Объем= Выборка.Объем;
Элемент.Вес=Выборка.Вес;
Элемент.Записать();
КонецЦикла;	
Показать
48. vovan_victory 63 29.12.18 11:45 Сейчас в теме
(47) Процедура ПередОткрытием уже была или Вы ее добавили?
49. user1008893 29.12.18 11:45 Сейчас в теме
50. vovan_victory 63 29.12.18 11:47 Сейчас в теме
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
//Перед типовым кодом
ПосчитатьОбъемы(Ссылка);


//Далее типовой код
...................
...............


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


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

Пока Выборка.Следующий() Цикл 
Элемент = Выборка.Владелец.ПолучитьОбъект();
Элемент.Объем= Выборка.Объем;
Элемент.Вес=Выборка.Вес;
Элемент.Записать();
КонецЦикла;	
КонецПроцедуры
Показать
user1008893; +1 Ответить
51. user1008893 29.12.18 11:50 Сейчас в теме
(50) тоже только со второго раза
52. user1008893 29.12.18 11:53 Сейчас в теме
(50)прошла отладчиком,он заходит процедуру и все находит,просто не записывает
А второй раз не заходит процедуру и все записывает
53. vovan_victory 63 29.12.18 11:57 Сейчас в теме
(52)Как это не записывает?
Если бы не записывал, то выходила бы ошибка. Возьмите и второй раз остановитесь в отладчике перед выполнением Вашей процедуры и посмотрите какие там будут данные измененные или нет.
54. user1008893 29.12.18 12:00 Сейчас в теме
(53)он в первый раз 2 раза проходит цикл,а второй раз только 1 раз
55. vovan_victory 63 29.12.18 12:01 Сейчас в теме
56. user1008893 29.12.18 12:01 Сейчас в теме
(55)ну в смысле процедуру,что то я запуталась уже
57. vovan_victory 63 29.12.18 12:06 Сейчас в теме
(56)Сейчас уже точно не вспомню что там в не управляемых формах, но, по моему в модуле объекта было такое событие "ПриСоздании". Перенесите свой обработчик туда
58. user1008893 29.12.18 12:08 Сейчас в теме
(57)нет
Прикрепленные файлы:
59. user1008893 29.12.18 12:10 Сейчас в теме
(57)короче в первый раз он проходит по всем процедурам которые вообще участвуют. Вот,а второй раз просто проходит,то что мы написали и все
60. timeforlive 15 01.01.19 10:57 Сейчас в теме
Выполните группировку вложенными запросами, чтобы подготовить данные, а затем в финальном запросе делайте соединение.
61. meriferi 06.01.19 22:20 Сейчас в теме
Используй "представление"
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот