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

Публикация № 1320336 03.11.20

Приемы и методы разработки

Хранилище значения СУБД размер данных

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

Объект "ХранилищеЗначения" известен в 1С, начиная с 8.0 и, казалось бы, прост, понятен, изучен вдоль и поперёк. Но иногда возникают вопросы, касающиеся работы с хранилищем, и данная публикация (по сути, краткий антисклерозник) призвана зафиксировать ответы на некоторые из них.


Хранилище значения (далее ХЗ) представляет собой данные, полученные кодированием и, при необходимости, сжатием входных данных с помощью 32-х битного алгоритма Deflate, он же Deflation (о размерах сжатия см.ниже).
 

Хранение

Данные типа ХЗ могут храниться и обрабатываться в таблицах СУБД, в рамках модели данных 1С являясь реквизитами шапки, табличных частей, регистров, бизнес-процессов, задач; ресурсами регистров сведений, параметрами сеанса, общими реквизитами, функциональными опциями (на основе хранимых данных типа ХЗ). То есть, ХЗ может быть типом только для поля, хранящегося в базе (т.е. в отчётах, обработках, реквизитах/параметрах форм этого нет).

С точки зрения наиболее распространённых СУБД ситуация следующая.

SQL

ХЗ хранятся в полях IMAGE (тип данных SQL2003: BLOB), это традиционный тип LOB-хранилищ для SQL Server, в котором можно хранить как текстовые, так и двоичные данные. Хранит двоичное значение переменной длины до 2 147 483 647 байт (т.е. 2 Гбайт или 2^31 байт), механика выделения места под страницу таблицы и таблицу вообще варьируется в разных версиях SQL и разных настройках. Столбцы типа IMAGE (как и родственная ей TEXT) имеют множество ограничений на способы использования - например, нельзя создавать индекс по столбцу типа IMAGE, есть особенности при работе с хранимыми процедурами. При этом, значениями типа IMAGE можно манипулировать при помощи функций DATALENGTH, PATINDEX, SUBSTRING, TEXTPTR и ТЕХTVALID, а также команд READTEXT, SET TEXTSIZE, UPDATETEXT и WRITETEXT. Преобразования типа implicit conversion (а именно на них опирается 1С) возможны из IMAGE в: binary, varbinary, timestamp (логично, сплошь двоичное по сути), в него ещё можно из char и  varchar. Сам этот тип усердно НЕ рекомендуется к использованию в скуле, но до сих пор есть. Последние несколько версий платформ для хранения ХЗ в MS SQL используют тип VARBINARY(MAX). IMAGE является устаревшим и используется по накатанной из старых версий платформ.

PostgreSQL

ХЗ хранятся в полях bytea (ссылка стандарта на тот же тип данных SQL2003: BLOB). Для хранения нужны 4 байта плюс реальный размер битовой строки (т.е. 4 бита сверх трёхбитового заголовка самого потока Deflate). В двоичных строках можно хранить байты с кодом 0 и другими «непечатаемыми» значениями (обычно это значения вне десятичного диапазона 32..126). Обрабатываются они как двоичные в чистом виде (не как текстовые, не по языковым стандартам). Тип bytea поддерживает два формата ввода и вывода: "шестнадцатеричный" и традиционный для PostgreSQL формат "спецпоследовательностей". Входные данные принимаются в обоих форматах, а формат выходных данных зависит от параметра конфигурации bytea_output; по умолчанию выбран 16-ричный. Кстати, известно, что оный формат был введён в PostgreSQL 9.0; в ранних версиях он может и не работать - интересно, учитывает ли это платформа? По утверждению ИТС, содержит значение, если его тип "Хранилище значения", или последовательность байт нулевой длины в противном случае.

Кстати, если говорить об интеграции и внутренних передачах таких значений между системами - в Visual Basic, например, эти значения преобразуются в одномерные массивы Byte(). Этот массив имеет диапазон Byte (от 0 до length 1), где length — число байтов в значениях SQL Server binary, varbinary или image.

