Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Из массива слов составить предложение

Существует n предложений, в каждом предложении m слов. Необходимо из каждого предложения взять слово, соответствующее порядковому номеру предложения (из первого предложения первое слово, из второго предложения второе слово и из третьего предложения третье слово, и т.д.) и составить из них предложение. Предложения должны вводиться в пользовательском интерфейсе.

Пример:
Мама мыла раму
Папа варил кашу
Дед ел суп
Результат: мама варил суп

Попытался сделать ввод предложений, но не пойму как ссылаться на каждый элемент массива (т.е. на слово) и доработать до конца прогу...

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Объявление переменных
Перем А, С, Текст, Массив, ЭлементыМассива, МояСтрока, n, m, Значение;
 
//Объявление функций и процедур
Функция ВводТекста()
Массив = Новый Массив(3, 3);    
Текст = ""; 
Подсказка = "Введите предложения";
Если ВвестиСтроку(Текст,Подсказка, 0, истина) Тогда 
Массив[0][0] = Текст;
КонецЕсли;
КонецФункции
 
Процедура СоставитьПредложение();
ВводТекста();   
КонецПроцедуры
 
Процедура ПриНачалеРаботыСистемы()
ВводТекста();
Сообщить(Массив[0][0]);
КонецПроцедуры
Ответ:
Сообщение от Trombovoz
А то я понял только как работать через процедуру ПриНачалеРаботыСистемы
Неа, вообще не так.
Во вложении небольшой примерчик ))
"ПриНачалеРаботыСистемы" предназначено для другого, лучше сначала почитать что куда и откуда ))
Есть понятия ассинхронного режима работы - это к вопросу корректности использования модальных вызовов типа "ВвестиСтроку" (и пр.) - так же необходимо прочитать про это ))
Вопрос: Сформировать массив из 5-символьных слов без повторяющихся букв

Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Процедура Команда4(Команда)
    
    Разделитель = ",";
Массив = Новый Массив;
МассивЧисел = Новый Массив;
Строки = СтрЗаменить(Строка, Разделитель, Символы.ПС);
Для Индекс = 1 По СтрЧислоСтрок(Строки) Цикл
ЭлементСтроки = СтрПолучитьСтроку(Строки, Индекс);
 
 
Попытка
ЭтоЧисло=Число(ЭлементСтроки);
МассивЧисел.Добавить(ЭтоЧисло);
Исключение
    Если СтрДлина(ЭлементСтроки)=5 
        
                
              Тогда
             
Массив.Добавить(ЭлементСтроки);
Сообщить( ЭлементСтроки );
КонецЕсли;
  КонецПопытки;
КонецЦикла;
Число=pow(МассивЧисел [0],3);
Сообщить(Число)   ;
КонецПроцедуры

Натолкните на решение проблемы. Не могу реализовать проверку элементов строки , задействовал
Код 1C
1
СтрЧислоВхождений  
, без результативно
Ответ: Первое, что в голову пришло.
Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Процедура Команда1(Команда)
    массивСлов = новый Массив;
    массивСимволов = новый Массив;
    генератор = новый ГенераторСлучайныхЧисел;
    слово = "";
    
    длинаСлова = 5;
    количествоСлов = 10;
        
    для индекс = 1040 по 1103 цикл // [А-Я][а-я]
        массивСимволов.Добавить(индекс);
    конеццикла;
    
    если ((количествоСлов * длинаСлова) > массивСимволов.Количество()) тогда
        Сообщить("Диапазон символов меньше чем, количество допустимых комбинаций символов");
        возврат;
    конецесли;
 
    Сообщить("Новый набор слов");
        
    для индекс = 0 по (количествоСлов - 1) цикл // количество слов
        для инд = 0 по (длинаСлова - 1) цикл // длина одного слова   
            случайноеЧисло = генератор.СлучайноеЧисло(0, массивСимволов.ВГраница());
            слово = слово + Символ(массивСимволов[случайноеЧисло]);
            массивСимволов.Удалить(случайноеЧисло);
        конеццикла;
            
        сообщить(слово);        
            
        массивСлов.Добавить(слово); 
        слово = "";
    конеццикла;
КонецПроцедуры
Вопрос: Как добавить в массив табличную часть выделенного из списка документа

Добрый день. Не когда не занимался программирование 1с. Приходиться изучать. Подскажите как реализовать данную задачу.
Мне нужно что бы из выделенного из списка документа по кнопке добавить загрузит табличную часть в массив. которым я в дальнейшем заполню таблицу значений. Как заполнить массив из открытого документа я знаю. А как из выделенного я пока не могу понять и нагуглить. Может это и невозможно вообще. Если есть обработка похожая буду рад если кто скинет.
Ответ: polax, перевожу его слова как я понял :
он выделил один документ, нажал кнопку - добавилось в тч
выделил другой - добавилось ещё раз. тогда может быть две вторых строки, восемь третьих и прочее(наверно)

а мой совет был в том, что задачу надо ставить целиком сразу.
а второй совет - что номер строки последней можно передавать в качестве параметра
как-то так.
Вопрос: Слова Рус/Лат

