T-SQL + 1С: нумерация записей табличных частей и наборов регистров по порядку

0. 750 04.06.16 01:40 Сейчас в теме
Обработка данных больших баз 1С часто выполняется средствами SQL. Это может быть свёртка или какая-то другая задача. После выполнения команды DELETE может нарушиться последовательность нумерации записей табличной части или набора регистра. Это может привести к неприятным последствиям, если её не восстановить. В данной публикации приводится достаточно простое решение этой проблемы.

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Danil.Potapov 452 10.01.17 11:13 Сейчас в теме
А что говорит служба поддержки 1с?
2. zhichkin 750 10.01.17 11:17 Сейчас в теме
(1) Вы про пресловутое лицензионное соглашение для 1С:Предприятие 8 ?
Ну, как всегда, автор не рекомендует повторять это дома, так как все трюки выполнены профессионалами =)
3. Danil.Potapov 452 10.01.17 11:19 Сейчас в теме
(2) да не, мне на это все равно. Служба поддержки 1с подтвердила такую ошибку в платформе?
4. zhichkin 750 10.01.17 11:23 Сейчас в теме
(3) Это не ошибка платформы. Я встречался с такими нетиповыми конфигурациями, где допускается иметь движения документа с разными значениями периода ... Вот как бывает =) Кроме этого, статья имеет практический смысл при работе с табличными частями средствами SQL Server. Я об этом упоминаю в конце статьи.
5. Danil.Potapov 452 10.01.17 11:27 Сейчас в теме
(4) подожди, в статье идет речь про то, что платформа допускает запись в регистр накопления записи пронумерованные не по порядку и если их перечитать и записать, то добавляет еще одну запись. Пока нашел в списке ошибок платформы 8.3 только ошибку нумерации набора записей регистра бухгалтерии (https://bugboard.v8.1c.ru/error/000023566.html). На каком релизе платформы была эта ошибка?
6. zhichkin 750 10.01.17 11:33 Сейчас в теме
(5) Ах, Вы об этом ... Ну, да, есть такая шляпа. Просто если не шаманить на SQL, то подобную штуку не воспроизвести. По этому я в службу поддержки 1С не обращался. Релиз платформы на тот момент времени (июль 2016 года) я использовал последний. Думаю это было что-то типа 8.3.5. Да и суть статьи опять же была не в этом. Ошибку я обнаружил, можно сказать, по ходу дела, тестируя результаты свёртки.
7. Danil.Potapov 452 10.01.17 11:35 Сейчас в теме
(6) понял, не надо так пугать, думал что уже платформа разучилась нормально нумеровать записи.
8. METAL 119 02.03.18 14:45 Сейчас в теме
Не совсем по теме, но всё же позволю себе поинтересоваться, может знаете:
_RecorderTRef - какое значение какому типу документа соответствует, можно ли узнать как-то программно в 1С либо запросом к какой-то таблице в SQL?
Спасибо!
9. zhichkin 750 02.03.18 15:59 Сейчас в теме
(8) Программно средствами языка 1С это можно узнать следующим образом:
Отбор = Новый Массив();
Отбор.Добавить(Метаданные.Справочники.Номенклатура);
ТаблицаМетаданных = ПолучитьСтруктуруХраненияБазыДанных(Отбор, Истина);
Инфо = ТаблицаМетаданных.Найти("Основная", "Назначение");
ИмяТаблицыSQL = Инфо.ИмяТаблицыХранения;

Переменная ИмяТаблицыSQL будет содержать что-то вида _Reference41. Число в конце наименования таблицы, в данном случае это 41, будет именно тем, что Вам нужно - кодом типа 1С, которое сохраняется в полях вида _[ИмяПоляТаблицы]TRef.
10. zhichkin 750 02.03.18 16:03 Сейчас в теме
(8) Имейте в виду, что если восстановить базу из dt-файла, то все коды типов 1С при загрузке генерирует заново!
11. zhichkin 750 02.03.18 16:10 Сейчас в теме
(8) На всякий случай: 41 не равно 0х41 =) Используйте в SQL коде преобразование int в binary(4).
CAST(41 AS binary(4))
13. zhichkin 750 25.12.18 18:01 Сейчас в теме
(12) Спасибо! Было дело копался в этом. Тоже хотел написать SQL CLR хранимку, но в итоге не хватило времени и желания копаться в формате 1С. Теперь может быть вернусь к этой теме =)
14. МихаилМ 26.12.18 15:38 Сейчас в теме
(13) dbnames быстрее парсить через xml
Оставьте свое сообщение
Вопросы с вознаграждением