1. 1C / Говнокод #3880

    −128

    1. 1
    2. 2
    3. 3
    4. 4
    ПолучитьСтроку();
    Пока КоличествоСтрок() <> 0 Цикл
    	УдалитьСтроку();
    КонецЦикла;

    Новый способ удаления всех строк из документа. Похоже, что разработчик не ведает о существовании метода УдалитьСтроки();

    Запостил: SSNick, 05 Августа 2010

    Комментарии (25) RSS

    • Вся процедура выглядела следующим образом:
      Процедура ОчисткаТаблицы()
      Если ВыбратьСтроки() = 1 Тогда
      ПолучитьСтроку();
      Пока КоличествоСтрок() <> 0 Цикл
      УдалитьСтроку();
      КонецЦикла;
      КонецЕсли;
      КонецПроцедуры
      Ответить
      • ужас... меня всегда пугал этот 1с:
        - регистры (по сути - это глобальные переменные)
        - строки бесконечной длинны (не максимальной, а именно бесконечной)
        - хранилище (аналог svn)
        ------------------------------------------

        а тут:
        - куда мы записываем полученную строку?
        - зачем мы её получаем?
        - какую строку мы удаляем?

        О_о
        Ответить
        • если бы 1С был простым и понятным, миллионам студентов было бы нечем закусывать...
          Ответить
          • 1c - это не сложная для понимания система,
            но если ты изучал до этого традиционные языки программирования - ты просто офигиваешь от терминологии 1с...

            1с приветствует мышиное программирование (порядка 70% работы, выполняется мышкой: добавить элементы, свойства, связи и т.п.), т.е. разработчик практически не вникает в то как оно работает, а делает всё по шаблонам: "если поставить галочку тут - будет выводиться вот так, а если еще и тут поставить - то будет воовсе Щикаарно!"

            как бэ знания нужны:
            - терминология 1с (связь оной с традиционными языками практически отсутствует)
            - шаблоны: "как делать" (основные знания по 1с)
            - базовая бухгалтерия и экономика (чтобы понимать что делаешь)
            - чуток мозга (чтобы запомнить все шаблоны и применять в нужных местах)
            - творчество/исскуство (это разве что для скл-запросов к бд, для остального - шаблоны)

            т.е. 1с разработка - довольно утомительная, монотонная работа, которая практически не требует индивидуальности;
            основная идея 1с:
            - взаимозаменяемость сотрудников;
            обеспечивается шаблонными проектами, которые без особого углубления могут поддерживаться разными людьми;
            Ответить
            • >разработчик
              конфигуратор

              >разработка
              конфигурация

              тогда и не так дико смотриться это: `не вникает в то как оно работает, а делает всё по шаблонам: "если поставить галочку тут - будет выводиться вот так, а если еще и тут поставить - то будет воовсе Щикаарно!" '
              Ответить
            • В корне не согласен. Язык 1С 7.7 был не сложен, но с первого взгляда многое было не понятно. А вот 1С 8.1 это уже для ООП-программистов. Другое дело, что многое уже упрощено самой платформой, так это только плюс разработчикам платформы. В моей практике есть и запросы по 2 тыс строк и использование рекурсии и многое другое. Платформа подходит как для написания небольших приложений а-ля для семьи, так и для очень сложных конфигураций. Все зависит от поставленных задач.
              Ответить
              • 8.1 и ООП? не смешите мои тапки. В 8ке как и в 7ке ООП сильно ограничено, и не расширяется. ни классов своих создать (в 81 правда как классы объекты-обработки можно юзать), ни наследования какого. Хочешь "полиморфизм"? - проверяй типы вручную. ООП действительно было реализовано лишь в 1С++ - внешней компоненте к 77.

                А ваши запросы на 2000 строк... Ну уж не знаю как вы их сопровождаете, это ж жуть жутчайшая. Или это все конструктор нагенерил?
                Ответить
          • Именно потому что 1С слишком простой и понятный, миллионы студентов, закусив, высерают мегатонны говнокода.
            Ответить
        • >ужас... меня всегда пугал этот 1с:
          дык! BASIC с запяточиями, и всё это написано имперской глаголицей
          вобщем-то остальное просто, если удалось с вышесказанным смириться
          Ответить
          • 1С поддерживает 2 языка, и для всех системных функций и объектов есть соотв. английские синонимы. Имена же для своих объектов вы выбираете сами. Так что, коли желаете - пишите на англицкой латинице, никто не мешает
            Ответить
            • это не "2 языка", а алиасы (которые в нормальных языках стараются не плодить)
              от латиницы уёбищнось языка и среды исполнения не сильно уменьшится
              Ответить
              • Ну, обычно под "алиасами" подразумевается некая вторичность. Типа вот есть у нас X, но мы ему еще сделаем алиас Y, и этот Y будет "заменяться" на X. А тут X и Y - _обозначают одно_ и то же (хотя конечно разница невелика).
                Но дело даже не в том, как обозвать (алиас-не алиас). А в том что это верно не только для функций/процедур, но и для всех конструкций языка, названий типов, системных объектов и т.п. - словом для всего, кроме пользовательских объектов. Кроме того, если в свойствах конфы изменить язык на английский, то и например возвращаемые системой символьные названия типов тоже будут на английском. Т.е. в принципе на 1с может быть написана конфа не переключаясь на русский. И даже тем, кто русских буковок вообще не ведает (не знаю, были ли у Нуралиевых наполеоновские планы выйти на дальнее зарубежье, но платформа это позволяет...). Вобщем, в 1С не просто алиасы, которых остальные избегают, а 2 равнозначных подмножества языка, для разного народа :) .
                Что же касается уебищности языка - то он не уебищней тех же VB, PHP или паскакаля. А вот Sap R/3 со своим внут. языком Абап - действительно долбанутая система, что однако не мешает ей быть одной из самых дорогих учетных систем в мире.
                Беда 1С в том, что низкий порог вхождения + ориентированность исключительно на "отечественного потребителя" (и в результате часто низкая з/п программеров) приводят к тому, что на 1С пишет какой-то ненормальный народ, чей код достоин места на этом сайте.
                Ответить
                • кстати, об этом упоминается чуть менее чем в каждом треде про 1С...
                  я всё еще не бачу разницы между локализованными (це пижжено из MS Excel) ключевыми словами и алиасами, но ладно... интереснее другое: выдержит ли чудо отечественного производителя если переключить локализацию в середине набивания конфигурации
                  Ответить
                  • Упоминается наверно, потому что столь же часто возникает аргумент вроде "в 1С надо писать Пока...Цикл. Гы-гы-гы".

                    Разница в том, что в 1С изначально у объекта есть 2 имени - в структурах описывающих объекты предусмотрены отдельно 2 поля, узнать это можно например из "технологии создания внешних компонент" (ну или реверс-инжинирингом :) ). В отличии от того же ёкселя, где имена ф-ции записаны в ресурсах dll, которая берется в зависимости от локали (например, я в русском ёкселе могу написать =Дата(...), но на =Date(...) он ругнется, и соответственно в англ. локали наоборот ). Ну и разумеется, это не относится к локализации интерфейсов, интерфейс от языка не зависит, его можно хоть китайским сделать.
                    Ответить
                  • Переключение языка "чудо" выдержит, т.к. код останется синтаксически корректным. А вот выдаваемые системными ф-циями строки (практически значимой является только ф-ция ТипЗначенияСтр(), которая возвращает строковое имя типа) будут английскими. И естественно если прог не озаботится сравнивать с их английскими названиями - логика работы пойдет погулять.

                    Но это относится к 77. В 8ке разработчики ушли от практики проверки типа через его название, и для сравнения типов используется специальный тип "Тип" :). Поэтому в 8 в подобном случае все будет норм.
                    Ответить
        • Это не 8ка, а 7ка. У документа единственная таб. часть. Да, и процедура очевидно выполняется в контексте документа, соответственно ПолучитьСтроку() относится к нему же (иначе бы писали что-то типа док.получитьСтроку() )

          В данном случае:
          ВыбратьСтроки() - открывает выборку строк (позиционирует некий "внутренний указатель строки" на начало таб. части, "перед первой строкой"), если у документа строки есть - вернет 1.
          ПолучитьСтроку() - передвигает "внутренний указатель" на следующую строку (в данном случае - на первую).
          УдалитьСтроку() - удаляет текущую строку (на который указывает "внутренний указатель", сорри за тавтологию).
          При этом таб. часть "сдвигается" вверх, и текущей строкой становится следующая (это кстати нигде не описано, но работает именно так). Ну и дальше - грохаем строки пока не закончатся :)
          Ответить
        • регистры - это не глобальные переменные. Это таблицы.
          Ответить
      • Может это наследованный от 7.5 код (такое еще осталось?) - там просто не было "УдалитьСтроки()"
        Ответить
    • >Похоже, что разработчик
      конфигуратор, деточка, конфигуратор
      Ответить
    • Разработчик 1С? Это какой-то оксюморон.
      Ответить
    • Я на курсах 1С в методичке такую процедуру видел... они ее расписали,причем, объяснили зачем цикл "пока..."типа, после удаления строки указатель прыгает на следующую строку, и удаляет далее с пропуском строки...поэтому, надо прогонять до упора, пока не останется строк...
      ...а, потом приписка, что так не делать не стоит, поскольку, есть функция "УдалитьСтроки".Данный пример представлен, лишь, в ознакомительных целях для демонстрации вариантов удаления строк
      Ответить
    • Это из 1С:7.5 код. В 7.5 нельзя было удалить сразу все строки и писали что-то подобное.
      В 7.7 уже можно.
      Ответить

    Добавить комментарий