Регистры сведений. За кулисами

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

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

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

Небольшие заметки по внутреннему устройству регистров сведений.

На старт

Все мы используем в разработке такой объект как регистры сведений. Мы все о них знаем, все умеем. Среди регистров - это самый простой, понятный объект, в котором нет практически ничего лишнего. По крайней мере, так кажется до поры до времени.

 
 Это информация из старого блога DevelPlatform.ru

В нескольких статьях будут представлены основные сведения о внутреннем устройстве регистров сведений, о SQL-запросах платформы при работе с ними и их изменение в зависимости от настроек регистра. Рассмотрим некоторые особенности с выходом платформы 8.3 и совсем немного об оптимизации работы с ними.

Материалы ниже не являются всеобъемлющей инструкцией или руководством. А на Инфостарт есть более полная статья с описанием множества нюансов этого типа объекта. Это публикация от Сергея Носкова - "Регистры сведений 1С. Как это устроено.". Здесь же Вы найдете самую общую информацию, а некоторые темы совсем не будут раскрыты. Однако, это может быть отличным началом к исследованию внутренних механизмов платформы.

Структура хранения

Поговорим о регистрах сведений. Но не о на настройках и их правильном использовании, а о скрытой от разработчиков стороне СУБД. Рассмотрим? как регистры сведений хранятся в базе данных. 

Что там в базе

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

Рассмотрим влияние этих настроек с простого примера. В тестовой базе у нас есть непериодический регистр сведений "Настройки":

Единственное измерение "СтаутсТовара" ссылается на перечисление, все ресурсы имеют примитивные типы. Структура хранения такого регистра ограничивается только одной таблицей в базе данных:

Как видно из рисунка, структура хранения такого регистра достаточно примитивна. Каждому полю регистра в дереве метаданных конфигурации соответствует поле таблицы на стороне СУБД.

Рассмотрим еще один простой пример.

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

Кроме полей измерений и ресурсов в таблицу добавлено поле "Period", в котором хранится значение даты и времени записи. Вне зависимости от значения периодичности структура таблицы регистра не изменится. Если же обратно поменять периодичность в значение "Непериодический", то из структуры таблицы будет удалено поле "Period".

Если для регистра поставить настройку "Режим записи" в "Подчиненный регистратору", то в таблицу дополнительно добавится поле "RecorderRRef", в котором будет хранится ссылка на документ-регистратор, а также поле "LineNo" (Номер строки) и "Active" (Активность). Отдельно этот пример рассматривать не будем. Давайте лучше посмотрим на структуру периодического регистра сведений с включенной опцией хранения итогов среза последних:

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

Как раньше и было сказано, в таблице содержатся поля измерений и ресурсов регистра. Т.к. регистр подчинен регистратору, то в состав полей добавлено поле "RecorderRRef", в котором хранится ссылка на документ-регистратор. Периодичность у регистра установлена в "По позиции регистратора", но поле "Period" в таблице все равно осталось. При такой настройке в этом поле хранится дата и время документа.

Вторая таблица - это таблица итогов среза последних записей:

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

Также бы выглядела и таблица итого среза первых, только хранила бы она срез первых записей в разрезе периодов. О плюсах использования таблиц итого регистров сведений мы поговорим позже.

Отдельно стоит упомянуть о таблице настроек хранения итогов регистра сведений. Для последнего примера эта таблица выглядит так (см. след. скриншот).

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

Таблица настроек хранения итогов добавляется для регистра сведений, если значение периодичности регистра отличается от значения "Непериодический".

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

Пример формирования таблиц итогов

Например, таблица движений регистра "Цены номенклатуры", который мы рассматривали в предыдущем примере, содержит следующие записи:

Тогда таблица итогов среза последних записей будет выглядеть так:

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

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

Пойдем дальше

Мы рассмотрели варианты хранения регистров сведений на стороне СУБД в зависимости от их настроек, а также познакомились со служебными таблицами регистра для хранения итогов и настроек хранения итогов. Стоит отметить, что возможность хранения итогов для регистров сведений появилась только в версии 8.3.

Далее мы отловим SQL Profiler'ом запросы, которые формирует платформа 1С:Предприятие к СУБД при работе с регистрами сведений.

Запросы платформы

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

Непериодический регистр

В тестовой конфигурации у нас есть простой непериодический регистр "Настройки":

Если мы сделаем запрос к таблице регистра с отбором по полю "УчитыватьВДокументахПоступления", то получаем простейший SQL-запрос:

