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

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 
Процедура ПоказатьОсновноеИзображение() Экспорт

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

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

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

См. также

Перенос данных из Парус 8 в ЗГУ 3

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

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

84000 руб.

19.08.2020    22447    19    1    

22

Перенос данных из Парус 10 в ЗГУ ред.3

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

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

60000 руб.

05.10.2022    9207    9    8    

10

Перенос данных из Парус 7.хх в ЗГУ ред.3

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

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

24000 руб.

24.04.2017    48698    97    163    

86

Перенос начальных остатков из Парус 7.71 в БГУ

Внешние источники данных Взаиморасчеты Учет ОС и НМА Логистика, склад и ТМЦ Бюджетный учет Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 2.0 1С:Бухгалтерия государственного учреждения Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Перенос словарей и начальных остатков из ПП Парус-Бухгалтерия Бюджет 7.71 в 1Сv8 БГУ2. Заполнение словарей и документов по вводу начальных остатков. Не требуется установка ПП Парус7. Возможна дозагрузка. Позволит автоматически и наиболее полно ввести данные в программу для начала работы. 

15600 руб.

08.12.2011    81560    128    123    

147

Перенос данных из Парус 10 (Торнадо) в ЗГУ ред.3 через Excel

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

Обработка позволяет перенести кадровую информацию и данные по заработной плате из Парус 10(Торнадо) учреждений через файлы Excel в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ). В принципе, обработка может быть использована для загрузки из файлов Excel, полученных из любых информационных систем.

24000 руб.

16.11.2018    29997    20    31    

21

Загрузка спецификаций в УНФ из системы Базис-мебельщик

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

Обработка предназначена для загрузки файлов, выгруженных из системы Базис-мебельщик, в справочник "Спецификации" для последующих процессов учета и диспетчирования полуфабрикатов и изделий.

7200 руб.

24.06.2021    19126    52    50    

29
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ivanov660 4330 18.08.14 23:06 Сейчас в теме
На сколько я понял, речь идет о примере для "своей" конфигурации. На мой взгляд удобнее использовать механизмы БСП "присоединенные файлы" или "файлы".
В примере присутствует много листинга, но возможно чего-то не хватает; для этого случая хорошо было бы выложить cf.
Мне очень не понравилась практика названия реквизитов как "объект".
2. Farzar 59 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 59 20.08.14 09:48 Сейчас в теме
Типовые конфигурации, где используются управляемые формы написаны на базе БСП от этого отталкивался
6. нормальный такой 93 21.08.14 09:28 Сейчас в теме
в скуле всё равно безопаснее хранить :)
7. nSpirit2 21.08.14 10:07 Сейчас в теме
Автор конечно молодец работа с файлами без попытки доставляет. Я так понимаю это сделано для файловой базы данных?
8. Farzar 59 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 59 21.08.14 11:41 Сейчас в теме
Главное экономия места и время выполнения резервного архива и например отчет "Остатки в картинках" работает чуть быстрее.
11. CatMix 8 21.08.14 12:25 Сейчас в теме
По мне так плохой метод.
Какой-нить пользователь удалит картинки с общего ресурса или переместит их в другое место и всё?
Или Вы не разрешаете пользователям добавлять номенклатуру и редактировать изображения?
Как это всё разворачивать быстро на другом сервере?
Если экономите место в базе, почему не вынести картинку в другую sql базу?
Если скорость то лучше переместить таблицу с файлами на другой раздел/сервер итд?
criptid; BigB; nSpirit2; +3 Ответить
14. Farzar 59 21.08.14 13:30 Сейчас в теме
(11) CatMix,
Мое личное мнение не претендующее на единственное верное.
Отвечу по пунктам:
Какой-нить пользователь удалит картинки с общего ресурса или переместит их в другое место и всё?
Или Вы не разрешаете пользователям добавлять номенклатуру и редактировать изображения?
- пользователь пути к картинке не видит, полный путь в константе.
Как это всё разворачивать быстро на другом сервере?
- константе задаем новый путь, копируем директорию
Если экономите место в базе, почему не вынести картинку в другую sql базу? - не вижу смысла хранить бинарные неструктурированные данные в скл.
Если скорость то лучше переместить таблицу с файлами на другой раздел/сервер итд? - более сложный вариант.
13. insurgut 207 21.08.14 11:00 Сейчас в теме
Конечно все зависит от размеров организации и объема номенклатуры, с которой она работает.

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

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

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

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

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

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

Первое что приходит на ум включить в план обмена регистр Изображения далее в константе ПутьККартинкамНаСервере указать новый путь.
Возможно несколько вариантов пути:
1. Дописать к плану обмена копирование файлов при отправке и при получении данных.
2. Простой если скорость интернета позволяет можно расшарить ресурс, не забывая о безопастности, поставить запрет на редактирования из подчиненной базы.
3. и тд.
20. insurgut 207 26.08.14 13:46 Сейчас в теме
Первое, что приходит на ум, облачные сервисы :) Яндекс.Диск например, дешево и сердито, практически 0 строчек кода доработки.
21. monkbest 115 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 115 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 115 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 115 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 207 04.09.14 09:22 Сейчас в теме
(22) nSpirit2,
Знаете что я хочу сказать использование стандартных механизмов. Является правильным и хорошим тоном


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

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

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

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


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

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

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

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

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

Опишу в вкратце действия
В модель формы пишу код
4. Добавляю общею форму
42. Farzar 59 16.09.14 10:40 Сейчас в теме
(41) echo77, исправил, большое спасибо.
Только подсветка кода слетела, после сохранения..
45. hazd 06.10.14 00:07 Сейчас в теме
тоже страдаем раздуванием базы, а как быть если распределенная база?
46. insurgut 207 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 4 21.03.16 12:16 Сейчас в теме
А никто не рассматривал смешанный вариант хранения картинок?
1. все картинки хранятся на диске/фтп/облаке
2. в БД есть регистр/справочник, в котором хранится путь к картинке и на который ссылаются нужные справочники (товары, сертификаты, клиенты и прочее)
этот регистр/справочник общий для всех баз в распределенке
3. в БД есть "локальный кеш" справочник/регистр, в котором хранятся сами картинки, к которым было обращение за последний месяц.
Этот справочник исключительно локальный и в обменах не участвует. Его без проблем можно чистить каждый месяц или вообще не чистить.
Можно картинки в нем хранить не по дате обращения, а по количеству обращений.

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