ХЗ не может фигурировать в составных типах. Однако, есть несколько способов обойти декларативный запрет и даже использовать в функционале: хранилище может быть определяемым типом, но только одиночным значением во всём типе (т.е. не составным), и может фигурировать как тип ПВХ (через определяемый), но тоже только одиночным. Возможно, именно так проявляется необходимость объявления требуемого места в таблицах СУБД.


Переменные и формы

Данные типа ХЗ могут храниться в переменной языка 1С в контексте выполнения , т.е. размещаться в поименованной области памяти. Ограничений на использование нет ни по типам модулей (общие, глобальные, модули объектов, менеджеров, форм, команд и т.д.), ни по исполнению на клиенте/сервере. Конструируется на сервере, а как переменная живёт и на клиенте. Является одним из традиционных способов рабоче-служебной сериализации данных, в т.ч. безотносительно степени сжатия, и передачи в сжатом виде. Само понятие "сериализация" в СП 1С привязано именно к ХЗ, т.е. возможность помещения значения в ХЗ терминологически и было долгое время сериализацией. В ХЗ может быть помещено любое значение, про которое это указано в СП, и любая универсальная либо обменная коллекция, состоящая только из сериализуемых значений на любую глубину вложенности.

Программное использование ХЗ не вполне прозрачно и очевидно. Так, чтение реквизита объекта типа ХЗ выполняют традиционно в "ПриЧтенииНаСервере", а запись - в "ПередЗаписьюНаСервере", потому что в данных формы ХЗ официально вроде как нет. На самом деле, возможны варианты. ХЗ может быть присвоено реквизиту формы (в т.ч. табличному реквизиту коллекции) с типом "Произвольный". Ряд ситуаций работы с ХЗ в клиентском контексте, несмотря на утверждения СП, не компилируется, т.е. для уверенности в результате лучше всё делать на сервере. Очевидно, что не стоит работать с ХЗ как с переменной модуля формы.

Находясь в коллекциях формы, НЕ может обрабатываться на клиенте (чтение/запись), но не теряется при передаче формы на сервер и обратно, сбросе кэша, переинициализации контекста. Может передаваться как параметр формы без его явного объявления в т.ч. в другую форму; может быть ключевым параметром формы - всё это корректно работает.

В обычных формах реквизит недоступен к выводу в список и на форму, но может фигурировать как значение реквизита формы произвольного типа или через определяемый (вообще в реквизитах только через него и можно "обернуть"), и как значение колонки таблицы/дерева значений произвольного типа.
В управляемых формах аналогично. Формально, выводятся сообщения, что "в данных формы нельзя", но если обёрнуто в произвольный реквизит, то хранит, обрабатывает и показывает.

ХЗ может фигурировать как аргумент в методе обычной и упр.формы Закрыть(хз), и корректно передаётся; может и фигурировать в ОписанииОповещения как результат закрытия формы, ранее открытой с указанием такового.
Важно: между сеансами для формы с авто (а равно и не-авто) сохранением значений произвольный реквизит с таким значением НЕ сохраняет!

Современное использование ХЗ поражает нетривиальностью - так, например, в БСП значения типа ХЗ хранятся и обрабатываются в параметрах СКД отчётов, и на этом основана целая механика работы. Вопросы трансляции и исполнения СКД, в чьих полях так или иначе фигурируют ХЗ или заявлена типизация ХЗ - тема отдельного исследования.
 

Кодинг

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

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

Поскольку нет возможности напрямую замерить объём, занимаемый переменной 1С в памяти, рассматривать приходится строки и двоичные данные, полученные из них. ХЗ удобно обрабатывать через xml

// из строки в ХЗ
хз=XMLЗначение(Тип("ХранилищеЗначения"),ИсходнаяСтрокаBase64);
// из ХЗ в строку
ИтоговаяСтрокаBase64=XMLСтрока(ХЗ);
стро1=XMLСтрока(хз);
// эквивалентно
стро2=СериализаторXDTO.XMLСтрока(хз);
// тогда как, например, такая сериализация гораздо больше по размеру
стро3=ЗначениеВСтрокуВнутр(хз);

Важно понимать, что ХЗ это не значение, а указатель на область памяти. Они всегда разные, поэтому ни сравнение, ни поиск, ни отбор (в т.ч. в запросах) применять нельзя. Указатель равен сам себе лишь в рамках конкретного оператора-конструктора (и, кстати, в этом случае по нему работает, например, поиск в универсальных коллекциях). Так, например, если "А=хз; Б=А;", то А будет равно Б. А для сравнения именно значений следует действовать так (причём это не будет распаковкой как "расжатием"):

СодержимыеВнутриХЗРавны=(XMLСтрока(хз1)=XMLСтрока(хз2));

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

Так вот, размер "как есть" мы можем узнать, либо создав объект метаданных (например, справочник с единственным реквизитом типа ХЗ) и получив размер таблицы методом ПолучитьРазмерДанныхБазыДанных, либо опосредованно, через строку и двоичные данные (учитывая неизбежно прибавляемое), так: 

Размер=ПолучитьДвоичныеДанныеИзСтроки(XMLСтрока(хз)).Размер();
// или так
Размер=Base64Значение(XMLСтрока(хз)).Размер();

Это не годится для абсолютных замеров (так, один символ латиницы, т.е. по идее 1 байт, и символ кириллицы, 2 байта, дают одинаковые 32 байта на выходе), но годится для относительных прикидок. Так, вызов без прямого указания "СжатиеДанных" всегда даёт значение большего (и иногда существенно большего, в разы) размера, чем с любым сжатием. На малых размерах сжатие не даёт заметного эффекта при любом аргументе. В СП сказано, что аргумент по умолчанию для объекта "СжатиеДанных" равен 1, но сжатие без его указания и с явным указанием даёт разные размеры, до десятков и сотен байт. На средних объектах (например, строки 500-1000 символов) сжатие со степенью выше 3-4 даёт примерно одинаковые итоговые размеры, т.е. эффективность одинаковая. Наряду с этим, в ряде старых релизов конструктор без сжатия даёт меньший итоговый размер.

Деструкция этого указателя тоже имеет нюансы. 

// правильные способы
хз="";
хз=Неопределено;
хз=Null;
хз=Новый ХранилищеЗначения(Неопределено);
хз=Новый ХранилищеЗначения(Null);
// неправильный способ
хз=Новый ХранилищеЗначения(""); // занимает как минимум на 3 байта больше, чем остальные

В таблицах/деревьях значений с явно объявленной колонкой может использоваться везде, кроме запроса (не помещается в ВТ), не воспринимается как аргумент запроса, даже как &ПараметрТипаХЗ в секции "ВЫБРАТЬ". Что, учитывая известное про СУБД, не вполне логично.

При копировании объекта с реквизитами, содержащими ХЗ, ни интерфейсно, ни программно, эти значения НЕ наследуются, не копируются.

Если некое значение, упакованное в ХЗ, подпадает под RLS, то логика следующая - платформа всегда вначале выполняет неявную распаковку, либо рассматривает сделанную в коде явную; а затем накладывает ограничение, так что RLS применится именно для уже распакованного значения, спровоцировать тут ошибку ни разу не удалось.

Из интересных публикаций рекомендую эту.

Поскольку в современных метаданных конфигураций реквизит типа ХЗ где-нибудь точно наличествует, а также фигурирует в коде, то вопрос занимаемого им места актуален. В связи с этим было бы интересно исследовать рост места, занимаемого таблицей, состоящей исключительно из ХЗ, а также сравнить эффективность работы "СжатиеДанных" и основанного на том же Deflation объекта "ЗаписьZipФайла", пробуя разные значения УровеньСжатияZIP (естественно, при МетодСжатияZIP = "Сжатие").

 

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

P.S. Опыты проводились на 8.3.6.2237 и 8.3.16.1224.

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

Лучшие комментарии
7. SlavaKron 05.11.20 15:04 Сейчас в теме
(4)
не используя 1С "вытянуть" данные из записи

Если версия MS SQL 2016 и выше, можно использовать функцию DECOMPRESS. Для хранилища значений:
SEL ECT
    DECOMPRESS(0x1F8B0800000000000400 + SUBSTRING(DataFieldName, 19, LEN(DataFieldName) - 18)) as Data
FR OM
    MyTable

Еще можно тут почитать: https://infostart.ru/public/1125887/
NittenRenegade; YPermitin; DrAku1a; Drivingblind; Yashazz; zatoichi; +6 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. SlavaKron 03.11.20 09:20 Сейчас в теме
РазмерХЗПлюс=ПолучитьДвоичныеДанныеИзСтроки(XMLСтрока(хз)).Размер();
Это явно не правильно. Отсюда и проблемы, о которых вы говорите.
Размер ХЗ без учета размера описания ХЗ или просто размер сжатых данных:
Размер = Base64Значение(XMLСтрока(ХЗ)).Размер();
2. Yashazz 4115 03.11.20 10:06 Сейчас в теме
(1) Этот вариант тоже не даёт правильные данные, проверял. Но да, чего-то не внёс в статью; ща внесу.
3. Yashazz 4115 03.11.20 10:10 Сейчас в теме
Вообще очень не хватает нормального sizeof, применяемого как к пустой типизированной, так и к наполненной переменной... Много интересного узнали бы.
FatPanzer; +1 Ответить
4. zatoichi 127 05.11.20 14:17 Сейчас в теме
Эх... мне бы Вашу статью неделю назад увидеть)))
может подскажите:
сохраняю картинку jpg в хранилище значений без сжатия.
селектом в MS SQL получаю запись, значение моей картинки содержит сигнатуру вида "0x0101........"
посмотрел здесь https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D1%81%D0%B8%D­0%B3%D0%BD%D0%B0%D1%82%D1%83%D1%80_%D1%84%D0%B0%D0%B9%D0%BB%­D0%BE%D0%B2
такой сигнатуры не существует. так и не понял как не используя 1С "вытянуть" данные из записи((((

(3)
Прикрепленные файлы:
5. zatoichi 127 05.11.20 14:18 Сейчас в теме
7. SlavaKron 05.11.20 15:04 Сейчас в теме
(4)
не используя 1С "вытянуть" данные из записи

Если версия MS SQL 2016 и выше, можно использовать функцию DECOMPRESS. Для хранилища значений:
SEL ECT
    DECOMPRESS(0x1F8B0800000000000400 + SUBSTRING(DataFieldName, 19, LEN(DataFieldName) - 18)) as Data
FR OM
    MyTable

Еще можно тут почитать: https://infostart.ru/public/1125887/
NittenRenegade; YPermitin; DrAku1a; Drivingblind; Yashazz; zatoichi; +6 Ответить
8. Yashazz 4115 05.11.20 16:45 Сейчас в теме
(7) Во! Спасибо, мил человек. Теоретически я это знал, а вот пристреляться по позициям всё времени не было. Спасибище!
6. aspirator23 469 05.11.20 14:29 Сейчас в теме
9. asved.ru 35 06.11.20 07:31 Сейчас в теме
ХЗ не может фигурировать в составных типах. Однако, есть несколько способов обойти


Увижу в коде - убью.
Если со стороны платформы что-то запрещено и причины этого вам не понятны, то это не необоснованный запрет, а недостаток знаний у Вас.
11. Yashazz 4115 06.11.20 17:24 Сейчас в теме
(9) Ну лично мне-то причины понятны) И да, соглашусь - я за такое в реальном коде без прям жёсткой необходимости - тоже убивал бы.
10. SerVer1C 419 06.11.20 08:57 Сейчас в теме
Последние несколько версий платформ для хранения ХЗ в MS SQL используют тип VARBINARY(MAX). IMAGE является устаревшим и используется по накатанной из старых версий платформ.
12. PythonJ 92 24.11.20 00:03 Сейчас в теме
В СП сказано, что аргумент по умолчанию для объекта "СжатиеДанных" равен 1, но сжатие без его указания и с явным указанием даёт разные размеры, до десятков и сотен байт.

В СП сказано:
Целое число в диапазоне -1...9. -1 - степень сжатия по умолчанию. 0 - никакого сжатия, 9 - максимальная степень сжатия.
Значение по умолчанию: -1.

-1 - не степень сжатия как таковая, а "степень сжатия по умолчанию для алгоритма Deflation", она не обязана быть равной 1 или любой другой из диапазона 1..9.
13. Jogeedae 38 11.12.20 08:38 Сейчас в теме
(12) Вроде как по-умолчанию было 6, а сейчас -1.

(0)
хз=Новый ХранилищеЗначения(Значение, Новый СжатиеДанных()) - насколько я понял, содержимое предваряется BOM (EF BB BF) - byte order mark, а уже потом сжимается.
Из-за этого разобрать содержимое в сторонних программах не всегда получается, даже если избавиться от описания сжатия данных обрезав первые 18 байт.

или что-то не так делаю?

хз = Новый ХранилищеЗначения(ДанныеДляСжатия, Новый СжатиеДанных(9));
//Через сериализацию получим строку Base64
Base64Строка_ = XMLСтрока(хз);

БуферДвоичныхДанных_ = ПолучитьБуферДвоичныхДанныхИзBase64Строки(Base64Строка_);

//отсекаем описание сжатия данных 1с
БуферДвоичныхДанных_ = БуферДвоичныхДанных_.ПолучитьСрез(18);

Base64Строка_Deflate = ПолучитьBase64СтрокуИзБуфераДвоичныхДанных(БуферДвоичныхДанных_);
Показать
Оставьте свое сообщение

См. также

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо

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

В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.

12.12.2020    4674    Eugen-S    23    

Обзор полезных методов БСП 3.1.4. Часть 2

БСП (Библиотека стандартных подсистем) v8 Бесплатно (free)

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

27.04.2021    16617    rayastar    7    

Обзор полезных методов БСП 3.1.4

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

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

25.03.2021    42486    rayastar    51    

Звуковое управление в 1С 8.3

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

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021    7307    velemir    33    

Использование классов .Net в 1С для новичков Промо

Разработка внешних компонент Универсальные функции Практика программирования v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    85981    Serginio    116    

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions

Универсальные функции Практика программирования v8 Бесплатно (free)

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    9045    comol    31    

Полезные функции БСП (Часть 2)

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

Список полезных функций из состава Библиотеки стандартных подсистем 3.1.

10.03.2020    21133    user5300    20    

Программная работа с настройками СКД

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

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    66924    ids79    27    

Как я начал администрировать сервер 1С: Предприятие 8.3 с телефона Промо

Инструменты администратора БД Мобильная разработка v8 Бесплатно (free)

Развитие инструментов управления кластером серверов 1С:Предприятие 8.3.

14.04.2017    67790    user700211_a.straltsou    30    

[СКД] Программное создание схемы компоновки данных

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

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    44280    John_d    22    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

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

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    36004    kuzyara    38    

Шпаргалка (БСП). Добавление в новый документ механизма печати дополнительных печатных форм

Печатные формы БСП (Библиотека стандартных подсистем) v8 1cv8.cf Бесплатно (free)

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

10.10.2019    30943    John_d    21    

Использование программных перечислений, ч.1: строковые константы Промо

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

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

10.12.2016    41207    unichkin    74    

Полезные процедуры и функции для программиста

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

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

07.10.2019    40061    HostHost    41    

Таблица значений. Нюансы

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

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

01.10.2019    53721    Yashazz    56    

[Шпаргалка] Программное создание элементов формы

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

Программное создание практически всех популярных элементов формы.

06.09.2019    104585    rpgshnik    77    

Вспомогательные инструкции в коде 1С Промо

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

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    36273    tormozit    106    

Агрегатные функции СКД, о которых мало кто знает

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

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    78796    ids79    56    

Отслеживание выполнения фонового задания

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

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    45557    ids79    22    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

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

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    154908    ids79    75    

Оформление и рефакторинг сложных логических выражений Промо

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

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

20.09.2012    82967    tormozit    131    

Фоновое выполнение кода в 1С - это просто

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

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    61611    avalakh    27    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

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

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    107188    ids79    17    

Обработчики событий при записи объектов. Зачем и что за чем?

Математика и алгоритмы v8 Бесплатно (free)

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    114931    AlbinaAAA    49    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

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

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

11.07.2007    54616    tormozit    51    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    48925    ids79    27    

"Меньше копипаста!", или как Вася универсальную процедуру писал

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

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    22639    SeiOkami    53    

Создание отчетов с помощью СКД - основные понятия и элементы

Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    77070    ids79    28    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

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

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    51407    tormozit    74    

Подсистема "Варианты отчетов". Используете ли Вы ее правильно?

Работа с интерфейсом БСП (Библиотека стандартных подсистем) v8 1cv8.cf Бесплатно (free)

Небольшая история про использование подсистемы "Варианты отчетов" из БСП. Используете ли Вы ее правильно?

04.06.2019    56788    YPermitin    55    

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

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

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

16.05.2019    64679    YPermitin    31    

Выгрузка документа по условию

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

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    18085    m-rv    3    

Как сделать запрос на изменение данных Промо

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

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    37202    m-rv    23    

Как прикрутить ГУИД к регистру сведений

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

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

16.04.2019    23423    m-rv    18    

О расширениях замолвите слово...

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

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    42919    ellavs    131    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

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

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    32186    ellavs    90    

Трюки с внешними источниками данных

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

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    41499    YPermitin    53    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

БСП (Библиотека стандартных подсистем) Роли и права Практика программирования v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    66295    ids79    11    

Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке

Универсальные функции Зарплата Управление персоналом (HRM) Зарплата Кадровый учет v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Бесплатно (free)

В статье размещен список стандартных процедур и функций с примерами, которые могут помочь при разработке (доработке) конфигураций Зарплата и управление персоналом ред. 3.1 и Зарплата и кадры государственного учреждения 3.1. Иногда бывает довольно сложно правильно получить данные или долго, поэтому лучшим вариантом будет использование стандартных процедур. Буду очень признателен, если Вы поделитесь своим опытом и предложите свои варианты стандартных процедур которые помогают в работе. Или предложите, как дополнить имеющиеся процедуры.

14.11.2018    148811    GeterX    136    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С

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

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    45208    ids79    46    

Git + 1С. Часть 1. Как подключиться к команде разработки и начать использовать Git

Инструментарий разработчика Методология v8 1cv8.cf Бесплатно (free)

Первая статья из цикла инструкций по работе с Git в 1С-разработке. Рассмотрим, как настроить рабочее место, как получить свою "копию" проекта для разработки и приступить к полезным действиям. Все примеры будут изложены в рамках трёх практических кейсов: 1. Моя команда дорабатывает типовую конфигурацию, использует приватный репозиторий на BitBucket, в котором версионируются внешние отчеты/обработки, расширения конфигураций и правила обмена; 2. Я участвую в стартап-команде, которая разрабатывает свою конфигурацию с использованием Git и GitLab; 3. Я принимаю участие в развитии OpenSource-продукта на GitHub как заинтересованный разработчик (контрибьютор).

18.10.2018    93945    stas_ganiev    86    

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C

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

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

23.08.2018    48972    Rain88    49    

Тестер: частые вопросы

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

Ошибкам бой - тесты норма жизни!

25.07.2018    31634    grumagargler    31    

Работаем с дополнительными реквизитами на форме

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

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

15.07.2018    53622    papche    59    

Повышаем эффективность разработки правил обмена

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

Как повысить скорость и качество разработки правил обмена? Как вести групповую разработку правил обмена? Как облегчить сопровождение правил обмена после передачи в эксплуатацию? Об этом и многом другом вы можете узнать из этой статьи.

25.06.2018    30306    olegtymko    48    

Введение в механизм представлений в ЗУП ред. 3

Практика программирования v8 v8::СПР ЗУП3.x Бесплатно (free)

В нашей организации на первом же телефонном собеседовании на должность разработчика по ЗУП ред. 3 вас обязательно спросят о том, что такое "Представления".

04.06.2018    47758    xrrg    95