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


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) можно и не таблицу значений....
   It is me
 
3 - 13.07.04 - 18:44
Неужели придется опять рассказывать, как из одномерного массива сделать многомерный?
   427
 
4 - 13.07.04 - 18:45
(3) и чему сейчас учат?.... таких азов не знают.....
   Crew
 
5 - 13.07.04 - 21:13
(2)
Можно. Но, имхо, ТЗ проще.
   Волшебник
 
6 - 13.07.04 - 21:16
В ячейке таблицы значений может содержаться другая таблица значений или список значений. И наоборот.

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

В общем полный простор для алгоритмов любой сложности. :)
   Asmody
 
7 - 13.07.04 - 21:19
(6) реклама - двигатель прогресса? >;))
   SnarkHunter
 
8 - 13.07.04 - 21:55
... нет, не прогресса - торговли..
   NS
 
9 - 14.07.04 - 03:33
(5) Но... всего-лишь раз... в шесть медленней...
Но вы... смертные... свое время ведь не цените...
   Valik
10 - 14.07.04 - 09:47
Один флуд, ни приера, ни сслыки на доки.
Можно пример в 3 строчки как создать таблицу значений и как из нее тянуть данные?
 
  Рекламное место пустует
   427
 
11 - 14.07.04 - 10:02
о чем в (4) и сказано .....
   SnarkHunter
 
12 - 14.07.04 - 10:04
Хочу жрать... Найдите мне еды, приготовьте, разжуйте, положите в рот... и научите глотать...
   Den
13 - 14.07.04 - 10:20
А на что тебе типовухи от 1С???
   Valik
14 - 14.07.04 - 11:23
Ладно. Конкретный вопрос.
Есть код

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

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

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

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

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

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

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

Почему? Начинаю с 0 строки и получю 1 значение.
Пояснте как со строки таблицы значений заберать например в первой строке значение первой ячейки?
   NS
 
15 - 14.07.04 - 11:28
начни с минус первой строки...
Если не получится, то с минус второй и т.д.
   skunk
 
16 - 14.07.04 - 11:29
номер строки = 1
   Valik
17 - 14.07.04 - 15:53
Спасибо. работает.

Подскажите еще как делать выборку.
Напрер такая таблица
Код  ----  Название организации ---- Город
1               АВТ                 Москва
2               Арв                 Ялта
.....

Как сделать выборку по полю. Тоесть мне нужены все организации Москвы. Как их отсортировать по проще?
   Crew
 
18 - 14.07.04 - 16:20
Тз.Свернуть(...)
Тз.Сортировать(...)

!!!!!!!! RTFM !!!!!!!!!  и флуд превращается в понятные ответы
   Valik
19 - 14.07.04 - 17:33
Обясните дурному, что такое RTFM и где его достать?
   Crew
 
20 - 14.07.04 - 17:55
Read this fu...ng MANUAL !!!

Почитать на www.mista.ru учебник по 1С. Или проявить недюженную силу воли и прочитать ЖКК (желтые книги конфиграции).
   Valik
21 - 14.07.04 - 17:56
Как сравнить Строку и Перечисление?

Тоесть есть текст "Директор". В одном случае он строка, а в другом Перечисление.
и сравнение 
а = "Директор" (строка)
б = "Директор" (Перечисление)
а = б (ложь)

Тоесть вопрос в том как можно конвертировать Перечисление в строку?
   Crew
 
22 - 14.07.04 - 18:04
Строка(Перечисление.ВидыАктива.Иные)
НО! Получишь в результате ПРЕДСТАВЛЕНИЕ перечисления.

Лучшь а - сделай перечислением.
   Valik
23 - 14.07.04 - 18:37
Спасибо за совет.
Но решаеться проше. Конверсией в стоку.

с = Строка (б);  - так работает :)

Как сделать break из цикла?

Пока Контр.ПолучитьЭлемент() > 0 цикл      
         если  назван_стр = Контр.Наименование тогда            
              Предупреждение   ("********Нашли значение***********");                      break;
           конецесли;                   
КонецЦикла;



Но так конешно не пашет :) Есть чтото подобное в 1С?
   SiMazx
 
24 - 14.07.04 - 18:44
Прервать
   Crew
 
25 - 14.07.04 - 18:45
(23)

Так все с Вами понятно.
(22) это и есть преобразование в строку.
И вообще:
!!! R !! T !! F !! M !!!
   Valik
26 - 15.07.04 - 13:33
Ребята!!!
Как отсортировать Таблицу значений по 2 полям????
Ну тоесть есть таблица. Хоче чтобы там шли записи сортированые по "Городу" а потом по названию организации.

тЗнач.Сортировать("Город","Организация"); 

Такое сортирует но по одному полю "Город"!!! Второе до задницы. Не выстраиваються они по алфавиту.
   SnarkHunter
 
27 - 15.07.04 - 13:35
Пытайся хоть немного вчитываться в документацию... Если читаешь...
тЗнач.Сортировать("Город,Организация");
   SiMazx
 
28 - 15.07.04 - 13:35
Знач.Сортировать("Город,Организация");
Внимательнее смотри Синтакс-Помощник...
   Lazarus
 
29 - 15.07.04 - 14:04
Читай мануалы внимательней ;-) Или сразу формулируй Тех. Задание, может кто готовый листинг запостит ;-)
   Salimbek
30 - 15.07.04 - 15:09
2 (All) Вот у Вас терпения-то!!! Я бы (26)-го уже давно придушил бы нафик, да не попался он мне на глаза :))
   Valik
31 - 16.07.04 - 11:14
Придушил бы? Гы.

Так вот. Вопрос на засыпку.
Я вытаскиваю значения из журнала "Почта" - это сами тут люди создали.
Так вот беда в том, что в ячейке таблицы стоит тип "Строка", и длина 10.
Ну понятно что не всегда в эту ячейку ставиться строка в 10 симвлов, но
функция СтрДлина() всегда отдает 10 (!!!!)

Вопрос. Как получить реальный размер??
   Sniffer
32 - 16.07.04 - 11:22
Счетчик символов в цикле
   Salimbek
33 - 16.07.04 - 12:03
(31) Во-первых, мне НЕ "понятно что не всегда в эту ячейку ставиться строка в 10 симвлов", а какая туда ставится строка, а чего там может еще быть, а примеры не праильного заполнения строк. Тогда я МОЖЕТ БЫТЬ тебе и отвечу на этот вопрос. Во-вторых, а чего, тяжело уже самому думать?
 
  Рекламное место пустует
   Valik
34 - 16.07.04 - 12:07
2 Salimbek
Что тебе не понятно что в ячейку со свойством длины "10", можно ввести меньше.
Например 5. А длина всеравно отображаеться 10.
Что тут может быть непонятного?
   Sniffer
34 - 16.07.04 - 12:07
(33) я вот тоже про это думаю, (31)-если ты "программист"(формально) или хочешь им стать, то мой тебе совет меняй профессию и не думай об этом. А то пудришь тут всем мозги идиотскими вопросами.
   Sniffer
36 - 16.07.04 - 12:14
Чувак, я професианальный програмер с 5-летним стажем, только на нормальных языках (VC++, PHP, Perl, JavaScript и пр.) а не на этом гоневе. А 1С я увидел 3 дня назад и этот бред с рускими операторами тапа "Прервать" меня бесит.

И вот эти советы "меняй профессию и не думай об этом" засунь себе в ... ухо.
Нашлись блин, хакеры...
   Valik
37 - 16.07.04 - 12:15
Гы. Предыдуший пост мой :)
   SiMazx
 
38 - 16.07.04 - 12:28
(31) СтрДлина(СокрЛП(ТвояСтрока))
   SiMazx
 
39 - 16.07.04 - 12:30
(37) Ты под двумя никами постишь или просто согласен с (36)?
И (34) и (36) - один и тот же человек?
   Pitro
