Сжатие/Распаковка данных по алгоритму Deflate встроенными (!) средствами платформы 1С

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

Разработка - Инструментарий разработчика

Сжатие Deflate внутренние структуры распаковка ХранилищеЗначения работа с SQL напрямую

Сжатие/Распаковка данных по алгоритму Deflate встроенными (и только!) средствами платформы 1С. Теперь работать напрямую с данными в СУБД стало проще ))

Intro

Алгоритм компресии Deflate является старым, но проверенным временем форматом для сжатия данных без потерь. Яркий пример его применения - это файловые архивы ZIP. Deflate используется во многих программах. В том числе и в платформе 1С для хранения информации в более компактном представлении. Иногда приходится манипулировать данными напрямую через СУБД и тут нужен какой-то инструмент для распаковки сжатых данных. Хотя платформа 1с делает это на лету и прозрачно для пользователя.


Что под капотом

Распаковка данных, сжатых по алгоритму Deflate, осуществляется следующим образом: к сжатым данным клеятся структуры описания формата ZIP и на выходе получается почти корректный ZIP файл. Далее натравляем на него класс чтения ZIP файла и извлекаем, пусть и с выбросом ошибки, но полностью правильный, исходный файл.
Сжатие данных идет в обратном порядке: на файл натравливаем класс записи ZIP файла и пакуем этот файл, далее, отбрасываем структуры, описывающие ZIP формат, и на выходе получаем голые данные, сжатые по алгоритму Deflate.
Непосредственно, работа с Deflate здесь не реализована, выручают классы по работе с ZIP архивами. Но зато для сжатия/распаковки не требуются внешние компоненты и/или COM объекты.
Все это стало удобным с версии платформы 8.3.9+, когда появились классы для удобной работы с бинарными данными. Можно легко манипулировать отдельными байтами.


Что мы получаем

Здесь представлена обработка, позволяющая производить сжатие отдельного файла по алгоритму Deflate, а также распаковывать из сжатого файла данные. Также в коде представлены методы для преобразования чисел между любыми системами счисления (от 2 до 36). Основной движок обработки можно легко перенести в вашу БД/обработку. Механизм может независимо работать или на клиенте, или на сервере, причем в любой поддерживаемой ОС.


FAQ

Q: В коде много магических чисел, много лишних операций, зачем так неоптимально?
A: Это сделано для наглядности, чтобы расписать более подробно формат ZIP.

Q: А если обработка сжимает/распаковывает не правильно или по своему алгоритму? Как это проверить?
A: Легко. Создаете реквизит с типом ХранилищеЗначения, засовываете в него данные, указываете уровень сжатия > 0. В вашей СУБД дергаете из соответствующего поля двоичное значение, отбрасываете первые 18 байт (это эска пишет описание для ХЗ), и в остатке будет голый Deflate.

Q: Где это используется?
A: Это используется в продакшене при выносе большого объема бинарных данных из базы эски во внешнюю БД, из которой потом при запросе подтягиваются данные через внешние источники, которые разжимаются данным механизмом.


P.S.

Как оказалось, на ИС уже есть похожие публикации, но там либо применяется внешний EXE-шник, либо внешняя компонента, либо работа с бинарными данными идет через европу.


Update 25.01.2018 (v.1.1)

Исправлена ошибка в механизме сжатия (в 4-х байтовый буфер считывалось 2 байта о размере сжатых данных). Исправлены незначительные ошибки. Скорректирован интерфейс. Требуется платформа 8.3.9+ и включенный режим использования синхронных вызовов расширений платформы и внешних компонент.

Скачать файлы

Наименование Файл Версия Размер
Deflate_Inflate

.epf 11,01Kb
69
.epf 1.1 11,01Kb 69 Скачать

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

Лучшие комментарии
1. alexandersh 225 09.05.17 16:13 Сейчас в теме
хм, а по мне так все уже придумано)
решается конструкцией:
	
	ХЗ = Новый ХранилищеЗначения(НашеЗначениеКотороеНадоСжать, СжатиеДанных(9));
	СтрокаBase64 = СериализаторXDTO.XMLСтрока(ХЗ);
	СжатыеДвоичныеДанные = Base64Значение(СтрокаBase64);

и обратно:
	СтрокаBase64 = Base64Строка(СжатыеДвоичныеДанные);
	ХЗ = СериализаторXDTO.XMLЗначение(Тип("ХранилищеЗначения"), СтрокаBase64);
	НашеЗначение = ХЗ.Получить();

