Факультет ИСиТ Суббота, 10.06.2023, 00:50
Приветствую Вас Гость | RSS
[ Персональный раздел · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 3 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Факультет ИСиТ СыктГУ - Форум » Компьютеры / Интернет / Информационные системы и технологии » Программирование » Программирование в 1С
Программирование в 1С
tersus Дата: Воскресенье, 15.04.2012, 22:03 | Сообщение # 41
Профессор
Группа: СуперАктив
Сообщений: 2831
Награды: 0
Статус: Offline
Quote (Ghost)
по признаку используемых языков


"барыга" это не разработчики использующие определенный язык, это больше об отношении к языку, как виду творчества. Барыгам всё равно на чем получать свои 30 серебренников.



Судьба даёт нам меньше, чем мы хотим, поэтому если просить мало, можно не получить вообще ничего.
 
Sanny Дата: Понедельник, 16.04.2012, 01:11 | Сообщение # 42
Правдоборец
Группа: СуперАктив
Сообщений: 6285
Награды: 0
Статус: Offline
tersus, ты слишком узко мыслишь. Рассматриваешь программирование как замкнутое само на себя. Но ведь оно никому не нужно без предметной области. Современный разработчик, если он пишет не очередной никому не нужный плеер, а учетную систему в некой сфере бизнеса должен хорошо разобраться в этой сфере. А изучение и проектирование бизнес-процессов лично для меня намного интереснее чем писать тонны пусть даже очень кошерного кода. Конечно, если понадобится, то можно нанять людей которые будут набивать красивый код по созданным мной алгоритмам. Но зачем нужны эти бездушные кодеры когда сама платформа может выполнить их работу?
1С как раз таки позволяет сосредоточиться именно на описании предметной области и алгоритмов, избавляя разработчика от рутинных операций по созданию необходимых объектов. Все объекты уже включены в платформу и представлены в удобном виде (в виде метаданных). Это очень облегчает и ускоряет разработку конечного решения. А скорость разработки в нашем быстроменяющемся мире это один из ключевых факторов.
Когда я разрабатываю конфигурацию с нуля, то сразу использую готовые прототипы: планы счетов, справочники, документы, константы, регистры и еще множество других. Набор метаданных в 1С 8.2 очень велик.
Готовые механизмы встроенную в платформу (бухгалтерские итоги, сложные периодические расчеты, оперативный учет и т.д.) это очень мощные и удобные инструменты.

И насчет отсутствия творчества в 1С ты не прав. Просто разработчик 1С сразу занимается самой сутью отбросив рутину. Есть огромное множество красивых, рациональных и многофункциональных решений созданных 1Сниками.

Конечно ввиду большой распространенности 1С развелось слишком много посредственностей которые компрометируют специальность программист 1С и платформу в целом. Но это всего лишь издержки популярности. Если они все разом перейдут на питон, то это не значит, что они начнут писать замечательный код.
Между прочим, раздел Python на этом сайте популярнее раздела 1С smile


У меня есть план - выпить столько, сколько смогу. Отличный план!

Сообщение отредактировал Sanny - Понедельник, 16.04.2012, 09:59
 
Ghost Дата: Понедельник, 16.04.2012, 01:19 | Сообщение # 43
Профессор
Группа: Модераторы
Сообщений: 2963
Награды: 0
Статус: Offline
Sanny, в России многие используют английский синтаксис 1С? Программирование на русском вызывает у меня отвращение smile

Сообщение отредактировал Ghost - Понедельник, 16.04.2012, 01:54
 
Sanny Дата: Понедельник, 16.04.2012, 01:29 | Сообщение # 44
Правдоборец
Группа: СуперАктив
Сообщений: 6285
Награды: 0
Статус: Offline
В России практически никто не использует.
Видел краем глаза 1Сную конфигурацию которая внедрена на одном из алмазных рудников где то в африке, так она полностью на английском, хотя написана нашими.
В Китае сейчас резко растет популяроность 1С. Тоже все пишется на инглише.


У меня есть план - выпить столько, сколько смогу. Отличный план!
 
tersus Дата: Понедельник, 16.04.2012, 12:54 | Сообщение # 45
Профессор
Группа: СуперАктив
Сообщений: 2831
Награды: 0
Статус: Offline
Quote (Sanny)
Рассматриваешь программирование как замкнутое само на себя.


Я говорю не про автоматизацию бизнес-процессов, эта тема намного интереснее, но на данном форуме нет достаточно компетентного и интересного сообщества, чтобы это про смаковать. При хорошем проектировании Workflow, его можно закодить и в гроссбухе и будет нагляднее и удобнее.

Quote (Sanny)
А изучение и проектирование бизнес-процессов лично для меня намного интереснее


Вот и я, что ты будующий топ-манагер и кодирование для тебя только временный хлеб, а эта тема посвященная языку 1С, если я не прав, то киньте в меня камнем. Хобби у тебя уже есть, в виде гонять танками по грязи. Так что ждем тебя в журнале Форбс. А здесь больше беседы гиков и ботанов об изяществе языка.

Quote (Sanny)
Просто разработчик 1С сразу занимается самой сутью отбросив рутину.


Уф. Кодировать бухучёт уже не нужно, всё и так есть. 1С дальше автоматизации бухучёта не идёт, а мир интереснее и хочется большего. Подключить кофемашину или утюг, уже не представляется возможным в 1С, если не с бубном. 1С для лавочников. Ну не суть. Забыли таки. Прилепить в виде виджета также не представляется возможным.

Трудно пользовать философию Model-view-controller (MVC, «Модель-представление-поведение», «Модель-представление-контроллер») — схема использования нескольких шаблонов проектирования, с помощью которых модель данных приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента так, что модификация одного из компонентов оказывает минимальное воздействие на остальные. Долго объяснять. Расстанемся пока хорошие.

Quote (Sanny)
Есть огромное множество красивых, рациональных и многофункциональных решений созданных 1Сниками.

Никто не спорит. Это больше говорит о мастерстве кодера.

Quote (Sanny)
Между прочим, раздел Python на этом сайте популярнее раздела 1С

Это больше говорит в пользу Питона, нежели 1С. Говнокод говномастер просто не замечает.))) Да и суть больше в поддержании кода, не в искусстве написания.

