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

16.09.14

Разработка - Универсальные функции

Размещение изображений отдельно от базы данный позволяет не раздувая размеры базы, просматривать и сохранять картинки хорошего качества прямо в 1с.
Попробую сделать такой функционал в типовой конфигурации УПП (УТ, КА)

Опишу вкратце действия шаг за шагом но если что-то сложно написал, заранее прошу прощения.    

1. Создаю константу ПутьККартинкамНаСервере. В нее пишу полный путь к сетевому каталогу. Выполняем код: Константы.ПутьККартинкамНаСервере.Установить("\\ВашПуть\");

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

3. В регистр сведений  ИзображенияНоменклатуры добавляю основную форму записи. После на форму кнопку ИзменитьКартинку. В модуль формы пишу код листинга 1.0 и привяжем событие Нажатие на кнопку.

//листинг 1.0
Функция КоличествоКартинок(Объект)

 Запрос = Новый Запрос;
 Запрос.Текст = 
  "ВЫБРАТЬ
  | ИзображенияНоменклатуры.Объект КАК Объект
  |ИЗ
  | РегистрСведений.ИзображенияНоменклатуры КАК ИзображенияНоменклатуры
  |ГДЕ
  | ИзображенияНоменклатуры.Объект = &Объект";

 Запрос.УстановитьПараметр("Объект",Объект);
 Результат = Запрос.Выполнить().Выгрузить();

 Возврат Результат.Количество(); 
КонецФункции

Функция ПолучитьЧастьСтрокиОтделеннойСимволом(Знач ИсходнаяСтрока, Знач СимволПоиска)
 
 ПозицияСимвола = СтрДлина(ИсходнаяСтрока);
 Пока ПозицияСимвола >= 1 Цикл
  
  Если Сред(ИсходнаяСтрока, ПозицияСимвола, 1) = СимволПоиска Тогда
      
   Возврат Сред(ИсходнаяСтрока, ПозицияСимвола + 1); 
   
  КонецЕсли;
  
  ПозицияСимвола = ПозицияСимвола - 1; 
 КонецЦикла;

 Возврат "";
   
КонецФункции

Процедура ИзменитьКартинкуНажатие(Элемент)
  
  СтандартнаяОбработка = ложь;
  ПутьКСерверу = Константы.ПутьККартинкамНаСервере.Получить();
  ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
  ДиалогОткрытияФайла.Заголовок = "Выберите файл с изображением";
  ДиалогОткрытияФайла.ПолноеИмяФайла = "";
  ДиалогОткрытияФайла.ПредварительныйПросмотр = Истина;
  Фильтр = "(*.jpg)|*.jpg,(*.png)|*.png";


  Если ДиалогОткрытияФайла.Выбрать() Тогда
   ВыбранноеИзображение = ДиалогОткрытияФайла.ПолноеИмяФайла;
  Иначе
   Возврат;
  КонецЕсли;
  
  Артикул = Объект.Артикул;
  КолКарт = КоличествоКартинок(Объект);
  Расширение = ПолучитьЧастьСтрокиОтделеннойСимволом(ДиалогОткрытияФайла.ПолноеИмяФайла,".");
  Имякартинки = "NPhoto_";
  Если КолКарт = 0 тогда
   ИмяНаСервере = Строка(Имякартинки)+СокрЛП(Артикул)+"."+Расширение;
  Иначе 
   ИмяНаСервере = Строка(Имякартинки)+СокрЛП(Артикул)+"_"+Строка(КолКарт)+"."+Расширение;
  КонецЕсли; 
  
  КопироватьФайл(ДиалогОткрытияФайла.ПолноеИмяФайла, ПутьКСерверу+ИмяНаСервере);
  
  ПутьККартинке = ИмяНаСервере;
  
  Путь = ПутьККартинке;  

КонецПроцедуры

4. Добавляю общую форму ФормаИзображения с полем картинки ОсновноеИзображение и табличное поле Изображения которое будет содержать список для редактирования изображения. В модуле пишу листинг 2.0.  Далее в свойстве табличного поля указываю ТипЗначения: РегистрСведенийСписок.ИзображенияНоменклатуры и событие ИзображенияОбработкаЗаписиНовогоОбъекта. И обязательно привязать одноименное событие формы ПриОткрытии.  

//листинг 2.0

Перем мКартинки;
Перем ПутьКСерверу;
Процедура ПриОткрытии()
 
 УстОтбор(Изображения.Отбор,,"Объект", ВладелецФормы.Ссылка, Истина);
 мКартинки = Добавленные.ПолучитьКартинкиИзРегистра(ВладелецФормы.Ссылка);
 
 Если мКартинки.количество() > 0 тогда
  ФайлКартинки = новый Файл(ПутьКСерверу+мКартинки[0].Путь);
  Если ФайлКартинки.Существует() и СтрДлина(мКартинки[0].Путь) > 0 тогда
   ЭлементыФормы.ОсновноеИзображение.картинка = новый Картинка(ПутьКСерверу+мКартинки[0].Путь);
  КонецЕсли;
 Иначе
   ЭлементыФормы.ОсновноеИзображение.картинка = новый Картинка(); 
 КонецЕсли;
    ТекущиеИзображение = 0;
 
КонецПроцедуры

Процедура УстОтбор(Отбор,НастройкаОтбора=0,Поле="Объект",Значение,ОтключатьПустое=Ложь) Экспорт
 
 Если Отбор.Найти(Поле) = Неопределено Тогда
     Отбор.Добавить(Поле);
 КонецЕсли;
 
 Попытка
  Отбор[Поле].ВидСравнения=ВидСравнения.Равно;
 Исключение
  Отбор[Поле].ВидСравнения=ВидСравнения.Содержит;
 КонецПопытки;
 
  Отбор[Поле].Значение=Значение;
  Отбор[Поле].Использование=?(ОтключатьПустое,ЗначениеЗаполнено(Значение),Истина);
  
 Если ЗначениеЗаполнено(НастройкаОтбора) Тогда
    НастройкаОтбора[Поле].Доступность=Ложь;
    КонецЕсли;
   
КонецПроцедуры

Процедура ИзображенияОбработкаЗаписиНовогоОбъекта(Элемент, Объект, СтандартнаяОбработка)
 СтандартнаяОбработка = ложь;
КонецПроцедуры

функция ПолучитьКартинкиИзРегистра(объект)
 
 Запрос = Новый Запрос;
 Запрос.Текст = 
  "ВЫБРАТЬ
  | ИзображенияНоменклатуры.Путь
  |ИЗ
  | РегистрСведений.ИзображенияНоменклатуры КАК ИзображенияНоменклатуры
  |ГДЕ
  | ИзображенияНоменклатуры.Объект = &Объект
  |
  |УПОРЯДОЧИТЬ ПО
  | ИзображенияНоменклатуры.Основное";

 Запрос.УстановитьПараметр("Объект", Объект);

 Результат = Запрос.Выполнить().Выгрузить();
 
 Возврат Результат;
 
КонецФункции 

ПутьКСерверу = Константы.ПутьККартинкамНаСервере.Получить();
мКартинки = новый ТаблицаЗначений;

5. Идем в ФормуЭлемента номенклатуры и заменяем код в процедуре ОсновноеИзображениеНажатие(). Код в листинге 3.0

//листинг 3.0
Процедура ОсновноеИзображениеНажатие(Элемент)

 //Если Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма) Тогда
 // Возврат;
 //КонецЕсли;

 //РаботаСФайлами.ОткрытьФормуИзображения(ЭтаФорма, ОсновноеИзображение, Ссылка);
 
 Форма = ОткрытьФорму("ОбщаяФорма.ФормаИзображения", , ЭтаФорма);

КонецПроцедуры 	


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

6. Так как форм где необходимо отобразить изображение может быть много, функции из листинга 4.0 поместим в общий модуль. У меня общий модуль называется "Добавленные".  


// листинг 4.0 
#Если Клиент Тогда
функция ПолучитьКартинкиИзРегистра(объект) Экспорт 
 
 
 Запрос = Новый Запрос;
 Запрос.Текст = 
  "ВЫБРАТЬ
  | ИзображенияНоменклатуры.Путь
  |ИЗ
  | РегистрСведений.ИзображенияНоменклатуры КАК ИзображенияНоменклатуры
  |ГДЕ
  | ИзображенияНоменклатуры.Объект = &Объект
  |
  |УПОРЯДОЧИТЬ ПО
  | ИзображенияНоменклатуры.Основное УБЫВ";

 Запрос.УстановитьПараметр("Объект", Объект);

 Результат = Запрос.Выполнить().Выгрузить();

 Возврат Результат;
 
КонецФункции
Функция ПоказатьКартинкуИзРегистра(объект) Экспорт 
 
 ПутьКСерверу = Константы.ПутьККартинкамНаСервере.Получить(); 
 мКартинки = ПолучитьКартинкиИзРегистра(объект);
 Если мКартинки.количество() > 0 тогда
  ФайлКартинки = новый Файл(ПутьКСерверу+мКартинки[0].Путь);
  Если ФайлКартинки.Существует() и СтрДлина(мКартинки[0].Путь) > 0 тогда
   Картинка = новый Картинка(ПутьКСерверу+мКартинки[0].Путь);
  КонецЕсли;
 Иначе
   Картинка = новый Картинка(); 
 КонецЕсли;
 
 Возврат картинка;

КонецФункции 
#КонецЕсли 
	

7. Пример из модуля формы элемента Номенклатуры в листинге 5.0
    
// листинг 5.0 
Процедура ПоказатьОсновноеИзображение() Экспорт

	Если ЭлементыФормы.ДействияФормы.Кнопки.Изображение.Пометка = Истина Тогда
		//Если мТекущееОсновноеИзображение = Неопределено Тогда
		//	ЭлементыФормы.ОсновноеИзображение.Картинка = мПустаяКартинка;
		//Иначе
		//	ЭлементыФормы.ОсновноеИзображение.Картинка = мТекущееОсновноеИзображение;
		//КонецЕсли;
		ЭлементыФормы.ОсновноеИзображение.Картинка = Добавленные.ПоказатьКартинкуИзРегистра(ЭтотОбъект.Ссылка);
	КонецЕсли;
	
КонецПроцедуры // ПоказатьОсновноеИзображение()	

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

Изображения Номенклатура сетевой каталог

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование 1C:Бухгалтерия Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    24186    29    49    

42

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 8 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

120000 руб.

19.08.2020    27328    26    1    

28

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (базовая, ПРОФ, КОРП, ФРЕШ).

13200 руб.

19.12.2016    49278    103    106    

73

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Налоговый учет Платные (руб)

Представлена обработка для импорта документов из розничной программы учета товара в торговых точках и аптеках, необходимых для ведения бухгалтерского и налогового учёта, в Бухгалтерию 3.0. При загрузке данных в бухгалтерию переносятся документы поступлений, реализации, возвратов и перемещений в торговых точках и формируются все бухгалтерские и налоговые отчеты с учетом этих документов для любой системы налогообложения. Обработка позволяет загрузить данные из ПО ТрейдФарм. Имеются варианты для других розничных программ (ПО Manuscript Solution, Е-Фарма и S-Market).

30000 руб.

09.04.2020    18845    13    8    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ivanov660 4738 18.08.14 23:06 Сейчас в теме
На сколько я понял, речь идет о примере для "своей" конфигурации. На мой взгляд удобнее использовать механизмы БСП "присоединенные файлы" или "файлы".
В примере присутствует много листинга, но возможно чего-то не хватает; для этого случая хорошо было бы выложить cf.
Мне очень не понравилась практика названия реквизитов как "объект".
2. Farzar 61 19.08.14 12:10 Сейчас в теме
Написано на типовой как раз БСП переделан чтоб в SQL не хранить файлы. Листинг рабочий но получился большой. Будьте внимательны с событиями формы. Если ошибки есть или сложности пишите.
3. hotey 42 19.08.14 22:11 Сейчас в теме
(2) Farzar, Вы же пишете, что делаете это для УПП, КА. Разве там используется БСП?
А у БСП есть свои настройки для хранения файлов в томах на диске.
5. omut 20.08.14 11:38 Сейчас в теме
(3) hotey, в КА используются точно )
4. Farzar 61 20.08.14 09:48 Сейчас в теме
Типовые конфигурации, где используются управляемые формы написаны на базе БСП от этого отталкивался
6. нормальный такой 93 21.08.14 09:28 Сейчас в теме
в скуле всё равно безопаснее хранить :)
7. nSpirit2 21.08.14 10:07 Сейчас в теме
Автор конечно молодец работа с файлами без попытки доставляет. Я так понимаю это сделано для файловой базы данных?
8. Farzar 61 21.08.14 11:07 Сейчас в теме
Скорее для серверной, файловая при больших объемах все равно не выживет. Когда у вас 2000 позиций и еще 5000 характеристик в этом случае Вы экономите пару гигабайт.
9. nSpirit2 21.08.14 11:19 Сейчас в теме
(8) Farzar, А смысл при использовании SQL хранить данные в отдельно лежащей папке на файловой системе вы думаете так быстрее будет ?
12. нормальный такой 93 21.08.14 12:32 Сейчас в теме
(9) nSpirit2, на самом деле с файлами быстрее работается... но я с вами солидарен, смысл хранить в файлах, если пользуется скуль.
в общем, велосипед на любителя...

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

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