может на несколько байт и будет больше, за счет описания Хранилища значения, зато без костылей)
link.gabauer; Dach; NoRazum; Sol; rintik; frkbvfnjh; Unknown31; asdf_88; veretennikoff; Поручик; DenisCh; Alien_job; config; SerVer1C; Caliban; Aleskey_K; SvoyakMartin; philya; ZLENKO; +19 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. alexandersh 225 09.05.17 16:13 Сейчас в теме
хм, а по мне так все уже придумано)
решается конструкцией:
	
	ХЗ = Новый ХранилищеЗначения(НашеЗначениеКотороеНадоСжать, СжатиеДанных(9));
	СтрокаBase64 = СериализаторXDTO.XMLСтрока(ХЗ);
	СжатыеДвоичныеДанные = Base64Значение(СтрокаBase64);

и обратно:
	СтрокаBase64 = Base64Строка(СжатыеДвоичныеДанные);
	ХЗ = СериализаторXDTO.XMLЗначение(Тип("ХранилищеЗначения"), СтрокаBase64);
	НашеЗначение = ХЗ.Получить();

может на несколько байт и будет больше, за счет описания Хранилища значения, зато без костылей)
link.gabauer; Dach; NoRazum; Sol; rintik; frkbvfnjh; Unknown31; asdf_88; veretennikoff; Поручик; DenisCh; Alien_job; config; SerVer1C; Caliban; Aleskey_K; SvoyakMartin; philya; ZLENKO; +19 Ответить
2. SerVer1C 369 10.05.17 10:10 Сейчас в теме
(1) Да, действительно, таким образом можно распаковать значение из бинарника, полученного из скульного значения 1с-ного ХЗ. Значит, приведенный в статье алгоритм останется для каких-то специфических задач при распаковке данных, сжатых алгоритмом Deflate каким-либо альтернативным ПО.
18. user894822 15.01.18 14:51 Сейчас в теме
(1) Александр, а если на входе - двоичные данные, сжатые алгоритмом deflate, а на выходе нужно получить распакованные данные. Существует ли где-то описание заголовка, который нужно добавить к входным данным, чтобы СериализаторXDTO воспринимал их как корректный тип ХранилищеЗначения, содержащий двоичные данные?
20. alexandersh 225 16.01.18 11:03 Сейчас в теме
21. alexandersh 225 16.01.18 11:04 Сейчас в теме
(18)
(1) Александр, а если на входе - двоичные данные, сжатые алгоритмом deflate, а на выходе нужно получить распакованные данные. Существует ли где-то описание заголовка, который нужно добавить к входным данным, чтобы СериализаторXDTO воспринимал их как корректный тип ХранилищеЗначения, содержащий двоичные данные?

так а тут как раз по теме самой статьи, добиваешь описанием структуры до zip-архива и распаковывашь)
22. user894822 16.01.18 14:54 Сейчас в теме
(21) Я имел в виду по вашему методу, через хранилище значения, а не через zip-файлы. Но потом посмотрел, как выглядит сериализация несжатого ХЗ и понял, что так не получится. Там двоичные данные заворачиваются в более сложную структуру, а потом это всё сжимается.
А авторская обработка у меня не заработала на моём примере данных. То, что сжато обработкой, распаковывает ок. А данные, сжатые сторонней программой - нет. Хотя данные корректные, проверял независимым распаковщиком.
23. SerVer1C 369 16.01.18 15:02 Сейчас в теме
(22) Прошу предоставить пример любого бинарника, сжатого deflate. Распаковка должна отрабатывать правильно, если это чистый deflate поток, т. к. на данном алгоритме работает распаковщик из публикации 710201 , и мной не было найдено EFD файла, который невозможно было бы распаковать.
25. user894822 26.01.18 09:19 Сейчас в теме
(23) Разобрался, оказалось у меня были данные в формате zlib (rfc-1950), там 2 байта дополнительный заголовок.
24. SerVer1C 369 25.01.18 17:02 Сейчас в теме
(22)
Хотя данные корректные, проверял независимым распаковщиком

Предлагаю вам проверить с помощью утилиты V8Unpack. С ключом "-D" сжимаете данные, распаковываете сжатый файл моей обработкой. Затем моей обработкой сжимаете данные и распаковывайте сжатый файл утилитой с ключом "-I".
3. lucas_ 12 10.05.17 11:51 Сейчас в теме
В развитие темы - а нельзя ли распаковать BinaryData, используя DECOMPRESS (функцию sql 2016)? Не подскажите, нет ли где описания формата запакованного бинарника 1С?
4. SerVer1C 369 10.05.17 13:56 Сейчас в теме
(3) Судя по описанию функции DECOMPRESS, она как раз может извлечь данные из сжатого 1С-кой хранилища значений. Только придется отбросить первые 18 байт - это описание для ХЗ. Точное описание формата данного заголовка не встречал.
5. lucas_ 12 10.05.17 14:20 Сейчас в теме
Нет, не получается.
Declare @b varbinary(max) =
(SELECT BinaryData FROM     Params WHERE  (FileName = N'DBNames'))
Set @b =  SUBSTRING(@b, 19, LEN(@b)-18)
Select  DECOMPRESS(@b) 


