В данной реализации программы предусмотрены только одномерные массивы.
Хм.Описание встроенного языка.Часть 2.Глава 29.Работа с Таблицей Значений Таблица значений может использоваться и как простой двумерный массив (матрица)...
Вывод: 7.7 не реализует механизм н-мерных массивов, а только 1-мерный (простите за ошибочное определение, вспомнил откуда перепутал, из Java). Для реализации н-мерных массивов в прямом понимании этого понятия следует использовать (как я писал выше) определение: Перем А[НН * СлойН +НН-1 * СлойН-1 +.... + Н1] где слой Нх - соответственно размерность слоя.
Где-то как-то так.
----------------------------------------------------------------------------------- Единственный, интуитивно понятный интерфейс - мамкина сиська! Всему остальному надо учиться! (с) Не знаю кто....
Группа: Местный
Сообщений: 235
Спасибо сказали: 45 раз
Рейтинг: 40
У меня все таки вопрос к автору темы: "в чем суть вашего задания?" потому как за 10 лет работы с 7.7 мне все удавалось с томощью ТЗ сделать и не обязательно тип делать "Справочник.Контрагенты" можно и неопределенный...
Перем А[НН * СлойН +НН-1 * СлойН-1 +.... + Н1] где слой Нх - соответственно размерность слоя.
Ничего неполучица, в [] должно быть целое число - размерность одномерного массива, тоесть сколько значений будет в этом массиве, соответствно оно не может быть нецелым. А вот задать размерность переменной, чтобы потом его определять в 7 неполучится, когдато пробовал, ничего невышло, как было сказано выше:
Цитата
[<Размерность>] Необязательная числовая константа (записывается в квадратных скобках), указывается только в том случае, если объявляется массив и должна представляться в виде положительного целого числа.
Цитата
надо построить массив по контрагентам закупки за период. Периоды могут изменятся, Контрагенты могут изменятся.
Может подойдет ТЗ, с определением к-ва колонок по к-ву дней в периоде, пример:
ТЗ = СоздатьОбъект("ТаблицаЗначений"); Для дд = НачДата по КонДата Цикл ТЗ.НоваяКолонка(,,,,""+дд); КонецЦикла
Как то так. Можно использовать запрос с 1 группировкой по контрагенту, а 2 "группировка День Все". Тогда 2 гркуппировка может формировать колонки по кол-ву дней в периоде. Туда попадут и нулевые значения функций. Ну это так примеры, может для вашего случая они неподойдут (в каждой строке, разное кол-во колонок)
Ничего неполучица, в [] должно быть целое число - размерность одномерного массива, тоесть сколько значений будет в этом массиве, соответствно оно не может быть нецелым. А вот задать размерность переменной, чтобы потом его определять в 7 неполучится, когдато пробовал, ничего невышло, как было сказано выше:
Видимо я непонятно написал:
что-то типа такого
А[НомерСтроки * Длину Строки + НомерПозицииВСтроке]
Группа: Местный
Сообщений: 248
Из: Советский Союз
Спасибо сказали: 64 раз
Рейтинг: 0
Цитата(l2d808 @ 05.09.11, 9:02)
Добрый день уважаемое сообщество. У меня платформа 7.7. Пытаюсь понять как в 1с7.7 реализирован принцип построения многомерных массивов. К сожалению не получаетсяю:-)
перем а[ы]
Работает, а вот
перем а[ы,в]
работать отказывается в чистую. подскажите пожалуйста как правильно строить многомерные массивы в 1с7.7 Заранее благодарен.
За вчера получилось как-то так. Обработка Создает эксель файл в котором каждому контрагенту розписывается сума продаж за месяц. месяц автоматом добавляется в ТЗ. Получается в строках находится контрагент, а в столбиках - суммы продаж за месяц. Код, кому интересно, внизу. Извините за неадекватные переменные )
Процедура Test() перем Месяц; перем датаТекущая; Сообщить(ТекущееВремя()); ТЗ=СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("контрагент"); дата11=НачМесяца(дата1); ДатаТекущая=дата11; Пока ДатаТекущая<=дата2 Цикл УказательМесяца=ДатаМесяц(ДатаТекущая); НазваниеМесяца(УказательМесяца,Месяц); Месяц=месяц+строка(ДатаГод(ДатаТекущая)); ТЗ.НоваяКолонка(Месяц); ДатаТекущая=ДобавитьМесяц(ДатаТекущая,1); КонецЦикла; для НомКолонки=2 по ТЗ.КоличествоКолонок() цикл Конеццикла; Номерстроки=0; контр=СоздатьОбъект("Справочник.Контрагенты"); Док = СоздатьОбъект("Документ.РасходнаяНакладная"); контр.ВыбратьЭлементы(); Пока контр.ПолучитьЭлемент()=1 Цикл Если контр.ЭтоГруппа()=0 Тогда Если (сокрЛП(контр.код)<>"00091") Тогда ТЗ.НоваяСтрока(); ТЗ.контрагент=контр.ТекущийЭлемент(); Номерстроки=номерстроки+1; ДатаТекущая=НачМесяца(дата1); НомКолонки=2; Пока ДатаТекущая<=дата2 Цикл Док.ВыбратьДокументы(ДатаТекущая, ДобавитьМесяц(ДатаТекущая,1)); Пока Док.ПолучитьДокумент() = 1 Цикл Если ТЗ.контрагент=Док.Контрагент Тогда ЗначениеСуммы=ЗначениеСуммы+Док.Итог("СуммаСНДС"); КонецЕсли; Конеццикла; ТЗ.УстановитьЗначение(Номерстроки,НомКолонки,ЗначениеСуммы); ДатаТекущая=ДобавитьМесяц(ДатаТекущая,1); ЗначениеСуммы=0; НомКолонки=НомКолонки+1; Конеццикла; КонецЕсли; КонецЕсли; КонецЦикла; Имя=КаталогИБ()+"\Zvit\Аналитика.xls"; Эксель=СоздатьОбъект("Excel.Application"); Книга = Эксель.WorkBooks.add(Имя); Лист = Книга.WorkSheets("Лист1"); строкаЭксесь=1; СтолбецЕксель=0; для НомКолонки=1 по ТЗ.КоличествоКолонок() цикл ИмяШапки=ТЗ.ПолучитьПараметрыКолонки(НомКолонки); ИмяШапки=строка(ИмяШапки); Лист.Cells(1,НомКолонки).Value=ИмяШапки; Конеццикла; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл строкаЭксесь=строкаЭксесь+1; Номерстроки=строкаЭксесь-1; для НомКолонки2=2 по ТЗ.КоличествоКолонок() цикл екккеку=екккеку+число(ТЗ.ПолучитьЗначение(Номерстроки,НомКолонки2)); конеццикла; сообщить(екккеку); для НомКолонки=1 по ТЗ.КоличествоКолонок() цикл СтолбецЕксель=НомКолонки; апапап=ТЗ.ПолучитьЗначение(Номерстроки,НомКолонки); ффаа1212=строка(апапап); Если ПустоеЗначение(ффаа1212)=0 Тогда Лист.Cells(строкаЭксесь,СтолбецЕксель).Value=ффаа1212; КонецЕсли; КонецЦикла; екккеку=0; КонецЦикла;
Добрый день уважаемое сообщество. У меня платформа 7.7. Пытаюсь понять как в 1с7.7 реализирован принцип построения многомерных массивов. К сожалению не получаетсяю:-)
перем а[ы]
Работает, а вот
перем а[ы,в]
работать отказывается в чистую. подскажите пожалуйста как правильно строить многомерные массивы в 1с7.7 Заранее благодарен.
а[x,y] = a[(x*(y-1)+y]
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник. ЗиУП
Вот пример запроса, который вам выведет, то продажи по контрагентам в строках, и в колонках по месяцам, сдесь же пример использования одномерного массива.
Перем Запрос, ТекстЗапроса, Таб,М[12]; Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |ОбрабатыватьДокументы Проведенные; |Контр = Документ.РасходнаяНакладная.Контрагент; |Сум = Документ.РасходнаяНакладная.СуммаСНДС; |Функция СумСумма = Сумма(Сум); |Группировка Контр без групп; |Группировка Месяц все; |"//}}ЗАПРОС ; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); //выводим шапку Таб.ВывестиСекцию("Шапка|Секция1"); мм=0; Пока Запрос.Группировка(1) = 1 Цикл Пока Запрос.Группировка(2) = 1 Цикл Мес = Запрос.Месяц; Таб.ПрисоединитьСекцию("Шапка|Секция2");//вывод всех месяцев за период в шапке мм=мм+1; М[мм]=0;//для итогов по колонке КонецЦикла; Прервать; КонецЦикла; Таб.ПрисоединитьСекцию("Шапка|Секция3");//вывод итогов по строке в шапке
//заново в запрос Запрос.ВНачалоВыборки(); Пока Запрос.Группировка(1) = 1 Цикл Таб.ВывестиСекцию("Контр|Секция1");//выводим контрагента мс=0; Пока Запрос.Группировка(2) = 1 Цикл //здесь Запрос.СумСумма вернет сумму за месяц, присоединяем месяц Таб.ПрисоединитьСекцию("Контр|Секция2"); //соберем итоги по месяцам в колонках мс=мс+1; М[мс]=М[мс]+Запрос.СумСумма; КонецЦикла; //здесь Запрос.СумСумма вернет сумму за весь период по контрагенту, присоединяем итог по строке Таб.ПрисоединитьСекцию("Контр|Секция3"); КонецЦикла;
// выведем итоги по месяцам и всего" Таб.ВывестиСекцию("Дно|Секция1"); Для нн=1 По мм Цикл //сдесь М[нн] покажет итог по месяцу нн Таб.ПрисоединитьСекцию("Дно|Секция2"); КонецЦикла;
//здесь Запрос.СумСумма вернет всю сумму за весь период по всем контрагентам, выведем итог Таб.ПрисоединитьСекцию("Дно|Секция3");
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!