10. Farzar 61 21.08.14 11:41 Сейчас в теме
Главное экономия места и время выполнения резервного архива и например отчет "Остатки в картинках" работает чуть быстрее.
11. CatMix 8 21.08.14 12:25 Сейчас в теме
По мне так плохой метод.
Какой-нить пользователь удалит картинки с общего ресурса или переместит их в другое место и всё?
Или Вы не разрешаете пользователям добавлять номенклатуру и редактировать изображения?
Как это всё разворачивать быстро на другом сервере?
Если экономите место в базе, почему не вынести картинку в другую sql базу?
Если скорость то лучше переместить таблицу с файлами на другой раздел/сервер итд?
criptid; BigB; nSpirit2; +3 Ответить
14. Farzar 61 21.08.14 13:30 Сейчас в теме
(11) CatMix,
Мое личное мнение не претендующее на единственное верное.
Отвечу по пунктам:
Какой-нить пользователь удалит картинки с общего ресурса или переместит их в другое место и всё?
Или Вы не разрешаете пользователям добавлять номенклатуру и редактировать изображения?
- пользователь пути к картинке не видит, полный путь в константе.
Как это всё разворачивать быстро на другом сервере?
- константе задаем новый путь, копируем директорию
Если экономите место в базе, почему не вынести картинку в другую sql базу? - не вижу смысла хранить бинарные неструктурированные данные в скл.
Если скорость то лучше переместить таблицу с файлами на другой раздел/сервер итд? - более сложный вариант.
13. insurgut 208 21.08.14 11:00 Сейчас в теме
Конечно все зависит от размеров организации и объема номенклатуры, с которой она работает.

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