40 - 16.07.04 - 12:46
(36) А ты все эти языки изучал так же как и 1с? ;)
   Sniffer
41 - 16.07.04 - 13:04
то (36)это Valik, слушай "профессиональный программер". До занятия 1С я 10 лет программировал на FoxPro(хотя знаю и умею програмировать еще на 5-6 языках, начиная от ASSEMBLERа и кончая языками высокого уровня), и перейти на 1с, да и на любой др.язык мне не составляет труда, принципы везде одни и теже.
   Sniffer
42 - 16.07.04 - 13:07
На (31) я дал тебе ответ(32), а если ты тормоз - то это твои личные проблемы, "профессиональный программер"
   Sniffer
43 - 16.07.04 - 13:14
Valik, а за то, чо ты под моим ником зашел - за это по морде бы тебе разок
   3V
 
44 - 16.07.04 - 13:27
вообщето правильный ответ был в (38)
   Salimbek
45 - 16.07.04 - 15:19
Valik, а ты зайди под моим ником, профессиональный программер с ..летним стажем на нормальном языке JAVASCRIPT (уже смешно).
   Valik
46 - 16.07.04 - 16:08
Тю, о чем мы вообще говорим?

Я задал вопрос по 1С с которой роботаю 3-й день. И тут набежала куча хакеров на 1С (как тут говорят, уже смешно) и стали мне советовать сменить професию (!!!)
И я еще раз повторюсь, что с 1С не работаю и она низачто не станет моей професией, просто одна красивая дама попросила.

Что касаеться остального, то на текущий проект который я завершаю можно посмотреть тут - dbu.com.ua.

Вот все. Если когото задел, обидел, оскорбил - сорри.
   Salimbek
47 - 16.07.04 - 16:11
(46) О, конструктивный чел! По сабжу то как? Решил?
   Valik
48 - 17.07.04 - 16:25
Какойто бред.
Есть 2 таблицы значений. Я их сравниваю по одному уникальному полю и если они совпадают, то удаляю совпадающие поля из обоих.

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

Вот такой код дает очень странные результаты :)
Подскажите как нармальные люди бы написали.
   NS
 
49 - 17.07.04 - 16:29
(48) Да, круто...
Ты так-же на и на других языках пишешь?
 
  Рекламное место пустует
   NS
 
50 - 17.07.04 - 16:45
рТемп=Создатьобъект("ТаблицаЗначений");
    тТемп=СоздатьОбъект("ТаблицаЗначений");
    рЗнач.Выгрузить(рТемп,,"Организация");
    тЗнач.выгрузить(тТемп,,"Огранизация");
    рТемп.свернуть("Организация",""); 
    тТемп.Свернуть("Организация","");
    рТемп.НоваяКолонка("Количество","Число",2,0);
    тТемп.НоваяКолонка("Количество","Число",2,0);
    рТемп.Заполнить(1,,"Количество");
    тТемп.Заполнить(1,,"Количество");
    КолР=рТемп.КоличествоСтрок();
    КолТ=тТемп.КоличествоСтрок(); 
    тТемп.КоличествоСтрок(КолР+КолТ);
    тТемп.Заполнить(рТемп,КолТ+1,КолТ+КолР);
    рТемп.Очистить();
    тТемп.Свернуть("Организация",Количество); 
    тТемп.Сортировать("Количество+");
    стр="";
    Если ТТемп.НайтиЗначение(2,стр,"Количество")>0 Тогда 
        тТемп.Выгрузить(тТемп,стр,тТемп.КоличествоСтрок(),"Организация");
    Иначе
        тТемп.УдалитьСтроки();
    КонецЕсли;         
   // В тТемп список Организаций - дубляжей....

   // можно проверить методом

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

   // можно проверить методом

    тТемп.ВыбратьСтроку();  
   // Сейчас перекурю, вторую часть допишу...
   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
 
54 - 17.07.04 - 17:45
(53) Чичас сделаю...
Какая из них сокращенная???
Есть-ли в ней дубляжи по сто=рокам организаций?
   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 человек.
Рекламное место пустует