SELECT
T1._Fld33RRef,
T1._Fld34,
T1._Fld35,
T1._Fld36
FROM dbo._InfoRg32 T1
WHERE (T1._Fld34 = 0x00)

В запросе выбираются поля регистра, а в секции WHERE устанавливается отбор по полю. Рассмотрим примеры с периодическим регистром.

Периодический регистр

Тестовая база содержит периодический регистр:

Как было сказано ранее, такие регистры могут иметь на стороне СУБД несколько таблиц:

  • Основная таблица регистра
  • Таблицы итогов (одна или две, в зависимости от настроек итогов для регистра: итоги для среза первых и итоги для среза последних).

SQL-запрос к основной таблице итогов ничем не будет отличаться от запроса к таблице непериодического регистра. Другое дело запрос для получения среза последних/первых записей периодического регистра. Вот так, например, выглядит SQL-запрос для получения среза последних записей без установки параметра "Период":

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

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

Из-за того, что в запросе присутствует несколько подзапросов и соединение с ними, оптимизатор СУБД не всегда может подобрать оптимальный план запроса, поэтому гарантировать стабильность выполнения этого запроса нельзя.

В версии 8.3 появились новые настройки, позволяющие избежать проблем с производительностью.

Особенности платформы 8.3

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

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

В примере, к подзапросу присоединяется левым соединением таблица справочника "Товары" для получения представления товара (Наименования).

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

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

Свой запрос для среза последних

Написание собственного запроса для получения среза последних записей для 1С:Предприятия.

О чем идет речь

Ранее мы рассмотрели SQL-запросы, которые формирует платформа 1С:Предприятие при работе с регистрами сведений в зависимости от их настроек. Особый интерес вызывает запрос для получения среза первых / последних записей без использования таблицы итогов.

Как мы видим, в запросе используется соединение с подзапросом, что может стать причиной проблемы с производительностью из-за не оптимального плана запроса, который выберет оптимизатор СУБД. Это будет происходить не всегда, но 100% гарантии стабильности дать нельзя (подробнее о причинах неоптимальной работы с подзапросами будет идти речь в одной из следующих статей).

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

Пример запроса среза последних

Для получения среза последних записей напишем следующий запрос:

Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
| ЦеныНоменклатуры.Товар КАК Товар,
| МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период
|ПОМЕСТИТЬ ПоследниеЗаписи
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
|СГРУППИРОВАТЬ ПО
| ЦеныНоменклатуры.Товар
|ИНДЕКСИРОВАТЬ ПО
| Товар,
| Период
|;
|ВЫБРАТЬ
| ПоследниеЗаписи.Товар,
| ЦеныНоменклатуры.Цена
|ИЗ
| ПоследниеЗаписи КАК ПоследниеЗаписи
|  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
|  ПО ПоследниеЗаписи.Товар = ЦеныНоменклатуры.Товар
|   И ПоследниеЗаписи.Период = ЦеныНоменклатуры.Период";

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

Если нужно поставить отбор, например, по товару, то запрос будет такой:

Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
| ЦеныНоменклатуры.Товар КАК Товар,
| МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период
|ПОМЕСТИТЬ ПоследниеЗаписи
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
// Устанавливаем отборы по периоду среза
// последних записей и по товару
|ГДЕ
| ЦеныНоменклатуры.Товар = &Товар
| И ЦеныНоменклатуры.Период <= &Период
|...";

Отборы устанавливаются в той части запроса, где идет получение максимальных периодов по разрезам регистра сведений. Если мы посмотрим на SQL-запрос платформы в этом случае, то соединений с подзапросами мы не увидим:

 1. Запрос получения макс. периодов

INSERT INTO #tt2 WITH(TABLOCK) (_Q_000_F_000RRef, _Q_000_F_001) 
 SELECT
  T1._Fld27RRef,
  MAX(T1._Period)
 FROM dbo._InfoRg26 T1
 WHERE (T1._Fld27RRef = @P1) AND (T1._Period <= @P2)
 GROUP BY T1._Fld27RRef

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

SELECT
 T1._Q_000_F_000RRef,
 T2._Fld37
FROM #tt2 T1 WITH(NOLOCK)
 LEFT OUTER JOIN dbo._InfoRg26 T2
  ON ((T1._Q_000_F_000RRef = T2._Fld27RRef) 
  AND (T1._Q_000_F_001 = T2._Period))

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