Для того, чтобы пользователи на сетевом ресурсе не грохнули картинки, защита от дурака - сетевой ресурс скрываем символом $ в имени ресурса.
criptid; svetanik; t278; GAMLET; gradi; Farzar; +6 Ответить
44. alexey_kurdyukov 171 23.09.14 11:57 Сейчас в теме
(13) insurgut, Делал так же, еще на самописной семерке, а все операции над изображением производил с помощью командной строки IrfanView.
15. alyaev.a.v 25.08.14 21:16 Сейчас в теме
Так и не понял, если есть БСП с механизмом хранения в томах на дисках, зачем велосипед?
16. insurgut 208 26.08.14 10:49 Сейчас в теме
(15) alyaev.a.v, насколько понимаю, тут конкретный пример доработки типовой УТ 10.3. Доработать только эту часть, либо встраивать БСП в УТ 10.3 и все равно делать какие-то доработки? Тут каждый решает сам для себя :)
17. Farzar 61 26.08.14 11:15 Сейчас в теме
Из статьи
http://infostart.ru/public/190375/

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

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

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

18. Kyrales 146 26.08.14 08:24 Сейчас в теме
А как быть если распределенная база?
19. Farzar 61 26.08.14 13:15 Сейчас в теме
(18) Kyrales,

Первое что приходит на ум включить в план обмена регистр Изображения далее в константе ПутьККартинкамНаСервере указать новый путь.
Возможно несколько вариантов пути:
1. Дописать к плану обмена копирование файлов при отправке и при получении данных.
2. Простой если скорость интернета позволяет можно расшарить ресурс, не забывая о безопастности, поставить запрет на редактирования из подчиненной базы.
3. и тд.
20. insurgut 208 26.08.14 13:46 Сейчас в теме
Первое, что приходит на ум, облачные сервисы :) Яндекс.Диск например, дешево и сердито, практически 0 строчек кода доработки.
21. monkbest 114 03.09.14 09:44 Сейчас в теме
Все тут говорят про БСП, как про некую панацею. Мол если 1С создало БСП, то нафига велосипед городить.
БСП бывает разных версий. В УТ 10.3, УПП 1.3, Бух 2.0 она тоже есть, в них есть куча общих одинаковых для всех конфигураций модулей с полезными функциями.
Для управляемых форм в БСП есть механизмы по хранению файлами, но Вы пробовали посмотреть код, которым это реализовано? Там черт ногу сломает. А что если завтра БСП обновят? Все переписывать?
Для таких задач - только самописки потому, что:
1. Дешевле в разработке
2. Читабельный код, который через 2 года другой специалист поймет (если кодер не ушлепок:) )
3. Быстрее работает (100%)
4. Решает конкретную задачу, и делается под хотелки заказчика, а не универсально для всех на свете ООО. Самописка - всегда удобнее (если кодер не ушлепок:) )
5. Меньшая зависимость от смены релизов
22. nSpirit2 03.09.14 10:00 Сейчас в теме
(21) monkbest, Я надеюсь это был такой "Плохой совет" чтобы никто не делал так.
1. Дешевле в разработке

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