А это классика жанра. Любаяфункция,даже у 1С-овщков на несколько страниц.

Code
Функция ПреобразованиеДаты(Дата) Экспорт
Если НЕ ПустаяСтрока(Дата) Тогда    
    ГодКраткий = Прав(Дата, 2);
    Если   ГодКраткий = "83" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1983";     
     ИначеЕсли   ГодКраткий = "84" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1984";
     ИначеЕсли   ГодКраткий = "85" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1985";    
     ИначеЕсли   ГодКраткий = "86" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1986";    
     ИначеЕсли   ГодКраткий = "87" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1987";    
     ИначеЕсли   ГодКраткий = "88" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1988";    
     ИначеЕсли   ГодКраткий = "89" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1989";    
     ИначеЕсли   ГодКраткий = "90" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1990";    
     ИначеЕсли   ГодКраткий = "91" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1991";    
     ИначеЕсли   ГодКраткий = "92" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1992";    
     ИначеЕсли   ГодКраткий = "93" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1993";    
     ИначеЕсли   ГодКраткий = "94" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1994";    
     ИначеЕсли   ГодКраткий = "95" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1995";    
     ИначеЕсли   ГодКраткий = "96" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1996";    
     ИначеЕсли   ГодКраткий = "97" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1997";    
     ИначеЕсли   ГодКраткий = "98" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1998";    
     ИначеЕсли   ГодКраткий = "99" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "1999";    
     ИначеЕсли   ГодКраткий = "00" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "2000";    
     ИначеЕсли   ГодКраткий = "01" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "2001";    
     ИначеЕсли   ГодКраткий = "02" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "2002";    
     ИначеЕсли   ГодКраткий = "03" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "2003";    
     ИначеЕсли   ГодКраткий = "04" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "2004";    
     ИначеЕсли   ГодКраткий = "05" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "2005";    
     ИначеЕсли   ГодКраткий = "06" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "2006";    
     ИначеЕсли   ГодКраткий = "07" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "2007";    
     ИначеЕсли   ГодКраткий = "08" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "2008";    
     ИначеЕсли   ГодКраткий = "09" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "2009";    
     ИначеЕсли   ГодКраткий = "10" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "2010";    
     ИначеЕсли   ГодКраткий = "11" Тогда
      ДатаНовая = "" + Лев(Дата,6) + "2011";        
     КонецЕсли;

ДатаЗначение = Дата(Сред(ДатаНовая,7,4),Сред(ДатаНовая,4,2),Сред(ДатаНовая,1,2));    
Возврат ДатаЗначение;    
КонецЕсли;
КонецФункции


Судьба даёт нам меньше, чем мы хотим, поэтому если просить мало, можно не получить вообще ничего.

Сообщение отредактировал tersus - Понедельник, 16.04.2012, 13:08
 