Выдает: Сообщение 9826, уровень 16, состояние 1, строка 4
В качестве аргумента во встроенную инструкцию DECOMPRESS переданы несжатые или поврежденные данные.
7. SerVer1C 369 18.05.17 08:44 Сейчас в теме
(5) Дело вот в чем: когда мы сжимаем данные функцией COMPRESS, то получается на выходе бинарник следующей структуры: 10 байт описание GZIP формата (здесь всегда 0x1F8B0800000000000400), далее идет Deflate-поток, затем 4 байта CRC несжатых данных и в конце 4 байта - размер несжатых данных. При выполнении DECOMPRESS функция сверяет CRC и размер исходных данных из сжатого бинарника с рассчитанным CRC и размером распакованных данных. В случае их расхождения получается та самая ошибка. Из поля скуля, содержащего эсовское ХЗ, мы можем получить все, кроме CRC исходных данных. Поэтому чисто средствами скуля распаковать эсовское хранилище не получится.
Deflate-поток легко распаковывается приведенной в статье обработкой.
Также если собрать вручную GZIP на основе Deflate-потока из эсовского ХЗ и подставить корректный CRC и размер исходных данных, то DECOMPRESS распакует исходные данные.
Если кто знает, как в ф. DECOMPRESS игнорить CRC, то напишите :-)
27. user792176 13.06.19 14:55 Сейчас в теме
(7) в регистре сведений ВерсииОбъектов есть реквизит КонтрольнаяCумма, не там ли хранится искомый CRC ?
28. SerVer1C 369 13.06.19 15:05 Сейчас в теме
(27)
ВерсииОбъектов
В моей конфе нет такого регистра сведений.
29. user792176 13.06.19 15:44 Сейчас в теме
(28) насколько понимаю, во всех новых конфигурациях у которых есть версионирование, есть этот регистр, в него пишется история изменений объектов.

Я этим вопросом заинтересовался в контексте извлечения истории изменения объектов средствами sql, попробовал Ваш метод, не получается.... у меня конфигурация ЕРП 2.
если поможете разобраться, был-бы благодарен..
30. SerVer1C 369 13.06.19 16:11 Сейчас в теме
(29)
благодарен
В РС "ВерсииОбъектов" реквизит "КонтрольнаяСумма" - это простой md5 хэш. (см. ОМ "ВерсионированиеОбъектов" функция "КонтрольнаяСумма"). Что конкретно вы хотите сделать через SQL ?
31. user792176 13.06.19 16:47 Сейчас в теме
(30) хочу получить строку с данными версии объекта, я так понимаю туда пишется сериализованные данные объекта, вот их и хотелось бы получить.

вот еще один путь как расшифровать, хотелосьбы чтото типа такого, но без использования sys.sp_OACreate

https://www.sql.ru/forum/1051208/chtenie-sredstvami-sql-iz-1s-8-1-polya-tipa-hranilishheznacheniya-ne-risunok
33. SerVer1C 369 13.06.19 17:48 Сейчас в теме
(31) Так данная обработка распакует 1с-ное ХЗ. См. FAQ из статьи: Создаете реквизит с типом ХранилищеЗначения, засовываете в него данные, указываете уровень сжатия > 0. В вашей СУБД дергаете из соответствующего поля двоичное значение, отбрасываете первые 18 байт (это эска пишет описание для ХЗ), и в остатке будет голый Deflate.
32. user792176 13.06.19 16:53 Сейчас в теме
(30) хотелбы получить строковое представление сериализованной версии данных объекта (в хранилище ведь оно пишется)

но без использования sys.sp_OACreate, как есть предложение на sql ru

sql.ru
34. SlavaKron 30.10.19 17:09 Сейчас в теме
(7) Судя по всему, она таки игнорирует CRC, потому что, например следующий запрос к любой базе 1С возвращает распакованные данные в кодировке UTF-8:
SEL ECT
	DECOMPRESS(0x1F8B0800000000000400 + BinaryData) as DBNames

 FR OM Params
 
 WH ERE
	FileName = 'DBNames'
Соответственно, для ХЗ:
SELECT
	DECOMPRESS(0x1F8B0800000000000400 + SUBSTRING(_Fld26, 19, LEN(_Fld26) - 18)) as Data