Как-то в УАТ сталкивался с задаче исправлять в гос. номерах автотранспорта латинские буквы на русские. Например, есть лат. символы по написанию очень  похожие на рус.: C, T,  P, Y, X и т.д. Там просто заменой исправлялось. Теперь задача посложнее: в наименованиях , артикулах, описаниях номенклатуры могут встречаться "слова" (отделенные от остальных символов пробелами или спец. символами: - / \ ( ) [ ] , ;...) лат. символов, но тогда они все должны быть лат. Например, есть S, V, Z, W - никак не похожих на русские, и в слове русские похожие на лат. Тогда все буквы этого слова нужно исправить на лат. И наоборот.
Не типичная для 1С задача (больше для веб-сайтов), но может известны готовые решения для 1С?
Ответ: () Идея понравилась:

// Русские буквы без аналогов латинских

//
Функция РусБуквы() Экспорт
    Возврат "ЙЦГШЩЗЪФЫПЛДЖЭЯЧИЬБЮ";
КонецФункции

// Русские буквы аналоги латинских

//
Функция РусАналоги() Экспорт
    Возврат "АВЕКМНОРСТХУ";
КонецФункции

// Латинские буквы без аналогов русских

//
Функция ЛатБуквы() Экспорт
    Возврат "QWRUISDFGJLZVN";
КонецФункции

// Латинские буквы аналоги русских

//
Функция ЛатАналоги() Экспорт
    Возврат "ABEKMHOPCTXY";
КонецФункции

Функция ВсеБуквы() Экспорт
    Возврат РусБуквы() + РусАналоги() + ЛатБуквы() + ЛатАналоги();
КонецФункции

// Осуществляет поиск первого слова с комбинацией рус./лат. букв

// РусЛатСлово - найденное первое слово
// ИсправленноеСлово - сформированное исправленное слово, если исправление возможно

// Возвращает Истина для найденного РусЛатСлово
Функция НайтиРусЛатСлово(Строка, РусЛатСлово = "", ИсправленноеСлово = "") Экспорт
    ЕстьРусБуквы = Ложь; ЕстьРусАналоги = Ложь; ЕстьЛатБуквы = Ложь; ЕстьЛатАналоги = Ложь;
    Для СчетчикСимволов = 1 По СтрДлина(Строка) Цикл
        Символ = Сред(Строка, СчетчикСимволов, 1);
        ПредыдущийСимвол = Прав(РусЛатСлово, 1);
        Если (Найти(ВсеБуквы(), ВРег(ПредыдущийСимвол)) = 0) = (Найти(ВсеБуквы(), ВРег(Символ)) = 0) Тогда
            РусЛатСлово = РусЛатСлово + Символ;
        Иначе// конец РусЛатСлово

            Если Не ПустаяСтрока(РусЛатСлово) Тогда
                Если ЕстьРусБуквы И ЕстьЛатБуквы Тогда
                    Возврат Истина;// Неисправляемая комбинация рус./лат. букв

                ИначеЕсли ЕстьРусБуквы И ЕстьЛатАналоги Тогда
                    ИсправленноеСлово = ИсправленноеРусЛатСлово(РусЛатСлово, Истина);
                    Возврат Истина;// Исправленное на русское

                ИначеЕсли ЕстьЛатБуквы И ЕстьРусАналоги Тогда
                    ИсправленноеСлово = ИсправленноеРусЛатСлово(РусЛатСлово, Ложь);
                    Возврат Истина;// Исправленное на латинское

                КонецЕсли;
                РусЛатСлово = "";
              КонецЕсли;
            ЕстьРусБуквы = Ложь; ЕстьРусАналоги = Ложь; ЕстьЛатБуквы = Ложь; ЕстьЛатАналоги = Ложь;
        КонецЕсли;
    КонецЦикла;
    Возврат Ложь;
КонецФункции

// Исправляет комбинацию рус./лат. букв строки на русскую,

// при РусЛатИсправление = Истина, или наоборот - латинскую
Функция ИсправленноеРусЛатСлово(Строка, РусЛатИсправление) Экспорт
    ИсправленноеСлово = "";
    Для СчетчикСимволов = 1 По СтрДлина(Строка) Цикл
        Символ = Сред(Строка, СчетчикСимволов, 1);
        ИндексАналога = Найти(?(РусЛатИсправление, ЛатАналоги(), РусАналоги()), Символ);
        ИсправленноеСлово = ИсправленноеСлово + ?(ИндексАналога = 0, Символ, Сред(?(РусЛатИсправление, РусАналоги(), ЛатАналоги()), ИндексАналога, 1));
    КонецЦикла;
    Возврат ИсправленноеСлово;
КонецФункции

Пока не проверял...
Вопрос: Слово в строке в верхнем регистре

Как определить все ли буквы у слова в строке заглавные, в верхнем регистре ?
Ответ: слово = врег(слово)
Вопрос: Массивы 1С Программирования

