1С программирование вопрос по массиву и соответствию
Добрый вечер, Прошу помочь, я только начал учиться 1С прогр. и для меня все оказалось сложно по сравнению с Паскаль
Не могу понять время жизни массива и Соответствия и могу ли я в них менять значения. Задача такая у меня есть таблица Реализации который я заполняю (товар,тип_платежа,сумм и т.д), потом хочу получить по каждому товару Сумму отдельно по налу безналу и прочее,
Для начало создаю Массив и в него в Соответствие для каждого товара (по одному товару могут быть несколько операции)
Далее я питаюсь обратится к элементу массива и в нем изменить значения Соответствия по ключу
Сперва питался как закомментировано, потом написал по другому, но в конце в массиве все равно все суммы нулевые
Не могу понять время жизни массива и Соответствия и могу ли я в них менять значения. Задача такая у меня есть таблица Реализации который я заполняю (товар,тип_платежа,сумм и т.д), потом хочу получить по каждому товару Сумму отдельно по налу безналу и прочее,
Для начало создаю Массив и в него в Соответствие для каждого товара (по одному товару могут быть несколько операции)
МассивСумм =Новый Массив;
Товар = "";
Для каждого Строка из Объект.Реализация Цикл
Если Товар <> Строка.Товар Тогда
Товар = Строка.Товар;
СуммыТоваров = Новый Соответствие;
СуммыТоваров.Вставить("Товар",Товар);
СуммыТоваров.Вставить("ИтогоСуммаНал",0);
СуммыТоваров.Вставить("ИтогоСуммаБН",0);
СуммыТоваров.Вставить("ИтогоСуммаБНИ",0);
СуммыТоваров.Вставить("/ИтогоСуммаСерт",0);
СуммыТоваров.Вставить("ИтогоСуммаПК",0);
МассивСумм.Добавить(СуммыТоваров);
КонецЕсли;
КонецЦикла;
ПоказатьДалее я питаюсь обратится к элементу массива и в нем изменить значения Соответствия по ключу
Для каждого Строка из Объект.Реализация Цикл
Если Товар <> Строка.Товар Тогда
Для сч=0 по МассивСумм.ВГраница() Цикл
Если МассивСумм[сч]["Товар"] = Строка.Товар Тогда
ИндексМассива = сч;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Сумма = МассивСумм[ИндексМассива];
НовСумма = 0;
Если Строка.ТипПлатежа = "Наличные" Тогда
НовСумма = Сумма["ИтогоСуммаНал"];
НовСумма = НовСумма + Строка.Итого;
Сумма.Вставить("ИтогоСуммаНал",НовСумма);
//Сумма[ИтогоСуммаНал] = Сумма["ИтогоСуммаНал"] + Строка.Итого;
ИначеЕсли Строка.ТипПлатежа ="Безналичные" Тогда
Если Строка.МетодПлатежа = "БезналичныеВКинотеатре" Тогда
НовСумма = Сумма["ИтогоСуммаБН"];
НовСумма = НовСумма + Строка.Итого;
Сумма.Вставить("ИтогоСуммаБН",НовСумма);
//Сумма["ИтогоСуммаБН"] = Сумма["ИтогоСуммаБН"] + Строка.Итого;
ПоказатьСперва питался как закомментировано, потом написал по другому, но в конце в массиве все равно все суммы нулевые
По теме из базы знаний
- Базовый курс для начинающих 1С-программистов. Третий поток. Онлайн-курс с 5 августа по 4 сентября 2019 г.
- Базовый курс для начинающих 1С-программистов. Четвертый поток. Онлайн-курс с 07 октября по 16 декабря 2019 г.
- Базовый курс для начинающих 1С-программистов. Онлайн-курс с 10 марта по 26 мая 2021 года.
- Базовый курс для начинающих 1С-программистов. Онлайн-курс с 29 января по 9 апреля 2025 г.
- Алгоритмизация и программирование на языке 1С для начинающих. Онлайн-курс с 21 по 23 января 2025
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Код хоть и кривой, но навскидку должен работать. Задуманное проще решить через отдельную таблицу значений.
// создаем служебную таблицу значений для итогов по товарам
ТипЧисло = Новый ОписаниеТипов("Число");
ТЗ_Итоги = Новый ТаблицаЗначений;
ТЗ_Итоги.Колонки.Добавить("Товар");
ТЗ_Итоги.Колонки.Добавить("ИтогоСуммаНал", ТипЧисло);
ТЗ_Итоги.Колонки.Добавить("ИтогоСуммаБН", ТипЧисло);
ТЗ_Итоги.Колонки.Добавить("ИтогоСуммаБНИ", ТипЧисло);
ТЗ_Итоги.Колонки.Добавить("ИтогоСуммаСерт", ТипЧисло);
ТЗ_Итоги.Колонки.Добавить("ИтогоСуммаПК", ТипЧисло);
// обходим коллекцию Реализация и заполняем ТЗ_Итоги
Для Каждого Строка Из Объект.Реализация Цикл
НоваяСтрока = ТЗ_Итоги.Добавить();
НоваяСтрока.Товар = Строка.Товар;
Если Строка.ТипПлатежа = "Наличные" Тогда
НоваяСтрока.ИтогоСуммаНал = Строка.Итого;
ИначеЕсли Строка.ТипПлатежа ="Безналичные" Тогда
Если Строка.МетодПлатежа = "БезналичныеВКинотеатре" Тогда
НоваяСтрока.ИтогоСуммаБН = Строка.Итого;
// и т.д....
КонецЦикла;
// сворачиваем итоги
ТЗ_Итоги.Свернуть("Товар", "ИтогоСуммаНал,ИтогоСуммаБН,ИтогоСуммаБНИ,ИтогоСуммаСерт,ИтогоСуммаПК");
Показать
(15)
Да.
Во встроенном синтаксис-помощнике подробно написано про этот метод таблицы значений.
Почти про любой платформенный метод/свойство можно узнать, если в тексте модуля установить курсор в интересующем слове и нажать Ctrl+F1, тут главное понимать к какому объекту относится метод/свойство.
группирует по первому переменному и суммирует перечисленные колонки по второму
Да.
Во встроенном синтаксис-помощнике подробно написано про этот метод таблицы значений.
Почти про любой платформенный метод/свойство можно узнать, если в тексте модуля установить курсор в интересующем слове и нажать Ctrl+F1, тут главное понимать к какому объекту относится метод/свойство.
(4)
Прочитал справку
Я так долго ломал голову как это сделать правильно!
А ларчик так просто открывался!
мой вариант хоть и рабочый и после вашего замечания переписал и получился довольно компактным, но с Таблицами значении это лучший вариант!
Спасибо большое!
ТаблицаЗначений;
Прочитал справку
Я так долго ломал голову как это сделать правильно!
А ларчик так просто открывался!
мой вариант хоть и рабочый и после вашего замечания переписал и получился довольно компактным, но с Таблицами значении это лучший вариант!
Спасибо большое!
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот