1С программирование вопрос по массиву и соответствию

1. user2118967 13.12.24 23:08 Сейчас в теме
Добрый вечер, Прошу помочь, я только начал учиться 1С прогр. и для меня все оказалось сложно по сравнению с Паскаль
Не могу понять время жизни массива и Соответствия и могу ли я в них менять значения. Задача такая у меня есть таблица Реализации который я заполняю (товар,тип_платежа,сумм и т.д), потом хочу получить по каждому товару Сумму отдельно по налу безналу и прочее,
Для начало создаю Массив и в него в Соответствие для каждого товара (по одному товару могут быть несколько операции)
МассивСумм =Новый Массив;
	Товар = "";
	Для каждого Строка из Объект.Реализация Цикл
		Если Товар <> Строка.Товар Тогда
			Товар = Строка.Товар;

			СуммыТоваров = Новый Соответствие;
		        СуммыТоваров.Вставить("Товар",Товар);	
		        СуммыТоваров.Вставить("ИтогоСуммаНал",0);	
		        СуммыТоваров.Вставить("ИтогоСуммаБН",0);	
		        СуммыТоваров.Вставить("ИтогоСуммаБНИ",0);	
		        СуммыТоваров.Вставить("/ИтогоСуммаСерт",0);	
		        СуммыТоваров.Вставить("ИтогоСуммаПК",0);	
			МассивСумм.Добавить(СуммыТоваров);
		КонецЕсли;	
	КонецЦикла;
Показать


Далее я питаюсь обратится к элементу массива и в нем изменить значения Соответствия по ключу

	Для каждого Строка из Объект.Реализация Цикл
		
		Если Товар <> Строка.Товар Тогда
			Для сч=0 по МассивСумм.ВГраница() Цикл
				Если МассивСумм[сч]["Товар"] = Строка.Товар Тогда
					ИндексМассива = сч;
					Прервать;
				КонецЕсли;
		        КонецЦикла;
		КонецЕсли;
		
		Сумма = МассивСумм[ИндексМассива];
		НовСумма = 0;
		Если Строка.ТипПлатежа = "Наличные" Тогда
			НовСумма = Сумма["ИтогоСуммаНал"];
			НовСумма = НовСумма + Строка.Итого;
			Сумма.Вставить("ИтогоСуммаНал",НовСумма);
			//Сумма[ИтогоСуммаНал] = Сумма["ИтогоСуммаНал"]	+ Строка.Итого;
		ИначеЕсли Строка.ТипПлатежа ="Безналичные" Тогда
			Если Строка.МетодПлатежа = "БезналичныеВКинотеатре" Тогда
					НовСумма = Сумма["ИтогоСуммаБН"];
					НовСумма = НовСумма + Строка.Итого;
					Сумма.Вставить("ИтогоСуммаБН",НовСумма);

				//Сумма["ИтогоСуммаБН"] = Сумма["ИтогоСуммаБН"] + Строка.Итого;
Показать


Сперва питался как закомментировано, потом написал по другому, но в конце в массиве все равно все суммы нулевые
По теме из базы знаний
Найденные решения
5. SlavaKron 14.12.24 11:33 Сейчас в теме
Скорее всего, поля Строка.ТипПлатежа и Строка.МетодПлатежа не строкового типа.
user2118967; user1936660; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. -AI- 14.12.24 11:16 Сейчас в теме
(1)
1) вместо соответствия используй структуру
2) как уже сказали - используй отладчик.
может код правильный, а проблема с входными данными....
4. SlavaKron 14.12.24 11:24 Сейчас в теме
(1) Код хоть и кривой, но навскидку должен работать. Задуманное проще решить через отдельную таблицу значений.
// создаем служебную таблицу значений для итогов по товарам
ТипЧисло = Новый ОписаниеТипов("Число");

ТЗ_Итоги = Новый ТаблицаЗначений;
ТЗ_Итоги.Колонки.Добавить("Товар");
ТЗ_Итоги.Колонки.Добавить("ИтогоСуммаНал", ТипЧисло);
ТЗ_Итоги.Колонки.Добавить("ИтогоСуммаБН", ТипЧисло);
ТЗ_Итоги.Колонки.Добавить("ИтогоСуммаБНИ", ТипЧисло);
ТЗ_Итоги.Колонки.Добавить("ИтогоСуммаСерт", ТипЧисло);
ТЗ_Итоги.Колонки.Добавить("ИтогоСуммаПК", ТипЧисло);

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

