Формат баз 1CD - классические и 8.3.8

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

Разработка - Практика программирования

1CD формат баз структура баз восстановление баз

122
Некоторые дополнения к описанию формата 1CD от awa и описание нововведений в 8.3.8

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

1. Дополнения и уточнения к описанию от awa

Страницы

Чтобы избежать терминологической путаницы, введем термин "страница" - это блоки, из которых состоит файл базы. До версии платформы 8.3.8 (формат 8.2.14 и младше) размер блока был строго равен 4096 байт, начиная с версии 8.3.8 фирма 1С ввела новый, пока необязательный, формат с возможностью увеличения размера страницы - допустимыми стали значения 4Кб, 8Кб, 16Кб, 32Кб и 64Кб. Страницы в файле нумеруются с нуля четырехбайтным целым числом, предположительно без знака (UINT32). Таким образом, для страницы в 4К теоретический максимум размера файла - 16Тб, но другие ограничения не дадут реализовать этот потенциал. Страницы 0, 1 и 2 имеют специальное назначение: в странице 0 содержится заголовок файла, страница 1 содержит объект, содержащий список свободных страниц файла, страница 2 содержит "корневой" объект базы, ссылающийся на все таблицы.

Потоки

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

Объекты данных

"Объект" в базе представляет собой описание к потоку, содержащему данные. Заголовочная страница содержит среди прочего актуальную длину потока данных и список страниц, содержащих список страниц потока ;). В странице описания объекта первые 24 байта служебные, остальные 1018 32-разрядных значений содержат список страниц (назовем их "таблица размещения"). Каждая из страниц таблицы размещения содержит 4096 / 4 = 1024 32-разрядных целых. Первое значение описывает сколько значений из оставшихся 1023 используется на данной странице. И так для каждой страницы таблицы размещения. Таким образом поток данного объекта может содержать максимум 1018*1023=1041414 страниц по 4К, т.е. чуть меньше 4Гб. Поскольку на каждую таблицу выделяется по отдельному объекту для данных записей, индексов и данных неограниченной длины (BLOBов), следует что каждый из этих составляющих не может занимать больше 4Гб. Если в таблицу попробовать добавить больше данных, платформа выдаст критическую ошибку с вариантами "закрыть" и "перезапустить".

Объект описания свободных страниц

Объект, описывающий список свободных страниц, устроен несколько отличным образом. Отличий два: поле длины потока содержит количество свободных страниц в списке, и каждая страница таблицы размещения не использует первое значение под количество номеров в странице, а использует всё пространство (1024 значения) под список свободных страниц. Таким образом, этот объект может содержать список из максимум 1018*1024=1042432 страниц при размере страницы 4К, т.е. описывает свободное пространство почти в 4Гб. Отсюда следует достаточно занятное следствие - базы, содержащие более 4Гб данных, подвержены "утечкам страниц" и бесконтрольному разбуханию. Например, мы удаляем из базы две таблицы, которые суммарно занимали 5Гб пространства. Допустим, что перед операцией список свободных страниц был пуст, тогда он заполнится максимальным значением номеров (4Гб), а ссылки на остальные страницы (1Гб) будут потеряны. Поскольку при обновлении конфигурации платформа проводит реструктуризацию способом "сделать копию таблиц, перелить данные, старые удалить", то при определенном объеме обрабатываемых таблиц "утечка" становится неизбежной.

Кстати, в списке свободных страниц номера страниц совершенно не обязаны идти по порядку. Движок 1С просто добавляет высвобождаемое пространство в конец списка, и страницы для использования берет из конца списка. Отсюда появляется еще один интересный эффект - внутренняя фрагментация потоков данных, т.е. поток может быть размазан по всей базе. Это не может положительно влиять на скорость работы базы, и только выделение больших объемов оперативной памяти для кэширования и размещение базы на SSD может минимизировать негативный эффект. Это же замечание актуально и для свободных блоков в потоках данных неограниченной длины (BLOB-ах). Т.е. если рассматривать фрагментацию файла базы данных на диске как первичную, то фрагментация потоков внутри базы - вторичная, а то что данные в блоках BLOB-ов могут идти непоследовательно внутри потока - третичная. В частности поэтому я размещаю базы с которыми приходится работать на SSD, а в случае каких-то разовых работ (обновление, перенос данных из баз заказчивов) - размещаю базы на RAM-Drive, на виртуальном диске в оперативной памяти.

Организация хранения данных неограниченной длины (BLOBs)

Поток хранения BLOB разбит на блоки по 256 байт, при этом первые 6 байт используются под заголовок блока (ссылка на следующий блок и объем реально используемых данных в блоке). Блоки нумеруются 32-разрядными (беззнаковыми?) целыми, таким образом максимальный размер объекта под BLOB может быть 2^32*256=2^40=1Тб. Первый блок всегда выделен под организацию цепочки свободных блоков потока.

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

Корневой объект

Корневой объект описывается на странице 2 файла базы. Его поток содержит служебные данные, и список номеров страниц, на которых размещаются объекты с описанием таблиц. Используется текстовое описание таблиц в формате сериализации 1С с использованием двухбайтовой кодировки UCS2. Каждое описание содержит имя таблицы, списки полей и индексов, а так же номера страниц с объектами данных записей таблиц, BLOB-ов и индексов. Подробнее описано в статье awa.

Формат сериализации 1С

1С активно использует текстовый формат сериализованных структурированных данных, идеологически сходный с JSON. Значения в этом формате могут иметь типы:

  • Список - последовательность значений (в т.ч. списочных), разделенных запятыми, окруженных фигурными скобками. Например: {1,2,{3,4}}
  • Строка - строковое значение заключается в двойные кавычки. Двойные кавычки внутри значения удваиваются. Например: {"Строка1","Строка ""2"" с кавычками "}
  • Пустое значение - пропущенное значение, например {1,,3}
  • Числовое значение
  • GUID - например: {2,e5c73637-e8d6-47e0-9c15-2fa1802ee5b0,76702e9e-fa7a-4b98-befa-f9b37db2dae0}
  • Двоичное значение - в виде последовательности шестнадцатиричных знаков: 0123456789abcdef

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

Хранение GUID в записях

1С активно использует GUID в данных, в частности как суррогатные первичные ключи в таблицах. При этом физически они хранятся как двоичные значения длины 16 байт. Но и тут 1С не обошлась без "особенностей": GUID вида AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE хранится как DDDDEEEEEEEEEEEECCCCBBBBAAAAAAAA, т.е. компоненты 4,5,3,2,1
Соответственно для обратного преобразования требуется разбить двоичные данные на группы и 4,12,4,4,8 шестнадцатеричных знаков и соединить как группы {$5-$4-$3-$1-$2}

2. Новое в формате 8.3.8

Заголовок базы

Страница 0 почти не изменилась. В качестве версии формата используется 8,3,8,0, в отличие от предшественника 8,2,14,0. Добавилось поле типа UINT32 с описанием размера страницы, и теперь структура выглядит так:

struct { 
    char sig[8]; // сигнатура “1CDBMSV8” 
    char ver1; 
    char ver2; 
    char ver3; 
    char ver4; 
    unsigned int length; 
    int unknown; 
    unsigned int pagesize; 
} 


Заголовок базы формата 8.3.8 с размером страницы 8К

Объект - описатель свободных блоков

Структура описания объектов в новом формате заметно поменялась и теперь выглядит так:

struct { 
    unsigned int object_type; //0xFF1C 
    unsigned int pages_count; 
    int version; 
    unsigned int pages[]; 
}

Во-первых, изменились "магические символы" - теперь тип блока определяется 32-разрядным целым числом. Для типа "список свободных блоков" используется константа 0x0000FF1C. Следом идет количество свободных страниц в списке, затем нечто служебное, а затем список страниц таблицы размещения списка свободных блоков. Для размера страницы 4К в новом формате теперь под список страниц таблицы размешения отводится 1021 значение. Принципиально же склонность крупных баз к утечке свободных страниц новый формат не решает, точнее решает экстенсивным путем - за счет возможности увеличить размер страницы. Так, для размера страницы 8К в базе может храниться информация о (2048-3)*2048=4188160 свободных страницах, что соответствует примерно 32Гб свободного пространства. Таким образом если размер вашей базы заметно больше  условно 5-6Гб имеет смысл попробовать перейти на новую платформу с увеличенным размером страницы.


Описание объекта - списка свободных страниц в базе формата 8.3.8 с размером страницы 8К. В данном случае имеется только одна страница в таблице размещения - 0xD9, количество актуальных записей в списке - 0x14=20.

Прочие объекты

Структура объектов теперь выглядит следующим образом:

struct { 
    unsigned int object_type; //0xFD1C или 0x01FD1C 
    unsigned int version1; 
    unsigned int version2; 
    unsigned int version3; 
    unsigned long int length; //64-разрядное целое! 
    unsigned int pages[]; 
}

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

Второе - на самом деле используется две версии такой структуры, сокращенная и полная. Сокращенная версия использует код типа объект 0xFD1C, и предназначена для небольших объектов, когда содержимое таблицы размещения может полностью поместиться в массив pages. Для размера страницы 4К это 1018 значений. В этом случае отдельная таблица размещения не используется. Как только количество страниц таблицы размещения превышают доступный размер массива pages, описание объекта конвертируется в полный формат - код объекта меняется на  0x01FD1C, содержимое массива pages выносится в отдельную таблицу размещения, а в массив pages помещаются номера страниц таблицы размещения. Для страницы в 4К сокращенный вариант используется для объектов с размером потока не более 1018*4096=4169728 байт. Для страницы в 8К это будет (2048-6)*8192=16728064 байт. Содержимое страниц таблицы размещения для полного формата тоже немного изменилось - теперь первое значение не используется для описания количества значений в странице, и для 4К страницы могут использоваться все 1024 значения.


Пример описания полноформатного объекта в базе формата 8.3.8. Выделены поля с кодом типа объекта и размером объекта.

Рассмотрим максимальные размеры потоков объектов (или "внутренних файлов" называет их 1С в некоторых сообщениях об ошибках): 
Под таблицу размещения отводится (РазмерСтраницы-24)/4 номеров страниц, каждый содержит до РазмерСтраницы/4 номеров страниц по РазмерСтраницы каждый. Если РазмерСтраницы=2^n, тогда максимальный размер объекта будет немного меньше 2^(3*n-4). Таким образом получаем:

Размер страницы Максимальный размер объекта
4К  4Гб
8К  32Гб
16К  256Гб
32К  2Тб
64К  16Тб

Формат корневого объекта

Существенно изменился формат корневого объекта, содержащего ссылки на описания таблиц. Ранее описания таблиц размещались в отдельных объектах, а корневой объект содержал только ссылки на номера страниц этих объектов. В формате 8.3.8 структура потока корневого объекта полностью совпадает со структурой потока BLOB-а, поток так же разбит на блоки по 256 байт, каждый блок так же содержит 6-байтовый заголовок со ссылкой на блок с продолжением данных, а нулевой блок начинает цепочку свободных блоков в потоке.

Данные в первом блоке имеют формат (за исключением 6-байтового заголовка блока) корневого потока из формата 8.2.14:

struct { 
    char lang[32]; 
    int numblocks; 
    int tableblocks[numblocks]; 
} 

Но массив tableblocks содержит теперь не номера страниц в файле, а номера блоков в этом же потоке, в которых размещено описание таблиц. Таблицы описываются такой же структурой как и раньше, но используют однобайтовую кодировку (возможно UTF-8, на используемом наборе символов она не отличима от Win-1251 или ANSI).


Начало корневого объекта

На приведенном рисунке виден пустой блок 0, ссылающийся на следующий пустой блок в этом потоке номер 0x35, содержимое блока 1 размером 0x0088 байт с идентификатором кодовой страницы ru_RU,  размером таблицы 0x00000019 и 25 значений - номера блоков описаний 25 таблиц, в частности таблицы IBVERSION, размещенной в блоке 2.

3. Заключение

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

Если есть замечания и дополнения, прошу писать в комментариях и я дополню статью

122

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

Комментарии
Избранное Подписка Сортировка: Древо
1. awa 2506 15.07.16 10:18 Сейчас в теме
Спасибо. Прочитал, вроде все правильно написано. Единственно, в описании объектов (сейчас я их предпочитаю называть файлами) вместо
unsigned int object_type;

я у себя разбил это на два поля
 unsigned short int signature; // 1C FF для таблицы свободных блоков, 1C FD для остальных файлов
unsigned short int fatlevel; // количество промежуточных слоев таблицы размещения (0 или 1)

Исходя из этого я ожидаю, что в будущем 1С исправит ситуацию с таблицей свободных блоков, если свободных блоков будет очень много, то можно использовать промежуточный слой и не терять свободные блоки.
ЗЫ Сигнатуры, как и раньше, похожи на говорящие: 1C FF - 1C File Free (pages), 1C FD - 1C File Data.
zels; GusevNA; h00k; begemot; nsirotkin@mail.ru; JohnyDeath; Serj1C; Pasha1st; +8 Ответить
2. Pasha1st 580 15.07.16 12:16 Сейчас в теме
(1) awa, По разбиению кода типа на два двухбайтовых значения. Пока тут только два варианта, на мой взгляд рано говорить о тенденциях. Что интересно, для объекта списка свободных страниц это второе слово пока имеет нулевое значение.
3. Serj1C 476 18.07.16 12:30 Сейчас в теме
в 8.3.8 поменялся только формат 1cd файлов? Внешние отчеты и обработки имеют обратную совместимость при пересохранении?
4. Pasha1st 580 18.07.16 13:17 Сейчас в теме
Остальное не менялось - новой замечательно открылись старые обработки, и созданная в 8.3.8 обработка открылась в 8.3.7
Да и новый формат пока опция, насколько я смог заметить по умолчанию 8.3.8 создает базы старого формата, в новый их надо явно конвертировать
5. PetroP 26.07.16 11:30 Сейчас в теме
Я правильно понимаю, что
Таким образом, для страницы в 4К теоретический максимум размера файла - 16Тб

следует читать как
Таким образом, для страницы в 64К теоретический максимум размера внутреннего файла (объекта) - 16Тб

?
6. Pasha1st 580 26.07.16 14:10 Сейчас в теме
(5) PetroP, Файл состоит из страниц, нумеруются 32-разрядным (беззнаковым) целым, т.е. общий размер файла (теоретический) - 2^32*РазмерСтраницы, что в случае страницы 4К - 2^44, т.е. 16Тб, а для страницы в 64К - 2^48, т.е. 256Тб. Но это исключительно теоретический предел, поскольку при размере страницы 4К максимальный размер внутреннего объекта - 4Гб, и для использования всего объема потребуется создать очень много таблиц. Это первое ограничение, на самом деле практически не достижимое.
Размер одного объекта - другое ограничение. Максимальный размер одного объекта (в т.ч. потока для хранения записей, BLOBов, индексов) определяется как:
Первая страница содержит массив ссылок на номера страниц таблицы размещения, в таблице размещения хранится массив номеров страниц под хранение реальных данных. Пусть размер страницы 2^n, для 4К - n=12, для 64К n=16
Таблица размещения может содержать (РазмерСтраницы-24)/4 страниц, т.е. чуть менее чем 2^(n-2)
Одна страница таблицы размещения может содержать до РазмерСтраницы/4 ссылок (РазмерСтраницы/4-1 в старом формате), т.е. тоже 2^(n-2)
Одна страница данных - 2^n байт.
Итого размер объекта будет чуть менее чем (2^(n-2))*(2^(n-2))*2^n=2^(3*n-4)
Т.е. для страниц 4К это 2^32, для 64К - 2^44=16Тб
Таким образом Вы перечислили различные ограничения, которые получаются из различных исходных данных, но в числах, да, совпадают.
7. PetroP 26.07.16 17:12 Сейчас в теме
(6) ясно. Тут в обсуждении возник вопрос об ошибке максимально допустимого размера внутреннего файла. Было бы неплохо для наглядности нарисовать две таблички - максимальный размер файла (пусть теоретический) и максимальный размер внутреннего файла (объекта) для разных настроек размера страницы.
8. Pasha1st 580 26.07.16 20:06 Сейчас в теме
(7) Терминологическая путаница, которой способствует отсутствие официального глоссария от 1С.
Когда я говорю про файл, я имею в виду именно файл 1CD
Ошибка 1С про размер "внутреннего файла" говорит о переполнении какого-то из "объектов" базы. Если честно, мне не очень нравится название от 1С "внутренний файл".
На одну таблицу приходится три "объекта" или "внутренних файла" - для данных, для индексов, и для BLOBов (данные неограниченной длины). С чем именно связана обсуждаемая по ссылке проблема надо смотреть на месте.
9. PetroP 27.07.16 16:11 Сейчас в теме
(8) бог с ней с обсуждаемой ссылкой. Я говорю, что данную статью можно дополнить такой информацией. Если максимальные размеры файла иб носят преимущественно академический характер, то максимальные размеры внутренних файлов (объектов) имеют большей частью практический интерес.
10. Pasha1st 580 27.07.16 17:59 Сейчас в теме
(9) PetroP, Дополнил. Мне казалось что я делал такие расчеты, видимо казалось.
11. echo77 1090 28.08.16 17:43 Сейчас в теме
Интересный вопрос: как управлять размером страницы?
12. Pasha1st 580 29.08.16 19:00 Сейчас в теме
(11) echo77, В составе платформы 8.3.8 (в каталоге bin) появилась консольная утилита cnvdbfl.exe
Запуск без параметров (в консоли, т.е. из cmd.exe или PowerShell) выдает подсказку по ключам
Например cnvdbfl.exe -i e:\base\1Cv8.1CD покажет формат базы и размер страницы, а cnvdbfl.exe -c -f 8.3.8 -p 16k e:\base\1Cv8.1CD сконвертирует базу в формат 8.3.8 с новым размером страницы. Допускаются форматы 8.3.8 и 8.2.14, размеры страниц 4k, 8k, 16k, 32k, 64k
13. sss999 38 05.03.17 22:11 Сейчас в теме
скажите как найти индекс блока описания таблицы, чтобы добавить его в рут..
14. Pasha1st 580 06.03.17 22:01 Сейчас в теме
(13) стоит найти описание любой таблицы (например, CONFIG), учитывая что теперь используется однобайтовая кодировка. Это будет одна из страниц, принадлежащей потоку корневого объекта. Или даже сразу по строке "ru_RU" из первого блока. И искать ссылки на номер этой страницы. Обычно всё это располагается в начале базы.
15. sss999 38 07.03.17 05:35 Сейчас в теме
(14)я в курсе что там есть корневой объект, как в нем искать, и как определять индекс объекта
16. Pasha1st 580 07.03.17 18:25 Сейчас в теме
(15) Тогда опишите более подробно ситуацию, пока не очень понятно что Вы хотите сделать и почему
17. sss999 38 07.03.17 23:15 Сейчас в теме
(16)например заново проиндексировать рут который пустой или от другой базы
18. sss999 38 07.03.17 23:19 Сейчас в теме
(16)или например в руте найти где лежат данные таблицы а где описание должно лежать, если вдруг описание затерлось, то мне нужно отдельно скопировать данные а потом добавить описние и в рут добавить
19. Pasha1st 580 08.03.17 14:41 Сейчас в теме
Проблема в том что если в старых форматах описания таблиц были в отдельных объектах, то в 8.3.8 они находятся уже в потоке корневого объекта. Если данные корневого объекта потеряны, то вероятнее всего потеряно и описание таблиц. И проблема не только в ссылках на объекты с данными таблиц, но теряются и сами описания (состав полей). Так же и при удалении таблицы блоки корневого объекта похоже зачищаются с потерей данных для восстановления. В этом плане восстановление потерянного корневого объекта в новом формате становится мягко говоря затруднительным.
Если же сами данные есть вне базы (переносятся из внешних файлов), то потребуется:
1. создать объекты для данных, блобов и индексов, заполнить данными. Запомнить номера страниц этих объектов
2. в корневом объекте (работа как с данными блоба - блоками по 256 байт) либо найти свободное место либо расширить размер и дописать в свободные блоки описание таблицы (не забыв скорректировать в части "Files" ссылки на номера страниц объектов, использованных на шаге 1), номер первого блока описания потребуется добавить в первый блок корневого объекта ссылку на добавленный блок с описанием таблицы и увеличить количество таблиц в этом блоке.
20. sss999 38 15.06.19 05:04 Сейчас в теме
Я что-то давно не занимался этим всем, прошу помощи, задача найти начало таблицы config, не подскажите?раньше онf на config начинались а теперь как я понял просто по адресу лежит, как найти ее в файле через хекс, задача вырезать ее из одного файла в другой.
Оставьте свое сообщение

См. также

Как настроить сервер 1С по умолчанию для ПРОФ лицензии после 10.09.2019 90

Статья Системный администратор Нет файла v8 Бесплатно (free) Администрирование данных 1С

Здесь мы собираем все данные по настройкам сервера для работы ПРОФ лицензии.

11.09.2019    18437    infostart    90       

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

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

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

05.09.2019    9399    ids79    42       

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

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

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

08.08.2019    9755    ids79    22       

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

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

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

04.07.2019    6093    SeiOkami    48       

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

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Математика и алгоритмы

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

25.06.2019    16914    ids79    16       

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017 174

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Разработка

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    11276    dmurk    134       

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

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

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

16.05.2019    16890    YPermitin    27       

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

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

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

25.04.2019    4660    m-rv    2       

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

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

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

16.04.2019    7176    m-rv    16       

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

Статья Программист Стажер Нет файла v8 Бесплатно (free) Практика программирования Разработка

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

07.04.2019    16058    ellavs    122       

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

Статья Программист Стажер Нет файла v8 Windows Бесплатно (free) Практика программирования Разработка

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

28.03.2019    12492    ellavs    83       

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

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

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

14.03.2019    12594    YPermitin    52       

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

Статья Программист Нет файла v8 Россия Бесплатно (free) Тестирование и исправление

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

17.01.2019    16039    PoZiTiFFF    52       

Копирование числовых ячеек из 1С в Excel 26

Статья Системный администратор Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Загрузка и выгрузка в Excel Администрирование данных 1С

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

15.01.2019    10251    itriot11    21       

Чем PostgreSQL может быть полезен разработчику 1С 170

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Администрирование данных 1С

В статье будут рассмотрены примеры, которые могут оказаться полезными в повседневной работе разработчика 1С и не только: как можно сделать снимок рабочей базы без файла резервной копии, как можно эффективно использовать табличные пространства СУБД PostgreSQL, а также как организовать простой и удобный доступ к админке СУБД посредством мобильных устройств.

20.12.2018    15309    Shmell    38       

Новый подход к обмену данными EnterpriseData 202

Статья Программист Нет файла v8 v8::УФ Россия Бесплатно (free) Практика программирования Обмен через XML

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

14.12.2018    21011    ids79    72       

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

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

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

10.11.2018    20585    ids79    40       

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

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

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

15.10.2018    20239    tormozit    100       

Кластер серверов 1С 181

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Администрирование данных 1С

Какой уровень отказоустойчивости при проектировании серверов 1С выбрать? В чем отличия центрального и рабочего сервера? Как правильно настроить требования назначения функциональности? На что влияют настройки кластера и сервера 1С и как в них не запутаться? Антон Дорошкевич дает на эти и многие другие вопросы подробные ответы.

24.09.2018    23216    a.doroshkevich    60       

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

Статья Программист Нет файла v8 КД ОС Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8

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

25.06.2018    19130    olegtymko    43       

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

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

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

01.06.2018    21033    m-rv    21       

Строим графы средствами 1С (без GraphViz) 42

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

Множество статей на Инфостарте описывают, как работать с компонентой GraphViz, чтобы построить ориентированный граф. Но практически нет материалов, как работать с такими графами средствами 1С. Сегодня я расскажу, как красиво строить графы с минимальным пересечением. Нам этот метод пригодился для отрисовки алгоритмов в БИТ.Финансе, т.к. типовой механизм не устраивал. Еще это может быть полезно для визуализации различных зависимостей: расчета себестоимости, графы аффилированности компаний и т.д. Надеюсь, эта статья поможет сделать мир 1С красивее и гармоничней:) Итак, поехали...

23.05.2018    16806    slozhenikin_com    19       

Распределение расходов пропорционально продажам 9

Статья Программист Пользователь Нет файла v8 v8::ОУ УТ10 УУ Финансовый учет и бюджетирование (FRP) Учет доходов и расходов Бесплатно (free) Практика программирования

Финансовая модель. Распределение административных расходов по подразделениям пропорционально продажам за месяц. Дополнительные реквизиты против бизнес-процессов!

13.05.2018    11209    Rustig    9       

Несколько версий сервера 1С на одном компьютере 209

Статья Системный администратор Нет файла v8 Бесплатно (free) Администрирование данных 1С

Как установить несколько экземляров сервера 1С на один компьютер. Как установить несколько служб агента 1С на один сервер? Как запустить сервера разных платформ на одном компьютере.

18.04.2018    43594    spezc    79       

О лицензиях 1С 207

Статья Системный администратор Нет файла v8 Россия Windows Бесплатно (free) Администрирование данных 1С

Разбираем вопросы по получению и переполучению лицензии 1С.

30.03.2018    83824    D_e_X_T_e_R    141       

Минимализмы 3 350

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

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    35278    ildarovich    44       

V8Unpack4rs: Rust, реализация v8unpack [Экспериментальный] 57

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

Альтернативная реализация распаковщика/запаковщика* файлов платформы 1С:Предприятие 8.x форматов *.cf (конфигурация), *.epf (обработка) и *.erf (отчет) на Rust. Новая версия поддерживает распаковку и упаковкуфайлов платформы. Для распаковки применен параллельный алгоритм. Если хотите сравнить на Ваших данных попробуйте команды: --parse - для параллельной распаковки; -s --parse - для однопоточной распаковки.

1 стартмани

03.02.2018    13070    15    TIS_08    64       

Этюды по программированию. Взаимодействие с Microsoft Word 108

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

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

11.12.2017    25688    milkers    23       

Метод формирования движений в типовых регистрах нетиповыми регистраторами 31

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

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

05.12.2017    21173    itriot11    34       

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

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

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

19.11.2017    136502    MaxS    251       

Программные перечисления, ч.2: приемы кэширования при разработке 65

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

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

30.10.2017    20913    unichkin    17       

Работа с Excel 287

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Загрузка и выгрузка в Excel

Собрал различные полезности для работы с Excel из 1С. Иногда приходится форматировать документ Excel программно из 1С. Так вот, чтобы не искать постоянно на просторах интернета как сделать левое выравнивание в ячейке Excel из 1С и т.п. решил опубликовать это...

23.10.2017    24291    arakelyan    39       

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

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

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

10.09.2017    34040    tormozit    72       

Ускоряем 1С: модули с повторным использованием возвращаемых значений 136

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

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

04.09.2017    42903    m-rv    60       

Как просто запомнить алгоритм программного вывода в СКД 205

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования

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

01.09.2017    41333    unichkin    15       

Настройка веб сервера Apache + 1С (Пошаговое руководство) 242

Статья Системный администратор Нет файла v8 1cv8.cf Windows Бесплатно (free) Администрирование данных 1С Apache

Пошаговое руководство настройки Web сервера Apache на Windows. Не секрет, что файловые базы через веб-сервер будут работать намного шустрее, чем через обычный доступ к сетевому каталогу. Эффект особенно заметен, когда старые компы вообще не справляются с обычным сетевым доступом, регулярно выплевывают 1С. А доступ через веб сервер даже на компьютерах серии "Хлам" работает на ура!

19.07.2017    163288    Aleksey81    132       

Как формируется GUID? 461

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

"Коллеги, есть идеи, как получить последнюю созданную характеристику? Реквизиты полностью идентичны(код, наименование, и т.п.)."(c) "Насколько я знаю, ссылка не обеспечивает последовательность, а только уникальность."(c) "Я сделал по Максимум(Ссылка). Но, чета, мне кажется, это неправильно."(c) "Слышал что в ГУИд содержится как раз время создания и по всей логике вещей сортировка по ссылке должна сортировать по моменту создания объекта"(c) Сколько раз вы слышали такие фразы? На удивление я не обнаружил информации по этой теме, пришлось разбираться самому...

16.06.2017    51874    kuzyara    55       

Работа с конвертацией данных 349

Статья Программист Нет файла v8 КД Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8

Поскольку к конвертации обращаюсь время от времени и какие-то детали забываются, хочу выделить несколько пунктов, чтобы "было где посмотреть". Статья сделана преимущественно «для себя», так что просьба не судить строго. (Примечание читающим/комментирующим: код в примерах очень сильно сокращен.)

16.03.2017    61446    perepetulichka    25       

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

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

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

03.03.2017    50975    V.Stavinsky    21       

Автоматизированная проверка конфигураций… и пара слов о стандартах разработки 265

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Тестирование и исправление

Предлагаю познакомиться с инструментом "Автоматизированная проверка конфигураций" и получить практику его применения

18.01.2017    43198    3    Vladimir Litvinenko    19       

Отладка подключаемых обработок 194

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

На самом деле для этого не нужно ни изменять конфигурацию, ни пользоваться вспомогательной обработкой-отладчиком.. Все просто :)

04.01.2017    43293    unichkin    77       

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

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

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

10.12.2016    29783    unichkin    45