Ахаха написать что то свое всегда проще чем разобраться в чем то. Вы то точно умнее чем те кто написали эту недалекую конфигурацию.
3. Быстрее работает (100%)

Выше записать двоичные данные работает быстрей чем 1с 100% никто и не сомневался.

Знаете что я хочу сказать использование стандартных механизмов. Является правильным и хорошим тоном то что у разработчика нет желания разбираться со стандартным функционалом конфигурации это только его минус нежели плюс. Я вас умоляю написать свой велосипед с деревянными квадратными колесами вместо того чтобы ездить с остальными в метро еще тот обман жизни.
Работа с файлами в любом языке программирования очень сложная тем что при работе с файлами может возникнуть большое количество исключений которые надо обрабатывать а не бросать в надежде что ваши файлы не пропадут не попадут на бед окажутся теми что вы оставили все это остается на авось. Писать на 1с не зная БСП это как на С++ без STL.
23. OBEH 03.09.14 11:46 Сейчас в теме
(22)Все так пафосно. "Является правильным и хорошим тоном...", "Писать на 1с не зная БСП это как на С++ без STL..." и т.д.
Сравнение 1С(с ее БСП) и "С++ без STL", вообще, поражает дикостью.
В (21) верно подмечено. Сам не раз в этом убеждался. А работа "из коробки" у фирмы 1С имеет только смысл, что "вроде как работает и ладно".
24. monkbest 114 03.09.14 16:28 Сейчас в теме
(22) nSpirit2, вы хоть раз открывали модули отвечающие за работу с файлами в БСП? Видимо, нет. Я открывал.
По претензиям ко мне:
1. дешевле = потратить меньше времени на разработку. Такие мелкие задачи обычно оплачиваются по факту отработанного времени
2. я не ругал БСП, я просто довожу до сведенья незнающих, он сложна. Хотя, ДА - Я хорошего мнения о своих способностях, как разработчика. Да и опыт у меня богатый. Но авторов БСП не ставлю ниже себя:)

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

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

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

в БСП учитывается много фишек, оно работает в web клиенте, в серверной базе, в файловой... все это круто, но надо решать конкретные задачи. Самые живучие решения - простые, их потом легко трансформировать под новые обстоятельства.
svetanik; GAMLET; +2 Ответить
25. OBEH 03.09.14 17:29 Сейчас в теме
(24)"за 15 минут набрасываю регистр сведений и рисую в документе пару кнопок..."
Ага. Был у меня случай с "чудо программистом". Писал все влет... регистры, документы, справочники. Просто скорость поражала и такое знание языка.
Хорошо, что нашел время потестить это чудо мысли. Я ужаснулся реализации. Там, при изменении конфы, пришлось бы каждый раз его вызывать.
Снес его поделку и решил, по максимуму, штатными средствами. Не так быстро, довольно прилично призадумываясь, что можно использовать из того, что уже есть.
Работает несколько лет и не просит кушать.
Так что использование штатных возможностей, на мой взгляд, должно быть не на последнем месте.
Dimkasan; EmpireSer; nSpirit2; +3 Ответить
27. monkbest 114 03.09.14 17:41 Сейчас в теме
(25) OBEH, БСП входит в состав конфигураций, но не все его механизмы везде задействованы во всех объектах. Например 1С Бухгалтерии 3.0 есть БСП последней версии, в которой реализована работа с хранением файлов. Но это не значит, что вы можете прикрепить произвольный файл к документу "реализация товаров и услуг" быстро и удобно

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

Но, чтобы прикрепить файл к документы, надо:
1. Записать документ
2. Нажать кнопку доп сведенья
3. Начать редактировать сведенье, в котором лежит файл
4. Из списка всех файлов в справочнике выбрать нужный, а там его, т.е. нажать кнопку создать
5. Сохранить файл в справочнике.
6. Выбрать в доп сведенье элемент справочника.

Это не удобно. Каждый руководитель сам принимает решение "ломать" "не ломать". Если ломать, то он думает "А по чем?".
Ломание механизмов БСП - дорого, аукнется при обновлении еще дороже.
26. nSpirit2 03.09.14 17:35 Сейчас в теме
(24) monkbest, Это называется методом костыльного программирования. Они захотели я им сделал за 15 минут костыль. Они захотел хранить еще и сканы договоров. Я и там сделал костыль... Хотя БСП с точки зрения интерфейса тут каркас позволяет хранить все файлы однообразно... А еще вы точно за 15 минут написали все проверки на существование.. Проверку доступа и прочие вещи которые надо написать при работе с файлами...

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

Не поверите да и всем доволен.
28. monkbest 114 03.09.14 17:46 Сейчас в теме
(26) nSpirit2, мои костыли прочные и красивые, не переживайте, работаю годами. Я сам порой забываю об их существовании, настолько они органично врастают в систему и в жизнь предприятия, как будто они тут были еще до меня, со времен установки типовой конфигурации
29. OBEH 03.09.14 18:26 Сейчас в теме
(26) "всем доволен....".
По моему, это клиника. Особенно, применительно к 1С.
31. nSpirit2 04.09.14 10:03 Сейчас в теме
(29) OBEH, Ну да все прекрасно работает... Вам не нравиться 1С. Напишите что нибудь свое умное и хорошее. Боюсь все проблемы 1С вытекают из того что она и так вам жизнь упрощает в плане программирования как может.
(30) insurgut, Вот с вами я полностью согласен. Ну чтобы не попасть в просак каркас следует знать типовой функционал. Причем я именно говорю о том какие функции торчат из БСП наружу. Что бы не написать свой деревянный велосипед.

