Проектирование начинки электрического щитка (примочка к 1С)

Число просмотров: 24 093 

ВНИМАНИЕ! Мне не хотелось бы, чтобы этот пост был опубликован на других ресурсах (репост). Я хочу сохранить за собой право на его уникальность.

Я тут в недавней статье (Ограничитель на DIN-рейку / Счастье привалило!) обещал вот что:

Или я напишу какую-нибудь прогу (или примочку к домашней 1С), в которой буду прям расставлять автоматы, и смотреть чего и сколько надо, или….

Ну так вот, получите. Я её написал, вчера за часа три. Выкладываю кусочек скриншотов своей домашней CRM-базы, в которой я считаю все свои заказы и в том числе щитки. В базе имеется штатный 1Совский документ, который называется «План щитка». Проводится он без оперативного учёта, поэтому может редактироваться и перепроводиться сколько угодно раз.

В самом документе есть огромная табличная часть, в которую при проектировании я и вбиваю список всех позиций щитка. Расстановка по DIN-рейкам сделана вручную, потому что она обычно ручная и есть: сиди, да думай. Указываем номер DIN-рейки и позицию того, что на ней будет стоять. Внизу есть строчка, в которой подсчитывается и указывается — не перегрузили ли мы рейку (не превысили ли количество модулей).

Проектирование щитка: Документ 1С для редактирования щитка

Под катом — продолжение и ещё три скриншота.

Далее есть печать списка этой самой начинки. Именно её я всем и высылаю, когда показываю, чего и сколько будет в щитке внутри. Теперь правда, со списком этих несчастных реек, таблица перестала влезать на А4, поэтому я думаю дописать свою CRM ещё немного и сделать полный и краткий вариант печати.

Проектирование щитка: Печать списка начинки щитка

Ну а теперь — самое интересное! Можно выбрать другую печатную форму (1Серам это будет понятно; другим поясняю: это как несколько кнопок «Печать того», «Печать сего»), и посмотреть полученную раскладку щитка. Польза от неё следующая — теперь можно собирать щиток прямо по нарисованному и не парить мозг (на раскладке всё равно все данные выдаются). А можно эту же раскладку пересылать клиентам в PDFНике, чтобы они сами подписывали себе автоматы и видели, что и где у них в щитке. Раньше я такие штуки чертил в Visio, но муторно это — для каждого чертить. А тут это стало ещё одной кнопочкой в той же базе, где этот щиток и проектируется. Удобно, чёрт!

Проектирование щитка: Печать раскладки автоматов (пример 1)

Проектирование щитка: Печать раскладки автоматов (пример 2) 

Ну и теперь последний штрих: конкретный список конкретной номенклатуры по этому щитку (к каждой строке привязывается объект Номенклатуры — добавилась ещё одна колонка на первом скриншоте, но мне его переделывать было лень!). Нажимаем «Печать» и получаем списочек.

Проектирование щитка: Список материалов для покупки

А ещё на основании этого документа можно будет сформировать документ «Заказ поставщику» — но это уже совсееем другая история :)

Если вас заинтересовала информация из этого поста и вы хотите со мной связаться (или заказать Сборку щита / Консультацию), то пишите мне на почту info@cs-cs.net или звоните на +7-926-286-97-35 (c 10 до 20 по Москве). Отзываюсь на имя "Электрошаман".
Невнимательных, тупых и наглых продаванов и менеджеров я буду жёстко стебать, если они не заглянут в инфу про контакты для организаций, а скорее кинутся звонить.

36 Отзывов на “Проектирование начинки электрического щитка (примочка к 1С)”


  • лучше бы конечно как отдельное приложение, вообще не завязанное на одинэс

  • 2 CS  [Москва]

    А у меня в ней весь учёт. Отдельно мне мужичок советовал, вот есть шаблончики под Visio: http://visio.artberg.ru/loading.htm#a22 («Шаблон для компоновки электрощитов по стандарту DIN»). Но я его даже не смотрел, мне прям в базе удобнее. Потому что она ДЛЯ ВСЕГО вообще :)

  • вот есть шаблончики под Visio: http://visio.artberg.ru/loading.htm#a22

    эт несерьезно ))) а вот самостоятельная программка, если конечно имеется некоторое количество знаний в программировании, в перспективе может стать вполне успешным проектом

    мне вот лично неизвестно ни одной программы для обсчета клиентов в том, что касается электропроводки.

  • 4 CS  [Москва]

    А, то-есть ты предлагаешь мне её писать? Не! Это пиздец какое решение! Чтобы её писать — надо её продавать и развивать. И всё это — с нуля. А это нипкому нафиг не нужно.
    Моя 1С может следующее:
    * Учёт бабла (вообще любого; я там домашние расходы веду), скока где есть, скока пришло, ушло, на что конкретно потратил, кто кому должен.
    * Конкретные взаиморнасчёты с контрагентами: сколько денег когда получено, на что истрачено и сколько сдачи надо вернуть.
    * Выгрузка на сайт статусов заказов (полуавтомат).
    * Огромная база данных номенклатуры с вложениями к каждой позиции (документация, картинки), свойствами (типа «Номинальный ток», «Количество модулей на DIN-рейке»). К каждой позиции может привязываться куча цен и неограниченно число фирм-поставщиков. Фишка в том, что у каждого поставщика могурт быть свои цены, И (!!) своё название этой же номенклатуры, свой штрих-код, артикул и т.д.
    Наименование номенклатуры формируется вообще автоматически на основе свойств по шаблону. Ну типа есть шаблон вида: «Автомат [Производитель] [Модель] [Число полюсов]-полюсный [Категория отключения][Номинал]А» — подставляет все значения и выдаёт красивое «Автомат ABB S201 1-полюсный C16А». Сменил шаблон — и все наименования перестроились.
    Это используется далее по ВСЕЙ базе:
    * Банальный учёт всей хрени на нескольких складах — сколько купил (и за сколько), сколько потратил, сколько осталось.
    * Контроль минимального остатка — если для какой-нибудь позиции он задан, то когда при списании со склада (или складов) её стало меньше — вылазит предупреждение типа «Внимание! Данной позиции осталось хх штук! Не забудьте пополнить запас» =) Вот например для тех же ограничителей стоит минимальный остаток в 15 штук.
    * Пока не написал — параметрический поиск по свойствам. Ну типа «А найди-ка мне круглый кабель с числом жил не менее 7 штук и сечением их не менее 1 кв.мм из тех, что не являются заказной позицией». Заказная позиция — эхто у меня галочка такая. Отмечаю те позиции, с которыми геморрой, ну не ходовые.
    * Всасывание прайсов (обновление из них цен). Пока не написал — но напишу. Идея простая: ведь у нас есть свои названия товара для каждого поставщика? Вот и выполним обратный поиск: берём xls-прайс поставщика. Читаем его построчно, и по его названию/артикулу ищем нашу позицию и обновляем её цены.
    * Формирование заказов поставщикам — вот для каждого поставщика (если задано) — будет список товаров именно в его артикулах, названиях и т.п. То-есть, у какого-нибудь Престиж’а автомат будет называться «Авт.выкл 1-полюсный C16 ABB», а у какого-нибудь АБНа будет уже «ABB S201 Автоматическй выключатель категория С, 16А».
    При этом заказ может быть как просто списком для печати (чисто бумажку тёткам принести), так и запоминаться в базе, чтобы потом вылазить в отчётах в виде списка «не забудь купить».
    * Формирование списка работ (по аналогии со списком заказов) — ну типа сметы, только потом можно отмечать выполненные работы по ней, и они будут из списка убираться. То-есть список «не забудь доделать».
    * Список выездов — куда когда надо поехать и что сделать
    * Учёт показаний электро- и водосчётчиков (квитки печатает) — от руки задолбало заполнять!
    * Новая фишка, не оттестенная ещё. Составлять что-то типа кабельных журналов, но с закосом под слаботочку. Есть такие термины:
    Место — реально, место, помещение и т.д., где может что-нибудь находиться или проходить.
    Трасса — проходит в каких-то местах (списком). Короб, лоток, труба и т.д.
    Точка — розетка, щиток, распайка, муфта и т.д. Ею начинается и кончается кабель.
    Ну и Кабель — проходит в нескольких трассах (списком), имеет начальную, конечную и какие-то промежуточные точки (типа муфт/коробок).
    Отсда можно выдать и закос под кабельный журнал — длину, где, куда и откуда проходит.
    Можно выдатть список трасс и подсчитать их коэффициент заполнения (по суммарному сеченню кабелей) и позырить, сколько свободных % осталось.

    Касательно вообще Заказа — в базе он у меня называется «Договор». То-есть у каждого контрагента (клиента) может быть несколько заказов. И инфу про то, что купить, сколько чего на складах и сколько денег — можно смотреть как целиком, так и по конкретному договору/клиенту.

    Ну и вообще — про контрагентов в принципе (клиенты, поставщики и т.д.). У них может быть неограниченное число адресов, телефонов, мыл и прочего (а не одно-два поля на всё, как обычно). Можно выставить рейтинг или коммент типа: «Вид: Клиент (нервный)». Можно выставить Статус — «Ожидает», «Принят в работу», «Послан в жёпу» и запоминанием даты этого статуса и кратким комментом за что и про что :)

    Вот а теперь вопрос — ЧТО из этого должно входить в программу? И сколько такое писать? В 1ске удобно тем, что там дописывать функционал очень просто — прибило в голову, дописал. И то что она построена на так называемом функционале Документа. То-есть Документ — это объект базы. Для него запоминается дата, время, статус.
    Скажем, примеры документов: Покупка Товара, Списание Товара, Продажа Товара.
    А ещё экзотические: План щитка, План работ, Договор, Закрытие договора.
    Вот так и работаю. Считай, что это прога и есть. Я её писал с двух документов в 2008 году: «Поступление денег», «Расход денег» и дописывал то, что мне нужно было.

  • 5 CS  [Москва]

    Короче, благодаря своей базе, я могу поднять в любой момент ВСЮ историю любого заказа, и посмотреть всё — от того, по каким ценам я тогда что ему продавал или делал (сколько брал за работу), до того, какой автомат сверху, слева или справа у него за что отвечает, даже не глядя на его щиток.

  • 6 CS  [Москва]

    Отдельная прога не будет успевать выходить так быстро. Это действительно проще делать функционалом как дополнение к 1Су. Например, покупает чувак себе конфигурацию 1С:Деньги (или 1С:Бухгалтерия), и туда встраивается этот код. И она и деньги считает, и декларации о доходах печатает, и ещё и нашу электрику считает.

    З.Ы. Не злите программистов %)

  • хмм… мне кажется с одинэсом от нечего делать упражняются совсем немногие.
    и потом, платформа, на мой взгляд, представляет собой следующее: покупаешь неработоспособное говно, нанимаешь непонятных чуваков которые увеличивают стоимость примерно в два раза и потом с приобретением этим мучаешься, башляя по фиксированному тарифу за школьнико-час, в надежде что когда нибудь оно таки заработает так как надо (ну или хотя бы так, как обещали) ибо потраченых денег реально жалко

    как то так.

  • 8 CS  [Москва]

    Ну я немного позащищаю платформу. Ибо я ну такой… небольшой бывший одинэсер.
    1С — это платформа. Ну как Word. Открыл один документ — это книга. Другой — научная работа. И т.д. Также под 1С есть разные конфигурации. А движок один и тот же.
    С конфигурациями жопа вот в чём. В смысле, откуда берётся неработоспособное гавно. Дело в том, что 1С изначально ориентирована на непосредственное отражение конкретного документооборота конкретного предприятия, фирмы и т.д. И все кнопки, действия и операции должны под этот документооборот быть заточены.
    Если же пытаться решить «ваши» (ну, предприятия) задачи стандартными методами — начнётся дрянь.
    Ну, скажем, как у меня на фабрике. 1С считает товар в единицах измерения. Вот задал ты товар «Кабель силовой» и единицы «метр». Это обычный стандартный случай. Ну скажем, 90% контор, которые торгуют всякой водкой, носками или болтами, так и будут пользоваться стандартным решением.
    А у нас, например, кабель можеть быть в метрах, но кусками. Скажем 15 метров и 10 метров в 1С будут видны как «Остаток: 25 метров». И база позволит его тебе так целиком и списать. А на деле-то два куска… которые никуда не денешь.
    Вот тут и нужны доработки под конкретно эту задачу.
    Разница только в том, что степень точности доработок и глубины привязанности к документообороту может быть разной. Скажем, где-то достаточно одной мелкой доработки, а кто-то захочет отражать и то как баба маня пол моет, чтобы кнопка такая была.
    Правда, я только изнутри всё это знаю — как очередной язык программирования. А так, говорят что сраные франчази эти действительно за каждый чих сосут бабло. Но с другой стороны — это другая версия понятия «скупой платит дважды». То-есть: серьёзное предприятие должно иметь своего штатного 1Сэра, который будет втачивать базу под них, зная весь техпроцесс изнутри. А если кажется что «да ща мы со стороны пару раз заплатим — и всё» — то хренушки.

  • 9 CS  [Москва]

    Тут как. Если тебе тупо вести бухгалтерию и отчётность сдавать — то покупай решение из коробки и веди. А если тебе надо товар производить из полуфабрикатов, составляя план закупок, поставок — то всё, пиздец. Нанимай программиста.

  • Интересный и продуманный подход к работе. Некоторое время назад стал задумываться о чем-то подобном. Увы, когда-то давно два семестра ковыряния с Turbo-Pascal начисто выпилили интерес к программированию…

    Когда закупал начинку для крайнего щитка, практически слово себе дал: монтажную и принципиальную схемы, а также спецификацию на оборудование делать заранее! Но этот заказчик давний и постоянный: для него можно и на ходу посоображать, стараясь успеть сделать «вчера».

  • 11 CS  [Москва]

    Да я ж раньше чертил, вот: http://cs-cs.net/wp-uploads/2009/09/EM28-Scheme.gif , а потом мне стало ОЧЕНЬ лень чертить эту хреноту руками под каждого. Вот я и накатал программку…
    А турбопаскаль это ЖОПА. Потому что в нём программирование — это не полёт мысли, а суровое брутальное ворочанье камней. Так что с тем, что он начисто отшибает охоту программировать дальше — согласен. Особенно с его типизацеий несчастной.

  • 12 gamer1986

    Приветствуй Всех.
    Читаю данный блог не давно, спасибо Автору за него. Заинтересовался вопросом программы для составления «смет» эл. щитков и действительно поиск в гугле не дал результата хотя с первого приближения программировать не очень много надо. С позволения Автора готов развить данную тему может чего то полезное получится.

  • 13 CS  [Москва]

    Привет! Так а что про неё интересует? Оно есть, оно работает…
    Ситуация с ними обычно такая:
    * каждый производитель обычно на каком-нибудь диске платную или бесплатную программу для проектирования шкафов, щитов. У меня где-то давно в архиве валялась Legrand’овская. Там будет всё в картиночках, 3D-модельках и фоточках;
    * Универсальные решения типа библиотек под Visio, ссылку на которые я приводил, но сам их не тестил
    * Интегрированое решение — как моя примочка к моей же домашней базе 1Са, в которой ведётся учёт всего, чего мне необходимо.
    Для меня последний вариант удобнее всего, потому что номенклатура с её характеристиками, деньги, заказы поставщикам и всё что угодно — под рукой. И не надо заводить они и те же данные в тридцать три разные программы.

    Касательно собственно программирования — а смысел? Там интересно совсем другое — чтобы она «знала», что у автомата S203 — три модуля в щитке, и автоматически всё это подставляла. А это больше относится к базе номенкатуры, чем к картиночкам. Картиночки-то можно хоть прямоугольником показывать.

  • 14 CS  [Москва]

    Кода там и правда не много. Вот например мой :) хы хы хы
    ИначеЕсли ИмяФормы = "Раскладка" Тогда
    Таб.ИсходнаяТаблица("Раскладка");

    ТабРеек = СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ТабРеек);

    //Узнаем, сколько всего реек у нас насчитано?
    ТабРеек.Свернуть("НомерРейки", "Модулей");
    МаксДлина = ДлинаДинРейкиЧислом();
    МаксРеек = ТабРеек.КоличествоСтрок();
    Если (МаксРеек > 0) Тогда
    Если (ТабРеек.ПолучитьЗначение(1, "НомерРейки") = 0) Тогда
    МаксРеек = МаксРеек - 1;
    Если (МаксРеек < 0) Тогда МаксРеек = 0; КонецЕсли; КонецЕсли; КонецЕсли; //А теперь снова воспользуемся этой же таблицей, но получим отсортированный список девайсов на рейках ВыгрузитьТабличнуюЧасть(ТабРеек); ТабРеек.Сортировать("НомерРейки+, ПозицияРейки+"); //Сначала - рейка, затем - позиция Таб.ВывестиСекцию("Шапка"); ПозЩита = ""; ПозОписание = ""; //Надо заценить и построить таблицу для всех DIN-реек и на нужную длину Для Реек = 1 по МаксРеек Цикл Таб.ВывестиСекцию("РейкаЗаг"); Для Мод = 1 по МаксДлина Цикл Таб.ПрисоединитьСекцию("Рейка|Модуль"); КонецЦикла; //Теперь надо раскрасить эту рейку как надо //Мы щас находимся на нижнем крае нашей рейки - надо сразу сортировать! ТекСтрока = Таб.ВысотаТаблицы() - 2; //Один модуль занимает три строки, это начало первого модуля СчПозиции = 1; //Берём первый модуль СчЯчейки = 1; //И первую ячейку //Проставим номера модулей в сааамом нижнем ряду Для Мод = 1 по МаксДлина Цикл Таб.Область(ТекСтрока + 2, Мод).Текст = Строка(Мод); КонецЦикла; //Снова идём по модуям, но уже по другому, соображая что у нас там есть Мод = 1; Пока (Мод <= МаксДлина) Цикл //Ищем нужный нам элемент по его позиции! //То-есть сначала первый, потом второрй, третий и прочее. //И запоняем ими (по размеру их модулей) наши рейки //Искать будем прямым перебором, ну нахуй! КолМодуля = 1; //Сколько модулей мы вывели сейчас? Для ТекЭлем = 1 По ТабРеек.КоличествоСтрок() Цикл ТабРеек.ПолучитьСтрокуПоНомеру(ТекЭлем); Если (ТабРеек.НомерРейки = Реек) И (ТабРеек.ПозицияРейки = СчПозиции) Тогда //Нашли, надо его пиздануть! //Сейчас мы нашли модуль, который находится по координатам: Реек, СчПозиции //Надо отпиздячить его длину и объединить ячейки дальше :) КолМодуля = ТабРеек.Модулей; ОблБлокаВерх = Таб.Область(ТекСтрока, СчЯчейки, ТекСтрока, СчЯчейки + КолМодуля - 1); ОблБлокаСред = Таб.Область(ТекСтрока + 1, СчЯчейки, ТекСтрока + 1, СчЯчейки + КолМодуля - 1); ОблБлокаНиз = Таб.Область(ТекСтрока + 2, СчЯчейки, ТекСтрока + 2, СчЯчейки + КолМодуля - 1); ОблБлокаВерх.Текст = СокрЛП(ТабРеек.Обозначение); СтрТекст = ""; Если (ПустоеЗначение(ТабРеек.Элемент) = 0) Тогда СтрТекст = СтрТекст + СокрЛП(ТабРеек.Элемент); КонецЕсли; Если (ПустоеЗначение(ТабРеек.Фаза) = 0) Тогда СтрТекст = СтрТекст + " (Фаза: " + СокрЛП(ТабРеек.Фаза) + ")"; КонецЕсли; Если (ПустоеЗначение(ТабРеек.Номинал) = 0) Тогда СтрТекст = СтрТекст + РазделительСтрок + РазделительСтрок + СокрЛП(ТабРеек.Номинал); КонецЕсли; Если (ПустоеЗначение(ТабРеек.ИмяГруппы) = 0) Тогда Если (ПустоеЗначение(ТабРеек.Группа) = 0) Тогда СтрТекст = СтрТекст + РазделительСтрок + СокрЛП(ТабРеек.Группа) + ": " + СокрЛП(ТабРеек.ИмяГруппы); Иначе СтрТекст = СтрТекст + РазделительСтрок + СокрЛП(ТабРеек.ИмяГруппы); КонецЕсли; КонецЕсли; ОблБлокаСред.Текст = СтрТекст; //Сообщить(ОблБлокаВерх.ЦветФона()); //Тут раскрасим хрень в зависимости от типа Если (ТабРеек.Элемент = Перечисление.ТипЭлементаЩитка.Ввод) Тогда ИначеЕсли (ТабРеек.Элемент = Перечисление.ТипЭлементаЩитка.Рубильник) Тогда ОблБлокаВерх.ЦветФона(255, 128, 128); ОблБлокаСред.ЦветФона(255, 128, 128); ИначеЕсли (ТабРеек.Элемент = Перечисление.ТипЭлементаЩитка.Счётчик) Тогда ОблБлокаВерх.ЦветФона(128, 128, 0); ОблБлокаСред.ЦветФона(128, 128, 0); ИначеЕсли (ТабРеек.Элемент = Перечисление.ТипЭлементаЩитка.УЗО) Тогда ОблБлокаВерх.ЦветФона(255, 128, 64); ОблБлокаСред.ЦветФона(255, 128, 64); ИначеЕсли (ТабРеек.Элемент = Перечисление.ТипЭлементаЩитка.Автомат) Тогда ОблБлокаВерх.ЦветФона(255, 255, 128); ОблБлокаСред.ЦветФона(255, 255, 128); ИначеЕсли (ТабРеек.Элемент = Перечисление.ТипЭлементаЩитка.Диф) Тогда ОблБлокаВерх.ЦветФона(128, 64, 64); ОблБлокаСред.ЦветФона(128, 64, 64); ИначеЕсли (ТабРеек.Элемент = Перечисление.ТипЭлементаЩитка.Линия) Тогда ОблБлокаВерх.ЦветФона(128, 255, 255); ОблБлокаСред.ЦветФона(128, 255, 255); ИначеЕсли (ТабРеек.Элемент = Перечисление.ТипЭлементаЩитка.Панель) Тогда ОблБлокаВерх.ЦветФона(255, 128, 255); //Fix! ОблБлокаСред.ЦветФона(255, 128, 255); ИначеЕсли (ТабРеек.Элемент = Перечисление.ТипЭлементаЩитка.РозеткаСКС) Тогда ОблБлокаВерх.ЦветФона(255, 128, 255); //Fix! ОблБлокаСред.ЦветФона(255, 128, 255); ИначеЕсли (ТабРеек.Элемент = Перечисление.ТипЭлементаЩитка.ПортСКС) Тогда ОблБлокаВерх.ЦветФона(255, 128, 255); //Fix! ОблБлокаСред.ЦветФона(255, 128, 255); ИначеЕсли (ТабРеек.Элемент = Перечисление.ТипЭлементаЩитка.Плинт) Тогда ОблБлокаВерх.ЦветФона(128, 64, 255); //Fix! ОблБлокаСред.ЦветФона(128, 64, 255); ИначеЕсли (ТабРеек.Элемент = Перечисление.ТипЭлементаЩитка.Пара) Тогда ОблБлокаВерх.ЦветФона(128, 64, 255); //Fix! ОблБлокаСред.ЦветФона(128, 64, 255); ИначеЕсли (ТабРеек.Элемент = Перечисление.ТипЭлементаЩитка.Прочее) Тогда ОблБлокаВерх.ЦветФона(255, 255, 255); ОблБлокаСред.ЦветФона(255, 255, 250); ИначеЕсли (ТабРеек.Элемент = Перечисление.ТипЭлементаЩитка.Заглушка) Тогда ОблБлокаВерх.ЦветФона(128, 128, 64); ОблБлокаСред.ЦветФона(128, 128, 64); КонецЕсли; //Прозырим объединение Если (КолМодуля > 1) Тогда
    ОблБлокаВерх.Объединить();
    ОблБлокаСред.Объединить();
    КонецЕсли;

    СчПозиции = СчПозиции + 1;
    СчЯчейки = СчЯчейки + КолМодуля;
    Прервать;
    КонецЕсли;
    КонецЦикла;

    Мод = Мод + КолМодуля;
    КонецЦикла;

    КонецЦикла;

    глПоказатьТаблицу(Таб, "Раскладка щитка", "Раскладка щитка", 0, 0, 1);

  • 15 gamer1986

    Моё предложения своять для начала что бы просто рисовала «красивые» картинки потом добавлять функционал а в конечном итоге получить ПО (*SCRATCH* или сайт) в котором только нужно выбрать номенклатуру и получить всё что нужно начиная от красивых картинок заканчивая списком для заказа поставщику

  • 16 CS  [Москва]

    Хм. Подход в корне неверный. «Просто красивые картинки» нахрен нипкому не нужны. Для этого есть Visio например.
    Ну ваяй, а народ посмотрит что получится.

    А я щас пользуясь случаем выложу ещё одну фишку и посмотрю, что ты на это скажешь ;)

  • 17 CS  [Москва]

    Гы гы!! А я-то ЛОШАРА позорная! Прогграммист хуев :)
    Собственно история. В красках. Считаю следующий щиток, широким жестом нажимаю на «Печать списка компонентов» — вылезает листок вида «Автомат С10 — 7 штук, Автомат С16 — 9 штук».
    Отдаю заказчику, мол «Зацените как у меня всё круто, покупайте автоматы»!
    Заказчик покупает… начинаю собирать щиток, и что-то у меня не сходится. Как-то автоматов-то МАЛО!
    Вкуриваю, соображаю. В самом Плане Щитка прописано всё верно, ничего не забыто, маркировка не пропадал, строки не пропали… всё вроде бы есть! А что не так?
    А вот! Количество у меня подсчитывается элементарным кодом:

    ВыгрузитьТабличнуюЧасть(ТабДеталей);
    ТабДеталей.Свернуть("Товар", "Количество");
    ТабДеталей.Сортировать("Товар+");

    То-есть, в моей таблице щитка есть пара реквизитов: Товар — это ссылка на номенклатуру, которой оответствует нужная позиция щитка, и Количество — оно для каждой строки всегда 1 штука. Ну потому что на 1 строку — 1 товар (у нас в документе 1 строка — это один автомат, УЗО или прочее).
    Ну вот я широким жестом экономии дискового пространства базы влепил длину этого Количества в 1 знак. Потому что больше 1 оно не будет.
    А когда вызывается Свернуть(), количество-то увеличивается. И 1С:СукоСистема всё равно эту сраную длину реквизита в 1 знак соблюдает! И блядь округляет его нахрен! То-есть до 1 знака. Было 12? Станет 9. Было 9? будет 9!
    Вот тут на самом деле было 12 штук, а не 9 :) Плюнул на чудеса 1С (пожалуй, столкнулся с ними первый раз на свой опыт) и увеличил длину Количества до 6 знаков. Чтоб наверняка.
    Ща пойду докупать автоматов :)

    А вот другому заказчику с 19″ щитком просто ПОВЕЗЛО — у него на самом деле ровно 9 16-х дифов :) МОРАЛЬ: Пишете код? Отлаживайте во ВСЕХ возможных ситуациях!

  • 18 gamer1986

    :) по этому эсеры во всех манах пишут целая часть 10 дробная толи 3 толи 5

  • 19 CS  [Москва]

    А тут была фишка в том, что Количество это нужно только для Свернуть(), чтобы это было подсчитываемой колонкой.
    А так как у меня щиток описывается построчно: 1 элемент щитка = 1 строка, то оно в каждой строке всегда будет 1 :) Вот я недрогнувшей рукой и влепил 1 знак =)

    У них в штатных конфах обычно 10.3 и 12.2 для сумм

  • 20 gamer1986

    Ну вот накропал за пару тройку часов http://narod.ru/disk/19106667001/Project1.exe.html конечно не фонтан но для «затравки» пойдет наверно.

  • 22 CS  [Москва]

    Ну что? Дельфистов я ненавижу принципиально (у них ёбнутое мышление). Так что поехали РВАТЬ :)
    Встретим по одёжке:
    1. Название проекта — по умолчанию. Плохо. Сразу наводит на мысли о тупом студне, который всё по книжке. «1212» — это к чему?
    2. Аналогично название формы. Кто этой программой будет пользоваться? Все? Это как ну… небритым и в вонючих кроссовках по улице ходить. Вроде ходить можно — но другие как-то косо смотрят.
    3. Шрифт установлен не системный, а MS Sans Serif, который в Windows не используется как системны начиная с версий 2000/ME.
    4. Вбил в количества буквы — вываливаетс критическая ошибка с красным крестом. Этого быть не должно. При этом если вбить буквы в поле «УЗО» — не вылезает никакой ошибки. А я так понимаю что должно — так как там тоже цифровые значения.
    5. Внутри названия элементов управления типа Label1 и Edit4 говорят о полностью отсутствующем стиле программирования как классе. Дорабатывать и поддерживать такой код будет стоить очень дорого — проще будет его выкинуть и написать с нуля.

    После этого программу смотреть неинтересно — гавно, оно и есть гавно. Но любопытство, как известно, Кошку сгубило. Попробуем проводить «по уму» — что по функционалу:
    1. Ввожу запредельные значения. Скажем количество модулей 1232 — ну промахнулся человек, опечатался. Программа куда-то как-то с экрана исчезла. Что это было?! ©
    2. Запускаем снова.
    Так, между делом вкуричваю. Оказывается поля «УЗО» и «Рубильник» — это их ширина на рейке. А известно ли что в щите может стоять узо трёхфазное, которое занимает 4 модуля и однофазное, которое занимает два модуля? И при этом их ширина не проверяется (как я говорил — вписал я туда буквы и никакой ошибки не вылезло)
    3. Задаю три рейки по 12 модулей. Нажимаю Рисовать, таблица заполняется.
    А где наглядность? Кто-то имел ввиду графическое изображение всего и вся? Или эта программа просто заполняет таблицу? Так нафиг она нужна — я и сам могу в экселе таблицу заполнить?
    4. Экспорт в эксель создал лист без единой строки и с 255 столбцов. Ы?
    5. Радиокнопки выбора Автомат/УЗО/Рубильник как должны работать? Запоминать состояние для каждой ячейки? Не запоминают…

    Резюме следующее:
    1. Стиль программирования как у студента. Такому бы я бы не доверил писать ничего.
    2. Прошла неделя кажется? Это за неделю рождено? Это рожается за два часа.
    3. Ну нарисовали мы положим щиток. А дальше куда его? Сохранить, открыть?
    4. Интерфейс построен неверно в корне. Идеальный интерфейс — это двигание графических прямоугольничков. Прям мышкой.
    Средний вариант — мой с заполнением таблицы. Только разница в том, что у меня ВСЯ информация об одном элементе щитка хранится в ОДНОЙ строке таблицы, а не где-то в полях формы или ещё где.
    Тебе нужен не сраный встроенный StringGrid (у которого ДАЖЕ высота строк не отрегулирована), а какой-нибудь продвинутый, чтобы прям в гриде были ComboBox.
    А для саааамого начала тебя надо отослать к древней Майкрософтовской книжке что-то типа http://msdn.microsoft.com/en-us/library/ms997492 и далее по ссылкам. Внимательно прочитай КАК и КАКИЕ контролы и зачем размещаются.

    Дальше мне чего-то рассказывать не интересно.

    З.Ы. Надо MasterWire на мою CRM посадить — пусть щитки рисует :)

  • 23 gamer1986

    Во конкретная критика в конкретных местах теперь есть от чего отталкиваться. Хм может я чего не так делаю но вбиваю букафки в узо и как положено ругается :). StringGrid высота регулируется. Это ты ещё не видел «специализированное» ПО которое стоит 400 тыс. в минимальном комплекте и падает от каждого шороха в здание.

  • 24 CS  [Москва]

    Видел, видел. Ща вспомню. Была какая-то мега-навороченная CRM, что-то под 600 тыр… Во! http://avaerp.com/ — вот это ЖОСТЬ) Тоже дельфи и полное уебанство.

    Отталкиваться надо с той книжки. И учиться правильно проектировать интерфейс пользователтя.
    Ты не понял: в поле для чисел должно быть можно вводить ТОЛЬКО числа. Буквы вообще вводиться не должны. Для выбора типа элемента прямо в StringGrid должен быть Combobox — автомат, узо и т.д.
    Причём отметь, что УЗО в два модуля жрёт сразу две ячейки SG. То-есть из 12ти остаются свободных 10, а у тебя этого нельзя будет сделать — то-есть, ограничить ввод.
    Аналогично выбор количества модулей на DIN-рейке должен быть Combobox, со всеми стандартными их вариантами (в щитках они стандартны). Последним пунктом в этом же Combobox должно быть что-то типа «Другой размер…» и при его выборе должно вылазить окошко, где можно указать свою, нестандартную длину DIN-рейки.

    В идеале, если писать отдельной прогой, то нужно использовать табличное дерево. Узлы — это DIN-рейки, строки таблицы — это элементы. И ТУПО реализовать перетаскивание их друг в дружку.
    До кучи можно сделать файлик типа INI, где будут описываться пресеты для щитков. Ну чтобы тоже было Combobox вида «Модель щитка:» и там список значений типа «Стандартный 12 модулей, стандартный 24 модуля», или прям конкретный ABB UK 540S. А в INI прописывается, что в этом UK 540S 4 DIN-рейки по 12+2 модуля каждая.
    В таблице будут графы: Тип элемента, Количество модулей, Обозначение, Название (для примера). При выборе модели щитка (причём если что-то было уже заполнено, то задаётся вопрос вида «Вы точно хотите сменить модель щитка?») в дереве сразу же появляются узлы вида DIN-1, DIN-2.
    Далее юзер жмакает кнопочку «Новый элемент», и в дерево добавляется новая табличная строка. Он её заполняет как хочет и таскает на любой узел дерева.

  • 25 CS  [Москва]

    Нужно так: http://www.codeproject.com/KB/tree/treelistcode.aspx
    И САМОЕ главное. Твоей программой никто не будет пользоваться, пока там не будет Открыть/Сохранить. Ибо ну нарисовал щиток. А дальше что?

    И я-то думал, что у тебя будет сразу печать на принтер и рисование именно графикой, то-есть без Экселя. Напоминаю что офис — это платная программа, и многие используют OpenOffice. А там хуяк — экселя-то нету :)

    И наиглавнейшее! Я вот что выдумал :) У меня ж в каждом элементе щитка указывается Номенклатура. А в Номенклатуре в аттаче есть возможность присоединить картинку. Смекаешь? Значит при выводе моих рисунков расположения щитка я могу подставить эти самые картинки и получить вообще мега-наглядный щиток, типа такой херни: http://content.foto.mail.ru/mail/valeryko/1/i-4.jpg

  • 26 CS  [Москва]

    Я тебя хочу наставить на путь истинный (ну и выебнуться конечно со своей 1С). В том смысле, что оказывается написать программу — это СЛОЖНО. Потому что она должна работать, исключая ЛЮБЫЕ нештатные ситуации.
    Вот например почитай, вникни: http://www.osp.ru/os/1998/06/179592/ Чуешь, чем твои цифирки с буковками в полях ввода пахнут? Поэтому я и сказал, что такому как ты не доверил бы ничего.
    А если писать под микроконтроллеры? Там микросхема. Там вообще не видно того, что происходит внутри. И там малейшая ошибка может стоить ну например выгорания шкафа привода стоимостью в несколько штук баксов, или краха станка… Вот к чему приводят простые букво-цифирки.

    Во-вторых, обращаю внимание что настоящий проограммист (как и любой настоящий Мастер) должен уметь подобрать правильное средство для решения конкретной задачи. Скажем, что-то писать на Дельфи, что-то на Сях, что-то — на 1С ;)
    Конкретно у меня выбрана 1С, потому что у неё документно-ориентированный подход: все объекты являются документами, и могут вводиться «на основании» друг друга, составляя древовидную структуру по всей базе целиком. Ну скажем, документу Договор (который символизирует заказ клиента) подчинены документы План щитка и Получение денег. А документу План щитка подчиняется документ Заказ товара и План работ.
    И всё это делается очень легко: в данном случае сама оболочка уже написана, остаётся только написать банальный код типа занесения товара на склад.
    Поэтому у меня получается огромная система, цельная и многофункциональная. В том смысле, что информацию, которая у меня хранится, я могу использовать как угодно. Ну хоть график построить «самая популярная модель щитка в этом году»: отберу все документы План щитка за год (или за другой период), сделаю свёртку по реквизиту «Модель щитка» и отсортирую по количеству. При этом исходные данные остаются как есть (в этом фишка). И с документами, введёнными три года назад, ничего делать не надо (допатчивать, изменять, подправлять).
    В этом смысле отдельно существующая программа нахрен не нужна, потому что ради каждого нового чиха её придётся дописывать и отлаживать. Ну смотри, вот например сколько и как тебе понадобится времени, чтобы добавить сейчас в свою прогу функцию выбора модели автомата. Так, чтобы оно выдало список — чего надо по щитку пойти купить?
    Это ж очень важно — без этого списка теряется весь интерес. В смысле «а зачем мне рисовать щиток, если для его печати всё равно надо эксель (я там сразу и нарисую) и если всё равно надо считать сколько каких автоматов купить (я и на бумажке могу посчитать)?»
    Задача программы — избавить человека от РУТИННЫХ операций, а не выпустить ещё одни рюшечки :)

  • 27 katuha_b

    «Дельфистов я ненавижу принципиально (у них ёбнутое мышление)»
    А у кого оно иное? ;) А на чем же тогда программировать, если не в 1С?

    Дополнение у Вас интересное, особенно хорошо что есть привязка к базе с материалами!

  • 28 CS  [Москва]

    Так языков полно. Вопрос надо ставить по другому. Не на чём, а ЧТО

  • 29 12

    Когда я был ещё студентом, и только знакомился с основами проектирования и построения АСУ в далёкие 80-е годы, умный препод говорил, что прежде всего нужно понимать, что может быть автоматизировано, в что — нет.

    Иллюстрацией грамотности такого подхода мог служить простой пример. Нужно было оценить порядок затрат чего-то, что исчислялось миллионами миллионов, для чего нужно было перемножить 9- и 6-значное число. Так вот. Самым простым и быстрым способом стало умножение «в столбик», то есть — вручную.

    С другой стороны, нам говорили, что если есть три точки, и известно решение от точки А до точки Б, а нужно найти решение от точки А до точки Ц, то решать надо отрезок Б—Ц, так как он — короче.

    Если есть механизм ведения базы данных, объединяющий в себе архив, бухгалтерию, данные по складу, даже по нескольким складам, подрядчикам, а также по текущим и прошлым работам и всё это объединено единым программным комплексом, способным выдавать отчёты как по конкретным проектам, так и по текущему состоянию дел, спрашивается: — зачем дублировать то, что есть? Хотя бы даже ради поддержания актуальности архива работ. А любой хороший разработчик старается сохранить память о своих работах…

  • 30 CS  [Москва]

    Добавил, пока вчерне, ещё одну фишку. Мы ведь указываем киловатты нагрузки, хоть и примерные? Указываем. И ещё ручками указываем фазу, типо пишем в поле ABC, A, B, C.
    Так теперь оно у меня суммирует нагрузку по фазам, и можно более точно распределять линии по фазам, если трёхфазный щиток проектируешь.

  • 31 comanche

    Прикольная у тебя штука в 1с получилась. Можешь поделиться?

  • 32 CS  [Москва]

    А как именно поделиться? Всю разработку не дам. А вот какими-то кусками кода или ещё чем поделиться — могу.

  • 33 comanche

    Лан не надо, мне кусками не собрать в 1с будет, я ее не настолько хорошо знаю :( Спасибо!

  • 34 CS  [Москва]

    А тогда зачем просишь, если не знаешь 1С? Чувак, я её писал (и пишу) около 4 ЛЕТ! Думаешь, вот этот труд я за просто так отдам? Да и хрен бы с ним, если бы отдавать. Но прога заточена уже лично под меня и под мои нужды. На ней держится и домашняя жизнь (подсчёт денег, квитки на счётчики печатать) — так что не могу дать.
    А описываю на блоге потому, что:
    а) Действительно как программист программисту поделиться с кем-то найденными решениями типа «Оо! Вон ка оно оказывается делается, а я тупил-тупил!»
    б) Распечатки моих щитков я даю именно в таком вот виде, как описано на блоге. Если распечатка уходит налево (типа заказчик говорит — ааа, я ща подумаю, и отдаёт другим) — я всегда могу ткнуть на вот эту статью на СВОЁМ блоге и сказать что это делал Я.

  • 35 felixrus

    CS
    4 июля 2011 в 17:48
    Да я ж раньше чертил, вот: http://cs-cs.net/wp-uploads/2009/09/EM28-Scheme.gif , а потом мне стало ОЧЕНЬ лень чертить эту хреноту руками под каждого. Вот я и накатал программку…

    А можно поподробнее как и через что вы рисовали эти схемы. Возможно у вас шаблоны какиенибудь остались которыми не жалко поделиться. С фотошопом в принципе владах.

  • 36 CS  [Москва]

    Да тут часто спрашивали. Visio.

Оставить отзыв

Вы должны войти на блог, чтобы оставить комментарий.