Вход | Регистрация


1С:Предприятие ::

Метки:Встроенный язык

Масивы в 1С

Я
   Valik
13.07.04 - 17:58
Ребята скажите я чето не пойму есть в 1С моногомерные массивы?
И если есть то как они обявляетються?

перем а[100,100]; - такое не катит :(
 
  Рекламное место пустует
   Crew
 
1 - 13.07.04 - 18:06
Есть. Называются таблицы значений ;)
   427
 
2 - 13.07.04 - 18:34
есть... надо только подумать....
(1) можно и не таблицу значений....
   Crew
 
5 - 13.07.04 - 21:13
(2)
Можно. Но, имхо, ТЗ проще.
   Волшебник
 
6 - 13.07.04 - 21:16
В ячейке таблицы значений может содержаться другая таблица значений или список значений. И наоборот.

В версии 8.0 еще появились Структура, Соответствие и ДеревоЗначений.

В общем полный простор для алгоритмов любой сложности. :)
   Valik
14 - 14.07.04 - 11:23
Ладно. Конкретный вопрос.
Есть код

тЗнач = СоздатьОбъект("ТаблицаЗначений");

тЗнач.НоваяКолонка("код","Число");
тЗнач.НоваяКолонка("Организация","Строка");
тЗнач.НоваяКолонка("Адрес","Строка")

тЗнач.НоваяСтрока();

тЗнач.код = 12;
тЗнач.Организация = "АВТ";
тЗнач.Адрес = "Киев";

вак =  тЗнач.ПолучитьЗначение(0,3);

Сообщить(вак);

На него Error
вак =  тЗнач.ПолучитьЗначение(0,1);
{Отчет.отСправочние.Форма.Модуль(84)}: Номер за пределами значения!

Почему? Начинаю с 0 строки и получю 1 значение.
Пояснте как со строки таблицы значений заберать например в первой строке значение первой ячейки?
   skunk
 
16 - 14.07.04 - 11:29
номер строки = 1
   Valik
48 - 17.07.04 - 16:25
Какойто бред.
Есть 2 таблицы значений. Я их сравниваю по одному уникальному полю и если они совпадают, то удаляю совпадающие поля из обоих.

тЗнач.ПолучитьСтрокуПоНомеру(1);
    Пока тЗнач.ПолучитьСтроку() = 1 цикл      
            рЗнач.ПолучитьСтрокуПоНомеру(1);  
            сообщить (рЗнач.КоличествоСтрок());
            
    Пока рЗнач.ПолучитьСтроку() = 1 цикл             
                
              Если рЗнач.Организация = тЗнач.Организация Тогда 
                     рЗнач.УдалитьСтроку();
                     тЗнач.УдалитьСтроку();
              КонецЕсли;
                
            конецЦикла
        конецЦикла;

Вот такой код дает очень странные результаты :)
Подскажите как нармальные люди бы написали.
   NS
 
52 - 17.07.04 - 17:11
//Выше небольшие синтаксические ошибки

//Это проверенный и отлаженный вариант...
//Но не самый быстрый...

//Удаление строк, конечно лучше делать через доп. колонку...
//*******************************************

