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

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

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

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

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

Главный специалист (Программист 1с)
Подольск
зарплата от 100 000 руб. до 110 000 руб.
Полный день

Программист 1С
Подольск
зарплата от 150 000 руб. до 200 000 руб.
Полный день

Аналитик (оперативный учет)
Москва
зарплата от 150 000 руб. до 300 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб.
Полный день