Хранение изображений в сетевом каталоге




Принцип обмена данными из 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='\

52 Comments

  1. ivanov660

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

    В примере присутствует много листинга, но возможно чего-то не хватает; для этого случая хорошо было бы выложить cf.

    Мне очень не понравилась практика названия реквизитов как «объект».

    Reply ↓
  2. Farzar

    Написано на типовой как раз БСП переделан чтоб в SQL не хранить файлы. Листинг рабочий но получился большой. Будьте внимательны с событиями формы. Если ошибки есть или сложности пишите.

    Reply ↓
  3. hotey

    (2) Farzar, Вы же пишете, что делаете это для УПП, КА. Разве там используется БСП?

    А у БСП есть свои настройки для хранения файлов в томах на диске.

    Reply ↓
  4. Farzar

    Типовые конфигурации, где используются управляемые формы написаны на базе БСП от этого отталкивался

    Reply ↓
  5. omut

    (3) hotey, в КА используются точно )

    Reply ↓
  6. нормальный такой

    в скуле всё равно безопаснее хранить 🙂

    Reply ↓
  7. nSpirit2

    Автор конечно молодец работа с файлами без попытки доставляет. Я так понимаю это сделано для файловой базы данных?

    Reply ↓
  8. insurgut

    Конечно все зависит от размеров организации и объема номенклатуры, с которой она работает.

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

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

    Reply ↓
  9. Farzar

    Скорее для серверной, файловая при больших объемах все равно не выживет. Когда у вас 2000 позиций и еще 5000 характеристик в этом случае Вы экономите пару гигабайт.

    Reply ↓
  10. nSpirit2

    (8) Farzar, А смысл при использовании SQL хранить данные в отдельно лежащей папке на файловой системе вы думаете так быстрее будет ?

    Reply ↓
  11. Farzar

    Главное экономия места и время выполнения резервного архива и например отчет «Остатки в картинках» работает чуть быстрее.

    Reply ↓
  12. CatMix

    По мне так плохой метод.

    Какой-нить пользователь удалит картинки с общего ресурса или переместит их в другое место и всё?

    Или Вы не разрешаете пользователям добавлять номенклатуру и редактировать изображения?

    Как это всё разворачивать быстро на другом сервере?

    Если экономите место в базе, почему не вынести картинку в другую sql базу?

    Если скорость то лучше переместить таблицу с файлами на другой раздел/сервер итд?

    Reply ↓
  13. нормальный такой

    (9) nSpirit2, на самом деле с файлами быстрее работается… но я с вами солидарен, смысл хранить в файлах, если пользуется скуль.

    в общем, велосипед на любителя…

    (10) Farzar, никакой экономии времени на резервное копирование нет, это миф. да и + к тому это не безопасно. вот нападет какой-нибудь вирь и пожрет ваши картинки и документы

    Когда данные лежат в едином месте, как единое целое, вот тут вы экономите время на резервное копирование и перенос «в случае чего»…

    У нас была похожая практика использования файлов на сетевом ресурсе, но это бред и мы от этого ушли, когда объём файлов стал > 350ГБ и число этих файлов перевалило за 2 000 000

    Если сильно захотеть, можно использовать скульный FileStream, тогда и файлы получатся как файлы и вроде как бы в скуле.

    Reply ↓
  14. Farzar

    (11) CatMix,

    Мое личное мнение не претендующее на единственное верное.

    Отвечу по пунктам:

    Какой-нить пользователь удалит картинки с общего ресурса или переместит их в другое место и всё?

    Или Вы не разрешаете пользователям добавлять номенклатуру и редактировать изображения?

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

    Как это всё разворачивать быстро на другом сервере?

    — константе задаем новый путь, копируем директорию

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

    Если скорость то лучше переместить таблицу с файлами на другой раздел/сервер итд? — более сложный вариант.

    Reply ↓
  15. alyaev.a.v

    Так и не понял, если есть БСП с механизмом хранения в томах на дисках, зачем велосипед?

    Reply ↓
  16. Kyrales

    А как быть если распределенная база?

    Reply ↓
  17. insurgut

    (15) alyaev.a.v, насколько понимаю, тут конкретный пример доработки типовой УТ 10.3. Доработать только эту часть, либо встраивать БСП в УТ 10.3 и все равно делать какие-то доработки? Тут каждый решает сам для себя 🙂

    Reply ↓
  18. Farzar

    Из статьи

    http://infostart.ru/public/190375/

    Реально самописки делают по двум причинам:

    1. хочется выкинуть лишнее и получить быстрое, в этом варианте БСП подходит только для самого минимума функций, по тому что БСП это более менее универсальный монстр с кучей «лишнего»

    2. есть принципиальные расхождения требуемых алгоритмов от того что есть в типовых, в данном случае то же БСП не сильно подходит.

    Reply ↓
  19. Farzar

    (18) Kyrales,

    Первое что приходит на ум включить в план обмена регистр Изображения далее в константе ПутьККартинкамНаСервере указать новый путь.

    Возможно несколько вариантов пути:

    1. Дописать к плану обмена копирование файлов при отправке и при получении данных.

    2. Простой если скорость интернета позволяет можно расшарить ресурс, не забывая о безопастности, поставить запрет на редактирования из подчиненной базы.

    3. и тд.

    Reply ↓
  20. insurgut

    Первое, что приходит на ум, облачные сервисы 🙂 Яндекс.Диск например, дешево и сердито, практически 0 строчек кода доработки.

    Reply ↓
  21. monkbest

    Все тут говорят про БСП, как про некую панацею. Мол если 1С создало БСП, то нафига велосипед городить.

    БСП бывает разных версий. В УТ 10.3, УПП 1.3, Бух 2.0 она тоже есть, в них есть куча общих одинаковых для всех конфигураций модулей с полезными функциями.

    Для управляемых форм в БСП есть механизмы по хранению файлами, но Вы пробовали посмотреть код, которым это реализовано? Там черт ногу сломает. А что если завтра БСП обновят? Все переписывать?

    Для таких задач — только самописки потому, что:

    1. Дешевле в разработке

    2. Читабельный код, который через 2 года другой специалист поймет (если кодер не ушлепок:) )

    3. Быстрее работает (100%)

    4. Решает конкретную задачу, и делается под хотелки заказчика, а не универсально для всех на свете ООО. Самописка — всегда удобнее (если кодер не ушлепок:) )

    5. Меньшая зависимость от смены релизов

    Reply ↓
  22. OBEH

    (22)Все так пафосно. «Является правильным и хорошим тоном…», «Писать на 1с не зная БСП это как на С++ без STL…» и т.д.

    Сравнение 1С(с ее БСП) и «С++ без STL», вообще, поражает дикостью.

    В (21) верно подмечено. Сам не раз в этом убеждался. А работа «из коробки» у фирмы 1С имеет только смысл, что «вроде как работает и ладно».

    Reply ↓
  23. monkbest

    (22) nSpirit2, вы хоть раз открывали модули отвечающие за работу с файлами в БСП? Видимо, нет. Я открывал.

    По претензиям ко мне:

    1. дешевле = потратить меньше времени на разработку. Такие мелкие задачи обычно оплачиваются по факту отработанного времени

    2. я не ругал БСП, я просто довожу до сведенья незнающих, он сложна. Хотя, ДА — Я хорошего мнения о своих способностях, как разработчика. Да и опыт у меня богатый. Но авторов БСП не ставлю ниже себя:)

    допустим ситуация:

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

    что я должен делать? Пару часов смотреть в модули БСП, потом час вкрячивать туда своё и выдать потом решение не очень удобное в плане интерфеса? И объяснять менеджерам, что это не удобно, зато универсально. Да им пое**ть, что это решение универсально и будет рабоать на соседнем заводе так же хорошо, как в их фирме. им нужно хорошо у них, а директору надо быстро, потому что время — деньги.

    нет я за 15 минут набрасываю регистр сведений и рисую в документе пару кнопок (добавить, просмотреть файл), выгоняю на 5 минут всех из базы, сохраняюсь проверяю и все! и перехожу к следующе задаче

    в БСП учитывается много фишек, оно работает в web клиенте, в серверной базе, в файловой… все это круто, но надо решать конкретные задачи. Самые живучие решения — простые, их потом легко трансформировать под новые обстоятельства.

    Reply ↓
  24. OBEH

    (24)»за 15 минут набрасываю регистр сведений и рисую в документе пару кнопок…»

    Ага. Был у меня случай с «чудо программистом». Писал все влет… регистры, документы, справочники. Просто скорость поражала и такое знание языка.

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

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

    Работает несколько лет и не просит кушать.

    Так что использование штатных возможностей, на мой взгляд, должно быть не на последнем месте.

    Reply ↓
  25. nSpirit2

    (24) monkbest, Это называется методом костыльного программирования. Они захотели я им сделал за 15 минут костыль. Они захотел хранить еще и сканы договоров. Я и там сделал костыль… Хотя БСП с точки зрения интерфейса тут каркас позволяет хранить все файлы однообразно… А еще вы точно за 15 минут написали все проверки на существование.. Проверку доступа и прочие вещи которые надо написать при работе с файлами…

    вы хоть раз открывали модули отвечающие за работу с файлами в БСП?

    Не поверите да и всем доволен.

    Reply ↓
  26. monkbest

    (25) OBEH, БСП входит в состав конфигураций, но не все его механизмы везде задействованы во всех объектах. Например 1С Бухгалтерии 3.0 есть БСП последней версии, в которой реализована работа с хранением файлов. Но это не значит, что вы можете прикрепить произвольный файл к документу «реализация товаров и услуг» быстро и удобно

    Есть справочник файлов. Есть доп.сведенья, в которых можно указывать тип значения — «файл». Это стандартные подсистемы.

    Но, чтобы прикрепить файл к документы, надо:

    1. Записать документ

    2. Нажать кнопку доп сведенья

    3. Начать редактировать сведенье, в котором лежит файл

    4. Из списка всех файлов в справочнике выбрать нужный, а там его, т.е. нажать кнопку создать

    5. Сохранить файл в справочнике.

    6. Выбрать в доп сведенье элемент справочника.

    Это не удобно. Каждый руководитель сам принимает решение «ломать» «не ломать». Если ломать, то он думает «А по чем?».

    Ломание механизмов БСП — дорого, аукнется при обновлении еще дороже.

    Reply ↓
  27. monkbest

    (26) nSpirit2, мои костыли прочные и красивые, не переживайте, работаю годами. Я сам порой забываю об их существовании, настолько они органично врастают в систему и в жизнь предприятия, как будто они тут были еще до меня, со времен установки типовой конфигурации

    Reply ↓
  28. OBEH

    (26) «всем доволен….».

    По моему, это клиника. Особенно, применительно к 1С.

    Reply ↓
  29. insurgut

    (22) nSpirit2,

    Знаете что я хочу сказать использование стандартных механизмов. Является правильным и хорошим тоном

    Одно дело, когда есть исходный функционал в конфигурации, тут да, моветон. Но когда конфигурацию необходимо этим функционалом дорабатывать, что бы потом его использовать — тут уже можно и поспорить 🙂

    Reply ↓
  30. nSpirit2

    (29) OBEH, Ну да все прекрасно работает… Вам не нравиться 1С. Напишите что нибудь свое умное и хорошее. Боюсь все проблемы 1С вытекают из того что она и так вам жизнь упрощает в плане программирования как может.

    (30) insurgut, Вот с вами я полностью согласен. Ну чтобы не попасть в просак каркас следует знать типовой функционал. Причем я именно говорю о том какие функции торчат из БСП наружу. Что бы не написать свой деревянный велосипед.

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

    Reply ↓
  31. OBEH

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

    Именно, примерами, а не законченными решениями.

    Поэтому «Все прекрасно работает», если предприятие подгонять под этот пример.

    Так что все, кто хочет реально работать, берут напильник и пилят этот самый пример для себя.

    Reply ↓
  32. Yashazz

    Курочить конфу, когда можно обойтись штатными средствами, да и безо всяких БСП — жуть.

    Делается просто:

    1. Добавляется доп.свойство справочника, хранящее строковый адрес картинки;

    2. Добавляется внешняя печатная форма, привязанная к карточке номенклатуры, суть которой в работе с картинкой (выбор, показ, файловые операции);

    3. Добавляется внешняя обработка, групповой менеджер картинок, настроек работы с ними (кои хранятся в общем хранилище настроек) и прочая.

    Всё.

    Reply ↓
  33. Farzar

    (33) Yashazz, Ваш ход мыслей верный в плане того что можно не редактировать типовую конфу. ЕЕ легко ОБНОВЛЯТЬ.

    Но в примере минимум изменений кода в форме номенклатуры:

    1. ПоказатьИзображение —

    Форма = ОткрытьФорму(«ОбщаяФорма.ФормаИзображения», , ЭтаФорма);

    2. ОткрытьИзображение —

    ЭлементыФормы.ОсновноеИзображение.Картинка = Добавленные.ПоказатьКартинкуИзРегистра(ЭтотОбъект.Ссылка);

    Основной код в отдельном общем модуле и общей форме которые не будут обновляться.

    Разница только в том где хранить код в отдельном общем модуле или во внешней обработке.

    Reply ↓
  34. monkbest

    (33) Yashazz, хорошая мысль, мне нравится. Помимо печатных форм еще есть и обработки заполнения, которые тоже везде можно присоединить.

    единственное, сложно будет реализовать для незаписанного объекта

    Reply ↓
  35. PiccaHut001

    (0) хорошее решение, сам так делал

    Reply ↓
  36. kosmo0

    Я один заметил что не будет работать код (в цикл не зайдет)

    Функция ПолучитьЧастьСтрокиОтделеннойСимволом(Знач ИсходнаяСтрока, Знач СимволПоиска)

    ПозицияСимвола = СтрДлина(ИсходнаяСтрока);

    Пока ПозицияСимвола = 1 Цикл

    Reply ↓
  37. kosmo0

    (33) Ограничение — работа с ЕДИНСТВЕННЫМ изображением. Иногда этого не достаточно (ну либо опять воротить костыли).

    Reply ↓
  38. Farzar

    (37) kosmo0,

    Должно быть так:

    Пока ПозицияСимвола >= 1 Цикл

    Скорее при вставке глюк, спасибо коммент.

    Reply ↓
  39. Farzar

    (38) kosmo0, Костыли воротить не надо, добавьте в форму только две кнопочки вперед и назад:

    Попытка
    //назад +1
    Номер = ТекущиеИзображение -1;
    ОснованаяКартинка = новый Картинка(ПутьКСерверу+мКартинки[Номер].Путь);
    ЭлементыФормы.ОсновноеИзображение.картинка = ОснованаяКартинка;
    ТекущиеИзображение = Номер;
    Исключение
    КонецПопытки;

    Reply ↓
  40. echo77

    Поправьте, пожалуйста, ошибки

    Опишу в вкратце действия

    В модель формы пишу код

    4. Добавляю общею форму

    Reply ↓
  41. Farzar

    (41) echo77, исправил, большое спасибо.

    Только подсветка кода слетела, после сохранения..

    Reply ↓
  42. kosmo0

    (33) (40) Сначала. Что понимается под термином «свойство»? Я предполагал что это типа из УПП свойства объектов, на основе Планов видов характеристик. Если я понял правильно, то будете создавать свойства «Картинка1», «Картинка2» и далее? А если какому-то элементу нужно будет 30 картинок?

    Reply ↓
  43. alexey_kurdyukov

    (13) insurgut, Делал так же, еще на самописной семерке, а все операции над изображением производил с помощью командной строки IrfanView.

    Reply ↓
  44. hazd

    тоже страдаем раздуванием базы, а как быть если распределенная база?

    Reply ↓
  45. insurgut

    (45) hazd, Яндекс.Диск или OneDrive вам в помощь. Проще уже некуда 🙂

    Reply ↓
  46. IgorArhangel

    Интересно данный материал нормально будет работать на УТП 8..2?

    Просто стандартные методы забиваю оперативную память в хлам. Работать просто не возможно.

    Reply ↓
  47. IgorArhangel

    Начал делать все по инструкции и на конечном этапе выплыла такая вот ошибка:

    {Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(56)}: Ошибка при установке значения атрибута контекста (Картинка)
    ЭлементыФормы.ОсновноеИзображение.Картинка = Добавленные.ПоказатьКартинкуИзРегистра(ЭтотОбъект.Ссылка);
    по причине:
    Несоответствие типов

    Странно правда.

    ОсновноеИзображение имеет тип поле картинки.

    2. Создаю регистр сведений ИзображенияНоменклатуры с двумя измерениями Объект (Справочник.Номенклатура), Путь (Строка, 255) и реквизитом Основное (Булево).

    Вот это все так же сделано.

    Может кто подскажет кудой копать?

    Reply ↓
  48. IgorArhangel

    Все разобрался..

    У Вас в коде нужно поправить в двух местах:

    Если ФайлКартинки.Существует() и СтрДлина(мКартинки[0].Путь) > 0 тогда

    Я сначала поставил = , а как оказалось нужно было поставить <>.

    Reply ↓
  49. IgorArhangel

    Чуть переделал данное решение с полем HTML

    Ну это не суть важно.

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

    П = Новый Структура(«Ключ», ТекущиеДанныеСписка.Ссылка);
    ФормаНоменклатуры = ПолучитьФорму(«Справочник.Номенклатура.Форма.ФормаЭлемента», П);
    Форма = ОткрытьФорму(«ОбщаяФорма.ФормаИзображения», , ФормаНоменклатуры);

    То есть передаю владельца формы в третьем параметре, но ничего не открывается, а если перед выводом формы Открыть форму Номенклатуры:

    ФормаНоменклатуры.Открыть();
    

    Тогда открывается и форма элемента и форма Изображения

    Можно ли как-то сделать чтобы просто открывалась форма изображения?

    Reply ↓
  50. IgorArhangel

    Все сделал. У меня все получилось.

    Теперь оперативная память не забивается.

    Поле HTML рулит.

    Если что обращайтесь. Подскажу.

    Reply ↓
  51. VZhulanov

    А никто не рассматривал смешанный вариант хранения картинок?

    1. все картинки хранятся на диске/фтп/облаке

    2. в БД есть регистр/справочник, в котором хранится путь к картинке и на который ссылаются нужные справочники (товары, сертификаты, клиенты и прочее)

    этот регистр/справочник общий для всех баз в распределенке

    3. в БД есть «локальный кеш» справочник/регистр, в котором хранятся сами картинки, к которым было обращение за последний месяц.

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

    Можно картинки в нем хранить не по дате обращения, а по количеству обращений.

    Таки образом получаем и возможность хранения огромного количества картинок (любых файлов) без раздувания БД

    И за счет локального «кэша» картинок в самой базе получаем быстрый доступ к часто используемым картинкам, что уменьшает количество тормозов при хранении в сети/облаке/фтп

    Причем размером локального кеша (размером БД) можно управлять без потери данных.

    Reply ↓
  52. IgorArhangel

    (52) VZhulanov, как вариант имеет право на существование. Я сейчас примерно так и сделал. Все фото хранятся в Dropbox локально на каждом сервере. Dropbox запущен службой. И мне достаточно добавить новые фотографии на одном сервере и фотки загрузятся на остальные.

    Вариант с часто используемыми нормальный, НО в подборе используется отображение картинки и получается, что все картинки будут тащиться в кеш.

    А позиций более 8000.

    Reply ↓

Leave a Comment

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