Срез первых записей

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

Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
| ЦеныНоменклатуры.Товар КАК Товар,
| МИНИМУМ(ЦеныНоменклатуры.Период) КАК Период
|ПОМЕСТИТЬ ПоследниеЗаписи
|...";

Попробуйте самостоятельно написать такой запрос и поэкспериментировать с результатом.

Финиш

На этом небольшая заметка по внутреннему устройству регистров сведений подошла к концу. За бортом осталось множество вопросов:

  • Устройство индексов регистра и их зависимость от настроек
  • Как происходит запись в таблицы регистров
  • Как работают управляемые блокировки для этого типа объектов
  • Проблемы производительности при использовании итогов для среза первых / последних записей 
  • и другое.

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

Спасибо за внимание!

Другие ссылки

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

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. Leon29 10.07.19 07:02 Сейчас в теме
Отдельно рассматривать ситуацию с получением среза последних записей смысла нет

Наверное имели ввиду среза ПЕРВЫХ?
YPermitin; +1 Ответить
3. YPermitin 8286 10.07.19 07:37 Сейчас в теме
(1) да, Вы правы. Опечатался :(

Поправлю. Спасибо за подсказку!
2. rpgshnik 2154 10.07.19 07:22 Сейчас в теме
Я обязательно когда-нибудь это прочитаю вдумчиво :))) пока бегло прочитал и конечно это ⭐ и я уже боюсь считать какая по счёту эта публикация у вас и в целом на Инфостарте про кажется такую банальную штуку как регистр сведений, но не такую простую с другой стороны. Круто!
YPermitin; +1 Ответить
4. YPermitin 8286 10.07.19 07:42 Сейчас в теме
(2) спасибо :)

Открытий тут нет, просто каждый автор с разных углов рассматривает.

А публикации создавать не так уж и сложно. Заниматься разработкой сложнее....
5. lmnlmn 58 10.07.19 15:19 Сейчас в теме
(4) Да как сказать. Накодить можно мутно, но будет работать. А в публикации надо чтоб понятно, познавательно и интересно было. Вообще ваши статьи с удовольствием читаю. Угол зрения очень подходит))
user811769; CyberCerber; YPermitin; +3 Ответить
6. YPermitin 8286 10.07.19 15:37 Сейчас в теме
7. CyberCerber 482 11.07.19 11:17 Сейчас в теме
Спасибо за статью! А можете подсказать, почему, если сама 1С не рекомендует делать соединения с подзапросами, в SQL для среза делает именно так? Почему не использует врем таб? Волнуется за заполнение озу?
8. Fox-trot 113 11.07.19 13:37 Сейчас в теме
ГДЕ
| ЦеныНоменклатуры.Товар = &Товар
| И ЦеныНоменклатуры.Период
|...";

ечепятка. условие больше или равно относится не к Номенклатуре, а к Периоду
а так же
дополнительно добавится поле "RecorderRFef"

но это уже мелочи ))
YPermitin; +1 Ответить
9. YPermitin 8286 11.07.19 13:41 Сейчас в теме
(8) очепятки преследуют меня :)

Поправлю, +
10. logos 182 05.09.19 11:11 Сейчас в теме
Перечитал пару раз про таблицы итогов. Так и остались сомнения: Вы хотите сказать, что формируется только срез самых первых и самых последних? Итогов по периодам (например по месяцам) как для итогов регистра накопления нет? Если неправильно понял этот момент в статье, заранее прошу прощения.
11. user1194102 22.10.19 13:59 Сейчас в теме
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныНоменклатуры.Товар КАК Товар,
| МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период
|ПОМЕСТИТЬ ПоследниеЗаписи
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
// Устанавливаем отборы по периоду среза
// последних записей и по товару
|ГДЕ
| ЦеныНоменклатуры.Товар = &Товар
| И ЦеныНоменклатуры.Период <= &Период
|...";

вроде бы отбор нужно ставить
| РегистрСведений.ЦеныНоменклатуры (Период,Номенклатура) КАК ЦеныНоменклатуры
12. RocKeR_13 779 28.10.19 17:46 Сейчас в теме
(11) данный запрос относится к разделу
Свой запрос для среза последних


Ваш способ предназначен для виртуальных таблиц СрезПервых/СрезПоследних
13. StudentM 27 07.04.20 10:14 Сейчас в теме
Юрий, очень хорошая статья! Спасибо! Также прошу исправить опечатку "Единственное измерение "СтаутсТовара" на ... "СтатусТовара" как на скриншоте.
Оставьте свое сообщение