В конечном итоге костыли всегда оставаться костылями. И потом при переходе при смене редакции тот кто будет это делать заставят вас икать за ваш костыль.
30. insurgut 208 04.09.14 09:22 Сейчас в теме
(22) nSpirit2,
Знаете что я хочу сказать использование стандартных механизмов. Является правильным и хорошим тоном


Одно дело, когда есть исходный функционал в конфигурации, тут да, моветон. Но когда конфигурацию необходимо этим функционалом дорабатывать, что бы потом его использовать - тут уже можно и поспорить :)
nSpirit2; rdk_a; +2 Ответить
32. OBEH 04.09.14 10:43 Сейчас в теме
Станет все проще, если понять, что 1С торгует платформой и коробками с описанием языка и примерами прикладных решений на этой платформе.
Именно, примерами, а не законченными решениями.
Поэтому "Все прекрасно работает", если предприятие подгонять под этот пример.
Так что все, кто хочет реально работать, берут напильник и пилят этот самый пример для себя.
33. Yashazz 4851 08.09.14 16:59 Сейчас в теме
Курочить конфу, когда можно обойтись штатными средствами, да и безо всяких БСП - жуть.

Делается просто:
1. Добавляется доп.свойство справочника, хранящее строковый адрес картинки;
2. Добавляется внешняя печатная форма, привязанная к карточке номенклатуры, суть которой в работе с картинкой (выбор, показ, файловые операции);
3. Добавляется внешняя обработка, групповой менеджер картинок, настроек работы с ними (кои хранятся в общем хранилище настроек) и прочая.

Всё.
34. Farzar 61 08.09.14 18:18 Сейчас в теме
(33) Yashazz, Ваш ход мыслей верный в плане того что можно не редактировать типовую конфу. ЕЕ легко ОБНОВЛЯТЬ.
Но в примере минимум изменений кода в форме номенклатуры:
1. ПоказатьИзображение -
Форма = ОткрытьФорму("ОбщаяФорма.ФормаИзображения", , ЭтаФорма);

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


Основной код в отдельном общем модуле и общей форме которые не будут обновляться.
Разница только в том где хранить код в отдельном общем модуле или во внешней обработке.
35. monkbest 114 09.09.14 13:05 Сейчас в теме
(33) Yashazz, хорошая мысль, мне нравится. Помимо печатных форм еще есть и обработки заполнения, которые тоже везде можно присоединить.
единственное, сложно будет реализовать для незаписанного объекта
38. kosmo0 111 10.09.14 14:13 Сейчас в теме
(33) Ограничение - работа с ЕДИНСТВЕННЫМ изображением. Иногда этого не достаточно (ну либо опять воротить костыли).
40. Farzar 61 10.09.14 14:37 Сейчас в теме
(38) kosmo0, Костыли воротить не надо, добавьте в форму только две кнопочки вперед и назад:
Попытка
//назад +1		
Номер = ТекущиеИзображение -1;
		ОснованаяКартинка = новый Картинка(ПутьКСерверу+мКартинки[Номер].Путь);
		ЭлементыФормы.ОсновноеИзображение.картинка = ОснованаяКартинка;
		ТекущиеИзображение = Номер;
	Исключение
	КонецПопытки;

43. kosmo0 111 17.09.14 11:39 Сейчас в теме
(33) (40) Сначала. Что понимается под термином "свойство"? Я предполагал что это типа из УПП свойства объектов, на основе Планов видов характеристик. Если я понял правильно, то будете создавать свойства "Картинка1", "Картинка2" и далее? А если какому-то элементу нужно будет 30 картинок?
36. PiccaHut001 09.09.14 17:45 Сейчас в теме
(0) хорошее решение, сам так делал
37. kosmo0 111 10.09.14 13:56 Сейчас в теме
Я один заметил что не будет работать код (в цикл не зайдет)

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

