GGraphics - внешняя компонента для работы с картинками jpg (jpeg), png, bmp, gif, tif

Публикация № 74981

Разработка - Разработка внешних компонент

графика изображение редактирование картинка водяной знак масштабирование обрезание graphics image photo двоичные данные photoshop jpg jpeg bmp gif tiff bitmap

Позволяет автоматизировать работу с картинками. С помощью компоненты можно измерять размер изображений, поворачивать их, наносить водяные знаки, конвертировать из одного формата в другой. Будет очень полезна для интернет-магазинов и всех, кому постоянно требуется работать с различными графическими форматами. Выполнена по технологии NativeAPI. Работает с форматами: jpg (jpeg), png, bmp, gif, tif

Проект имеет следующие премущества:

  1. Не требует установки на каждом компьютере, где будет осуществляться обработка картинок
  2. Прекрасно работает даже с большими изображениями
  3. Скорость работы выше примерно на 40%
  4. Имеет малое потребление памяти
  5. Может работать на сервере

Демонстрация работы

Общие сведения

GGraphics – внешняя компонента для работы с картинками из 1С. Может использоваться для конвертации из одного формата в другой, получения изображения из буфера обмена, изменения размера изображения, поворота (отражения), обрезки, получения размеров, добавления водяного знака, сжатия.

Поддерживаемые операционные системы:
Windows XP, Windows 7,8,10 (x86,x64), Windows Server (x86,x64)

Работает в режимах:
Толстый клиент, Тонкий клиент, Сервер

Поддерживается работа со следующими форматами:
В режиме открытия:

  • bmp
  • jpg
  • png
  • gif
  • tiff

В режиме сохранения:

  • bmp
  • jpg
  • png
  • tiff


Форматы «водяного знака»:

  • bmp
  • jpg
  • png
  • gif

Описание свойств и методов


Свойства:

РазмерИзображения/ ImageSize – размер текущего изображения в формате "Ширина"x"Высота"(например, 300x550). Тип: Строка - Только чтение
Ширина/Width – ширина текущего изображения. Тип: Строка - Только чтение
Высота/Height – высота текущего изображения. Тип: Строка - Только чтение
Формат/Format – формат текущего изображения. Тип: Строка - Только чтение
КоличествоКадров/FrameCount – количество кадров для gif и tiff. Тип: Число - Только чтение
ДвоичныеДанные/ BinaryData – файл в формате jpg без сжатия. Тип: ДвоичныеДанные - Только чтение
Base64 – файл в формате jpg без сжатия представленный в виде строки Base64. Тип: Строка - Чтение и запись
ОписаниеОшибки / ErrorDescription - в случае возникновения ошибки, содержит её описание.

Методы:

1) ПолучитьИзображение / GetImage – получает изображение для обработки (конвертации) из файла или буфера обмена.

Параметры:

  • ИмяФайла - имя открываемого для редактирования файла. Если имя файла пустое, то изображение берется из буфера обмена. Тип: Строка

2) ПолучитьДвоичныеДанные / GetBinaryData – возвращает двоичные данные изображения в указанном формате

Параметры:

  • ТипФайла – формат файла, в котором необходимо вернуть двоичные данные. Тип: Число

Принимает следующие значения:

  • 0 – bmp
  • 1 – jpg
  • 2 – png
  • 3 - tif

3) ПолучитьBase64 / GetBase64 – возвращает данные изображения в указанном формате в виде строки Base64

Параметры:

  • ТипФайла – формат файла, в котором необходимо вернуть данные ихображения. Тип: Число

Принимает следующие значения:

  • 0 – bmp
  • 1 – jpg
  • 2 – png
  • 3 – tif

4) ОбрезатьИзображение / CropImage – обрезает изображение на указанную величину.
Параметры:

  • Лево - количество пикселей (процентов), обрезаемых слева. Тип: Число
  • Право - количество пикселей (процентов), обрезаемых справа. Тип: Число
  • Верх - количество пикселей (процентов), обрезаемых сверху. Тип: Число
  • Низ - количество пикселей (процентов), обрезаемых снизу. Тип: Число
  • ВПроцентах – признак того, что все величины указаны в процентах. Тип: Булево (для 7.7 - 0 и 1) 

5) ОбрезатьПустыеКрая / CropEmptyBorders – обрезает пустые (прозрачные) края изображения.
Параметры:

  • Отступ - количество пикселей, оставляемых в качестве отступа. Тип: Число

6) ПовернутьИзображение / RotateImage – поворачивает (отражает) текущее изображение.

Параметры:

  • ОтразитьПоГоризонтали – признак того, что изображение необходимо отразить по горизонтали. Тип: Булево
  • ОтразитьПоВертикали - признак того, что изображение необходимо отразить по вертикали. Тип: Булево
  • Поворот – поворот изображения (-1 – на 90 градусов против часовой, 1 – на 90 градусов по часовой). Тип: Число

7) ИзменитьРазмерИзображения / ResizeImage – изменяет размер изображения.

Параметры:

  • Ширина – новая ширина для изображения. Тип: Число
  • Высота – новая высота для изображения. Тип: Число
  • Процент – процент на который изменяется размер (если число отрицательное – уменьшение изображения, если положительное - увеличение). Тип: Число
  • СохранятьПропорции – признак того, что при изменении размера необходимо сохранить пропорции изображения. Если указано, что необходимо сохранить пропорции, то методу передается только один из параметров (либо шинира, либо высота), а второй параметр принимает нулевое значение. Тип: Булево (для 7.7 - 0 и 1).

8) ДобавитьВодянойЗнак / AddWatermark – добавляет на текущее изображение «водяной знак».
Параметры:

  • ИмяФайла – файл, который будет использоваться в качестве водяного знака. Тип: Строка
  • Позиция – позиция на текущем изображении, где необходимо разместить водяной знак. Тип: Число

Принимает следующие значения:

0 – сверху слева
1 – сверху центр
2 – сверху справа
3 – по центру
4 – снизу слева
5 – снизу центр
6 – снизу справа

  • Прозрачность – процент прозрачности накладываемого изображения. Изменяется от 0 до 100. При 100 – изображение непрозрачно. Тип: Число

9) РазмытиеПоГауссу/ GaussianBlur – применяет к текущему изображению эффект «РазмытиеПоГауссу».
Параметры:

  • Радиус – радиус размытия от 0 до 500. Тип: Число

10) НерезкоеМаскирование/ UnsharpMask – применяет к текущему изображению эффект «Нерезкое маскирование».
Параметры:

  • Радиус – радиус размытия от 0 до 500. Тип: Число
  • Интенсивность – интенсивность эффекта от 0 до 500. Тип: Число
  • Порог – порог срабатывания от 0 до 255. Тип: Число

11) УвеличитьРезкость/ Sharpen – увеличивает резкость текущего изображения.
Параметры:

  • Интенсивность – интенсивность эффекта от 0 до 100. Тип: Число

12) СделатьЧерноБелым / CreateBlackAndWhite – делает текущее изображение черно-белым (оттенки серого)

Параметры: Нет

13) Сепия/ Sepia – применяет к текущему изображению эффект «Сепия».
Параметры:

  • Интенсивность – интенсивность эффекта от 0 до 255. Тип: Число

14) ЗаполнитьПрозрачность / FillTransparent – заполняет прозрачные участки текущего изображения заданным цветом.
Параметры:

  • R – интенсивность красного цвета от 0 до 255. Тип: Число
  • G – интенсивность зеленого цвета. Тип: Число
  • B – интенсивность синего цвета. Тип: Число
  • СохранятьПолупрозрачность – при заполнении полупрозрачные участки будут залиты указанным цветом, но степень их прозрачности будет сохранена. Тип: Булево

15) УстановитьЦветТекста / SetTextColor – задает цветовые параметры для текста, добавляемого на изображение методом ДобавитьТекст / AddText.

Параметры:

  • R – интенсивность красного цвета от 0 до 255. Тип: Число
  • G – интенсивность зеленого цвета. Тип: Число
  • B – интенсивность синего цвета. Тип: Число
  • A – интенсивность альфа-канала (прозрачность) от 0 до 255. Тип: Число

16) УстановитьПараметрыТекста / SetTextParams – задает параметры шрифта для текста, добавляемого на изображение методом ДобавитьТекст / AddText.

Параметры:

  • ИмяШрифта – имя шрифта, установленного в системе. Тип: Строка
  • РазмерШрифта – размер шрифта в пунктах. Тип: Число
  • Жирный – признак полужирного шрифта. Тип: Булево
  • Курсив – наклонный шрифт. Тип: Булево
  • Подчеркнутый –подчеркнутый шрифт. Тип: Булево

17) ДобавитьТекст / AddText – добавляет на текущее изображение заданный текст.

Параметры:

  • X – координата по X для добавляемого текста. Тип: Число
  • Y – координата по Y для добавляемого текста. Тип: Число
  • Текст – текст, добавляемый на изображение. Тип: Строка

18) УстановитьТекущийКадр / SetAvtiveFrame – меняет текущий активный кадр изображения (для форматов gif и tiff).

Параметры:

  • НомерКадраномер кадра изображения, который необходимо сделать активным. Тип: Число

19) СохранитьИзображения / SaveImage – сохраняет изображение в файл на диске.

Параметры:

  • ИмяФайла – имя файла для сохранения на диске. Тип: Строка
  • ТипФайла – формат сохраняемого файла. Тип: Число

Принимает следующие значения:

  • 0 – bmp
  • 1 – jpg
  • 2 – png
  • 3 - tif
  • Сжатие – степень сжатия для файлов формата jpg. Тип: Число
  • УдалятьОригинал – признак того, что необходимо удалить оригинальный файл. Требуется, например, при конвертации из одного формата в другой. Тип: Булево (для 7.7 - 0 и 1)

20) Закрыть / Close – высвобождает память, занимаемую текущим изображением.

 

Примеры кода

1) Обработка изображения на сервере

&НаСервере
Функция СоздатьМиниатюру(ИсходныйФайл, ВыходнойФайл)

	ВысотаМиниатюры = 100;

	ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаGGraphics", "Graphics", ТипВнешнейКомпоненты.Native);
			
	Если ПодключениеВыполнено Тогда					
		GGraphics = Новый("AddIn.Graphics.GGraphics");			
		GGraphics.ПолучитьИзображение(ИмяФайла);
		GGraphics.ИзменитьРазмерИзображения(0 , ВысотаМиниатюры, 0, Истина);
		GGraphics.СохранитьИзображение(ВыходнойФайл, 1, 100, Ложь);
		GGraphics.Закрыть();
	КонецЕсли;	
	
КонецФункции

 2) Обработка изображения на клиенте

&НаКлиенте
Функция ВозможноНанестиВодянойЗнак()

	РасположениеКомпоненты = "ОбщийМакет.КомпонентаGGraphics";
	ПодключениеВыполнено = ПодключитьВнешнююКомпоненту(РасположениеКомпоненты, "Graphics", ТипВнешнейКомпоненты.Native);
			
	Если НЕ ПодключениеВыполнено Тогда					
		УстановитьВнешнююКомпоненту(РасположениеКомпоненты);
		ПодключениеВыполнено = ПодключитьВнешнююКомпоненту(РасположениеКомпоненты, "Graphics", ТипВнешнейКомпоненты.Native);		
	КонецЕсли;	
	
	Возврат;
	
КонецФункции

&НаКлиенте
Процедура НанестиВодянойЗнак(ИмяФайла, ФайлВодяногоЗнака)

	Если ВозможноНанестиВодянойЗнак() Тогда
		GGraphics = Новый("AddIn.Graphics.GGraphics");			
		GGraphics.ПолучитьИзображение(ИмяФайла);
		GGraphics.ДобавитьВодянойЗнак(ФайлВодяногоЗнака, 3, 100);
		GGraphics.СохранитьИзображение(ИмяФайла, 1, 100, Ложь);
		GGraphics.Закрыть();
	КонецЕсли;

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

3) Обработка исключений

Попытка
   GGraphics.ПолучитьИзображение(ИмяФайла);
Исключение
   Сообщить(ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки, СтатусСообщения.Внимание);
КонецПопытки

Демонстрационная версия


В демонстрационной версии продукта только одно ограничение - все получаемые изображения имеют по центру надпись "DEMO".

Техническая поддержка

Срок бесплатной технической поддержки составляет 12 месяцев, начиная с даты приобретения продукта.

Гарантия возврата денег

ООО "Инфостарт" гарантирует Вам 100% возврат оплаты, если программа не соответствует заявленному функционалу из описания. Деньги можно вернуть в полном объеме, если вы заявите об этом в течение 14-ти дней со дня поступления денег на наш счет.

Программа настолько проверена в работе, что мы с полной уверенностью можем дать такую гарантию. Мы хотим, чтобы все наши покупатели оставались довольны покупкой.

Для возврата оплаты просто свяжитесь с нами.

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. Техподдержка 02.09.10 14:37
Исправил недочет с прозрачными областями png при наложении "водяного знака"
2. detec 130 02.09.10 14:38 Сейчас в теме
А какой командой добавлять компоненту в Windows?
3. Техподдержка 02.09.10 14:42
(2) regsvr32 <ПутьККомпоненте>
6. detec 130 02.09.10 16:02 Сейчас в теме
(3)

Спасибо! Так сейчас и сделал, При регистрации ошибок не было. Но всё равно не видит компоненту. Запускаю из толстого клиента, на Windows 7 x64. Я выполнял регистрацию из 32-битного cmd.exe
7. Техподдержка 02.09.10 16:05
(6) Файл компоненты должен лежать в каталоге исполняемых файлов 1С, либо
В ИмяФайла
ЗагрузитьВнешнююКомпоненту(<ИмяФайла>) 
должн быть указан полный путь к dll
9. detec 130 02.09.10 16:10 Сейчас в теме
(7) Попробовал зарегистрировать из 63-битного cmd.exe - не заработало. Только когда подкинул dll-ку в каталог 1С 8.2 - только тогда увидело её.

Но т.к. релизы 8.2 очень часто меняются - это паллиатив. Путь к dll-ке я, разумеется, указываю полный.
4. AlexBugs 02.09.10 15:12 Сейчас в теме
А в 7.7 точно работает? Может пример есть? :)
5. Техподдержка 02.09.10 16:01
(4) В 7.7 точно работает
ЗагрузитьВнешнююКомпоненту(<ПутьКВК>);
Graphics = СоздатьОбъект("AddIn.GraphicsVK")
8. Душелов 02.09.10 16:09 Сейчас в теме
Советую - работать с 1С-ными объектами типа "Картинка" (сделать 3 свойства для 7.7, 8.1 и 8.2 соответственно) и в зависимости от типа платформы возвращать готовый объект, без двоичных данных и промежуточных сохранений в файл.
10. Техподдержка 02.09.10 16:13
(8) В будущем так и сделаю
(7) Тут ничего не поделаешь, либо хранить в BIN, либо указывать полный путь.
Кажется, есть еще и третий вариант, но он муторный
11. detec 130 02.09.10 16:19 Сейчас в теме
Кажется, в демо-обработке есть баг. Я выбрал тип файлы - png, а после выбора пути сохранения мне выдало имя bmp.
12. Техподдержка 02.09.10 16:23
(11) Значит в поле "Файл для сохранения" было написано ***.bmp, хотя формат сохраненного файла при этом все равно будет png
13. Abadonna 3858 04.09.10 08:04 Сейчас в теме
(0) Как я понял из заголовка, ВК может работать и с 7.7.
Тогда вопрос: как задать в 7.7 тип Булево?
ВПроцентах – признак того, что все величины указаны в процентах. Тип: Булево

Нет его там вообще.
14. Техподдержка 04.09.10 10:56
(13) Все просто, для 7.7 будет так:
0 - Ложь
Не нуль - Истина
15. Abadonna 3858 04.09.10 10:58 Сейчас в теме
(14) У тебя ж не написано, что параметр вариантный, вот я и спросил.
Допиши в описание
16. Murom 06.09.10 14:55 Сейчас в теме
Компонента то, что надо. Давно искал что-то подобное т.к. не хотелось мутить через COM.
17. Техподдержка 06.09.10 15:12
(16) Форматы «водяного знака»:

* bmp
* jpg
* png

Сохрани как png c прозрачностью и все должно стать хорошо
18. Murom 07.09.10 16:56 Сейчас в теме
Есть еще вопрос!
Открываю png с прозрачным фоном, меняю размер изображения (растягиваю водяной знак ) потом сохраняю ... и получаю что прозрачный фон заменен на белый.

вкФайлКопирайта.ИзменитьРазмерИзображения(Ширина, Высота, 0, Ложь);
вкФайлКопирайта.СохранитьИзображение("tmp.png", 2, 0, Ложь);

Можно как нибудь сделать , чтоб прозрачный фон сохранялся?
19. Техподдержка 07.09.10 17:34
(18) К сожалению png пока не получится записать, сохранив при этом прозрачность. В будущем надеюсь это исправить.
22. Murom 09.09.10 00:24 Сейчас в теме
(19) Ну, тогда будем ждать новую версию с сохранением прозрачного фона в png.
PS . Реально очень сильно не хватало в 1с функций для преобразования графических файлов.
103. 1CLeXx 8 11.05.14 00:45 Сейчас в теме
Здравствуйте, подскажите плиз, почему ругается:

Код

GraphicsVK = СоздатьОбъект("AddIn.GraphicsNET");
GraphicsVK.ПолучитьИзображение("C:/301fbfeead21.jpg");

Изображение присутствует, но выдает ошибку:

GraphicsVK.ПолучитьИзображение("C:/301fbfeead21.jpg");
{C:\GFX.ERT(23)}: Поле агрегатного объекта не обнаружено (ПолучитьИзображение)

Что не так делаю?

Спасибо!
(103) Скорее всего проблема в самом компоненте. Метод "СоздатьОбъект" не вызывает ошибки? Попробуйте выполнить unreg.bat и reg.bat
105. 1CLeXx 8 12.05.14 11:51 Сейчас в теме
(104), да, действительно данные манипуляции помогли решить проблему.
Спасибо
45. Техподдержка 22.09.10 11:39
(22) Попробуйте новую версии программы (добавил сохранение прозрачности фона у png)
20. DimaP 56 07.09.10 18:38 Сейчас в теме
Плюс - задолался с этим ИмейджМэджик - нифига не работает, аналогично с остальными утилистами консольного преобразования изображений.
Вот только оно как-то долго работает ... :(
24. Alien_RS_Forever 09.09.10 16:19 Сейчас в теме
спасибо, компонента очень выручила ! желаю дальнейшего развития проекта ! ))
26. Altair777 640 09.09.10 16:33 Сейчас в теме
В архиве лежит Тест1CGraphics.epf
а для 7-ки можно?
27. Техподдержка 09.09.10 16:35
(26) Нет, для семерки пример делать нет времени, но там все абсолютно тоже самое.
28. Murom 09.09.10 18:09 Сейчас в теме
При наложении в цикле водяного знака (при вызове ДобавитьВодянойЗнак) течет память.
Потом показывается ошибка
GraphicsVK : Some operation could not be performed because the system is out of resources. Close some windows and try again..
Потом
GraphicsVK : Access violation at address 073932D4 in module 'GraphicsVK.dll'. Write of address 00000000 и еще что-то.
И вылетает 1с. Файл подкачки вырастает почти на 1 гб...
Если надо могу пример обработки под 8.1.