См. также

3 онлайн-курса по 1С-программированию: обмен данными, расчетные задачи и бухгалтерские задачи с 12 мая по 8 июля 2020 г. Промо

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

Пакет из 3-х курсов по 1С-программированию. Основная цель - сформировать у слушателей практические навыки, связанные с реализацией задач обмена для прикладных решений, работающих на платформе “1С:Предприятие”, а также с разработкой прикладных решений, предназначенных для автоматизации расчета заработной платы и задач бухгалтерского учета.

15300 руб.

22.04.2020    2954    23    2    

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

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

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

21.01.2020    17742    294    cprit    84    

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

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

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

15.01.2020    15054    0    John_d    22    

Активный 2019 год на Инфостарт

О сообществе О жизни Бесплатно (free)

О прошедшем 2019 годе в 100 и 500 словах.

26.12.2019    4353    0    YPermitin    24    

Онлайн-курс "1С:Специалист-консультант по "1С:Зарплата и управление персоналом" 22-25 июня 2020 года Промо

Решение задач на 1С:Специалист Бухгалтерский учет Зарплата Управление персоналом (HRM) v8 v8::СПР ЗУП3.x БУ УУ Бесплатно (free)

Спрос на специалистов по внедрению "1С:Зарплата и управление персоналом 8" с каждым днем растет. Станьте одним из востребованных специалистов - пройдите обучение по актуальной редакции 1C:ЗУП 3.1.

13200 руб.

14.06.2018    9880    3    5    

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

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

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

01.10.2019    24831    0    Yashazz    44    

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

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

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

06.09.2019    34045    0    rpgshnik    59    

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

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

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

05.09.2019    36249    0    ids79    52    

Подсистема "Инструменты разработчика" v5.34 Промо

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

Интегрированный набор инструментов разработчика: - консоль кода - консоль запросов - консоль построителя отчетов - консоль компоновки данных - консоль заданий - конструктор запроса - справочник алгоритмов - исследователь объектов - интерфейсная панель - настройка журнала регистрации - анализ журнала регистрации - настройка техножурнала - анализ техножурнала - подбор и обработка объектов - редактор объекта БД - редактор констант - редактор параметров сеанса - редактор изменений по плану обмена - редактор пользователей - редактор предопределенных - редактор хранилищ настроек - динамический список - поиск дублей и замена ссылок - контекстная подсказка - синтакс-помощник - поиск битых ссылок - поиск ссылок на объект - структура хранения БД - удаление объектов с контролем ссылок - и прочее

23.09.2007    475020    4340    tormozit    2649    

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

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

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

08.08.2019    54582    0    ids79    36    

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

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

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

25.07.2019    34717    4    AlbinaAAA    25    

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

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

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

04.06.2019    33768    0    YPermitin    51    

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

Администрирование данных 1С Мобильная разработка v8 Бесплатно (free)

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

14.04.2017    57627    0    user700211_a.straltsou    27    

Регистры накопления. Агрегаты в оборотных регистрах

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

Описание механизма агрегатов оборотных регистров накопления для платформы 1С 8.2. Рассмотрение хранения и принципа использования агрегатов платформой на стороне СУБД.

24.05.2019    12768    0    YPermitin    3    

Регистры накопления. Виртуальные таблицы. Часть №2: "Остатки" и "Остатки и обороты"

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

Описание работы платформы 1С:Предприятие 8.2 с виртуальными таблицами регистров накопления "Остатки" и "Остатки и обороты". Анализ SQL-запрос при работе с виртуальными таблицами

22.05.2019    18453    0    YPermitin    7    

Регистры накопления. Виртуальные таблицы. Часть №1: Обороты

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

Описание работы платформы 1С:Предприятие 8.2 с виртуальной таблицей "Обороты" регистров накопления.

20.05.2019    22166    0    YPermitin    7    

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

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

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

15.01.2019    20038    0    itriot11    22    

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

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

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

16.05.2019    34949    0    YPermitin    30    

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

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

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

16.04.2019    17591    0    m-rv    17    

Excel vs 1С: битва с неожиданным исходом

Анализ учета Универсальные обработки Загрузка и выгрузка в Excel Финансовые Управленческие v8 1cv8.cf Россия Бесплатно (free)

Что лучше 1С или Excel? Разберемся, в казалось бы, очевидном, чтобы получить невероятное!

11.04.2019    33535    0    bolefirenko    116    

Обмен данными. Консистентность vs Многопоточность Промо

