Бухгалтерия / Говнокод #3880 Ссылка на оригинал

0

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

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

Запостил: SSNick SSNick, (Updated )

Комментарии (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С:7.5 код. В 7.5 нельзя было удалить сразу все строки и писали что-то подобное.
    В 7.7 уже можно.
    Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8