ПозицияСимвола = СтрДлина(ИсходнаяСтрока);
Пока ПозицияСимвола = 1 Цикл
39. Farzar 61 10.09.14 14:14 Сейчас в теме
(37) kosmo0,
Должно быть так:
Пока ПозицияСимвола >= 1 Цикл

Скорее при вставке глюк, спасибо коммент.
41. echo77 1924 13.09.14 05:40 Сейчас в теме
Поправьте, пожалуйста, ошибки

Опишу в вкратце действия
В модель формы пишу код
4. Добавляю общею форму
42. Farzar 61 16.09.14 10:40 Сейчас в теме
(41) echo77, исправил, большое спасибо.
Только подсветка кода слетела, после сохранения..
45. hazd 06.10.14 00:07 Сейчас в теме
тоже страдаем раздуванием базы, а как быть если распределенная база?
46. insurgut 208 06.10.14 08:17 Сейчас в теме
(45) hazd, Яндекс.Диск или OneDrive вам в помощь. Проще уже некуда :)
47. IgorArhangel 9 27.02.15 09:52 Сейчас в теме
Интересно данный материал нормально будет работать на УТП 8..2?

Просто стандартные методы забиваю оперативную память в хлам. Работать просто не возможно.
48. IgorArhangel 9 02.03.15 12:03 Сейчас в теме
Начал делать все по инструкции и на конечном этапе выплыла такая вот ошибка:

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


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

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

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


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

Может кто подскажет кудой копать?
49. IgorArhangel 9 02.03.15 14:42 Сейчас в теме
Все разобрался..

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

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


Я сначала поставил = , а как оказалось нужно было поставить <>.
50. IgorArhangel 9 23.04.15 11:25 Сейчас в теме
Чуть переделал данное решение с полем HTML
Ну это не суть важно.
Мне интересно как открыть форму изображения например при клике на миниатюру в подборе или в справочнике.

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


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


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

Можно ли как-то сделать чтобы просто открывалась форма изображения?
51. IgorArhangel 9 25.06.15 11:46 Сейчас в теме
Все сделал. У меня все получилось.
Теперь оперативная память не забивается.
Поле HTML рулит.
Если что обращайтесь. Подскажу.
52. VZhulanov 5 21.03.16 12:16 Сейчас в теме
А никто не рассматривал смешанный вариант хранения картинок?
1. все картинки хранятся на диске/фтп/облаке
2. в БД есть регистр/справочник, в котором хранится путь к картинке и на который ссылаются нужные справочники (товары, сертификаты, клиенты и прочее)
этот регистр/справочник общий для всех баз в распределенке
3. в БД есть "локальный кеш" справочник/регистр, в котором хранятся сами картинки, к которым было обращение за последний месяц.
Этот справочник исключительно локальный и в обменах не участвует. Его без проблем можно чистить каждый месяц или вообще не чистить.
Можно картинки в нем хранить не по дате обращения, а по количеству обращений.

Таки образом получаем и возможность хранения огромного количества картинок (любых файлов) без раздувания БД
И за счет локального "кэша" картинок в самой базе получаем быстрый доступ к часто используемым картинкам, что уменьшает количество тормозов при хранении в сети/облаке/фтп
Причем размером локального кеша (размером БД) можно управлять без потери данных.
53. IgorArhangel 9 20.04.16 11:11 Сейчас в теме
(52) VZhulanov, как вариант имеет право на существование. Я сейчас примерно так и сделал. Все фото хранятся в Dropbox локально на каждом сервере. Dropbox запущен службой. И мне достаточно добавить новые фотографии на одном сервере и фотки загрузятся на остальные.
Вариант с часто используемыми нормальный, НО в подборе используется отображение картинки и получается, что все картинки будут тащиться в кеш.
А позиций более 8000.
Оставьте свое сообщение