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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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 не будет опубликован. Обязательные поля помечены *