eXceed Дата: Понедельник, 16.04.2012, 13:35 | Сообщение # 46
Профессор
Группа: СуперАктив
Сообщений: 5731
Награды: 0
Статус: Offline
Поясните позязя этот пример на 1С. А то я мозг сломал.

Quote
Трудно пользовать философию Model-view-controller


имхо в 1С MVC не реализуемо.

Quote
гонять танками по грязи


За то он успешен. Гоняет на такой то божественной ниве по грязи, а не отращивает геморрой. Хотя...


bda-expert.ru — это система форумов, где можно общаться быстро и свободно, где любая точка зрения имеет право на жизнь.
 
tersus Дата: Понедельник, 16.04.2012, 14:30 | Сообщение # 47
Профессор
Группа: СуперАктив
Сообщений: 2831
Награды: 0
Статус: Offline
Quote (eXceed)
А то я мозг сломал.


Переводить,например 01.01.1901 -> 01.01.2001 Проблема 2000 года))))


Судьба даёт нам меньше, чем мы хотим, поэтому если просить мало, можно не получить вообще ничего.
 
eXceed Дата: Понедельник, 16.04.2012, 15:19 | Сообщение # 48
Профессор
Группа: СуперАктив
Сообщений: 5731
Награды: 0
Статус: Offline
Я понял что он переводит. Есть пример работы?

bda-expert.ru — это система форумов, где можно общаться быстро и свободно, где любая точка зрения имеет право на жизнь.
 
win32 Дата: Понедельник, 16.04.2012, 18:22 | Сообщение # 49
Ассистент
Группа: Актив
Сообщений: 499
Награды: 0
Статус: Offline
 
Sanny Дата: Понедельник, 16.04.2012, 19:07 | Сообщение # 50
Правдоборец
Группа: СуперАктив
Сообщений: 6285
Награды: 0
Статус: Offline
Quote (eXceed)
Поясните позязя этот пример на 1С. А то я мозг сломал.

Сделано конечно топорно, но смысл сразу ясен.

На входе имеется строка например такая "16 04 12". Нужно преобразовать её в тип Дата.

Всё что написано в этой функции можно реализовать, например, вот так:
Code
Возврат ?(Число(Сред(Дата,7,1))>3,Дата("19"+Сред(Дата,7,2),Сред(Дата,4,2),Сред(Дата,1,2)),Дата("20"+Сред(Дата,7,2),Сред(Дата,4,2),Сред(Дата,1,2)));

Нечитабельно, но зато одной строкой smile

Вот более элегантный вариант:
Code
      
      Если Число(Сред(Дата,7,1))>3 Тогда
       Век = "19";
      Иначе
       Век = "20";
      КонецЕсли;      
      ДатаЗначение = Дата(Век+Сред(Дата,7,2),Сред(Дата,4,2),Сред(Дата,1,2));
      Возврат ДатаЗначение;


Пока это всё, что я придумал. Сейчас спрошу у камрадов 1Сников, может есть ещё более кошерный способ.

Теперь очередь за вами. Покажите как эта задача решается на питоне? Ну или на каких то других правильных языках.


У меня есть план - выпить столько, сколько смогу. Отличный план!

Сообщение отредактировал Sanny - Понедельник, 16.04.2012, 19:39
 
Sanny Дата: Понедельник, 16.04.2012, 21:21 | Сообщение # 51
Правдоборец
Группа: СуперАктив
Сообщений: 6285
Награды: 0
Статус: Offline
Quote (eXceed)
имхо в 1С MVC не реализуемо.

Вполне реализуемо: http://infostart.ru/public/74872/
Просто необходимости как таковой нет.


У меня есть план - выпить столько, сколько смогу. Отличный план!
 
tersus Дата: Понедельник, 16.04.2012, 23:26 | Сообщение # 52
Профессор
Группа: СуперАктив
Сообщений: 2831
Награды: 0
Статус: Offline
Quote (Sanny)
Пока это всё, что я придумал. Сейчас спрошу у камрадов 1Сников, может есть ещё более кошерный способ.

Теперь очередь за вами. Покажите как эта задача решается на питоне? Ну или на каких то других правильных языках.


Аналогично. ))) Закопайте тему. При быстрой разработке все средства хороши.


Судьба даёт нам меньше, чем мы хотим, поэтому если просить мало, можно не получить вообще ничего.
 
Sanny Дата: Понедельник, 16.04.2012, 23:37 | Сообщение # 53
Правдоборец
Группа: СуперАктив
Сообщений: 6285
Награды: 0
Статус: Offline
Quote (tersus)
Закопайте тему.

Ну уж нет! Не успокоюсь пока не увижу реализации на питоне!


У меня есть план - выпить столько, сколько смогу. Отличный план!
 
eXceed Дата: Вторник, 17.04.2012, 11:41 | Сообщение # 54
Профессор
Группа: СуперАктив
Сообщений: 5731
Награды: 0
Статус: Offline
Отвечаю:
Code

# -*- coding: utf-8 -*-

__author__ = 'nobiiru'

import time

def main():
     datestring = '16 04 12'
     print('Парсим строку и приводим к типу datetime')
     c = time.strptime(datestring, '%d %m %y')
     print('Преобразуем в нужный нам формат')
     print time.strftime('%d %b %Y', c)
     print('???\nНу ты понял :3')

if __name__ == "__main__":
     main()


/usr/bin/python /home/nobiiru/developing/python/datetimefun/datetimefun.py
Парсим строку и приводим к типу datetime
Преобразуем в нужный нам формат
16 Apr 2012
???
Ну ты понял :3

Process finished with exit code 0


bda-expert.ru — это система форумов, где можно общаться быстро и свободно, где любая точка зрения имеет право на жизнь.
 
tersus Дата: Вторник, 17.04.2012, 13:31 | Сообщение # 55
Профессор
Группа: СуперАктив
Сообщений: 2831
Награды: 0
Статус: Offline
Quote (Sanny)
Ну уж нет! Не успокоюсь пока не увижу реализации на питоне!

Такой ситуации там не может быть. Дата хранится в "человеческом" виде, а не усечённом. Нет такого "16.04.12", а есть количество миллисекунд со дня рождения UNIX-систем. Штамп времени.

Quote (Sanny)
Если Число(Сред(Дата,7,1))>3 Тогда
       Век = "19";
      Иначе
       Век = "20";
      КонецЕсли;      
      ДатаЗначение = Дата(Век+Сред(Дата,7,2),Сред(Дата,4,2),Сред(Дата,1,2));
      Возврат ДатаЗначение;


А дату "01.01.40" данный код преобразует в "01.01.1940". Так и будем закладывать кругом бомбы.))) В этом весь 1С.


Судьба даёт нам меньше, чем мы хотим, поэтому если просить мало, можно не получить вообще ничего.

Сообщение отредактировал tersus - Вторник, 17.04.2012, 13:39
 
Sanny Дата: Вторник, 17.04.2012, 14:14 | Сообщение # 56
Правдоборец
Группа: СуперАктив
Сообщений: 6285
Награды: 0
Статус: Offline
eXceed, спасибо за пример! Наконец то пошел хоть какой то конструктив.
Есть пара вопросов.
Quote (eXceed)
c = time.strptime(datestring, '%d %m %y')

Как функция strptime определяет к какому веку отнести год обозначенный двумя цифрами? Мне пришлось век явно указывать из предположения, что входящая дата является чьей то датой рождения и человек должен быть ныне здравствующим. Соответственно все, что меньше 30 я отношу к 21-му веку, а все что больше к 20-му.
И как эта функция определяет разделители между значащими частями строки? Сработает ли код, в случае если строка будет такой '16.04.12' или такой '16/04/12'?

Quote (tersus)
Такой ситуации там не может быть.

Ты не понял условия задачи. Дата в 1С тоже хранится в нормальном виде, с часами, минутами и секундами. По приведенному тобой в посте #45 примеру быдлокода видно, что человек парсит строку с датой пришедшей извне. Возможно, из текстового файла или какой то таблицы, куда эта дата занесена обычным текстом. Основная проблема в том, что входящие данные не полные - нет указания на век. Остается только его угадывать, применяя здравый смысл. Понятно, что в идеале надо требовать уточнения данных от источника. Но если это невозможно, как бы ты сам решил эту задачу?


У меня есть план - выпить столько, сколько смогу. Отличный план!

Сообщение отредактировал Sanny - Вторник, 17.04.2012, 14:33
 
tersus Дата: Вторник, 17.04.2012, 16:21 | Сообщение # 57
Профессор
Группа: СуперАктив
Сообщений: 2831
Награды: 0
Статус: Offline
Quote (Sanny)
Дата в 1С тоже хранится в нормальном виде, с часами, минутами и секундами.

Ну да? Там специальный костыль, чтобы дату двигать. Указываешь, что с 1942 года считать началом века и усё.



В 8 версии нет такого, ибо там нет dbf.

Quote (Sanny)
что человек парсит строку с датой пришедшей извне.

Он парсит именно дату, а не строку(Он вообще не проверяет, что это дата, а только на ПУСТОЕ ЗНАЧЕНИЕ). Это известный баг 1С. Только он не читал книгу по 1С языку. Это пример для 1с 7.7. Такая фигня там есть. Возможно пример прискакал из 7.5, но год смущает (2011, дольше видимо он жить не собирался)

Quote (Sanny)
Остается только его угадывать, применяя здравый смысл.

Ошибка проектирования 1С транслятора. Точнее dbf базы данных.

Quote (Sanny)
Но если это невозможно, как бы ты сам решил эту задачу?

Внимательно курил манулы и обзвонил 1С. Ибо нужно подумать о следующих поколениях 1С специалистов, которые это будут поддерживать.
Прикрепления: 9861776.jpg (44.5 Kb)


Судьба даёт нам меньше, чем мы хотим, поэтому если просить мало, можно не получить вообще ничего.

Сообщение отредактировал tersus - Вторник, 17.04.2012, 16:35
 
eXceed Дата: Вторник, 17.04.2012, 16:59 | Сообщение # 58
Профессор
Группа: СуперАктив
Сообщений: 5731
Награды: 0
Статус: Offline
Sanny
Никак она не определяет. Пистон сейчас предполагает, что идет 21й век. Потому что век не указан. Тут даже Аллах не поможет, сам понимаешь. Пришлось бы городить какой то костыль. Но он был бы изящней.

Quote
И как эта функция определяет разделители между значащими частями строки? Сработает ли код, в случае если строка будет такой '16.04.12' или такой '16/04/12'?

c = time.strptime(datestring, '%d %m %y') - '%d %m %y' - шаблон даты, если там точки, то придется менять шаблон на '%d.%m.%y', ну ты понел. Чтоб не городить огород можно регекспом распарить строку и выпилить оттуда все неугодное, кроме цифр.


bda-expert.ru — это система форумов, где можно общаться быстро и свободно, где любая точка зрения имеет право на жизнь.
 
Sanny Дата: Вторник, 17.04.2012, 21:15 | Сообщение # 59
Правдоборец
Группа: СуперАктив
Сообщений: 6285
Награды: 0
Статус: Offline
Quote (tersus)
Там специальный костыль, чтобы дату двигать.

В 1С 8 всю эту муру выпилили нафиг:


Давай обсуждать современную восьмую версию, ибо 7.7 довольно старая и не поддерживается уже с 2005 года.

Quote (tersus)
Это пример для 1с 7.7.

Написано на 8-ке, потому что в 7.7 нет вот такой конструкции:
Quote
Если НЕ ПустаяСтрока(Дата) Тогда

Я склоняюсь к версии, что он откуда то извне получает эту строку (возможно из 7.7).
Прикрепления: 2622496.png (8.6 Kb)


У меня есть план - выпить столько, сколько смогу. Отличный план!

Сообщение отредактировал Sanny - Вторник, 17.04.2012, 21:30
 
tersus Дата: Вторник, 17.04.2012, 21:56 | Сообщение # 60
Профессор
Группа: СуперАктив
Сообщений: 2831
Награды: 0
Статус: Offline
Quote (Sanny)
Если НЕ ПустаяСтрока(Дата) Тогда


Уверен? Это 7.7 )))

НЕ или NOT логическое отрицание (булево отрицание НЕ) (ч.1 стр. 39)
ПустаяСтрока(<строка>) (ч.1 стр. 59)
Ну не суть, если 8 версия, то говнокод приемлем. Быстро латаем дыру и несемся в ПТО подключать мышку.))

Quote (Sanny)
Я склоняюсь к версии, что он откуда то извне получает эту строку


Ну это дата формата "DD.MM.YY" Посему нет проверки. Может так и принимает, но тогда лучше использовать OLE (дату система сконвертирует)

Quote (Sanny)
не поддерживается уже с 2005 года.


Это ошибка в архитектуре, это уже не лечится.

Quote (Sanny)
В 1С 8 всю эту муру выпилили нафиг:

Они пользуют SQL БД и посему ошибки с датами нет. Хотя некоторые sql-запросы сделаны неэффективно.


Судьба даёт нам меньше, чем мы хотим, поэтому если просить мало, можно не получить вообще ничего.

Сообщение отредактировал tersus - Вторник, 17.04.2012, 22:56
 
Факультет ИСиТ СыктГУ - Форум » Компьютеры / Интернет / Информационные системы и технологии » Программирование » Программирование в 1С
  • Страница 3 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск:



Copyright bda-expert.ru © 2008-2023Хостинг от uCoz