Интеграция v8 1cv8.cf Бесплатно (free)

Рассмотрим теоретические основы обмена данными. Какие бывают обмены, какие гарантии при этом даются, зачем идти на компромиссы и что при этом может пойти не так. Есть ли идеальная схема?

03.09.2019    10369    0    m-rv    1    

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

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

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

14.11.2018    67003    0    GeterX    104    

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

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

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

10.11.2018    30306    0    ids79    40    

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

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

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

10.12.2016    33962    0    unichkin    45    

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

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

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

18.10.2018    57259    0    stas_ganiev    73    

Из Excel в 1С запросом

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

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

14.08.2018    18629    0    m-rv    5    

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

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

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

25.07.2018    26109    0    grumagargler    26    

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

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

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

15.10.2018    25912    0    tormozit    100    

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

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

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

25.06.2018    25961    0    olegtymko    47    

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

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

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

01.06.2018    27265    0    m-rv    21    

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

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

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

23.05.2018    22788    0    slozhenikin_com    20    

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

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

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

20.09.2012    73451    0    tormozit    129    

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

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

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

13.05.2018    16908    0    Rustig    9    

Универсальный обмен между идентичными конфигурациями через REST интерфейс OData. Часть І: Справочники

Перенос данных из 1C8 в 1C8 v8 Бесплатно (free)

Сейчас все чаще интеграции различных конфигураций проектируются через HTTP-сервисы - они и работают быстрее, и "войти" в режим отладки гораздо проще, тем самым обойдя "черный ящик" универсального обмена через xml, например. Более года назад я начал работать в компании, в которой разработчики работали с конфигурациями 1С в режиме совместимости еще 8.2.16 (менять режим совместимости в типичных базах мы не хотели) - а как Вы наверное знаете, если интересовались HTTP-сервисами в 1С, их использование в режиме совместимости 8.3.4 и ниже недопустимо - и здесь я уже не надеялся на разработку и использование HTTP-сервисов. Но позже меня заинтересовал такой "сервис" как REST интерфейс OData, так как его можно использовать не меняя режим совместимости конфигурации - именно он и стал для меня идеальным вариантом решения "нетривиальных" задач.

11.05.2018    20951    0    V.Stavinsky    11    

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

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

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

19.02.2018    43658    0    ildarovich    45    

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

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

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

11.07.2007    44583    0    tormozit    38    

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

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

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

11.12.2017    30791    0    milkers    23    

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

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

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

05.12.2017    25558    0    itriot11    34    

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

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

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

19.11.2017    175797    0    MaxS    270    

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

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

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

10.09.2017    40303    0    tormozit    72    

Обзор имеющихся библиотек OneScript

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

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

14.11.2017    40373    0    nixel    86    

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

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

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

30.10.2017    25594    0    unichkin    18    

Легкий способ обновления измененной конфигурации

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

Легкий способ обновления измененной конфигурации. Сервис подготовки расширения конфигурации

25.10.2017    21981    0    avk72    63    

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

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

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

25.04.2019    13994    0    m-rv    2    

Работа с Excel

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

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

23.10.2017    38671    0    arakelyan    39    

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

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

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

04.09.2017    49868    0    m-rv    60    

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

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

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

01.09.2017    46902    0    unichkin    15    

Как настроить правильную техподдержку (helpdesk, service desk на коленке) Промо

Управление услугами и сервисом Управление взаимоотношениями с клиентами (СRM) Документооборот и делопроизводство Монитор заказов Учет рабочего времени Управление взаимоотношениями с клиентами (СRM) Документооборот и делопроизводство Монитор заказов Учет рабочего времени v8 УУ Бесплатно (free)

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

24.04.2019    14707    0    siddy    0    

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

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

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

16.06.2017    70086    0    kuzyara    57    

Использование инструментов разработчика для отладки обменов КД 2.0

Перенос данных из 1C8 в 1C8 v8 КД Бесплатно (free)

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

05.05.2017    26203    0    unichkin    3    

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

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

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

16.03.2017    75034    0    perepetulichka    26    

Online телефонный справочник из 1С: Зарплата и управление персоналом

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

В интернете представлено много реализаций online телефонных справочников организаций. Есть справочники, которые использует для хранения информации базу Active Directory (LDAP), есть справочники, которые реализованы с использованием СУБД (например, MySQL). Но я не нашел справочника, который использует информацию из базы 1С. Далее я рассмотрю данную разработку.

10.03.2017    23987    0    ruha    14