Процедура Сформировать()    
    рЗнач=Создатьобъект("ТаблицаЗначений");
    тЗнач=СоздатьОбъект("ТаблицаЗначений");  
    рЗнач.НоваяКолонка("Организация","Строка",6,0);
    тЗнач.НоваяКолонка("Организация","Строка",6,0);
    рЗнач.НоваяКолонка("Сумма","Число",10,2);
    тЗнач.НоваяКолонка("Сумма","Число",10,2);
    рЗнач.НоваяСтрока();
    рЗнач.Организация="Москва";
    рЗнач.Сумма=152;
    рЗнач.НоваяСтрока();
    рЗнач.Организация="Судак";
    рЗнач.Сумма=140;
    рЗнач.НоваяСтрока();
    рЗнач.Организация="Тверь";
    рЗнач.Сумма=196;
    
    тЗнач.НоваяСтрока();
    тЗнач.Организация="Судак";
    тЗнач.Сумма=134;
    тЗнач.НоваяСтрока();
    тЗнач.Организация="Киев";
    тЗнач.Сумма=183;
   //Тестовое заполнение

   //Теперь сам модуль...

    рТемп=Создатьобъект("ТаблицаЗначений");
    тТемп=СоздатьОбъект("ТаблицаЗначений");
    рЗнач.Выгрузить(рТемп,,,"Организация");
    тЗнач.выгрузить(тТемп,,,"Организация");
    рТемп.свернуть("Организация",""); 
    тТемп.Свернуть("Организация","");
    рТемп.НоваяКолонка("Количество","Число",2,0);
    тТемп.НоваяКолонка("Количество","Число",2,0);
    рТемп.Заполнить(1,,,"Количество");
    тТемп.Заполнить(1,,,"Количество");
    КолР=рТемп.КоличествоСтрок();
    КолТ=тТемп.КоличествоСтрок(); 
    тТемп.КоличествоСтрок(КолР+КолТ);
    тТемп.Заполнить(рТемп,КолТ+1,КолТ+КолР);
    рТемп.Очистить();
    тТемп.Свернуть("Организация","Количество"); 
    тТемп.Сортировать("Количество+");
    стр="";
    Если ТТемп.НайтиЗначение(2,стр,"Количество")>0 Тогда 
        тТемп.Выгрузить(тТемп,стр,тТемп.КоличествоСтрок(),"Организация");
    Иначе
        тТемп.УдалитьСтроки();
    КонецЕсли;         
    тТемп.ВыбратьСтроку(); // Для отладки  

    СЗ=СоздатьОбъект("СписокЗначений");
    тТемп.Выгрузить(СЗ);
   // Модуль неоптимальный, но если будет медленно - то напишу другой... 

    КолР=рЗнач.КоличествоСтрок();
    Для а=1 по колР цикл
        номстр=КолР-а+1;                                                                      
        Если СЗ.НайтиЗначение(рЗнач.ПолучитьЗначение(номстр,"Организация"))>0 Тогда
           рЗнач.УдалитьСтроку(номстр);
        КонецЕсли;    
    КонецЦикла;    
    КолТ=тЗнач.КоличествоСтрок();
    Для а=1 по колТ цикл
        номстр=КолТ-а+1;                                                                      
        Если СЗ.НайтиЗначение(тЗнач.ПолучитьЗначение(номстр,"Организация"))>0 Тогда
           тЗнач.УдалитьСтроку(номстр);
        КонецЕсли;    
    КонецЦикла;    
    рЗнач.ВыбратьСтроку();//Для отладки

    тЗнач.ВыбратьСтроку();//Для отладки

КонецПроцедуры
   Valik
53 - 17.07.04 - 17:43
Спасибо, дружище.
Блин, я немного не правильно сказал в описании задачи.
Есть две таблицы значений. Первая Полная, вторая Сокращенная. Так вот мне нужно выбрать все значения из Полной таблицы которые отсутствуют в Сокращенной. Колонка "Организация" не уникальная в обоих таблицах, она может повторяться несколько раз.

Тоесть задача как бы вычесть из Полной таблицы Сокращенную.
Сорри что не дал правельноую постановку проблемы :(
   NS
 
55 - 17.07.04 - 17:50
СЗ=СоздатьОбъект("СписокЗначений");
тЗнач.Выгрузить(СЗ,,,"Организация");
КолР=рЗнач.КоличествоСтрок();
    Для а=1 по колР цикл
        номстр=КолР-а+1;                                                                      
        Если СЗ.НайтиЗначение(рЗнач.ПолучитьЗначение(номстр,"Организация"))>0 Тогда
           рЗнач.УдалитьСтроку(номстр);
        КонецЕсли;    
   КонецЦикла;
Удаляет из рЗнач всё, что есть в тЗнач....
   Valik
56 - 17.07.04 - 17:53
Вот они. тЗнач - полная. рЗнач -Сокращенная.
Вычитать надо по полю "Организация".

тЗнач = СоздатьОбъект("ТаблицаЗначений");

тЗнач.НоваяКолонка("ид","Число");
тЗнач.НоваяКолонка("ЕДРПОУ","Число");
тЗнач.НоваяКолонка("Организация","Справочник");
тЗнач.НоваяКолонка("Книга","Справочник");
тЗнач.НоваяКолонка("Колво","Число");
тЗнач.НоваяКолонка("Область","Строка");

рЗнач = СоздатьОбъект("ТаблицаЗначений");

    рЗнач.НоваяКолонка("ид","Число");
    рЗнач.НоваяКолонка("ЕДРПОУ","Число");
    рЗнач.НоваяКолонка("Организация","Справочник");
    рЗнач.НоваяКолонка("Книга","Справочник");
    рЗнач.НоваяКолонка("Колво","Число");
    рЗнач.НоваяКолонка("Область","Строка");
   NS
 
57 - 17.07.04 - 17:56
СЗ=СоздатьОбъект("СписокЗначений"); 
рЗнач.Выгрузить(СЗ,,,"Организация"); 
КолТ=тЗнач.КоличествоСтрок(); 
   Для а=1 по колТ цикл 
       номстр=КолТ-а+1;                                                                       
       Если СЗ.НайтиЗначение(тЗнач.ПолучитьЗначение(номстр,"Организация"))>0 Тогда 
          тЗнач.УдалитьСтроку(номстр); 
       КонецЕсли;     
  КонецЦикла;
Удаляет из тЗнач всё, что есть в рЗнач....



Список тем форума
Рекламное место пустует  
Независимо от того, куда вы едете — это в гору и против ветра!
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует