[ОБУЧАЛОВКА] Про сети (Ашан, Метро) и их заморочки…




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

46 Comments

  1. CheBurator

    Ждем откликов…

    Reply ↓
  2. d.snissarenko

    прикольно, 570 бачей за 20 минут, ай малаца

    Reply ↓
  3. d.snissarenko

    +1 я не жадюга :))))

    Reply ↓
  4. CheBurator

    Тьфу, блин… 1500 руб.. конечно…

    Reply ↓
  5. alexdum12

    Я думаю продуктивность сотрудничества между твоим клиентом и его клиентами значительно бы возросла, предложи ты им обмен данными в электронном виде — это первое. Второе — а что будет когда количество подобных клиентов станет расти? Итог — решение на коленке долго не проживет, грамотный подход принес бы тебе больше презренных бумажек, а клиентам больше сервиса

    Reply ↓
  6. Снусмумрик

    Че, ты чему народ учишь ? Исходно был выбран идеолгически неверный путь в данной задаче. Завтра появится 5, 6, 7 я сетка у клиента и что ?

    Низачод короче

    Reply ↓
  7. Снусмумрик

    «NN — числовой код клиента в справочнике контрагентов»

    ужас !!! ужас !!!!

    Reply ↓
  8. CheBurator

    Тьфу на вас всех, собаки бешеные! 😉

    Вероятность появления у клиента новых сетей в течение года — весьма мала… так что

    NN — числовой код клиента в справочнике контрагентов — В ДАННОМ СЛУЧАЕ — практически оптимальное решение… особенно, если клиенту завтра припрет вставить колонку артикула Ашана в ТЧ документа реализации — это я смогу и по телефону разрулить… а вот при выборе идеологически верного Варианта 1 — придется телепаться на другой конец москвы…

    Естественно, к выбору варианта решения надо подходить обоснованно… Ясен пень, что при первой же возможности следует переделать под Вариант 1, но работы там будет — раз в пять больше… потому что внешне для клиента — все должно быть максимально просто…

    .

    > а что будет когда количество подобных клиентов станет расти?

    сразу видно, что народу лень думать… БОЛЬШИНСТВО клиентов, которые работают с сетями — имеют СВОЕГО программиста 1С. Поэтому — ничего не будет…

    ..

    > решение на коленке долго не проживет

    Согласен… Только предложенное выше как выразились «решение на коленке» — встраивается в систему за 15 минут… и уж поверьте — грамотные «коленчатые» решения — живут вполне себе успешно…

    Reply ↓
  9. CheBurator

    > продуктивность сотрудничества между твоим клиентом и его клиентами значительно бы возросла, предложи ты им обмен данными в электронном виде…

    Сапсем больной, да? 😉

    Обмен в электронном виде не исключает необходимости предоставления твердых копий документов. Пока я еще не встречал, чтобы налоговая принимала для проверки логи/электронные документы.

    Низачот.

    -1

    Reply ↓
  10. imaster

    Ужос н@х… Такого изврата я ещё не видел.

    Особенно «необходимость править структуру данных конфигурации при появлении новых «сетей», + не забывать при обновлениях.»

    Reply ↓
  11. CheBurator

    Ок, Специалисты.

    Ставим задачу:

    — решить сабж

    — уложиться в общем случае в 10 строк кода.

    — избежать программирования при вставке артикула сети в табличную часть документа.

    …

    критиканские высказывания без обоснования будут приравниваться к флуду… 😉

    imaster’у: а ты, что, никогда структуру данных конфиги не модифицировал?

    Reply ↓
  12. Вадимко

    >>обойти матюги так называемых «специалистов 1С»

    Бугоганах, ну-ну, пиши еще!

    Reply ↓
  13. support

    Не обжайте Чебурашку, он хороший. И его решение, более чем грамотное.

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

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

    И еще, сетей, которые кодируют сами, в России можно пересчитать по пальцам, все остальные используют коды поставщиков. Создавать сложную систему для максимум десяти клиентов просто глупо.

    Плюсы данное решения.

    — Дополнительный артикул легко выводится в форму списка справочника (опять же заложено 1С), соответственно оператор может искать по нему.

    — В любом универсальном отчете можно легко вывести код сети, т.к. это просто реквизит справочника.

    — Добавить реквизит в табличную часть документа так же просто, как в форму списка.

    — Можно осуществлять упорядочивание 1С запроса по данному реквизиту.

    — Можно осуществлять поиск по реквизиту, отбор и т.д.

    Reply ↓
  14. poppy

    Я бы обошлась без попытки:

    Код
    ПечКод = "";
    Если глЕстьРеквизитШапки("БВК_Артикул"+Число(Докум.Контрагент.Код), Докум.Вид()) = 1 Тогда   
       ПечКод = Докум.Номенклатура.ПолучитьАтрибут("БВК_Артикул"+Число(Докум.Контрагент.Код));
    КонецЕсли;

    Показать полностью

    Reply ↓
  15. Ioann

    Что-то много всего намутил. Конфа, насколько я понимаю имеет типовой функционал с аналогами и каталогами. в этом случае вообще ничего не надо в структуре менять. У меня код (артикул) покупателя хранится в реквизите «ИдентификаторВКаталоге» справочника «Аналоги». При печати документов используется глобальная функция, которая возвращает код покупателя, в случае наличия аналога из каталога данного контрагента. В некоторых случаях используется не только код, но наименование товара, принятое у клиента (хранится в реквизите «Наименование» справочника «Аналоги») — есть и такие клиенты…

    Reply ↓
  16. artbear

    При условиях, которые заданы в задаче

    Цитата

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

    ни один из способов не является оптимальным.

    Реализованный вариант 3 при подобном обновлении пострадает также, как и остальные варианты!!

    Наиболее правилен все-таки вариант 1, пусть он клиенту и обойдется дороже 🙂

    Только я бы не использовал встроенный справочник Аналоги, а сделал бы спец. подчиненный справочник, который не пострадает. Объем клиентского кода, в принципе, примерно тот же 🙂 Необходимо только написать пару методов для работы с подчиненным справочником 🙂

    При «плохом» обновлении/объединении в этом случае по крайней мере данные клиента (коды) не будут потеряны, как при использовании варианта 3 🙁

    Также 100% твой доп. слой будет потерян 🙂

    ЗЫ а вообще подобная схема у меня лично давно реализована с помощью классов 1С++.

    И подобные фичи легко добавляются в спец. подчиненный справочник, в котором соответствие один-один к справочнику-хозяину.

    Для клиентского кода все прозрачно, только вместо

    Спр = СоздатьОбъект(«Справочник.Номенклатура»);

    используется

    Спр = СоздатьОбъект(«Общие.СправочникСДополнительнымиРеквизитами»);

    Спр.НазначитьВид(«Номенклатура»);

    Reply ↓
  17. Ioann

    Про франча… С какой стати он обновляет конфу, которой занимается сторонний спец? Я бы на его месте не стал её сопровождать. Сопровождение типовой или не типовой совсем разные вещи, деньги и специалисты. Да и сопровождать то, за что ты отвечать не можешь на кой фиг?

    Reply ↓
  18. CheBurator

    2 artbear: > Только я бы не использовал встроенный справочник Аналоги, а сделал бы спец. подчиненный справочник,

    Хотелось бы узнать — чем неустроил справочник «Аналоги» — чисто интересно.

    То, что при обновлении потеряется доп.слой — это да… но его по тлф. «внедрить» легче, чем большой кусок программного кода по вар.1. Понятно, что по варианту 3 код тоже потеряется — но его всего вообщем-то 3 строчки 😉

    …

    > При «плохом» обновлении/объединении в этом случае по крайней мере данные клиента (коды) не будут потеряны,

    // ну это надо так постараться, чтобы доп.реквизиты убить — это только если загрузить обновление…. 😉 хотя и такое могут отчудить… 😉

    ..

    > с помощью классов 1С++.

    … отдавая дань возможностям 1С++ на широкое масштабное применение 1С++ не иду ввиду отсутствия внятной целной документации — и не надо давать ссылки на «обрывки», которые лежат на известных ресурсах… — это нельзя назвать документацией… ну и не надо экскаватором копать ямки для заборныз столбиков… 😉

    Reply ↓
  19. CheBurator

    2 Ioann: совершенно верно, согласен. у сеьбя в конторе сделано так же. Но при «внедрении» к клиенту требуется соотноситься с «возможностями» клиента. Как я писал ниже — такой вариант ДЛЯ КЛИЕНТА непрозрачен. Для нормальной работы требуется «прописать» фишку для заполнения аналогов. Вариант типовой работы с заполнением подчиненого справочника — весьма неудобен с практической точки зрения…

    Reply ↓
  20. CheBurator

    2 poppy: ок. код только длиннее получается 😉

    Reply ↓
  21. Sancha

    Я, все сделал бы на свойствах номенклатуры. Сделал бы сервисную обработку на подобии обработки группового изменения св-в справочника, это для тех, кто должен отслеживать артикулы сетей. И внешнюю печ.форму torg12.ert подправил бы по своему усмотрению.

    Нет геммора с обновлением и с печ.формой.

    Reply ↓
  22. CheBurator

    Угум.. а a бы сделал на аналогах, ибо по сути это и есть аналоги…

    Reply ↓
  23. poppy

    > 2 poppy: ок. код только длиннее получается 😉

    Букавак больше, но строчек = меньше. 😉

    Использование конструкции «Попытка» для определения наличия атрибута смахивает на почерк программистов из Раруса. Не буду разводить здесь антирекламу, но такой почерк вызывает у меня рвотные рефлексы.

    Ты сам утверждал, что учился кодить у одноэсовых программистов ( http://infostart.ru/forum/read.php?25,4076,5928,ref=4246#msg-5928 ). Видать, плохо учился…

    Reply ↓
  24. poppy

    Не хочу обсуждать, на сколько решение = обосновано. Считаю, что Саппорт его обосновал.

    Немного покритикую.

    По вопросу обновления и франчей.

    Не думаю, что мы доживем до 950 релиза. Если и доживем, то не скоро.

    ИМХО очередные релизы пишут какие-то «студенты». Они вносят больше ошибок, чем исправляют. Поэтому, новый релиз + неумелый франч = взрывная смесь.

    Если уж «решение» создает Че, то клиенту выгоднее обратиться к нему же за обновлением. Другое дело, что мотаться по Москве, выпоняя обновления = неблагодарное дело.

    Как вариант: автор решения готовит очередное обновление, но обновление конкретной базы выполняет ближайший франч.

    Reply ↓
  25. poppy

    > Да, привязываться к коду контрагента в наименованиях реквизитов

    > конфигуратора может показаться на первый взгляд некомильфово

    Не то слово. Очень большое ФИ по этому вопросу.

    В восьмерке, например, есть преопределенные элементы, но в серемерке, иногда, приходится принимать непопулярные решения.

    Reply ↓
  26. poppy

    > Да, привязываться к коду контрагента в наименованиях реквизитов

    > конфигуратора может показаться на первый взгляд некомильфово

    Продожение.

    Я бы предложила другое решение:

    В справочнике контрагентов добавить реквизит: "КодСети" (типа строка(2)). В справочнике Номенклатура, нужно добавить реквизиты "БВК_АртикулХХ", где ХХ = от 00 до 15 (или 20, или другое число).

    В коде пишем:

    Код
    ПечКод = "";
    ИмяРеквизита = "БВК_Артикул"+Докум.Контрагент.КодСети;
    Если глЕстьРеквизитШапки(ИмяРеквизита, Докум.Вид()) = 1 Тогда ПечКод = Докум.Номенклатура.ПолучитьАтрибут(ИмяРеквизита);
    КонецЕсли;
    

    Показать полностью

    В рассмотренном варианте мы можем "привязать" несколько контрагентов к одному коду номенклатуры.

    Reply ↓
  27. CheBurator

    > нужно добавить реквизиты «БВК_АртикулХХ», где ХХ = от 00 до 15 (или 20, или другое число).

    ну это — ваще отстой…

    лучше уж как сделано в статье.. или на налогах/свойствах…

    а вот почему Попытка — рвет на родину — непонятно…

    Я считаю использование такой конструкции РАЗУМНО ТАМ где срабатывание по ветке «исключение» — не приводит к каким-либо траблам — как в примере вывода печатной формы… Другое дело, что при вычислительном каком-нить алгоритме применение Попытки не есть хорошо — так как БЕЗ ДОЛЖНОЙ ОТРАБОТКИ ИСКЛЮЧЕНИЯ приводит к иллюзии что все есть гуд…

    Reply ↓
  28. CheBurator

    В любом случае — все предложенные решения (кроме описанного в статье) являются существенно БОЛЕЕ ЗАТРАТНЫМИ.. имхо…

    А то, что 950 релиза ххз когда дождемся — это да… я у себя в конторе до сих пор на 933 сижу (книги продаж/покупок только из 941 подтянулл в всое время…)

    Reply ↓
  29. topasha

    Автор видимо мало работал с крупными розничными сетями. Многие из них еще требуют, чтобы в Торг-12 были ИХ НАЗВАНИЯ ТОВАРОВ, их артикул, их отпускные цены, их цены для промоакций , их штрих код. (Остальное добавьте после внимательного прочтения договора) Помимо Торг-12 могут потребовать еще кучу документов типа протокола согласования цен, разные формы для ввода новых товаров и прочее. Плюс практически все сети требуют отдельно ведения списка товаров, поставляемых им. Некоторые трепетно относятся даже к порядку следования строк с товарами! Добавление новых товаров в их базу почти всегда платное (от 50 до 300 евриков за строку). Рекомендую очень внимательно читать договор с торговыми сетями. Я бы сделал справочник «Товарная матрица», подчиненный справочнику «Контрагенты», в котором для каждой розничной сети вёл бы свой список товаров с их названиями, артикулами, возможно ценами и проч. реквизитами. Решение автора простое, в лоб, но не универсальное.

    Reply ↓
  30. angro

    ИМХО: такое публиковать нельзя, решение простое и работающее, но ничего из себя не представляет.

    Reply ↓
  31. topasha

    Подход к решению задачи в корне не правильный! Все три предложенных варианта — не правильные!

    Reply ↓
  32. CheBurator

    2 topasha: все верно. в данной конторе, которая описана выше — необходимости в реализации полной схемы «работы с сетями» как описано тобой ниже — необходимости нет… в другой конторе — там, все посложнее и по полной программе, как грится…

    > решение автора простое, но не универсальное…

    именно, речь ведь не шла о написании мегаконфиги для работы с сетями…

    > Я бы сделал справочник «Товарная матрица», подчиненный справочнику «Контрагенты», в котором для каждой розничной сети вёл бы свой список товаров с их названиями, артикулами, возможно ценами и проч. реквизитами.

    я бы не стал плодить излишеств и по максимум воспользовался бы «Аналогами» — тем боле что туда вполне можно впихнуть и артикул, и наименования, цены для каждой сети свои — тоже нормально реализуется штатными возможностями… доп.реквизиты — в свойства — все это, конечно, если работа с сетями не составляет ОСНОВНОЙ доли деятельности. Тогда имхо точить конфигу надо именно под автоматизацию работы с сетями…

    Reply ↓
  33. CheBurator

    2 angro: т.е. лучше публиковать навороченное решение с кучей ошибок…? 😉

    смысл именно такой и был — прсо, без заморочек… суть уловлена верно.

    Reply ↓
  34. wolfsoft

    Вот, блин, тоже сейчас начну статьи писать, как я разным клиентам реквизиты добавлял! Вот статьей-то наваяю… 😉

    зы: Но минусовать не буду, потому что принципиально против минусов 🙂

    Reply ↓
  35. topasha

    В моём решении как раз заморочек меньше всего, а наворотов нет вообще. Можно даже и интерфейсов не мутиит никаких. достаточно показать клиенту, как штатно открыть форму списка подчинённого справочника и всё! Можно даже типовые обновления ствить без боязни что-либо утерять. Просто предложенные решения задачи методологически не верны в принципе, даже для маленькой конторы!

    Reply ↓
  36. poppy

    > > нужно добавить реквизиты «БВК_АртикулХХ», где ХХ = от 00 до 15 (или 20, или другое число).

    > ну это — ваще отстой…

    Не отстойнее, чем исходное решение… ИМХО 😉

    Я даже не осуждаю то, что автор в своей статье многочисленно оправдывается за принятое решение.

    > В любом случае — все предложенные решения (кроме описанного в статье) являются

    > существенно БОЛЕЕ ЗАТРАТНЫМИ.. имхо…

    Не существенно и не БОЛЕЕ.

    Бюджет моего решения соизмерим с исходным. А если учесть перспективу «разруливания» ситуации по телефону, то значительно ниже как для заказчика так и для исполнителя.

    Мое решение является более универсальным. В частности:

    — у разных магазинов одной сети могут быть разные реквизиты. В этом случае разным контрагентам можно назначить одинаковые коды товаров;

    — при появлении новых магазинов (сетей) пользователь добавляет данные в привычном для него интефейсе в т.ч. и без консультации по телефону.

    В развитии решения можно добавить следующее.

    Создать справочник «Сети». Тип реквизита КодСети справочника Контргаенты установить этот справочник. В форме элемента справочника Номенклатура показывать только те реквизиты, ХХ которых совпадает с кодом одного из элементов справочника Сети. Надписи для них брать из нового справочника.

    «Коленчатые» решения действительно иногда жывут «успешно» и долго. Но в большинстве случаев из-за того, что уйти от них бывает дороже, чем выполнять разовые доработки.

    Складывется впечатление, что заказчик и автор решения не знакомы с известным правилом: Я не настолько богат, что-бы покупать дешевые вещи.

    Единственный плюс исходного решения отмечаю использование иднтификаторов реквизитов ПРЕФИКС_АртикулNN вместо БВК_АртикулАшан.

    Reply ↓
  37. poppy

    > а вот почему Попытка — рвет на родину — непонятно…

    Потому что в аналогичных ситуациях эту конструкцию используют программисты из известной большой франчайзинговой фирмы.

    Конфигурации от них у меня ассоциируются с неработающими поделками.

    Складывается впечатление, что свои решения они создают на «коленках», распостраняя их потом на всю страну. Вот и рвет на родину.

    Я не против использования конструкции Попытка в целом и в рассматриваемой ситуации в частности.

    Кстати, если бы такое решение (Вариант 3) предложил какой-нибудь новичок, что Чебур первый бы его зачморил ИМХО.

    Reply ↓
  38. Трактор

    Ух! 🙂

    Как я понял автор хочет защититься от дурака-обновляльщика.

    Думаю что добавленный реквизит с точки зрения обновляльщика мало отличается от добавленного справочника.

    Можно использовать префиксы для добавляемых объектов матаданных. Например, реквизит назвать ЧЕБУР_КодыСетей или назвать справочник ЧЕБУР_АналогиСетей.

    Вариант2 наиболее защищён от дурака-обновляльщика, поскольку на первый взгляд требует меньше изменений в коде.

    Вариант1 vs Вариант3

    Трудоёмкость написания кода для разбора строк не меньше чем трудоёмкость написания кода для работы с подчинённым справочником. Кроме того для облегчения обновления форму элемента лучше трогать поменьше. Я бы навесил на неё только кнопку с вызовом справочника аналогов или формы обработки по заполнению аналогов. Получается что разница в объёме кода между первым и третьим вариантом исчезающе мала, а вот разница в ссылочной целостности и лёгкости доработки — значительная.

    Вариант2 vs Вариант3 vs Вариант1

    До сраки как сделать, главное чтобы работало и чтобы пришедший после тебя не сильно матюкался.

    Любителям универсальных решений — в сад. Лучше неуниверсально и просто, чем универсально на сложно и с множественными переломами мозгов при попытке использовать где-то ещё.

    Касательно комментариев. Лучше писатьтак

    а так

    //(( Чебурашка 07.07.2007

    //)) Чебурашка 07.07.2007

    Автору плюс за поднятую тему.

    Reply ↓
  39. CheBurator

    спасибо Трактору за комент. единственное с чем не соглашусь

    > то разница в объёме кода между первым и третьим вариантом исчезающе мала,

    — на мой взгляд разница в коде — весьма существенна… хотя кто как считает…

    > ЧЕБУР_КодыСетей

    ну так и названо — БВК_Артикул…

    Reply ↓
  40. GROOVY

    Зачетная статейка. Конечно про «правильность» подхода мы тут говорить не будем, ведь для определенного решения это есть гуд.

    Reply ↓
  41. CheBurator

    Вот слова истинного Дао!

    Reply ↓
  42. CheBurator

    Кстати, задача, изложенная в (11) все еще актуальна…

    Reply ↓
  43. Alesya

    Программистам может и не нравится, что ж их мнение…

    Но ведь нравится пользователю. Мне как пользователю — это удобно. Это комфортно.

    Мало того, я знаю, что если вдруг возникнет проблема, мне её сразу решат. Серёжа, спасибо, с тобой очень комфортно работать!

    Reply ↓
  44. das

    43) Полностью присоединяюсь!

    Спасибо за статью — ваше зерно опыта в нашу копилку!!!

    Reply ↓
  45. XLstarter

    в комментах товара ввел для клиента правило на заполнение первых символов типа !М3253!А5643! и создал отдельные печатные формы расходных, счетов, ттн (пришлось повозиться с группировкой товара по их единому коду), от !Мдо! — Метро, от !А до ! Ашан … в печ.форм. подставлял кода — печ.ф. М — метро, А — ашан..

    Reply ↓
  46. v.l.

    МЕТРОимся и АШАНимся… захитали… особенно МЕТРО…

    +

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *