Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Массивы 1с 7.7 , Помогите построить... 2 страниц V  < 1 2          
Flexy Подменю пользователя
сообщение 05.09.11, 11:58
Сообщение #21

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

Цитата(g789 @ 05.09.11, 11:40) *
В данной реализации програм­мы предусмотрены только одномерные массивы.

Хм.Описание встроенного языка.Часть 2.Глава 29.Работа с Таблицей Значений
Таблица значений может использоваться и как простой двумерный массив (матрица)...

Сообщение отредактировал Flexy - 05.09.11, 11:58

Vofka Подменю пользователя
сообщение 05.09.11, 12:10
Сообщение #22

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13957
Из: Киев
Спасибо сказали: 4524 раз
Рейтинг: 3647.7

Цитата
может использоваться

Так же как список значений может использоваться как одномерный массив. Но одно - не есть другое.

DartRomanius Подменю пользователя
сообщение 05.09.11, 12:42
Сообщение #23

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Вывод:
7.7 не реализует механизм н-мерных массивов, а только 1-мерный (простите за ошибочное определение, вспомнил откуда перепутал, из Java). smile.gif
Для реализации н-мерных массивов в прямом понимании этого понятия следует использовать (как я писал выше) определение:
Перем А[НН * СлойН +НН-1 * СлойН-1 +.... + Н1] где слой Нх - соответственно размерность слоя.

Где-то как-то так.


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

alex1c Подменю пользователя
сообщение 05.09.11, 19:28
Сообщение #24

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 235
Спасибо сказали: 45 раз
Рейтинг: 40

У меня все таки вопрос к автору темы: "в чем суть вашего задания?" потому как за 10 лет работы с 7.7 мне все удавалось с томощью ТЗ сделать и не обязательно тип делать "Справочник.Контрагенты" можно и неопределенный...

igmig65 Подменю пользователя
сообщение 05.09.11, 21:10
Сообщение #25

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 614
Из: Донецкая обл
Спасибо сказали: 168 раз
Рейтинг: 140.9

Цитата
Перем А[НН * СлойН +НН-1 * СлойН-1 +.... + Н1] где слой Нх - соответственно размерность слоя.

Ничего неполучица, в [] должно быть целое число - размерность одномерного массива, тоесть сколько значений будет в этом массиве, соответствно оно не может быть нецелым. А вот задать размерность переменной, чтобы потом его определять в 7 неполучится, когдато пробовал, ничего невышло, как было сказано выше:
Цитата
[<Размерность>] Необязательная числовая константа (записывается в квадратных скобках), указывается только в том случае, если объявляется массив и должна представляться в виде положительного целого числа.


Цитата
надо построить массив по контрагентам закупки за период. Периоды могут изменятся, Контрагенты могут изменятся.

Может подойдет ТЗ, с определением к-ва колонок по к-ву дней в периоде, пример:
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Для дд = НачДата по КонДата Цикл
      ТЗ.НоваяКолонка(,,,,""+дд);
КонецЦикла

Как то так.
Можно использовать запрос с 1 группировкой по контрагенту, а 2 "группировка День Все". Тогда 2 гркуппировка может формировать колонки по кол-ву дней в периоде. Туда попадут и нулевые значения функций.
Ну это так примеры, может для вашего случая они неподойдут (в каждой строке, разное кол-во колонок)

DartRomanius Подменю пользователя
сообщение 06.09.11, 8:28
Сообщение #26

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(igmig65 @ 05.09.11, 22:10) *
Ничего неполучица, в [] должно быть целое число - размерность одномерного массива, тоесть сколько значений будет в этом массиве, соответствно оно не может быть нецелым. А вот задать размерность переменной, чтобы потом его определять в 7 неполучится, когдато пробовал, ничего невышло, как было сказано выше:



Видимо я непонятно написал:

что-то типа такого
 А[НомерСтроки * Длину Строки + НомерПозицииВСтроке]


3-х мерный где-то так

 А[НомерСлоя * КоличествоСтрок * ДлинуСтроки + НомерСтроки * ДлинуСтроки + НомерПозицииВСтроке]


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

l2d808 Подменю пользователя
сообщение 06.09.11, 11:42
Сообщение #27

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 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;
КонецЦикла;

//**************************
Эксель.ScreenUpdating = 1;  
Эксель.EnableEvents = 1;    
Эксель.Visible = 1;        
//**************************

КонецПроцедуры
//==========================
Процедура ПриОткрытии()
    Дата1="07,05,11";
    Дата2=Текущаядата();
    очиститьОкноСообщений();
КонецПроцедуры


Signature
Короеды это не жуки. Это пользователи. Они едят кору головного мозга ...

alex040269 Подменю пользователя
сообщение 06.09.11, 12:47
Сообщение #28

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Цитата(l2d808 @ 05.09.11, 9:02) *
Добрый день уважаемое сообщество. У меня платформа 7.7. Пытаюсь понять как в 1с7.7 реализирован принцип построения многомерных массивов. К сожалению не получаетсяю:-)
перем а[ы]


Работает, а вот
перем а[ы,в]

работать отказывается в чистую. подскажите пожалуйста как правильно строить многомерные массивы в 1с7.7
Заранее благодарен.



а[x,y] = a[(x*(y-1)+y]


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

igmig65 Подменю пользователя
сообщение 06.09.11, 22:42
Сообщение #29

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 614
Из: Донецкая обл
Спасибо сказали: 168 раз
Рейтинг: 140.9

Вот пример запроса, который вам выведет, то продажи по контрагентам в строках, и в колонках по месяцам, сдесь же пример использования одномерного массива.
    Перем Запрос, ТекстЗапроса, Таб,М[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");

    Таб.Показать();

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


2 страниц V  < 1 2
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 10.06.24, 5:55
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!