И так, это снова я, товарищи
Нужна ваша ценная помощь, уже несколько часов пытаюсь выполнить следующие задание, не получается сделать как нужно.
Вот задание и скриншот что должно получится:
ЗАДАНИЕ:
1. Создайте массив из 7 элементов
2. Задайте элементам массива следующие значения: 21, 4, 1, 5, 23, 12, 18
3. Сообщите: в окно сообщений - текст МАССИВЫ
4. Сообщите: кол-во элементов в массиве, используя программный метод – количество()
5. Сообщите: наибольший индекс массива с помощью соответствующего метода
6. Выведите созданный массив с помощью оператора.

Ответ:
1C
1
2
3
4
5
6
    Массив = Новый Массив(10);
 
    Для сч=-Массив.ВГраница() По 0 Цикл 
        Сообщить((-сч));
        Сообщить("Массив["+(-сч)+"]="+Массив[-сч]);
    КонецЦикла; 
Вопрос: Передать массив с сервера на клиент

Массив заполняется в процедуре на сервере , как мне его передать на клиент? или можно ли объявить массив, который был видел бы и на клиенте и на сервере?
Ответ:
Сообщение от ZxcR
Не подскажите как в нескольких процедурах использовать один и тот же массив? допустим в одной процедуре я изменил массив, а в другой хочу уже с изменённым массивом работать
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
&НаСервере
Функция МассивДанных()
  Массив = Новый Массив;
  Массив.Добавить("Привет");
  Возврат Массив
КонецФункции
 
&НаКлиенте
Процедура Вызов()
  Массив = МассивДанных();
  Массив = ДругоеИспользованиеМассива(Массив );
  Массив.Добавить("Здравствуй");
  //в итоге 3 элемента
КонецПроцедуры
 
&НаСервереБезКонтекста
Функция ДругоеИспользованиеМассива(Массив)
  Массив.Добавить("Пока");
  Возврат Массив
КонецФункции
Вопрос: 1С + внешние источники данных MS SQL 2005: не работает поиск слов на русском

Платформа 1С 8.2.18. Подключил внешний источник данных (MS SQL SERVER 2005). Вывожу таблицу склсервера в форму списка ( управляемый интерфейс). Пробую поиск по значению текстового поля. Латинскими буквами поиск работает, а русскими нет. Через меню "Все действия\настройка списка\отбор" тот же результат.
В SSMS делаю запрос с условием WHERE поле LIKE N'%тест%' находит все записи
Если без N : WHERE поле LIKE '%тест%' - не работает
Хотелось бы использовать стандартные средства поиска/отбора. Как решить задачу поиска русских слов.
И второй вопрос. Можно ли использовать полнотекстовый поиск для внешних источников данных. На стороне сервера Full-text index включён, настроен и работает.
Ответ: Разобрался.
У сервера, таблицы и даже поля свойство collation установлено в Cycillic_general_CI_AS
а у базы данных collation = latin1_general_CI_AS
После изменения свойства БД в Cycillic_general_CI_AS поиск русских слов отработал.
Вопрос: Вывод максимального элемента двумерного массива

[1C]Есть двумерный массив 5 на 5 элементов
Вывести максимальный элемент всего массива
Ответ: Евгений1212,
Кликните здесь для просмотра всего текста
1C
1
2
3
4
5
6
Максимум = Массив[0][0];
Если Массив[0][1] > Максимум Тогда Максимум = Массив[0][1];
Если Массив[0][2] > Максимум Тогда Максимум = Массив[0][2];
Если Массив[0][3] > Максимум Тогда Максимум = Массив[0][3];
.....
Если Массив[4][4] > Максимум Тогда Максимум = Массив[4][4];
Вопрос: Представление массива в СКД

Есть задача выводить массив значений в поле отчета на СКД. Массив получается процедурой общего модуля и присваивается значению вычисляемого поля. Прописал выражение представления, чтобы выводилось через точку с запятой, все ОК, работает. Но это был простенький отчет с одним набором данных, одним вычисляемым полем, и все это выводится СКД в табличный документ.

Теперь пытаюсь сделать так же в отчете с использованием макетов в СКД. Сделал все то же самое с вычисляемым полем. Добавил поле в макет, прописал параметр, расшифровку. В результате выражение представления в вычисляемых полях теперь не срабатывает. Поле заполняется массивом и представление выглядит как "Массив".

Когда делаешь макет для этого поля надо где-то прописать еще представление? Не могу найти, где, подскажите.

У конфы стоит режим совместимости с 8.2.13, и это обычные формы
Ответ: На самом деле, оказалось, не так работает. Представление то получает правильно, но далее мне нужно обработать расшифровку, и в расшифровке лежит значение типа "Строка", когда я использую таким образом как в () функцию Представление()
Если же я не использую функцию Представление(), то у меня в ячейке отображается имя типа "ХранилищеЗначения" (от идеи с массивом я отказался). Но зато при расшифровке я могу использовать данные из хранилища.

Короче, когда представление правильно, но не добраться до данных, когда могу добраться до данных, то представление никак не сформировать нормально