Как обойти любую коллекцию с помощью разных циклов. Реализация в 1С на примере массива. Читайте статьи по 1С на нашем сайте: programmist1s.ru/materialyi-po...
На данном этапе очень пригодится процедура *ОчиститьСообщения();* - позволит немного сэкономить время и удалить мусор в окне вывода сообщений пользователю. А в цикле *ДЛЯ* вместо *Количество() - 1* лучше использовать *Массив.ВГраница();* просто потому, что в теле цикла можно -случайно- это значение испортить, кроме того не нужно создавать дополнительную переменную.
Как обойти любую коллекцию с помощью разных циклов. Реализация в 1С на примере массива. Услуги 1С программиста в Москве: 1cproger.ru/ Читайте статьи по 1С на нашем сайте: programmist1s.ru/materialyi-po-1s/
У меня вопрос: Почему при создании Массива в других языках это к примеру создания TStringList и занесения в него данных с последующим вызовом. Вы не делаете такое как уничтожение объекта к примеру M.Free; или M.Clear; тем самым после вызова вторично мы не уничтожаем текущий результат выводя за место него другой если к примеру идут разные отображения данных? Заранее спасибо за ответ.
правду говорят что программист тратит 80% времени на исправление ошибок в коде. В цикле пока строчки местами поменял и опечатка в одной из переменных индекс была, не люблю длинные названия переменных.
Любопытствующий вопрос - а можно ли скрестить цикл "Пока" (в котором ведь по сути задаётся _условие_ в стартовой строке) с элементом Выборка.Следующий ?? То есть я имею в виду - допустим, у нас есть выборка, в которой все элементы - Числа, и мы задаём условие Выборка.Следующий < 700. Пройдёт ли цикл "Пока" с таким условием по _всем_ элементам выборки, которые меньше 700 (предположим общий вариант, то есть у нас есть и элементы меньшие 700, и элементы больше 700)? Или результат будет рандомным (т.е. взяв случайный элемент выборки и убедившись, что он >=700, цикл прервётся, не попробовав некоторые другие элементы, которые могли бы подойти под условие)?
создается процедура для кнопки выполнить и туда создаете массив и создаете другие процедуры и там пишите код для способов как показать элементы массива , и возвращяетесь в процедуру кнопки и туда пишите название этих процедур то есть способ показания этих элементов
"Название переменной в момент вызова процедуры и в момент ее объявления могут отличаться, но это не должно вас смущать". А почему это не должно смущать?
А почему должно? При вызове процедуры система сопоставляет переменные в момент ее вызова с переменными из ее описания, исходя из их порядка, а не исходя из их названия.
Пока в процедуру ВыводМассиваДляКаждого() вместо параметра (Массив) не поставила просто(М) - процедура не срабатывала, (упр прил), в процедуре "Пока" -выводит (Индекс находится за границами массива ) и только в проц "Для" - совпало один в один, что не так с границами? - приложение управляемое.
Вечер добрый , а если массива 2 (3,4....10)? В первом пишем М=Новый Массив() , следующий допустим М2 = Новый массив () и так далее , а в процедуре как к ним обращаться ? Спасибо .
Всё норм, вопросы пишите и постараемся ответить, я попробую, не получится, автор). ПРост ов процедуру вы в скобках кк бы ссылку на переменную(объект) вводите, получается "М" летит в процедуру и попадает в (Массив) теперь в переменной Массив содержится "М", а там это все обрабатывается.
Всё тут понятно. SublimeText3 установите и на него поставьте плагин 1с. Пишите в нём, а потом переносите в 1с. Лично мне так намного удобнее и понятнее
У нас 2 Процедуры: "КнопкаВыполнитьНажатие" и "ВыводМассиваДляКаждого". В процедуре "КнопкаВыполнитьНажатие" мы вызываем процедуру "ВыводМассиваДляКаждого", т.е. вызываем доп. процедуру в основной процедуре (условно); Далее, в доп. процедуре "ВыводМассиваДляКаждого" у нас есть ПАРАМЕТР "Массив" - сейчас это просто ПАРАМЕТР без значения, мы в этот параметр ничего не помещали и это не инициализированная переменная (прочитайте еще раз). НО. Когда мы поместим в ПАРАМЕТР некое значение, что с ним должно произойти? Это значение параметра считывается и передается в тело модуля доп. процедуры (прочитайте ще раз), т.е. это значение уйдет в цикл "Для Каждого ЭлементаМассива из Массив Цикл", а конкретно значение параметра в этой строчке передается в слово "Массив" (прочитайте ще раз). Когда в основной процедуре мы вызываем доп процедуру, мы теперь уже передаем в ПАРАМЕТР некое значение, а конкретно - наш МАССИВ "М", а его значение автоматически передается в тело процедуры. Фактически, в доп. процедуре можете поменять "Массив" хоть на "член" или что угодно, но будьте добры и поменять на аналогичное слово и в Вашем цикле, ибо когда Вы в основной процедуре вы вызовите доп. процедуру и подставите туда Ваш массив "М" из урока, то компилятор такой скажет: "Бро, я получил на вход доп. процедуры в качестве параметра твой массив "М", но я без понятия куда мне его передавать. Ибо в доп. процедуре не определено куда мне передавать значения параметра член". ( )
У тебя есть процедура с параметром Массив. Т.е. в эту процедуру ты будешь передавать массив. Но! Один раз ты передашь к примеру М1 из одной процедуры в эту и параметр Массив получит массив М1, а в другой процедуре ты можешь передавать в эту же процедуру параметр М2(совершенно другой массив) и параметр Массив будет теперь равняться М2.
А не обязательно писать на русском, можно как привычно (при этом 1с всё понимает): Procedure OutputArrayWhile(Array) Message("Вывод элементов массива ""While"""); Index = 0; Amount = Array.Count(); While Index < Amount Do Message(Array[Index], MessageStatus.Attention); Index = Index + 1; EndDo EndProcedure
@@user-tj8fm3pk6l главное, чтобы другие программисты при этом понимали, что вы пишете. Ведь после вас программу будет обслуживать кто-то еще. И не исключено, что когда-нибудь вы будете участвовать в групповой разработке. И вряд ли вы долго протянете, если будете идти против системы )
Выдавал ошибку "Определения процедур и функций должны размещаться перед операторами тела модуля", пока не поменял местами процедуры. На первом месте с объявлением массива. Почему так?
"Обход коллекций" не совсем правильное название, корректнее было бы назвать "перебором элементов коллекций и т.п"., т.к. обход подразумевает другое совсем назначение...
не знаю, у меня пишет ошибку "{ВнешняяОбработка.РаботаСЦиклами.Форма.Форма.Форма(32,29)}: Ожидается ключевое слово 'Цикл' ('Do') Пока Индекс < Количество
Написал первый раз код по видео в точь точь ничего не сработало, программа не видела .Количество() Потом всё удалил переписал своими словами и о чудо заработало
Вывод элементов массива для цикла Пока не работает - в процедуре ошибка на операторе Колчичество, т.к. переменная не определена как массив. А Илья как раз не показал работу этого варианта вывода.
Название видео - "обход коллекций". А почему то только один вид коллекции проходят - массив. А как же структура, соответствие, и так далее... там есть свои нюансы.
За запись видео и за его оформление / публикацию отвечают разные люди, поэтому и получаются такие несостыковки. У меня не было цели в этом видео рассказывать про другие коллекции.
Что не так? 18 раз пересматриваю. переделываю {ВнешняяОбработка.РоботаЗЦиклами.Форма.Форма.Форма(15,3)}: Определения процедур и функций должны размещаться перед операторами тела модуля
Плохим тоном считается при написании кода, а тем более для обучения в видео, делать сокращения переменных до бессмыслицы. Неужели было трудно вместо "М" написать просто "НашМассивДанных" к примеру.