// сворачиваем итоги
ТЗ_Итоги.Свернуть("Товар", "ИтогоСуммаНал,ИтогоСуммаБН,ИтогоСуммаБНИ,ИтогоСуммаСерт,ИтогоСуммаПК");
Показать
15. user2118967 14.12.24 20:11 Сейчас в теме
(4) Буду знать что можно создавать временную таблицу значении

Что значит ТЗ_Итоги.Свернуть - как я предполагаю он группирует по первому переменному и суммирует перечисленные колонки по второму ?
16. SlavaKron 14.12.24 20:21 Сейчас в теме
(15)
группирует по первому переменному и суммирует перечисленные колонки по второму

Да.
Во встроенном синтаксис-помощнике подробно написано про этот метод таблицы значений.
Почти про любой платформенный метод/свойство можно узнать, если в тексте модуля установить курсор в интересующем слове и нажать Ctrl+F1, тут главное понимать к какому объекту относится метод/свойство.
17. user2118967 14.12.24 20:23 Сейчас в теме
(4)
ТаблицаЗначений;


Прочитал справку

Я так долго ломал голову как это сделать правильно!
А ларчик так просто открывался!
мой вариант хоть и рабочый и после вашего замечания переписал и получился довольно компактным, но с Таблицами значении это лучший вариант!


Спасибо большое!
2. user1936660 14.12.24 10:28 Сейчас в теме
(1)
все оказалось сложно по сравнению с Паскаль
А в паскале ты тоже без отладчика трудился? Ну точки останова там, выполнение по шагам. Или сразу телепатию включал?
7. user2118967 14.12.24 15:24 Сейчас в теме
(2) Я писал, я 1С изучаю всего 2,5 месяца, и не со всеми инструментами знаком, Но учитывая ваш гневный ответ я посмотрю как это надо делать! спасибо!
5. SlavaKron 14.12.24 11:33 Сейчас в теме
Скорее всего, поля Строка.ТипПлатежа и Строка.МетодПлатежа не строкового типа.
user2118967; user1936660; +2 Ответить
8. user2118967 14.12.24 15:33 Сейчас в теме
(5) Вы имеете ввиду сюда
Если Строка.ТипПлатежа = "Наличные" Тогда
В место "Наличные" нужно сравнивать с индексам перечисления
10. user2118967 14.12.24 16:21 Сейчас в теме
(5) В отличии от других которые только делают замечание что я полез в бассейн не умея плавать вы кинули мне спасательный круг ))
Спасибо!
Все работает!
11. user2107191 14.12.24 16:23 Сейчас в теме
(10)
кинули мне спасательный круг
как будто вмешиваться в эволюционный естественный отбор - это что-то хорошее...
13. user2118967 14.12.24 16:35 Сейчас в теме
(11) Не могу не согласится, "Не каждый друг кто из болота тянет",
Но все ровно всем спасибо за участие!
6. user2118967 14.12.24 15:22 Сейчас в теме
Ответить, да в таблице у них тип перечисления
9. user2107191 14.12.24 15:49 Сейчас в теме
(6) То есть круглое с квадратным сравниваешь, и не заморачиваешься. Ну-ну.
12. user2118967 14.12.24 16:31 Сейчас в теме
(9) я думаю и вы не сразу начали отличать сыску от соски)
Мне пока что сложновато привыкнут к объектом в 1с, то что в таблице оперируешь ссылками а не значениям в ячейке
14. user2107191 14.12.24 16:35 Сейчас в теме
(12)
то что в таблице оперируешь ссылками а не значениям в ячейке
Ссылка - это тоже значение, так то.
18. user1936660 15.12.24 10:43 Сейчас в теме
(12)
оперируешь ссылками а не значениям
На паскале, говоришь, программировал... Ну-ну.
Оставьте свое сообщение

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