36. Техподдержка 14.09.10 17:09
(28) Добавил метод "Закрыть()"
При вызове метода высвобождается память занимаемая объектом.
Т.е. порядок работы следующий
Компонента.ПолучитьИзображение(...);
// Различные манипуляции с изображением
Компонента.xxxx();
Компонента.xxxx();
Компонента.СохранитьИзображение(...);
Компонента.Закрыть();
30. iceflash 4 10.09.10 16:05 Сейчас в теме
На чем написана компонента? (с целью подсказать возможные проблемы/улучшения)
32. iceflash 4 10.09.10 17:04 Сейчас в теме
Так и подумал, но решил уточнить=) Используешь что для работы с изображениями? TJpegImage (вроде так называется) и Tbitmap или стороннее что то?
33. Техподдержка 10.09.10 17:10
(32) Используется много чего.
Для хранения текущего изображения TBitmap
Для открытия различных форматов TPicture и TGIFImage (RXLib модуль rxgif)
При сохранении в jpg TJPEGImage
При работе с png используется TPNGObject (модуль pngimage)
34. iceflash 4 10.09.10 17:24 Сейчас в теме
Насколько помню вот так с ходу:
1. Не используй Tbitmap
2. Преобразования и битовые операции делай через BitBlt и маски
3. Все перечисленные объекты должны позволять работать не использая Bitmap
4. Самое узкое место всегда тут будет Tbitmap , пробуй указатели либо там есть еще какой то "тип" данных (не помню уже точно) - это даст экономию памяти, а использование процедур апи и работы с маской значительный прирост=)
35. Техподдержка 10.09.10 17:26
(34) Спасибо! Буду пробовать различные варианты
37. msw2010 14.09.10 18:35 Сейчас в теме
Не получилось работать с emf/emz (стандартные форматы Офиса)
38. Техподдержка 14.09.10 18:38
(37) Пока работа с emf поддерживается только если изображение находится в буфере обмена. Постараюсь добавить поддержку и в режиме открытия из файла
39. Техподдержка 15.09.10 11:16
Добавил поддержку форматов emf и wmf в режиме открытия из файла
40. msw2010 16.09.10 09:49 Сейчас в теме
пробовал открыть emf через тест: ошибок не даёт, размеры картинки правильные, картинка пустая :(
41. Техподдержка 16.09.10 09:52
(40) Сбросте файл на "alxd" собачка "inbox.ru", я посмотрю
161. mchammer4 118 20.06.17 21:51 Сейчас в теме
// Процедуры обработки изображений

Функция ВыполнитьОбработкуИзображений(ПутьКФайлуНаСервере, Сценарий, КаталогФайлов = "", Префикс = "") Экспорт

Файл = Новый Файл(ПутьКФайлуНаСервере);
Если Не Файл.Существует() Тогда
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "Не найден файл """ + ПутьКФайлуНаСервере + """ !");
Возврат Неопределено;
КонецЕсли;

ПодключениеВыполнено = Ложь;

// Компонента для работы с картинками
ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.МДК_GGraphics", "Graphics", ТипВнешнейКомпоненты.Native);
Если ПодключениеВыполнено Тогда
Попытка
GGraphics = Новый("AddIn.Graphics.GGraphics");
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "Не удалось подключить компоненту ""AddIn.Graphics.GGraphics"" по причине: " + ОписаниеОшибки());
ПодключениеВыполнено = Ложь;
КонецПопытки;
Иначе
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "Не удалось подключить компоненту ""AddIn.Graphics.GGraphics"" !");
ПодключениеВыполнено = Ложь;
КонецЕсли;

// Компонента для замены фона картинки
Попытка
ImageTools = Новый COMОбъект("Graphic.ImageTools");
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "Не удалось подключить компоненту ""Graphic.ImageTools"" по причине: " + ОписаниеОшибки());
ПодключениеВыполнено = Ложь;
КонецПопытки;

Если Не ПодключениеВыполнено Тогда
Возврат Неопределено;
КонецЕсли;

// Получение двоичных данных
ЕстьДанные = Ложь;

Попытка
GGraphics = Новый("AddIn.Graphics.GGraphics");
GGraphics.ПолучитьИзображение(ПутьКФайлуНаСервере);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
ЕстьДанные = Истина;
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
КонецПопытки;

Если Не ЕстьДанные Тогда
Возврат Неопределено;
КонецЕсли;

// Выполнение последовательности действий по схеме
Для Каждого Строка Из Сценарий.ПоследовательностьВыполнения Цикл
ДвоичныеДанные = ВыполнитьПреобразование(Строка.Алгоритм, ДвоичныеДанные, Сценарий, Файл.Имя);
Если ДвоичныеДанные = Неопределено Тогда
Прервать; // выход по ошибке
КонецЕсли;
КонецЦикла;

// Выходной файл
Если ДвоичныеДанные = Неопределено Тогда
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "Неудачная попытка выполнения сценария """ + СокрЛП(Сценарий) + """");
Возврат Неопределено;

Иначе // Сохранение результата
Если ПустаяСтрока(КаталогФайлов) Тогда
КаталогФайлов = КаталогВременныхФайлов();
КонецЕсли;

ФайлДляСохранения = КаталогФайлов + "\" + СокрЛП(Префикс) + Файл.Имя;

Попытка
GGraphics = Новый("AddIn.Graphics.GGraphics");
GGraphics.Base64 = Base64Строка(ДвоичныеДанные);
ТипФайла = Сценарий.ТипФайла;
Сжатие = Сценарий.Сжатие;
GGraphics.СохранитьИзображение(ФайлДляСохранения, ТипФайла, Сжатие, Ложь);
GGraphics.Закрыть();

Возврат ФайлДляСохранения; // ОБРАБОТАННОЕ ИЗОБРАЖЕНИЕ!!!

Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);

КонецПопытки;

КонецЕсли;

Возврат Неопределено;

КонецФункции

Функция ВыполнитьПреобразование(Алгоритм, ДвоичныеДанные, Сценарий, ИмяФайла)

Попытка
GGraphics = Новый("AddIn.Graphics.GGraphics");
GGraphics.Base64 = Base64Строка(ДвоичныеДанные);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ДвоичныеДанные: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

Если Алгоритм = "ЗаменитьФон" Тогда
ФайлДляСохранения = ПолучитьИмяВременногоФайла("") + "_" + ИмяФайла;
Попытка
ТипФайла = Сценарий.ТипФайла;
Сжатие = Сценарий.Сжатие;
GGraphics.СохранитьИзображение(ФайлДляСохранения, ТипФайла, Сжатие, Ложь);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ЗаменитьФон: " + ОписаниеОшибки()+ ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;
ФайлФона = Сценарий.ФайлФона;
ДиапазонПрозрачностиКрасный = Сценарий.ДиапазонПрозрачностиКрасный;
ДиапазонПрозрачностиЗеленый = Сценарий.ДиапазонПрозрачностиЗеленый;
ДиапазонПрозрачностиСиний = Сценарий.ДиапазонПрозрачностиСиний;
Попытка
ImageTools = Новый COMОбъект("Graphic.ImageTools");
Дескриптор = ImageTools.Open(ФайлФона);
ДиапазонПрозрачности = ImageTools.Color(ДиапазонПрозрачностиКрасный, ДиапазонПрозрачностиЗеленый, ДиапазонПрозрачностиСиний);
ImageTools.Transparent(Дескриптор, ФайлДляСохранения, -1, ДиапазонПрозрачности);
ImageTools.SaveAs(Дескриптор, ФайлДляСохранения);
ImageTools.Close(Дескриптор);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ЗаменитьФон: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
Попытка
GGraphics = Новый("AddIn.Graphics.GGraphics");
GGraphics.ПолучитьИзображение(ФайлДляСохранения);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
УдалитьФайлы(ФайлДляСохранения);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ЗаменитьФон: " + ОписаниеОшибки()+ ": " + GGraphics.ОписаниеОшибки);
УдалитьФайлы(ФайлДляСохранения);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "ОтразитьПоВертикали" Тогда
Попытка
GGraphics.ПовернутьИзображение(Ложь, Истина, 0);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ОтразитьПоВертикали: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "ОтразитьПоГоризонтали" Тогда
Попытка
GGraphics.ПовернутьИзображение(Истина, Ложь, 0);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ОтразитьПоГоризонтали: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "ПовернутьПоЧС" Тогда
Попытка
GGraphics.ПовернутьИзображение(Ложь, Ложь, 1);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ПовернутьПоЧС: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "ПовернутьПротивЧС" Тогда
Попытка
GGraphics.ПовернутьИзображение(Ложь, Ложь, -1);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ПовернутьПротивЧС: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "ПоворотНаПроизвольныйГрадус" Тогда
УголВГрадусах = Сценарий.УголВГрадусах;
ЦветФонаВУглах_Красный = Сценарий.ЦветФонаВУглах_Красный;
ЦветФонаВУглах_Зеленый = Сценарий.ЦветФонаВУглах_Зеленый;
ЦветФонаВУглах_Синий = Сценарий.ЦветФонаВУглах_Синий;
Попытка
ImageTools = Новый COMОбъект("Graphic.ImageTools");
Строка64 = Base64Строка(ДвоичныеДанные);
РезСтрока64 = ImageTools.RotateBase64(Строка64,
УголВГрадусах,
ImageTools.Color(ЦветФонаВУглах_Красный,
ЦветФонаВУглах_Зеленый,
ЦветФонаВУглах_Синий));
ДвоичныеДанные = Base64Значение(РезСтрока64);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ПоворотНаПроизвольныйГрадус: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "ОбрезатьПустыеКрая" Тогда
ОтступПустыеКрая = Сценарий.ОтступПустыеКрая;
Попытка
GGraphics.ОбрезатьПустыеКрая(ОтступПустыеКрая);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ОбрезатьПустыеКрая: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "Обрезать" Тогда
КоличествоСлева = Сценарий.КоличествоСлева;
КоличествоСправа = Сценарий.КоличествоСправа;
КоличествоСверху = Сценарий.КоличествоСверху;
КоличествоСнизу = Сценарий.КоличествоСнизу;
ОбрезатьВПроцентах = Сценарий.ОбрезатьВПроцентах;
Попытка
GGraphics.ОбрезатьИзображение(КоличествоСлева, КоличествоСправа, КоличествоСверху, КоличествоСнизу, ОбрезатьВПроцентах);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "Обрезать: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "УвеличитьРазмерНаПроцент" Тогда
ПроцентУвеличения = Сценарий.ПроцентУвеличения;
Попытка
GGraphics.ИзменитьРазмерИзображения(0, 0, ПроцентУвеличения, Истина);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "УвеличитьРазмерНаПроцент: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "УменьшитьРазмерНаПроцент" Тогда
ПроцентУменьшения = Сценарий.ПроцентУменьшения;
Попытка
GGraphics.ИзменитьРазмерИзображения(0, 0, (-1)*ПроцентУменьшения, Истина);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "УменьшитьРазмерНаПроцент: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "УстановитьШиринуПропорционально" Тогда
ПропорциональноПоШирине = Сценарий.ПропорциональноПоШирине;
Попытка
GGraphics.ИзменитьРазмерИзображения(ПропорциональноПоШирине, 0, 0, Истина);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "УстановитьШиринуПропорционально: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "УстановитьВысотуПропорционально" Тогда
ПропорциональноПоВысоте = Сценарий.ПропорциональноПоВысоте;
Попытка
GGraphics.ИзменитьРазмерИзображения(0, ПропорциональноПоВысоте, 0, Истина);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "УстановитьВысотуПропорционально: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "УстановитьРазмер" Тогда
БезПропорцийШирина = Сценарий.БезПропорцийШирина;
БезПропорцийВысота = Сценарий.БезПропорцийВысота;
Попытка
GGraphics.ИзменитьРазмерИзображения(БезПропорцийШирина, БезПропорцийВысота, 0, Ложь);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "УстановитьРазмер: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "ДобавитьТекст" Тогда
R = Сценарий.Текст_Цвет_Красный;
G = Сценарий.Текст_Цвет_Зеленый;
B = Сценарий.Текст_Цвет_Синий;
Текст_Прозрачность = Сценарий.Текст_Прозрачность;
Текст_Шрифт = Сценарий.Текст_Шрифт;
Текст_Размер = Сценарий.Текст_Размер;
Текст_Жирный = Сценарий.Текст_Жирный;
Текст_Курсив = Сценарий.Текст_Курсив;
Текст_Подчеркнутый = Сценарий.Текст_Подчеркнутый;
Текст_X = Сценарий.Текст_X;
Текст_Y = Сценарий.Текст_Y;
Текст_Текст = Сценарий.Текст_Текст;
Попытка
GGraphics.УстановитьЦветТекста(R, G, B, Текст_Прозрачность);
GGraphics.УстановитьПараметрыТекста(Текст_Шрифт, Текст_Размер, Текст_Жирный, Текст_Курсив, Текст_Подчеркнутый);
GGraphics.ДобавитьТекст(Текст_X, Текст_Y, Текст_Текст);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ДобавитьТекст: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "ЗаполнитьПрозрачность" Тогда
R = Сценарий.ЗаполнениеПрозрачности_Цвет_Красный;
G = Сценарий.ЗаполнениеПрозрачности_Цвет_Зеленый;
B = Сценарий.ЗаполнениеПрозрачности_Цвет_Синий;
Попытка
GGraphics.ЗаполнитьПрозрачность(R, G, B);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ЗаполнитьПрозрачность: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "ВыполнитьРазмытиеПоГауссу" Тогда
Размытие_Радиус = Сценарий.Размытие_Радиус;
Попытка
GGraphics.РазмытиеПоГауссу(Размытие_Радиус);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ВыполнитьРазмытиеПоГауссу: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "ВыполнитьНерезкоеМаскирование" Тогда
UnsharpMask_Радиус = Сценарий.UnsharpMask_Радиус;
UnsharpMask_Сила = Сценарий.UnsharpMask_Сила;
UnsharpMask_Порог = Сценарий.UnsharpMask_Порог;
Попытка
GGraphics.НерезкоеМаскирование(UnsharpMask_Радиус, UnsharpMask_Сила, UnsharpMask_Порог);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ВыполнитьНерезкоеМаскирование: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "ЭффектЧерноБелого" Тогда
Попытка
GGraphics.СделатьЧерноБелым();
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ЭффектЧерноБелого: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "ЭффектСепия" Тогда
Попытка
GGraphics.ЭффектСепия(40);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ЭффектСепия: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "НанестиВодянойЗнак" Тогда
ФайлВЗ = Сценарий.ФайлВЗ;
РасположениеВодяногоЗнака = Сценарий.РасположениеВодяногоЗнака;
ПрозрачностьЗнака = Сценарий.ПрозрачностьЗнака;
Попытка
GGraphics.ДобавитьВодянойЗнак(ФайлВЗ, РасположениеВодяногоЗнака, ПрозрачностьЗнака);
ТипФайла = Сценарий.ТипФайла;
ДвоичныеДанные = GGraphics.ПолучитьДвоичныеДанные(ТипФайла);
GGraphics.Закрыть();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "НанестиВодянойЗнак: " + ОписаниеОшибки() + ": " + GGraphics.ОписаниеОшибки);
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "НаложитьИзображение" Тогда
ФайлИзображенияНаложения = Сценарий.ФайлИзображенияНаложения;
Попытка
ImageTools = Новый COMОбъект("Graphic.ImageTools");
Строка64 = Base64Строка(ДвоичныеДанные);
Строка64_1 = Base64Строка(Новый ДвоичныеДанные(ФайлИзображенияНаложения));
РезСтрока64 = ImageTools.DrawCenterBase64(Строка64, Строка64_1);
ДвоичныеДанные = Base64Значение(РезСтрока64);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "НаложитьИзображение: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;

ИначеЕсли Алгоритм = "ЗаменитьЦвета" Тогда
ФайлИзображенияНаложения = Сценарий.ФайлИзображенияНаложения;
Попытка
ImageTools = Новый COMОбъект("Graphic.ImageTools");
Строка64 = Base64Строка(ДвоичныеДанные);
ЦветоваяЗаменаСтрока = "";
Для Каждого Стр Из Сценарий.ЦветоваяЗамена Цикл
ЦветоваяЗаменаСтрока = ЦветоваяЗаменаСтрока + Строка(ImageTools.Color(Стр.ЗаменяемыйЦвет_Красный,Стр.ЗаменяемыйЦвет_Зеленый,Стр.ЗаменяемыйЦвет_Синий))
+ "," + Строка(ImageTools.Color(Стр.ДиапазонОтклонения_Красный,Стр.ДиапазонОтклонения_Зеленый,Стр.ДиапазонОтклонения_Синий))
+ "," + Строка(ImageTools.Color(Стр.НовыйЦвет_Красный,Стр.НовыйЦвет_Зеленый,Стр.НовыйЦвет_Синий)) + ",";
КонецЦикла;
РезСтрока64 = ImageTools.ChangeColorsBase64(Строка64, ЦветоваяЗаменаСтрока);
ДвоичныеДанные = Base64Значение(РезСтрока64);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка изображений для сайта'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, "ЗаменитьЦвета: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;

КонецЕсли;

Возврат ДвоичныеДанные;

КонецФункции
42. msw2010 21.09.10 15:29 Сейчас в теме
очень хочется поддержку emf ;)
43. Техподдержка 21.09.10 15:34
(42) Практически готова новая версия компоненты (написана с нуля и на др. языке), которая будет полностью поддерживать emf. Скоро размещу здесь. Если есть желание могу дать потестить ;)
46. msw2010 24.09.10 21:25 Сейчас в теме
Спасибо большое! Работает нормально. ;)
47. maljaev 793 01.10.10 10:30 Сейчас в теме
Про библиотеку GflAx не забывайте. В ней функционала-то поболее будет. Хотя я и приветствую новые разработки, если в них действительно что-то новое есть, а так какой смысл изобретать велосипед.
48. Техподдержка 01.10.10 10:41
(47) Видел я эту библиотеку. Да функционал у нее богаче, НО!
1) С ее помощью не нашел как добавлять без заморочек водяной знак
2) GraphicsNET - лишь часть (которой решил поделится) большой компоненты , используемой в моей конфигурации.
Согласитесь, удобнее пользоваться одной компонентой и, что не мало важно, дорабатывать ее функционал, чем использовать несколько различных решений.
50. maljaev 793 01.10.10 12:26 Сейчас в теме
(48) Можно добавить водяной знак, с заморочками или без - это уж от опыта использования зависит. А вот насчет большой компоненты - это интересненько, можешь хотя бы вкратце сказать что туда входит? Выкладывать демку в широкие массы не собираешься?
51. Техподдержка 01.10.10 12:35
(50) Выкладывать не собираюсь. Просто собрал в одном месте все необходимые для работы данной конфы полезности, ну например, получение хеша MD5, быстрое извлечение данных из очень большого XML (700-800 мб) в txt, и т.п.
56. Pilokarpios 33 18.02.11 13:53 Сейчас в теме
Хелп, протестил компоненту 1С 8.2. все работает!

а на 1С 77 не работает, что может быть?

ЗагрузитьВнешнююКомпоненту(ПолныйПутьККомпоненте);
ГрафикаВК = СоздатьОбъект("AddIn.GraphicsNET");

Пока Цикл

   ГрафикаВК.ПолучитьИзображение(ПутьКФайлуИсточник);
   Размер = Число(-30);
   ГрафикаВК.ИзменитьРазмерИзображения(ГрафикаВК.Ширина,,Размер,1);
   Сжатие = Число(50);
   ТипФайла = "jpg";
   ГрафикаВК.СохранитьИзображение(ПутьКФайлуСохранение,ТипФайла,Сжатие,0);

КонецЦикла;

ГрафикаВК.Закрыть();
Показать


Повторюсь, на 1с82 на том же компе работает
57. Техподдержка 18.02.11 14:12
(56) Во-первых, вместо
ЗагрузитьВнешнююКомпоненту(ПутьКФайлуИсточник);

следует писать
ПодключитьВнешнююКомпоненту("AddIn.GraphicsNET");


И еще, метод СохранитьИзображение во втором параметре принимает не стороку, а число
0 – bmp
1 – jpg
2 – png

И все будет работать
49. Техподдержка 01.10.10 10:49
Исправил ошибку с вычислением координат водяного знака, когда он размещается в центре изображения
52. mevgenym 86 01.10.10 13:09 Сейчас в теме
В обработке. "Уменьшить на" действует только на ширину, причем иногда и пропорционально, примерно с третьего подрят клика начинает уменьшать только ширину.
53. Техподдержка 01.10.10 13:16
(52) Действительно, есть косяк с потерей пропорциональности. Исправлю. Спасибо за наблюдательность!
54. Поручик 4408 04.02.11 00:32 Сейчас в теме
При получении изображения из буфера обмена ПолучитьИзображение("") выскакивает раздражающее окно. Нельзя ли его выбросить нафиг?
Второй вопрос по поводу использования библиотеки в составе сторонних обработок.
55. Техподдержка 09.02.11 16:06
(54) По поводу окна проверю.
А в составе сторонних обработок можете пользовать сколько душе угодно
80. Поручик 4408 23.08.12 20:31 Сейчас в теме
(55) При получении изображения из буфера обмена ПолучитьИзображение("") выскакивает раздражающее окно. Нельзя ли его выбросить нафиг?
Сколько денег дать на перекомпиляцию библиотеки?
84. Техподдержка 24.08.12 08:59
(80) Деньги!? Нее, не слышал )))
Перезалил. Скачайте еще раз
85. Поручик 4408 24.08.12 20:38 Сейчас в теме
(84) Вот это другое дело.
Но теперь не удаётся зарегистрировать компоненту на Windows 7 корпоративной (64 бит). Библиотеку засунул в каталог bin 1С Предприятия
Команда регистрации: regsvr32 "C:\Program Files (x86)\1cv82\8.2.15.319\bin\GraphicsNET.dll" выполняю под админскими правами.
Прикрепленные файлы:
86. Техподдержка 24.08.12 22:00
(85) Регистрируется через файл reg.bat, который находится в архиве. При этом файл RegAsm.exe тоже должен быть распакован в каталог с компонентой и батником
87. Поручик 4408 24.08.12 22:18 Сейчас в теме
(86) В этом случае выдётся сообщение, что RegAsm.exe не является исполняемым файлом. Скрин
Прикрепленные файлы:
88. Поручик 4408 24.08.12 22:22 Сейчас в теме
(86) Указываю полные абсолютные пути. Скрин
Прикрепленные файлы:
58. Pilokarpios 33 18.02.11 14:16 Сейчас в теме
ок, спасибо,работает, воспользовался GraphicsVK, её проще удаленно зарегистрировать regsvr32
59. Техподдержка 18.02.11 14:21
(58) Вот только функционалом она не блещет :)
60. Pilokarpios 33 18.02.11 14:32 Сейчас в теме
Мне главное сжать размер до 10%, остальное неважно

Есть проблема,

Пользуюсь все же:

ЗагрузитьВнешнююКомпоненту("GraphicsVK.dll");
ГрафикаВК = СоздатьОбъект("AddIn.GraphicsVK");


Все работает, но, пока программу не завершить (1cv77.exe), папка сохранения фотографий залочена компонентой, не удалить.

Даже если:

Процедура ПриЗакрытии()
ГрафикаВК = 0;
КонецПроцедуры
61. Техподдержка 18.02.11 14:45
(61) А вот это нехорошо, конечно. Посмотрю, как будет время
63. cool.vlad4 45 08.09.11 16:03 Сейчас в теме
Есть золотая библиотека cxImage к которой также написаны ActiveX. Не требует dotnet. Советую для конвертирования, изменения, сжатия изображений.
64. vitalya24 226 09.09.11 03:13 Сейчас в теме
очень полезная штука, автору респект. Не очень удобно что нет метода который бы выводил размер файла картинки, хоть в 1с и есть такой метод, но здесь было бы удобнее
65. Техподдержка 09.09.11 08:31
(64) Спасибо! Если все таки дойдут руки до расширения функционала, обязательно добавлю этот метод.
66. prophetic 07.11.11 09:57 Сейчас в теме
Благодарю за компоненту. Используется на живую для обработки выгрузки из 1С на веб-сайт. Успехов!
67. suneagle 14.11.11 11:14 Сейчас в теме
Хорошая компонента, но у меня не получилось ее запустит на сервере.
Насколько я понимаю загвоздка в:
ПодключитьВнешнююКомпоненту("AddIn.GraphicsNET");

В таком виде запуск на сервере не возможен, а как изменить для регистрации на сервере так и не разобрался. Для данной библиотеки это возможно?
68. Техподдержка 14.11.11 19:22
(67) Нет, данная библиотека не будет работать на сервере
69. a_mironov 11.12.11 04:40 Сейчас в теме
71. ErrorEd88 51 30.01.12 18:59 Сейчас в теме
У меня есть одна УТшка, где 7000 наименований номенклатуры и все с картинками. База файловая, очень сильно тормозит. Поможет ли мне эта разработка ускорить работу базы?
72. Техподдержка 30.01.12 19:12
(71) Эта компонента может помочь автоматизировать процесс сжатия(ресайзинга) изображений, что поможет уменьшить размер базы. Но вообще хранить 7000 картинок в файловой базе, по-моему, кощунство
73. ErrorEd88 51 30.01.12 19:42 Сейчас в теме
74. Denis_Shiln 01.02.12 15:34 Сейчас в теме
Не могу подключить к 7-ке. Windows XP, DLL-ка находится в BIN 1С-ки
на
ПодключитьВнешнююКомпоненту(GraphicsNET.dll);
GraphicsVK = СоздатьОбъект("AddIn.GraphicsVK");


Ошибка при создании объекта из компоненты <Неизвестная компонента> (отсутствует CLSID)
GraphicsVK = СоздатьОбъект("AddIn.GraphicsVK");
{F:\BASE\...\PRICE.ERT(975)}: Неудачная попытка создания объекта (AddIn.GraphicsVK)

а на
ЗагрузитьВнешнююКомпоненту(GraphicsNET.dll);
GraphicsVK = СоздатьОбъект("AddIn.GraphicsVK");


Ошибка при создании объекта из компоненты C:\Program Files\1Cv77\BIN\GraphicsNET.dll (отсутствует интерфейс IInitDone)
GraphicsVK = СоздатьОбъект("AddIn.GraphicsVK");
{F:\BASE\...\PRICE.ERT(977)}: Неудачная попытка создания объекта (AddIn.GraphicsVK)
75. Техподдержка 01.02.12 15:55
(74)
ЗагрузитьВнешнююКомпоненту(<ПутьКDLL>);
Graphics = СоздатьОбъект("AddIn.GraphicsNET");
Denis_Shiln; +1 Ответить
76. astars 02.08.12 11:22 Сейчас в теме
Спасибо за компоненту. Планируется ли сделать возможным её запуск на сервере?
78. umetex 02.08.12 12:07 Сейчас в теме
(76) astars, Думаю, вообще невозможно. Компонента написана под .net (c#), а на сервере компоненты могут работать только в том случае, если они написаны на c++ no CLR по технологии NativeAPI. Не думаю, что автор с удобного c# перейдёт на c++ для переноса либы :)
79. Техподдержка 02.08.12 12:31
(78) Именно поэтому и маловероятно :)
81. CheBurator 3421 24.08.12 01:30 Сейчас в теме
Хочу: интеллектуальную обрезку!
На вход подсовываем файл изображения.
Изображение что-то там на однородном фоне. Фон намного больше собственно содержательного изображения.
На выходе - получаем обрезанный файл, который содержит собственно содержательное изображение с некоторым отсупом по сторонам прямоугольника с фоном -т.е. выкидываем нафиг из большого изображения все, что равно лишнему фону.
82. CheBurator 3421 24.08.12 01:33 Сейчас в теме
для ряда задач можно успешно заюзать http://infostart.ru/public/15599/
89. Поручик 4408 24.08.12 22:28 Сейчас в теме
Вот только так и получилось.
90. Sirruf 138 20.11.13 13:02 Сейчас в теме
Неприятная ошибка при попытке наложения водяного знака:
"Невозможно создать объект графики из изображения, имеющего формат с индексированными точками."
Пример картинки http://cdn0.sima-land.ru/items/726/726045/0/1600.jpg
91. Техподдержка 20.11.13 13:44
(90) Можно исходное изображение посмотреть и водяной знак?
92. Sirruf 138 20.11.13 14:39 Сейчас в теме
93. Техподдержка 21.11.13 09:41
(92) Оперативно решить проблему не получается. Могу посоветовать следующий выход:
Сначала получаете изображение (в данном конкретном случае 1600.jpg), затем сохраняете его (опять же с помощью компоненты). Потом снова получаете уже сохраненное изображение, и наносите на него водяной знак.
94. Sirruf 138 21.11.13 09:55 Сейчас в теме
95. mzelensky 53 18.12.13 10:22 Сейчас в теме
Вопрос - можно ли сделать наложение водяного знака не через "Сверху\снизу\по центру", а через указание координакт. Ну или скажем в процентах от верхнего левого угла, те. например, 90%*50% (что означает наложить знакт на 90% вниз от верхнего угла и на 50% вправо от левого угла).

Было бы очень здорово!
97. mzelensky 53 18.12.13 11:23 Сейчас в теме
(96) Спасибо! Постараюсь не пропустить обновление обработки.
Оставьте свое сообщение

См. также

GGraphics - внешняя компонента для работы с картинками jpg (jpeg), png, bmp, gif, tif Промо

Разработка внешних компонент v8 1cv8.cf Платные (руб)

Позволяет автоматизировать работу с картинками. С помощью компоненты можно измерять размер изображений, поворачивать их, наносить водяные знаки, конвертировать из одного формата в другой. Будет очень полезна для интернет-магазинов и всех, кому постоянно требуется работать с различными графическими форматами. Выполнена по технологии NativeAPI. Работает с форматами: jpg (jpeg), png, bmp, gif, tif

2000 руб.

02.09.2010    54279    62    207    

Интеграция "Библиотеки интеграции МДЛП 1.1.2.7" с типовой конфигурацией

Интеграция Конфигурирование 1С v8 Здравоохранение, медицина, стоматология Россия Бесплатно (free)

Инструкция для интеграции “Библиотеки интеграции МДЛП 1.1.2.7” в типовые конфигурации, на примере конфигурации “Управление нашей фирмой, редакция 1.6 (1.6.18.168)”.

02.03.2020    4220    0    RPGrigorev    3    

Универсальные инструменты 1С

Универсальные обработки Прочие инструменты разработчика v8 1cv8.cf Бесплатно (free)

Свободно распространяемый набор универсальных обработок и отчетов в виде расширения для разработки и поддержки, которое работает во ВСЕХ видах клиентских приложений и во всех операционных системах, которые поддерживает платформа 1С:Предприятие, кроме мобильных. Консоль запросов - консоль отчетов - консоль кода - редактор объектов базы данных - удаление помеченных объектов - поиск и удаление дублей - редактор констант - консоль заданий - групповая обработка справочников и документов - динамический список - поиск ссылок на объект - регистрация изменений для обмена данными - структура хранения базы - консоль HTTP запросов-консоль вебсервисов- консоль сравнения данных- информация о лицензиях- загрузка из табличного документа-файловый менеджер-все функции- навигатор по конфигурации-конструктор регулярных выражений-Выгрузка загрузка XML с фильтрами

21.01.2020    21182    295    cprit    94    

Хранение файлов - как уменьшить размер базы данных

Чистка базы Производительность и оптимизация (HighLoad) Практика программирования Разработка v8 Россия Бесплатно (free)

Хранение файлов в базе 1С можно оптимизировать для уменьшения размера хранимых данных.

09.09.2019    7910    0    2tvad    17    

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8 Промо

Практика программирования Внешние источники данных WEB Универсальные функции Инструментарий разработчика Универсальные обработки v8 1cv8.cf Платные (руб)

Коннектор - библиотека для работы с HTTP запросами. Библиотека берет на себя всю рутину работы с HTTP запросами. Буквально в одну строку можно получать данные, отправлять, не заботясь о необходимости конструирования URL, кодирования данных и т.п.

2000 руб.

31.01.2019    45476    326    156    

1С:Ассемблер. Немного летнего веселья!

Практика программирования Разработка v8 1cv8.cf Абонемент ($m)

Все вы, наверное, слышали, что 1С-ники жалуются на свою систему, считая язык 1С недостаточно низкоуровневым, скучным и т.п. Все они с тоской поглядывают в сторону "настоящих" языков программирования. Так вот, господа, они неправы. В системе 1С есть места, где можно размять программерский мозг и получить удовольствие от низкоуровневой техники. Предлагаю вам погрузиться в недра виртуальной машины 1С и понять, как она работает. Там есть свой "ассемблер" и мы попробуем его в действии!

1 стартмани

21.06.2019    26236    76    Evil Beaver    119    

Выполнение внешней обработки в фоновом задании

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    26327    0    Eret1k    23    

Немного о графических файлах. Сжатие. Распознавание текста

Инструментарий разработчика v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

06.05.2019    6676    10    tusv    6    

Регулярные выражения без внешних компонент? Легко! Промо

Практика программирования Обмен через XML v8 Бесплатно (free)

Сложный способ организовать проверку строки с помощью регулярного выражения в 1С. При этом ни одна внешняя компонента не пострадала. Ну и от платформы (Linux, MustDie) - не зависит.

04.03.2016    60177    0    starik-2005    99    

Практика перехода на Linux и Postgres в небольшой компании (10 пользователей)

Администрирование данных 1С v8 1cv8.cf Бесплатно (free)

Почему я решил поставить давнему клиенту Linux + Postgres вместо Windows + MS SQL? Что меня останавливало раньше?

22.04.2019    27761    0    starik-2005    169    

HTML-клиент у конфигурации 1С

WEB v8 Бесплатно (free)

Приветствую. В этой публикации опишу свой опыт создания html-клиента для конфигурации 1С с помощью http-сервисов. HTML-клиент в этом случае - это frontend (html + css+ js), который генерирует и выдает пользователю конфигурация + backend, который тоже реализован в этой же конфигурации.

17.04.2019    16851    0    Smaylukk    119    

Уменьшаем трафик: HTTP запрос со сжатием GZIP средствами 1С. На примере выгрузки файлов на Яндекс-диск

WEB v8 1cv8.cf Абонемент ($m)

Обработка демонстрирует отправку тела HTTP запроса со сжатием gzip (метод deflate) средствами платформы 1С. Демонстрация происходит на примере отправки текста или файла на Яндекс.Диск.

1 стартмани

03.09.2018    5830    28    uno-c    0    

Инструменты бухгалтера: Виджеты рабочего стола Промо

Универсальные обработки Рабочее место v8 v8::БУ БП3.0 Абонемент ($m)

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

2 стартмани

28.08.2017    35291    170    Bazil    28    

Чтение сжатого gzip, deflate HTTP ответа сервера. Без ВК. Уменьши время загрузки и сократи трафик в 3 раза

WEB v8 1cv8.cf Абонемент ($m)

В платформе 1С:Предприятие не реализовано штатного механизма декодирования ответа веб серверов, в которых присутствует gzip сжатие. Некоторые использовали WinHttpRequest.5.1 , кто-то писал ВК. Друзья, хватит. Вот вам решение.

1 стартмани

08.06.2018    13594    69    Malfarion    16    

Создание подключаемой обработки табличной части с диалогом запроса параметров заполнения (управляемые формы)

Обработка документов Обработка справочников Практика программирования v8::УФ 1cv8.cf Абонемент ($m)

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

1 стартмани

03.05.2018    44727    116    Mirage78    15    

Обработка печатной формы WORD клиент-сервер УФ

Универсальные печатные формы v8::УФ 1cv8.cf Абонемент ($m)

Это моя первая статья на данном портале, но попытаюсь изложить все понятно и подробно. Долгое время у меня заняло создание такой вот внешней обработки. Есть очень много примеров, как сделать подобное на неуправляемых формах (2.0) и очень мало информации касательно управляемых(3.0), по крайней мере я многого найти не смог в доступе. Создание подобное обработки выглядит вполне несложно, если производить все действия на сервере, как это было с 2.0, но в нашем случае необходимо инициализировать открытие документа на клиенте, чему сильно мешает отсутствие возможности передать макет Active Document с сервера на клиент.

2 стартмани

14.03.2018    23691    83    LeoKeyn    41    

Gant 1C 2.* - диаграмма Ганта с таблицей + Планировщик + Отчет (8.1, на управляемой форме/Такси 8.2, 8.3) Промо

Рабочее место Универсальные обработки Управление проектом Финансовый учет и бюджетирование (FRP) Производство готовой продукции (работ, услуг) Учет рабочего времени Финансовый учет и бюджетирование (FRP) Производство готовой продукции (работ, услуг) Учет рабочего времени v8 1cv8.cf УУ Абонемент ($m)

Внешняя обработка, аналог MS Project в 1Се для работы с задачами: параллельный ввод данных по задачам и график Ганта, дополнительный режим в виде календаря (планировщик), связывание задач и пересчет длительности и дат с учетом выходных, видов связей и запаздываний, расчет затрат, сохранение/открытие проектов в файл на диск или файл ИБ, импорт/экспорт документов Microsoft Project.

1 стартмани

02.12.2011    135865    1067    rare-avis    210    

“Заставим сканер пищать!” или Получаем обратную связь из 1С при сканировании штрихкодов

Сканер штрих-кода Учет ТМЦ Учет ТМЦ v8 1cv8.cf Абонемент ($m)

Получаем обратную связь из 1С при сканировании штрихкодов.

1 стартмани

10.01.2018    40579    100    vadnevzorov    70    

1С: Конвертация данных 3. Инструкции и примеры. EnterpriseData (универсальный формат обмена)

Перенос данных из 1C8 в 1C8 Практика программирования Обмен через XML v8 КД Бесплатно (free)

Что такое КД3? Как начать использовать? Полезные дополнения к документации. Что нужно исправить в типовых обработках и конфигурации. Как изменить правила обмена не снимая конфигурацию с поддержки. Как отлаживать правила обмена?

19.11.2017    181720    0    MaxS    285    

Зачем 1С-нику NoSQL и CRDT

WEB Интеграция Бесплатно (free)

В статье речь пойдет о современных инструментах для хранения, транспорта, обработки и обмена данными на примере популярной NoSQL-базы CouchDB.

12.08.2017    22727    0    unpete    27    

Маркировка: 2D Android Штрихкод сканер + драйвер устройства для 1С Промо

Сканер штрих-кода Розничная торговля Розничная торговля v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

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

3 стартмани

29.11.2016    43969    176    dreamadv    110    

Как я стал одинэсником и переехал из провинции в Москву

О жизни Россия Бесплатно (free)

История покорения Москвы.

29.07.2017    16819    0    DmitryKSL    132    

54 ФЗ своими руками

ККМ Кассовые операции Розничная торговля Кассовые операции Розничная торговля v8 Розница Розничная и сетевая торговля (FMCG) Россия УУ Бесплатно (free)

Практический опыт внедрения изменений в 54ФЗ в розничной сети, работающей на 1С. Если вы не хотите платить каким-либо подрядчикам, которые "всё сделают и настроят за вас", то статься может оказаться крайне полезной.

17.04.2017    57582    0    comol    124    

Формирование штрихкода EAN-13 в SVG с помощью XDTO

Практика программирования v8 1cv8.cf Россия Абонемент ($m)

В версии платформы 8.3.9 было объявлено о поддержке изображений в формате SVG. Данная обработка демонстрирует работу с данным форматом, а именно его формированием (рисованием). Ну а так как самой популярной картинкой в 1С, наверное, является картинка штрихкода EAN - ее я и решил рисовать.

1 стартмани

24.03.2017    11936    52    kot-stas    19    

Удаление организации из 1С. Чистка базы 1С. Удаление "не удаляемых" объектов Промо

Чистка базы v8 1cv8.cf Абонемент ($m)

Удалить все документы, чтобы в базе осталась только одна организация со своими документами? Удалить всю информацию в регистрах, не связанную с указанной фирмой? Удалить "неудаляемую" номенклатуру? Легко! Используйте эту обработку.

10 стартмани

02.10.2015    51032    309    spy-83    84    

План обмена в формате "EnterpriseData" для 1С 7.7

Обмен через XML 1С7.7<->1C7.7 v7.7 1С7:ТиС Абонемент ($m)

Пример организации надёжной синхронизации данных через универсальный формат "EnterpriseData" между конфигурациями на базе 1С 7.7 и произвольными приложениями.

1 стартмани

07.01.2017    21850    24    binex    23    

"Распределение в запросе" или "избавляемся от перебора"

Математика и алгоритмы Универсальные функции v8 1cv8.cf Россия Бесплатно (free)

Хороший перебор - это отсутствие перебора. Рассмотрим пример замены полного перебора запросом.

16.12.2016    32712    0    alexandersh    48    

Разбираемся с механизмом Дополнительные отчеты и обработки в БСП

Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Абонемент ($m)

Чуть более комплексное описание, чем на других ресурсах

1 стартмани

30.10.2016    140221    947    json    66    

Монитор журнала регистрации Промо

Журнал регистрации Администрирование данных 1С WEB v8 1cv8.cf Абонемент ($m)

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

2 стартмани

29.06.2015    39835    106    andy23    49    

Редактирование табличной части объекта с помощью СКД

Инструментарий разработчика Практика программирования v8::СКД 1cv8.cf Россия Абонемент ($m)

Тема не нова - похожие решения были и на 8.0. К написанию статьи меня подтолкнул коллега, т.к. я это чудом не считаю. Несколько раз я видел тонны сложнейшего, и посему нерабочего кода, целью которого было сделать нечто похожее средствами, которые для этого не предназначены. В статье дан простейший пример, показывающий, как можно применять средства СКД для редактирования сложной структуры данных, например, табличных частей документов. В частности, рассмотрена работа с набором данных типа "Объект" и событием "Обработка расшифровки"

2 стартмани

16.09.2016    24440    96    Hatson    27    

Примеры скриптов на OneScript

OneScript Россия Абонемент ($m)

В своей работе нам часто приходится заниматься рутинными операциями. При небольшом их объеме "ручное" выполнение еще допустимо, но с ростом их числа все мы задумываемся об автоматизации. Вот тут нам на помощь и приходят скрипты. На этом сайте уже выложено немало примеров различных скриптов, вот и я решил внести свою лепту.

1 стартмани

14.07.2016    28549    41    Drak0n    43    

Набор данных Объект в СКД для решения задач сортировки, нумерации и вывода в отчет произвольных наборов данных

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

Использование набора данных Объект в СКД, может добавить вашему отчету новые интересные возможности. В этой статье я покажу, как я использовал набор данных Объект при решении одной задачи.

04.07.2016    44607    0    lopatin    12    

Опыт оптимизации и контроля производительности в БД с 3000 пользователей Промо

Производительность и оптимизация (HighLoad) Бесплатно (free)

Данная статья написана по материалам доклада, прочитанного на Конференции Инфостарта IE 2014 29-31 октября 2014 года. Меня зовут Сергей, являюсь руководителем отдела оптимизации и производительности систем в компании "Деловые линии". Цель этого доклада – поделиться информацией о нашем опыте работы с большой базой на платформе 1С, с чем пришлось столкнуться, как удалось обеспечить работоспособность. Уверен, что вам будет интересно, так как подобной информацией мало кто делится, да и про само существование таких систем их владельцы стараются не рассказывать, максимум про это «краем глаза» упоминают участвовавшие в проекте вендоры. **update от 04.03.2016 по вопросам из комментариев

05.08.2015    60285    0    Sergey.Noskov    119    

Учет путевых листов

Обработка документов Печатные формы документов Учет рабочего времени Учет ТМЦ Учет рабочего времени Учет ТМЦ v8 v8::УФ 1cv8.cf БУ УУ Абонемент ($m)

Внешняя обработка по учету путевых листов для управляемых форм. Позволяет сохранять во внешнем файле данные об автомобилях, водителях и путевых листах. Позволяет печатать формы №3 и №4-П. Позволяет вести учет задолженностей водителей за бензин и сравнивать расход по норме (по показаниям спидометра) и фактический расход бензина.

3 стартмани

27.06.2016    14102    79    DrugOn    10    

Google Analytics API, Oauth2.0 и 1c8

Практика программирования WEB v8 1С:Франчайзи, автоматизация бизнеса Бесплатно (free)

Обращение к Google Analytics API, Протокол Oauth 2.0 и запросы от 1С:8 без авторизации пользователя

02.05.2016    25576    0    Ольга_tmp    18    

УПД для документа "Поступление товаров и услуг" (БП 3.0) за поставщика

Печатные формы документов Оптовая торговля Производство готовой продукции (работ, услуг) Оптовая торговля Производство готовой продукции (работ, услуг) v8 v8::БУ БП3.0 Россия БУ Абонемент ($m)

Внешняя печатная форма для документа "Поступление товаров и услуг" позволяет печатать "Универсальный передаточный документ (УПД)" за поставщика в ред. постановления Правительства РФ 1137, 625 и 981

1 стартмани

20.12.2015    21974    273    romanco    18    

Автоматический REST-сервис в «1С:Предприятии». OData. Пример работы из Jscript/AJAX Промо

Практика программирования WEB v8 1cv8.cf Абонемент ($m)

Небольшой обзор REST-сервиса в «1С:Предприятии». Рассмотрен механизм работы c REST-сервером 1С:Предприятия из внешнего приложения - веб-страницы с использованием языка JavaScript и технологии AJAX.

1 стартмани

08.10.2014    76567    75    vano-ekt    48    

Автозаполнение адресов в 1С (API Google autocomplete place)

Практика программирования v8 1cv8.cf Бесплатно (free)

В данной статье вы увидите пример, как можно с помощью API Google autocomplete place делать подсказки при заполнении адреса

19.10.2015    12894    0    d.alexandr    26    

Использование встроенных отчетов для создания анализа корректности данных при исчислении НДС с авансов полученных

Бухгалтерский учет v8 БП2.0 Россия БУ НДС Бесплатно (free)

На Инфостарте много выложено внешних отчетов, направленных на контроль правильности исчисления НДС с авансов полученных. Хочу поделиться своим опытом использования встроенного отчета (для Бухгалтерия предприятия.Редакция 3.0) и порядка создания настроек отчета для процедур контроля за исчислением НДС с авансовых платежей покупателей, особенно в случаях применения различных налоговых ставок НДС

1 стартмани

22.07.2015    8768    0    lvk74    3    

Дополнительные отчеты и обработки для конфигураций, основанных на БСП. Часть 1. Заполнение объектов.

Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

08.01.2015    35018    72    acrk    23    

Создание внешних печатных форм под управляемым приложением с нуля Промо

Печатные формы документов v8 v8::УФ 1cv8.cf Абонемент ($m)

Когда мне пришлось создавать внешние печатные формы под приложения на БСП ("1С: Бухгалтерия предприятия 3.0", "1С: Управление торговлей 11"), я обнаружил, что нет грамотных инструкций. Те, что имелись, использовали так называемые шаблоны: готовые обработки, в которых необходимо выполнять определенные корректировки. Но как создать сам шаблон, конкретных мануалов не было, справочную информацию я нашел на сайте ИТС и, обработав ее, написал статью, где подробно и понятно объясняются все этапы создания внешней печатной формы для управляемого приложения на примере конфигурации "1С: Бухгалтерия предприятия 3.0"

1 стартмани

05.06.2014    263229    391    signum2009    127    

Настройка ТСД chiperLab 8001 для УТ 11

Терминал сбора данных Учет ТМЦ Учет ТМЦ v8 УТ10 УУ Абонемент ($m)

Расширяем функционал ТСД chiperLab 8001 и загружаем сразу 10 документов Сканируйте 10 накладных за один раз!!!

1 стартмани

23.10.2014    24498    21    antonlinux    4    

Работа с принтером чеков Posiflex PP 6000, 7000, 8000

POS терминал Россия Абонемент ($m)

Некоторые варианты для работы с принтером чеков POSIFLEX AURA 6000, 7000, 8000.

1 стартмани

18.08.2014    64629    146    MrFlanker    24    

Подписываем файлы с помощью ЭЦП средствами 1с Промо

Универсальные обработки Защита и шифрование v8 1cv8.cf Абонемент ($m)

Обработка для подписи с помощью сертификата (ЭЦП) произвольных файлов, только средствами платформы 1с. Работает на всех конфигурациях, но только на последних платформах 8.2 и 8.3, где есть менеджер криптографии.

1 стартмани

05.09.2013    60514    255    anig99    25    

1С Бухгалтерия 8. Часть 1: Настройка параметров учета Промо

Управленческий учет (прочее) v8 БП2.0 Россия БУ Бесплатно (free)

Залогом правильного ведения бухгалтерского и налогового учета в программе 1С Бухгалтерия 8 является правильная настройка параметров учета и учетной политики. Разработчики 1С постарались, чтобы эти настройки были простыми и понятными. Тем не менее, есть ряд подводных камней, о которые могут спотыкаться даже опытные пользователи.

05.11.2011    223284    0    vdi1950    124