FR OM
	_Reference18
SerVer1C; +1 Ответить
35. SerVer1C 369 31.10.19 10:18 Сейчас в теме
(34) ДА! Отличное решение. Это работает! Протестировано на 2016-м скуле. CRC не проверяется! Видимо, запутался в байтах, когда проверял в прошлый раз.

Чтобы получить чистые данные сразу из эсовского ХЗ, используем:

SELECT
SUBSTRING(DECOMPRESS(0x1F8B0800000000000400 + SUBSTRING(Field, 19, 9223372036854775807)), 9, 9223372036854775807)
FROM
Table

P.S. 9223372036854775807 - это максимальное положительное значение bigint
6. AlkB 26 11.05.17 12:59 Сейчас в теме
Данный метод действительно работает. А метод с СериализаторXDTO у меня не заработал.
8. lucas_ 12 18.05.17 13:31 Сейчас в теме
Ну, далее - просто мысли вслух. Я не совсем уловил. 1С-бинарник где-то внутри себя содержит CRC? Это CRC такое же, как и у аналогичных данных, сжатых COMPRESS или же другое?
9. SerVer1C 369 18.05.17 16:35 Сейчас в теме
(8) В том-то и печаль, что 1С-бинарник НЕ содержит внутри себя CRC. А ф. DECOMPRESS обязательно требует CRC исходных данных для распаковки.
10. lucas_ 12 18.05.17 17:34 Сейчас в теме
Жаль. Есть еще некая функция DECOMPRESSSCALAR. Но не найти ее описания, не заставить ее работать мне пока не удалось.
11. SerVer1C 369 19.05.17 01:18 Сейчас в теме
(10) Как я понял, это такой баг, когда IntelliSence отображает внутренние функции. И исправлять этот баг пока не собираются. Пруф: https [] connect.microsoft.com/SQLServer/feedback/details/688606/denali-ctp3-internal-system-fuctions-are-exposed-in-intellisence-hints
12. lucas_ 12 19.05.17 09:11 Сейчас в теме
То есть работать на решение поставленной задачи данная функция точно не будет?
13. SerVer1C 369 19.05.17 10:23 Сейчас в теме
(12) DECOMPRESSSCALAR - не будет. DECOMPRESS будет, если в нее передавать правильный GZIP. DECOMPRESS даже распакует архив, созданный в 7-zip с форматом GZIP и методом сжатия Deflate.
14. lucas_ 12 19.05.17 12:08 Сейчас в теме
Опять же мысли вслух - CRC есть функция сжатого бинарника? Возможно, ее имеет смысл просто вычислить средствами скуля? Вот здесь http://www.zlib.org/rfc-gzip.html#crc-code, на мой первый непросвещенный взгляд, все выглядит не очень страшно.
15. SerVer1C 369 19.05.17 13:00 Сейчас в теме
(14) CRC считается 25-ю строками кода - это не проблема. НО только CRC надо рассчитывать не от сжатых данных, а от исходных! А пока мы сжатые данные не распакуем, то не посчитаем CRC исходных данных. Вот такая вот рекурсия ))
16. Alligator84 68 24.06.17 17:45 Сейчас в теме
Есть ли возможность DECOMPRESS DT?
17. SerVer1C 369 26.06.17 11:08 Сейчас в теме
(16) Нет. Файл DT имеет сложную структуру. Вдоль и поперек данный формат исследовал пользователь awa. Почитайте его статьи.
Alligator84; +1 Ответить
19. user894822 15.01.18 17:36 Сейчас в теме
Попробовал скормить обработке свой сжатый файл - не работает, на выходе создаёт файл нулевой длины. При этом тот же файл корректно распаковывается онлайновым распаковщиком http://txtwizard.net/compression.
Платформа 8.3.10.2466.
26. markers 252 22.04.19 10:09 Сейчас в теме
Вдруг кому пригодится, результат использования данной публикации.
Автор, спасибо!
36. tr01egr 55 19.06.20 05:43 Сейчас в теме
Постучите, пожалуйста, в личку, отвечу на ваши вопросы по антидекомпилятору. К сожалению по другому не получается связаться.
Оставьте свое сообщение

См. также

FormCodeGenerator Программная доработка форм. Часть 2 (Режим работы "Режим сравнения форм") на примере ERP 2.5 Промо

Практика программирования Адаптация типовых решений Прочие инструменты разработчика v8 1cv8.cf Абонемент ($m)

Данная публикация является продолжением описания функционирования обработки "FormCodeGenerator " в режиме сравнения форм и генерирования кода на основании сравнения. Подходит для перевода уже доработанных форм с интерактивной доработки на программную. Данный режим работы обработки снизит издержки при дальнейших обновлениях конфигураций.

5 стартмани

21.12.2020    2849    14    huxuxuya    11    

Хранилище значения. Заметки

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

Некоторые подробности про общеизвестный инструмент.

03.11.2020    6126    Yashazz    13    

Вам нравятся запросы в 1С?

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

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    22734    6    m-rv    88    

Модель объекта

Инструментарий разработчика v8 Абонемент ($m)

Подсистема позволяет описать модель данных объекта, где описана зависимость между реквизитами, и затем использовать эту модель в разных сценариях работы с объектом. Версия платформы: 8.3.6 и выше. С небольшими доработками будет работать на 8.2.

1 стартмани

30.06.2019    13649    0    vadim1980    5    

Управляемая консоль запросов, отчетов 3.8.9 (расширение, внешняя обработка) Промо

Консоль запросов v8 v8::УФ v8::Запросы v8::СКД 1cv8.cf Абонемент ($m)

Работа с запросом и СКД, Полная поддержка пакетных запросов, временных таблиц, Сравнение результатов, текстов, Разбор структуры запроса в виде дерева, Анализ плана запроса, Групповая обработка

5 стартмани

14.08.2018    103666    2649    Evg-Lylyk    710    

Альтернативное получение значения из хранилища значения. Свой ХранилищеЗначения.Получить();

Распределенная БД (УРИБ, УРБД) Обмен через XML v8 1cv8.cf Абонемент ($m)

Данная публикация не претендует на использование в продакшене, но когда "Нельзя, но очень хочется" в отношении получения ооочень больших данных из ХранилищаЗначения и когда сама платформа не может получить значение и падает, при этом, перед падением съедает почти всю память. Это своего рода костыль, в безвыходной ситуации. Речь пойдет про получение больших данных из хранилища значения в файловых базах на 32-х битной платформе. Данное не касается 64-х битных клиентов/серверов где нет ограничения на размер потребляемой памяти (верней есть, но доступно памяти гораздо больше, чем 32-х битному приложению без PAE).

1 стартмани

22.04.2019    10841    6    markers    0    

Конструктор мобильного клиента Simple WMS Client: способ создать полноценный ТСД без мобильной разработки. Теперь новая версия - Simple UI (обновлено 14.11.2019)

Инструментарий разработчика Сканер штрих-кода Терминал сбора данных Мобильная разработка Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Учет ТМЦ Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Учет ТМЦ v8 v8::Mobile БУ УУ Абонемент ($m)

Simple WMS Client – это визуальный конструктор мобильного клиента для терминала сбора данных(ТСД) или обычного телефона на Android. Приложение работает в онлайн режиме через интернет или WI-FI, постоянно общаясь с базой посредством http-запросов (вариант для 1С-клиента общается с 1С напрямую как обычный клиент). Можно создавать любые конфигурации мобильного клиента с помощью конструктора и обработчиков на языке 1С (НЕ мобильная платформа). Вся логика приложения и интеграции содержится в обработчиках на стороне 1С. Это очень простой способ создать и развернуть клиентскую часть для WMS системы или для любой другой конфигурации 1С (УТ, УПП, ERP, самописной) с минимумом программирования. Например, можно добавить в учетную систему адресное хранение, учет оборудования и любые другие задачи. Приложение умеет работать не только со штрих-кодами, но и с распознаванием голоса от Google. Это бесплатная и открытая система, не требующая обучения, с возможностью быстро получить результат.

5 стартмани

09.01.2019    48803    259    informa1555    234    

Работа с публикациями "Инфостарт"

Практика программирования О сообществе WEB v8 УУ Абонемент ($m)

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    23443    13    RocKeR_13    16    

Установка предопределенных элементов: просмотр, исправление и поиск ошибок (задвоенных и отсутствующих) Промо

Инструментарий разработчика Универсальные обработки v8 1cv8.cf Абонемент ($m)

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

2 стартмани

06.10.2014    156923    2648    ekaruk    167    

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции

Инструментарий разработчика Практика программирования v8 Абонемент ($m)

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

5 стартмани

09.08.2018    30257    26    informa1555    26    

Работа с данными выбора

Практика программирования Работа с интерфейсом v8 Россия Абонемент ($m)

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

1 стартмани

17.07.2018    54124    20    kalyaka    16    

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

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

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

1 стартмани

08.06.2018    17342    86    Malfarion    16    

[Расширение] Контроль отрицательных остатков по регистру бухгалтерии при проведении Промо

Универсальные функции Инструментарий разработчика Учет ТМЦ Учет ТМЦ v8 1cv8.cf Россия БУ Абонемент ($m)

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

1 стартмани

17.08.2015    48986    167    ekaruk    32    

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар")

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

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    32027    88    m-rv    57    

Регистры правил [Расширение]

Инструментарий разработчика Информационная безопасность v8 v8::Права УТ11 Абонемент ($m)

Регистры правил - права доступа, запрет редактирования, автоподстановка реквизитов и т.д.

10 стартмани

15.03.2018    19219    28    33lab    3    

Заполняем по шаблону (по умолчанию)

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

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

1 стартмани

08.02.2018    30028    20    mvxyz    17    

Faster - многофункциональный ускоритель работы программиста 1С и других языков программирования Промо

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

Программа Faster 9.4 позволяет ускорить процесс работы программиста (работает в любом текстовом редакторе). Подсказка при вводе текста на основе ранее введенного текста и настроенных шаблонов. Программа Faster позволяет делится кодом с другими программистами в два клика или передать ссылку через QR Код. Исправление введенных фраз двойным Shift (с помощью speller.yandex). Переводчик текста. Переворачивает текст случайно набранный на другой раскладке. Полезная утилита для тех, кто печатает много однотипного текста, кодирует в среде Windows на разных языках программирования. Через некоторое время работы с программой у вас соберется своя база часто используемых словосочетаний и кусков кода. Настройка любых шорткатов под себя с помощью скриптов. Никаких установок и лицензий, все бесплатно.

1 стартмани

24.05.2012    79803    960    moolex    147    

Печатная форма, сделанная как расширение конфигурации для БП 3.0. Новые возможности БСП

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

Печатные формы на внешних обработках скоро канут в лету. На смену им приходят ПФ, реализованные в виде расширений конфигурации. Не нашел на сайте примеров таких расширений. Привожу пример подобного расширения для БП 3.0.

1 стартмани

06.12.2017    28491    54    kwazi    6    

Программное формирование форматированной строки в стиле html+inline CSS

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

Если вам приходилось работать с форматированными строками программно, то вы знаете, какая это боль. Данное решение облегчает программное формирование таких строк.

1 стартмани

18.11.2017    35210    39    bonv    11    

Мобильное приложение для склада с функцией голосового ввода

Мобильная разработка Учет ТМЦ Учет ТМЦ v8 1cv8.cf УУ Абонемент ($m)

Несложное приложение под Андроид предназначенное для выполнения операций по наборке и приемке товаров на складе, а также выполнения других складских операций. Мобильная часть решения написана под терминалы сбора данных на Android. Транспорт данных - POST - запрос на HTTP сервис. Серверная часть - сервис на базе 1С сервера.

2 стартмани

08.08.2017    17549    16    Prometeus2011    21    

Консоль запросов + ТЗ как параметры Промо

Консоль запросов v8 1cv8.cf Украина Абонемент ($m)

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

2 стартмани

12.11.2010    38041    440    Kashemir    24    

Расширения конфигураций 1С: учимся перехватывать методы

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

В этой статье я на примерах разберу некоторые механизмы расширений конфигураций 1С. А именно «перехваты» методов модуля объекта и «перехваты» событий формы и элементов формы. Данная статья написана с учебными целями, чтобы показать, как при помощи расширений конфигурации можно делать такие доработки, ради которых раньше приходилось снимать конфигурацию с поддержки.

1 стартмани

30.05.2017    142682    13    signum2009    48    

Набор подсистем "Умные таблицы"

Инструментарий разработчика v8 Беларусь Россия Казахстан Абонемент ($m)

Данный набор подсистем – прикладная библиотека, призванная помочь программисту 1С быстрее решать ряд типовых задач бизнес-логики, таких как: ведение статусов объектов, отправка почтовых сообщений в определенное время, ведение произвольных таблиц с возможностью редактирования, сохранения и группировки, ориентированные на расчет бюджетных таблиц (план продаж, ретробонусы B2C, проценты по договорам B2B и договорные условия по КАМ), расчет коммерческой политики для бюджетных таблиц, исполнение произвольных алгоритмов с хранением кода в информационной базе, определение рабочих баз, хранение файлов во внешних СУБД (Postgre SQL, MS SQL и MongoDB) и выполнение произвольного кода после изменений ссылочного объекта вне транзакции изменения.

1 стартмани

22.05.2017    34564    104    Silenser    34    

Конструктор-тестер http запросов в 1С

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

Данная обработка позволяет в несколько кликов конструировать http запросы на языке 1С и просматривать результаты их выполнения.

3 стартмани

19.08.2016    44165    305    hlopik    18    

[x1c.ru] 1CDBin: Работа с файлами *.1CD на низком уровне средствами языка 1С с возможностью чтения таблиц (поддерживается формат 8.3.8.0) Промо

Тестирование и исправление Инструментарий разработчика v8 1cv8.cf Абонемент ($m)

Обработка позволяет просматривать файловые базы 1CD на низком уровне средствами встроенного языка. Реализована часть функциональности Tool_1CD, но на языке 1С Предприятия. Показываются таблицы, параметры таблиц, поля таблиц, записи таблиц, значения полей BLOB, есть 16-ричный просмотр страниц базы и консоль кода. Можно использовать для изучения структуры файлов 1CD, просмотра баз 1CD для выявления повреждений, создания своих обработок для выгрузки данных без открытия исследуемой базы в 1С:Предприятии.

1 стартмани

07.10.2014    56149    357    GusevNA    77    

1С: Предприятие + корпоративный чат, как наладить оперативные уведомления за 10 минут

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

Как сделать автоматические уведомления о разных событиях из 1С в корпоративный чат MyChat для сотрудников компании

1 стартмани

14.08.2016    49983    36    Demanoidos    60    

Подсистема обмена данными с порталом ИМНС по электронным счетам-фактурам (автоматический обмен)

Внешние источники данных WEB Инструментарий разработчика v8 1cv8.cf Беларусь БУ НДС Абонемент ($m)

Подсистема включает документы и обработки для автоматического обмена данными с порталом ИМНС через web-сервис. Присутствует возможность заполнения данными типовых операций за период, учёта входящих документов, учёта произвольных исходящих документов. Приложены обработки для запуска задания планировщика на автоматический обмен данными.

1 стартмани

28.07.2016    35057    19    c1nil    4    

Навигатор по структуре и данным баз 1С 8

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

Просмотр структуры и данных информационных баз 1С:Предприятие 8.2, 8.3. Состав, типы объектов, табличных частей, движений. Размер, структура хранения объекта. Для администраторов и разработчиков. Версия 1 - на обычных формах, версия 2 - на управляемых.

1 стартмани

11.07.2016    30312    133    o.nikolaev    17    

Разбираемся со структурой правил конвертации данных Промо

Инструментарий разработчика v8 КД Абонемент ($m)

При переносе данных между различающимися данными частенько приходится смотреть в правила. И часто, чтобы выяснить, к примеру, каким документом формируются остатки по конкретному ПВД, нужно заглядывать в него и искать, какое ПКО в нем вызывается. А может вызываться и алгоритм, в котором вызывается ПКО ;-) А если правил много? Чтобы не мучить себя утомительными поисками, предлагаю воспользоваться этой обработкой.

1 стартмани

14.10.2011    23775    161    Meta    17    

Хранение файлов в томах на диске (для УПП 1.3)

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

Доработка типовой УПП 1.3 в плане хранения присоединенных файлов вне базы данных

2 стартмани

05.06.2016    60531    11    wowik    32    

Остатки на каждый день в запросе

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

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

1 стартмани

26.04.2016    64501    19    arakelyan    20    

Консоль запросов "Запросник" для управляемых форм с подсветкой синтаксиса

Консоль запросов v8 1cv8.cf Абонемент ($m)

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

1 стартмани

19.04.2016    39328    257    1С_Мастер    42    

Выполнение JavaScript кода из 1С в объекте Поле HTML Документа (HTML 5) и вызов события в 1С ПриНажатии

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

Пример выполнения JS кода из 1С в Поле HTML Документа под управляемыми формами, с удобным получением результата в 1С(С помощью вызова привязанного события ПриНажатии к элементу ПолеHTMLДокумента)

1 стартмани

22.03.2016    85674    163    igo1    54    

Количество дней недели (понедельников/вторников/...) в заданном диапазоне одним запросом

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

При реализации периодического авто-заполнения маршрутных листов по графику (недельному) необходимо было просчитать стоимость всего периода, с условием выездов только по определенным дням. Заморачиваться с обходом результата не хотелось. Пришлось написать "Небольшой" запрос.

1 стартмани

03.03.2016    19539    1    Alexander.Shvets    5    

Простые радости жизни программиста 1С: выбор типа значения

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

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

1 стартмани

17.02.2016    52733    54    yuraos    18    

Яндекс.Деньги "Благотворительность"

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

Яндекс.Деньги теперь в 1С. Форма для приема благотворительных взносов. Форму легко сделать и вставить на любую страницу сайта или блога. Платежи будут приходить на ваш кошелек. На форме есть три способа платежа: из кошелька, с банковской карты, с баланса мобильного.

1 стартмани

16.02.2016    24651    8    Tatitutu    5    

Мастер рассылки e-mail 2.2 для управляемых форм

Практика программирования Email v8 v8::УФ ERP2 БП3.0 УТ11 Абонемент ($m)

Для пользователей: переделанный из старый разработки под 8.2 с использованием библиотеки Мастер рассылки e-mail 2.2 (ERP, УТ, БП) (Только управляемые формы), который теперь может запускаться под любой версией платформы с разрешенными или запрещенными модальными/синхронными вызовами в конфигурации. Также удобный выбор e-mail и их владельцев с помощью отбора динамического списка по любым критериям и галочки исключения.

1 стартмани

29.12.2015    40851    20    milkers    4    

Нечеткий поиск одним запросом

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

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

1 стартмани

28.12.2015    29571    71    vasvl123    9    

Передача больших пакетов через веб-сервисы

Практика программирования Администрирование данных 1С Внешние источники данных v8 Абонемент ($m)

Реализация механизма передачи больших пакетов через веб-сервисы. С его помощью передать файл размером в несколько гигабайт не составит проблем.

1 стартмани

06.12.2015    59540    49    YPermitin    19    

Интерфейс сопоставления объектов для обмена (для типового регистра СоответствиеОбъектовДляОбмена)

Инструментарий разработчика Универсальные обработки Перенос данных из 1C8 в 1C8 v8 КА1 БП2.0 ЗУП2.5 УТ10 УПП1 Абонемент ($m)

Вы внедряете обмен данными между двумя типовыми или основанными на типовых БД и вам необходим инструмент, чтобы сопоставить между собой справочники этих конфигураций? Вы хотите навести порядок в обмене данными, потому что вам надоело вылавливать дублирующиеся объекты? Вам очень хочется перепоручить сопоставление объектов обменивающихся баз пользователям, но нет подходящего и понятного пользователям интерфейса? Тогда вам нужна именно эта обработка!

4 стартмани

11.11.2015    41759    108    catsam    8    

Exec - Выполнение кода, консоль запросов и не только!

Консоль запросов v8 1cv8.cf Абонемент ($m)

Незаменимый инструмент администратора БД и программиста: Выполняйте произвольный код из режима 1С Предприятие; сохраняйте/загружайте часто используемые скрипты; выполняйте запросы с замером производительности запроса в целом и каждой из временных таблиц в частности, а также с просмотром содержимого временных таблиц; произвольным образом изменяйте любые объекты БД, редактируя даже не вынесенные на формы реквизиты и записывая изменения в режиме "ОбменДанными.Загрузка = Истина"; легко узнавайте ИД объектов БД; выполняйте прямые запросы к SQL с замером производительности и не только!

5 стартмани

10.11.2015    42519    75    catsam    11    

Быстрое определение интервалов в запросе

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

В статье описывается новый метод определения интервалов между данными различных записей в запросе. В отличие от общеизвестного метода, время работы предлагаемого метода зависит от объема данных ЛИНЕЙНО. Это обеспечивает ему значительный выигрыш по быстродействию на больших объемах данных. В качестве иллюстрации возможностей метода приведен отчет, показывающий гистограмму распределения времени между продажами.

1 стартмани

01.10.2015    54407    35    ildarovich    41    

Полезные приемы при работе с Excel из 1С (Версия 3.1)

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

Программисту 1С часто приходится работать с таблицами Excel из 1С. Я постарался собрать небольшой FAQ и набор функций для работы с файлами Excel. Надеюсь, кому-то будет полезна данная статья.

1 стартмани

22.09.2015    216422    471    Zerocl    75    

Code First и Linq to EF на примере 1С версии 7.7 и 8.3 часть I

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

Данный проект является чисто исследовательским примером использования Code First и Linq to EF на примере 1С версии 7.7. Так как сам я программист 1С, то мне всегда было интересно, как можно перенести модель объектов 1С на компилируемые языки, и использовать мощь Linq to EF. С появлением Code First давно хотел прикрутить, но все как-то руки не доходили, и вот, наконец ..

1 стартмани

28.08.2015    23756    3    Serginio    2    

Работа с push сервисами только средствами 1С 8.2

Сервисные утилиты Инструментарий разработчика Универсальные обработки v8 Абонемент ($m)

Обработка для настройки, тестирования и использования с предустановками для 3-х сервисов. Текст модуля для внедрения в конфигурацию или другие обработки. Уведомления на телефон, компьютер, браузер.

1 стартмани

18.08.2015    31999    46    anig99    1