powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Данные 1С
65 сообщений из 65, показаны все 3 страниц
Данные 1С
    #39627389
Mixon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый!
Задам наверное самый не умный вопрос, но

Подскажите, а можно ли допилить систему 1С до состояния в котором одна
часть данных будет хранить у себя, а другая часть данных во внешнем хранилище(SQL server), при этом
данные из внешнего хранилища в лучшем случае будут иметь минималистический интерфейс данных(код(guid),обозначение(string)),
а в 1С будет использоваться некая прослойка для работы с этими данными.

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

Заранее спасибо!
...
Рейтинг: 0 / 0
Данные 1С
    #39627399
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выбирайте ODBS, ADO, ВнешниеИсточникиДанных...
...
Рейтинг: 0 / 0
Данные 1С
    #39627400
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, конечно же odbc
...
Рейтинг: 0 / 0
Данные 1С
    #39627487
Taekwonder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВнешниеИсточникиДанных - лучше и как раз по теме
...
Рейтинг: 0 / 0
Данные 1С
    #39627574
Хитроглазый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mixon,

внешние источники, а что за механизмы/алгоритмы, если не секрет?
...
Рейтинг: 0 / 0
Данные 1С
    #39675454
nicxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Taekwonder,
Все субъективно. Я бы не сказал, что внешние источники лучше. Пробовали на текущем проекте, отказались в пользу АДО.
...
Рейтинг: 0 / 0
Данные 1С
    #39675459
Taekwonder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nicxxx,
Ну просто внешний источник можно в запросе\СКД использовать как внутреннюю таблицу. А так наверное ADO быстрее будет.
...
Рейтинг: 0 / 0
Данные 1С
    #39675486
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaekwonderНу просто внешний источник можно в запросе\СКД использовать как внутреннюю таблицу.

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

но насколько хороша реализация этих прокладок
...
Рейтинг: 0 / 0
Данные 1С
    #39676709
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритерийОтборану формально любую тз с подходящей типизацией можно затолкать в скд. просто через внеш. источники это будет менее гиморойно

но насколько хороша реализация этих прокладок

У меня были проблемы при загрузке около 40-50 тыс. строк в СКД через ТЗ, были жуткие тормоза порядка 30 сек. (возможно из-за режима совместимости с 8.2), пришлось через ADO делать Update в служебный справочник (с update statistics естественно), а дальше уже из этого справочника делать СКД запрос.

И да ВнешниеИсточники не позволяют массовый insert\update, только построчный. А в режиме совместимости с 8.2 и с чтение есть какие то ограничения в запросах.
...
Рейтинг: 0 / 0
Данные 1С
    #39676849
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhv,

А почему для хранения выбран справочник, а не регистр сведений?
...
Рейтинг: 0 / 0
Данные 1С
    #39676920
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDPvitkhv,

А почему для хранения выбран справочник, а не регистр сведений?

Потому как Элемент справочника есть:
Поле 1: GUID по NEWID() (ссылка), SEQUENCE ID не нужен так как справочник Трункейтиться раз в месяц.
Поле 2: Excel файл (ХранилищеЗначений) тип image(varbinary(max) если без режима совместимости и MSSQL>2008). Тут можно было бы и контрольной сумой файла обойтись. Такой себе аналог FileStream, который мне не разрешили развернуть.

Дальше:
Первая ТЧ есть сам Excel файл, уже загнанный по полям в таблицу 1С. Используется, что бы не читать огромные Excel файлы из файл стрима, по несколько раз, т.е. по сути кэш файла.
Вторая ТЧ уже для запроса СКД перед заливкой в нее используется различные алгоритмы обработки Артикулов из Excel средствами MSSQL и соединения с нашим справочником номенклатура.

Все это сделано ради скорости, на всю эту обработку уходят миллисекунды.
...
Рейтинг: 0 / 0
Данные 1С
    #39676934
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP, да и к тому же независимый РС в режиме совместимости имеет поле PrimaryKey binary(16). Тот же справочник по сути, никакой разницы.
...
Рейтинг: 0 / 0
Данные 1С
    #39678718
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhv,

Элемент справочника с табличной частью соответствует 1 документу?
...
Рейтинг: 0 / 0
Данные 1С
    #39678786
dvim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mixon,
Технически - можно и не так сложно.

С точки зрения "бизнес" задач подобное оправданно для крайне малого числа гетерогенных систем.
В целом мне кажется, что подобные вещи лучше делать через веб-сервисы и сервер приложений. Это - более правильно архитектурно.
...
Рейтинг: 0 / 0
Данные 1С
    #39679006
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с,
Да
...
Рейтинг: 0 / 0
Данные 1С
    #39679426
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с,
Именно для этой разработки я впервые использовал систему трансляции в ADO запросы для того, что бы писать запросы в метаименах 1С. Для этого я использовал SQL+ , который пришлось серьезно переработать. В стандарте SQL+ умеет разбирать только один запрос (т.е. никаких временных таблиц, кореллированных подзапросов, CTE и т.д.) и то криво. Я так понял, что автор SQL+ стремился сделать возможным использование конструктора запросов 1С, для ADO запросов. Не понимаю, почему так все помешаны на конструкторе запросов, доходит до того, что без конструктора даже запросы в текcтовом виде читать не умеют. Я использую конструктор, чтобы накидать вначале таблицы да поля и для форматирования запросов, и то не всегда. В итоге транслятор SQL+ дольше компилировал запрос, чем этот запрос выполнялся. В абсолютных цифрах это не очень долго конечно, но так или иначе пришлось сделать кэш запросов. Если контрольные суммы метазапросов совпадают, уже подготовленный запрос берется из кэша, без обработки SQL+. Подсмотрел я такую систему у SQL сервера, он точно таким же образом кэширует планы запросов и если текст запроса не менялся, SQL сервер дает уже готовый план, там конечно все сложнее, но такая система тоже присутствует. В итоге запрос компилируется из метатекста только однократно, дальше если текст запроса не меняется, время на его компиляцию уже не тратится.
...
Рейтинг: 0 / 0
Данные 1С
    #39679429
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvдоходит до того, что без конструктора даже запросы в текcтовом виде читать не умеют.

увы. это "скд головного мозга"
...
Рейтинг: 0 / 0
Данные 1С
    #39679431
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhv,

Идея интересная. Спасибо.
...
Рейтинг: 0 / 0
Данные 1С
    #39679434
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDPvitkhv,

А почему для хранения выбран справочник, а не регистр сведений?

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

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

"ДанныеПодбораСотрудника" в ЗУП с измерением "ИдентификаторЗаписи" - улыбается и машет
...
Рейтинг: 0 / 0
Данные 1С
    #39679646
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритерийОтбора
вероятно из-за того что один "мудрый" человек в 1с решил, что на строку в регистрах ссылаться негоже. и понеслись костыли "доступно и всерьез"

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

"ДанныеПодбораСотрудника" в ЗУП с измерением "ИдентификаторЗаписи" - улыбается и машет

При чем как я уже говорил, в непериодическом РС существовал уникальный идентификатор записи на уровне таблицы SQL, если 1С в режиме совместимости с 8.2, то существует. Только я там сверху неправильно написал, называется это поле _SimpleKey. В свежих релизах и без режима совместимости это поле по моему отсутствует.

Для периодических РС в ЗиУП сделали такую хрень . Как там написано: т.к. писать правильные запросы программисты 1С все равно не умеют, а сама 1С для ВТ периодического РС не хочет (я думаю не может :)) избавится от подзапроса, 1C нам представила механизм представлений. Это вообще дно, теперь программисты 1С вообще перестанут уметь писать запросы, даже с помощью конструктора.
...
Рейтинг: 0 / 0
Данные 1С
    #39679684
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритерийОтбора
вероятно из-за того что один "мудрый" человек в 1с решил, что на строку в регистрах ссылаться негоже.

"ДанныеПодбораСотрудника" в ЗУП с измерением "ИдентификаторЗаписи" - улыбается и машет

Вы не поверите, первый вариант у меня работал через регистр сведений и было у него поле УИД :-). Этот регистр до сих пор болтается в конфигурации.

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

В принципе данный справочник можно и не трункейтить, держа в нем всю историю файлов и даже кэш файла. Переделка на SEQUENCE ID дело получаса, а ТЧ справочника имеет кластерный индекс _IDRref+_KeyField, поэтому деградации времени на операции вставки не будет и производительность останется на прежнем уровне.
...
Рейтинг: 0 / 0
Данные 1С
    #39679716
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvЭто вообще дно, теперь программисты 1С вообще перестанут уметь писать запросы, даже с помощью конструктора.

из моего опыта работы с "программным интерфейсом" в ЗУП там не все так гладко чтобы "отшибить всё напрочь"

банально не работают "отборы периодических реквизитов". точнее они добавляются к основным данным через left join и соответственно на полученную выборку надо накладывать условие. например чтобы оставить только внутренних совместителей. или наоборот. если не сделать - записи остаются в выборке только имея пустоту вместо значения.
...
Рейтинг: 0 / 0
Данные 1С
    #39679724
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvт.к. писать правильные запросы программисты 1С все равно не умеют

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

из-за "умного" "перекладывания" из пустого в порожнее множество народу получило граблями по спине на пустом месте - тот же "вид занятости" будь он неладен... казалось бы - изменили структуру - измените сразу данные - перенесите на новое место, старое или затрите или хотя бы пометьте через любимое в метаданных "УДАЛИТЬ".

ни-хре-на

мы сделаем новый программный интерфейс, старые данные перенесем в новое место, новая логика будет работать с ними, а старое оставим как есть.

что получает разработчик? у него все работает. как раньше. без изменений. в базе 20 человек работает - в выгрузке 20 человек

граблями он получить когда выяснится, что вновь принятые на работу в выборку не попадают. а если нового человека примут через год? записи в "старом" РС есть, но они полупустые.
...
Рейтинг: 0 / 0
Данные 1С
    #39679729
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про "ДанныеПодбораСотрудника" вообще писать даже неохота

сотрудники исчезают из списков у половины баз с зупом "необъятной родины". з/п начисляется, а в списке сотров нету. из-за того что разъехалось наименование как отдельное поле этого РС с наименованием как реквизитом спр. Сотрудники. А в запросе дин. списка какой-то наркоман написал внутреннее соединение сотры с ДанныеПодбораСотрудника по ссылка = ссылка и ссылка.наименование = ДанныеПодбораСотрудника.наименование


как жить, баб шур?
...
Рейтинг: 0 / 0
Данные 1С
    #39679754
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритерийОтборакакой-то наркоман написал внутреннее соединение сотры с ДанныеПодбораСотрудника по ссылка = ссылка и ссылка.наименование = ДанныеПодбораСотрудника.наименование


Я думаю, соединение по наименованию написали из-за того, что бы попасть в Индекс _ReferenceXXX_ParentDescr. Так что все не так однозначно.

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


Не знаю, не знаю. Вот там, где я решал эту задачу сидит 3 программиста.

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

У третьего весь весь код требует оптимизации, даже самый простой. Оптимизировал простую его обработку, которая колбасила по 16 часов и ее просто обрубали т.к. не могли дождаться конца, до 20 секунд.

У первого и второго запросы в СКД оптимизируются в 5 раз, везде.

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

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

Так третьего программиста по итогу уволили да и то, так как грубил юзерам.

А первых двух не то, что ни уволят никогда, их пытаются удержать всеми правдами и не правдами.
...
Рейтинг: 0 / 0
Данные 1С
    #39679759
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритерийОтбора,
А всем кто занимается разработкой под ЗиУП я не позавидую. Я стараюсь в стандартную ЗП вообще не лезть. Одни, запатентованные 1С, регистры расчетов чего стоят.
...
Рейтинг: 0 / 0
Данные 1С
    #39679760
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvЯ думаю, соединение по наименованию написали из-за того, что бы попасть в Индекс _ReferenceXXX_ParentDescr. Так что все не так однозначно.

я же писал "доработать язык запросов". пусть откроют для себя хинты sql. попадать в индекс ценой становления раком базового бизнес-процесса - подбор сотра - это сильный ход
...
Рейтинг: 0 / 0
Данные 1С
    #39679762
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvОдин умеет читать запросы без конструктора, писать не умеет.

я тоже без нужды - динамическая сборка текста - стараюсь не писать. банально жалко времени на правку текста чтобы он заработал
...
Рейтинг: 0 / 0
Данные 1С
    #39679764
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvОдни, запатентованные 1С, регистры расчетов чего стоят.

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

но кривоногая реализация перечеркивает все на корню
...
Рейтинг: 0 / 0
Данные 1С
    #39679769
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритерийОтбора
я тоже без нужды - динамическая сборка текста - стараюсь не писать. банально жалко времени на правку текста чтобы он заработал

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


КритерийОтбора vitkhvЯ думаю, соединение по наименованию написали из-за того, что бы попасть в Индекс _ReferenceXXX_ParentDescr. попадать в индекс ценой становления раком базового бизнес-процесса - подбор сотра - это сильный ход
Тогда я чего то не понял. Ведь если соединение по ссылке, с обеих сторон, то и наименование должно быть одинаковым с обеих сторон, в любом случае. Или там ссылка это не ссылка вовсе, а реквизит, а просто так поле в ВТ назвали?
...
Рейтинг: 0 / 0
Данные 1С
    #39679786
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvто и наименование должно быть одинаковым с обеих сторон, в любом случае.

с чего бы

читайте условие связи внимательней: ссылка.наименование = ДанныеПодбораСотрудника.наименование


они конечно "должны быть" одинаковы. как задумывалось, но не обязаны. формально они могут разъехаться ввиду наложенной блокировки либо на спр сотров либо на РС с данными подбора + кривой код без упаковывания изменения этих реквизитов в единую транзакцию. или например из-за обмена в бухгалтерии наименование сотрудника поменяли, измененный элемент приехал в зуп, а "данным подбора" про это ничего не известно.
...
Рейтинг: 0 / 0
Данные 1С
    #39679802
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритерийОтбора,
Я понял, просто там было еще такое условие, как вы написали авторвнутреннее соединение сотры с ДанныеПодбораСотрудника по ссылка = ссылка
Я подумал, что справочник соединяться сам с собой через ВТ. А тут РС со справочником соединяется. Но так или иначе, хотели в индекс попасть, а попали на, по их мнению, не возможную ситуацию.
...
Рейтинг: 0 / 0
Данные 1С
    #39680943
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvТЧ справочника имеет кластерный индекс _IDRref+_KeyField, поэтому деградации времени на операции вставки не будет и производительность останется на прежнем уровне

Я что-то я не знаю про кластеризованные таблицы и/или UUID?
...
Рейтинг: 0 / 0
Данные 1С
    #39680958
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритерийОтбораvitkhvЯ думаю, соединение по наименованию написали из-за того, что бы попасть в Индекс _ReferenceXXX_ParentDescr. Так что все не так однозначно.

я же писал "доработать язык запросов". пусть откроют для себя хинты sql. попадать в индекс ценой становления раком базового бизнес-процесса - подбор сотра - это сильный ход

Или всё же попытка отделить полных тёзок от сменивших ФИО?
...
Рейтинг: 0 / 0
Данные 1С
    #39680959
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDPКритерийОтборапропущено...


я же писал "доработать язык запросов". пусть откроют для себя хинты sql. попадать в индекс ценой становления раком базового бизнес-процесса - подбор сотра - это сильный ход

Или всё же попытка отделить полных тёзок от сменивших ФИО?

прекрасная попытка
...
Рейтинг: 0 / 0
Данные 1С
    #39681007
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhv,

А не проще нанять одного спеца на 2х оклад? Вопрос риторический.
...
Рейтинг: 0 / 0
Данные 1С
    #39681247
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1сvitkhv,

А не проще нанять одного спеца на 2х оклад? Вопрос риторический.

одного за двойную плату? а зачем?
...
Рейтинг: 0 / 0
Данные 1С
    #39681424
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDPvitkhvТЧ справочника имеет кластерный индекс _IDRref+_KeyField, поэтому деградации времени на операции вставки не будет и производительность останется на прежнем уровне

Я что-то я не знаю про кластеризованные таблицы и/или UUID?


Запустите вот это:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
drop table if exists TestTable 

-- NEWID

create table TestTable (
   id uniqueidentifier default newid() not null primary key clustered,
   sequence int not null,
   data char(250) not null default '');
go


-- Insert 50,000 rows.
declare @count int;
set @count = 0;
while @count < 50000 begin
   insert TestTable (sequence)
   values (@count);

   set @count = @count + 1;
end;
go


-- Get the number of read / writes for this session...
select reads, writes
from sys.dm_exec_sessions
where session_id = @@spid;

-- Get the page fragmentation and density at the leaf level.
select index_type_desc, index_depth, page_count, avg_page_space_used_in_percent, avg_fragmentation_in_percent, record_count
from sys.dm_db_index_physical_stats(db_id(), object_id('TestTable'), null, null, 'detailed')
where index_level = 0;
go



потом это:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
drop table if exists TestTable 
go

-- NEWSEQUENTIALID

create table TestTable (
   id uniqueidentifier default newsequentialid() not null primary key clustered,
   sequence int not null,
   data char(250) not null default '');
go 


-- Insert 50,000 rows.
declare @count int;
set @count = 0;
while @count < 50000 begin
   insert TestTable (sequence)
   values (@count);

   set @count = @count + 1;
end;
go


-- Get the number of read / writes for this session...
select reads, writes
from sys.dm_exec_sessions
where session_id = @@spid;

-- Get the page fragmentation and density at the leaf level.
select index_type_desc, index_depth, page_count, avg_page_space_used_in_percent, avg_fragmentation_in_percent, record_count
from sys.dm_db_index_physical_stats(db_id(), object_id('TestTable'), null, null, 'detailed')
where index_level = 0;
go



результат:

without sequence/sequencereadswritesnewid()882649newsequentialid()0253

without sequence/sequenceindex_type_descindex_depthpage_countavg_page_space_used_in_percentavg_fragmentation_in_percentrecord_countnewid()CLUSTERED INDEX3250668,750197677291899,12210694333650000newsequentialid()CLUSTERED INDEX3172599,88827526562890,69565217391304350000

Именно поэтому 1С использует комбинацию кластерный индекс+последовательный GUID, и чем больше таблица тем больше будет деградация на операциях вставки в случае непоследовательного GUID.
...
Рейтинг: 0 / 0
Данные 1С
    #39681428
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvпоэтому 1С использует комбинацию кластерный индекс+последовательный GUID, и чем больше таблица тем больше будет деградация на операциях вставки в случае непоследовательного GUID.

ну так с последовательны гуидом вставка будет "в конец", а произвольная требует перебалансировки дерева кластерного индекса
...
Рейтинг: 0 / 0
Данные 1С
    #39681437
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритерийОтбораvitkhvпоэтому 1С использует комбинацию кластерный индекс+последовательный GUID, и чем больше таблица тем больше будет деградация на операциях вставки в случае непоследовательного GUID.

ну так с последовательны гуидом вставка будет "в конец", а произвольная требует перебалансировки дерева кластерного индекса

Это вам понятно, но для всех не очевидно.

Особенно наглядно будет если продолжать дальше запихивать в таблицу значения вот этим скриптом (только не забывать каждый раз открывать новую сессию в SSMS, потому как where session_id = @@spid):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
-- Insert 50,000 rows.
declare @count int;
set @count = 0;
while @count < 50000 begin
   insert TestTable (sequence)
   values (@count);

   set @count = @count + 1;
end;
go


-- Get the number of read / writes for this session...
select reads, writes
from sys.dm_exec_sessions
where session_id = @@spid;

-- Get the page fragmentation and density at the leaf level.
select index_type_desc, index_depth, page_count, avg_page_space_used_in_percent, avg_fragmentation_in_percent, record_count
from sys.dm_db_index_physical_stats(db_id(), object_id('TestTable'), null, null, 'detailed')
where index_level = 0;
go
...
Рейтинг: 0 / 0
Данные 1С
    #39681440
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1сvitkhv,

А не проще нанять одного спеца на 2х оклад? Вопрос риторический.

Тут вам сразу же раскажут про безопасность. Безопасней иметь двух но по 100, чем 1 но по 200. Даже если эти двое будут генерировать бред, который потом придется исправлять тому который за 200.
...
Рейтинг: 0 / 0
Данные 1С
    #39681445
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
задач на "200" в обычной конторе банально нет

а отдел из одного человека не продуктивен. завтра он уволится, заболеет серьезно, его задергают юзеры и т.п. - работа просядет, а если это конец "сложного" квартала или года?
...
Рейтинг: 0 / 0
Данные 1С
    #39681447
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритерийОтбора,
С проблемой последовательных ID я впервые столкнулся при обменах на уровне MSSQL сервера. Это хорошо когда объект мигрирует один к одному, а когда нужно создать новую запись с генерацией GUID в 1С таблицу t-sql скриптом, тогда и начинается веселье. Нарывался я на проблему с деградацией производительности когда по простоте душевной генерировал GUID через NEWID(). При чем не я один столкнулся с этой проблемой.
...
Рейтинг: 0 / 0
Данные 1С
    #39681456
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритерийОтборазадач на "200" в обычной конторе банально нет

а отдел из одного человека не продуктивен. завтра он уволится, заболеет серьезно, его задергают юзеры и т.п. - работа просядет, а если это конец "сложного" квартала или года?

Ну да именно так и думает бизнесмен. Потом прогеры за 100 так "нарешают" проблем, что в итоге каждый квартал будет сложным. И уже без них ни куда. И стоят они уже по 150. А возьмешь нового, пока он въедет в то, что тут городили годами, что проще новую систему внедрить становится. А внедрять дорого и стресс для бизнеса и эти двое внедрять не умеют, так все и тянется годами.
...
Рейтинг: 0 / 0
Данные 1С
    #39681476
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvКритерийОтборазадач на "200" в обычной конторе банально нет

а отдел из одного человека не продуктивен. завтра он уволится, заболеет серьезно, его задергают юзеры и т.п. - работа просядет, а если это конец "сложного" квартала или года?

Ну да именно так и думает бизнесмен. Потом прогеры за 100 так "нарешают" проблем, что в итоге каждый квартал будет сложным. И уже без них ни куда. И стоят они уже по 150. А возьмешь нового, пока он въедет в то, что тут городили годами, что проще новую систему внедрить становится. А внедрять дорого и стресс для бизнеса и эти двое внедрять не умеют, так все и тянется годами.

с учетом постоянных изменений как внешних так и внутренних "наем гения за 200" в среднесрочной/долгосрочной перспективе ничего не решает. вылизать все чтобы все было "супер" сейчас и через 3 года без него невозможно - часть проблем вносится самим вендром, часть юзерами. "Два по 100" как-то закрывают потребности - ну и прекрасно, все равно это не единственная ж.па в организации, чтобы бросаться тушить ее любыми средствами
...
Рейтинг: 0 / 0
Данные 1С
    #39681498
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритерийОтбора
с учетом постоянных изменений как внешних так и внутренних "наем гения за 200" в среднесрочной/долгосрочной перспективе ничего не решает. вылизать все чтобы все было "супер" сейчас и через 3 года без него невозможно - часть проблем вносится самим вендром, часть юзерами. "Два по 100" как-то закрывают потребности - ну и прекрасно, все равно это не единственная ж.па в организации, чтобы бросаться тушить ее любыми средствами

Дело не в гениальности, а в том, что на определенном этапе уже необходим другой уровень компетенции. Стратегия же подбора персонала все та же, возьмем двух за 150, а не одного за 200. Так проблемы и нарастают. А пытаются решить их, простым способом, увеличением количества программистов.
...
Рейтинг: 0 / 0
Данные 1С
    #39681517
КритерийОтбора
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvКритерийОтборас учетом постоянных изменений как внешних так и внутренних "наем гения за 200" в среднесрочной/долгосрочной перспективе ничего не решает. вылизать все чтобы все было "супер" сейчас и через 3 года без него невозможно - часть проблем вносится самим вендром, часть юзерами. "Два по 100" как-то закрывают потребности - ну и прекрасно, все равно это не единственная ж.па в организации, чтобы бросаться тушить ее любыми средствами

Дело не в гениальности, а в том, что на определенном этапе уже необходим другой уровень компетенции. Стратегия же подбора персонала все та же, возьмем двух за 150, а не одного за 200. Так проблемы и нарастают. А пытаются решить их, простым способом, увеличением количества программистов.

так просто никто не откажется от того что "работало раньше"

опять же насколько объективна оценка наступление "определенного этапа"?

может все дело в административно-управленческом бардаке?

т.е. покупая "по 200" - контора просто распыляет ресурсы
...
Рейтинг: 0 / 0
Данные 1С
    #39681957
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvПоле 1: GUID по NEWID() (ссылка), SEQUENCE ID не нужен так как справочник Трункейтиться раз в месяц.

vitkhvТЧ справочника имеет кластерный индекс _IDRref+_KeyField, поэтому деградации времени на операции вставки не будет и производительность останется на прежнем уровне.

Что подтверждено примером, которы противоречит озвученной ранее идеи.

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

Вот по этому и были заданы вопросы про регистр сведений и GUID.

Или есть ещё какая-то хитрость в применённом решении?
...
Рейтинг: 0 / 0
Данные 1С
    #39681962
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что подтверждено примером, которы противоречит озвученной ранее идеи.

Пример и пост ниже про NewID(), противоречит двум первым цитатам.
...
Рейтинг: 0 / 0
Данные 1С
    #39681989
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP,
Вы выдергиваете из контекста мои цитаты.

У меня решения на NEWID() основано т.к. трункейтится справочник. Можно переделать его на seq ID, и не трункейтить. Кластерный индекс стандартный для ТЧ справочника.
В чем противоречие?
...
Рейтинг: 0 / 0
Данные 1С
    #39682095
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не выдёргиваю, а пытаюсь акцентировать внимание на своём вопросе. И, с учётом весьма высокого уровня ваших ответов, не могу понять Ваш выбор и приведённое Вами его обоснование.

Truncate table + NewID() - Даст 100% попадание в кластерный индекс для вставки первого элемента и уже только 50% для второго, с проилюстрированными вами последствиями.

ИМХО, с учётом озвученных ограничений, напрашивается либо запись элемента справочника средствами 1С и работа с его табличными частями через ADO с его UUID, либо пихать в UUID счётчик, либо sql функцией генерить UUID больший максимального в таблице.
...
Рейтинг: 0 / 0
Данные 1С
    #39682154
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP
Truncate table + NewID() - Даст 100% попадание в кластерный индекс для вставки первого элемента и уже только 50% для второго, с проилюстрированными вами последствиями.


Не все так плохо, т.к. вставка в ТЧ идет пачками по 10000~40000 элементов, в пачке _IDRRef одинаковы ( _IDRRef это суть идентификатор файла), а индекс последовательный т.к. _IDRRef + _KeyField, поэтому потери невелики. С периодическим трункейтом вообще неощутимы. Но конечно что выбирать, зависит от количества уникальных файлов и периодичности трункейта.

AHDPне могу понять Ваш выбор и приведённое Вами его обоснование.


Мой выбор в тот момент зависел от моих знаний о том как формируется GUID в 1С и как в MSSQL и больше ни от чего. А переделывать смысла нет так как смотрим пункт 1.



AHDPИМХО, с учётом озвученных ограничений, напрашивается либо запись элемента справочника средствами 1С и работа с его табличными частями через ADO с его UUID, либо пихать в UUID счётчик, либо sql функцией генерить UUID больший максимального в таблице.

Нет тут никаких ограничений, ничего не надо генерить средствами 1С. newsequentialid() решает все проблемы. А если ожидается INSERT еще и средствами 1С, тогда к newsequentialid() добавляется детерминированная функция преобразования GUID к стандарту 1С. Именно так у меня работают все последующие решения.
...
Рейтинг: 0 / 0
Данные 1С
    #39682172
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP,
AHDPлибо пихать в UUID счётчик

И даже в UUID не надо ничего пихать, прекрасные счетчики есть в MSSQL - CREATE SEQUENCE.

А если параноидально не доверяете создание GUID MSSQL, в данном решении можно создавать элементы просто как:

Код: sql
1.
2.
3.
4.
5.
СпрПрайЛисты = Справочники.ПрайсЛисты;
НовыйПрайсЛист = СпрПрайЛисты.СоздатьЭлемент();
НовыйПрайсЛист.Записать();
UUID = НовыйПрайсЛист.Ссылка.УникальныйИдентификатор();
ГУИДSQL = ПреобразоватьUUIDвГУИДSQL(UUID);



Ну и дальше ГУИДSQL уже пихаете в ТЧ справочника средствами TSQL.
Получите красивый последовательный ГУИД, ничем не отличающийся от newsequentialid().
...
Рейтинг: 0 / 0
Данные 1С
    #39682207
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP,

О том, что же такое ГУИД в 1С (и не только), есть великолепная статья . В которой по полочкам разложено, что такое ГУИД. Появись она на пару лет раньше, съэкономила бы мне кучу времени и нервов. Пусть не вовремя, но читал в захлеб.
...
Рейтинг: 0 / 0
Данные 1С
    #39682526
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP,


Ну вот и тесты подоспели:

1) В справочник _Reference29065 записываем 10 элементов. ID сформированные newsequentialid().
На каждый из этих 10 элементов, в ТЧ справочника _Reference29065_VT29100 вставляем по 40000 элементов. Итого 400 тыс.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
USE [UPP_11_04_2018]
GO

Truncate table _Reference29065

DROP TABLE IF EXISTS #Temp

CREATE TABLE #Temp(
	[_IDRRef] uniqueidentifier default newsequentialid() not null primary key clustered,
	[_Marked] [binary](1) NOT NULL,
	[_PredefinedID] [binary](16) NOT NULL,
	[_Description] [nvarchar](10) NOT NULL,
	[_Fld29066] [varbinary](max) NOT NULL
) 
GO


SET NOCOUNT ON
DECLARE @prevCount int;

SELECT @prevCount =   (SELECT MAX(CAST(_Description AS int)) FROM _Reference29065) 

declare @count int;
set @count = 0;
while @count < 10 begin
   
   IF @prevCount IS NULL
   BEGIN
   insert #Temp ([_Marked],[_PredefinedID],[_Description],[_Fld29066])
    values (0,0,@count,0x01010800000000000000EFBBBF7B2255227D);
	END
   ELSE
   insert #Temp ([_Marked],[_PredefinedID],[_Description],[_Fld29066])
	values (0,0,@count+@prevCount+1,0x01010800000000000000EFBBBF7B2255227D);

   set @count = @count + 1;
end;
go

DROP TABLE IF EXISTS #Temp_VT

CREATE TABLE #Temp_VT(
	
	[_KeyField] int identity(1,1) not null primary key clustered,--[binary](16) NOT NULL,
	sequence int not null
) 
GO

SET NOCOUNT ON
declare @count int;
set @count = 0;
while @count < 40000 begin
   insert #Temp_VT (sequence)
   values (@count);

   set @count = @count + 1;
end;
go 
 
INSERT INTO _Reference29065 (

	[_IDRRef] ,
	[_Marked],
	[_PredefinedID],
	[_Description] ,
	[_Fld29066] 

)

SELECT
      
	dbo.GUIDto1C(_IDRRef),
	[_Marked],
	[_PredefinedID],
	[_Description] ,
	[_Fld29066] 
	
FROM #Temp 

  
Truncate table _Reference29065_VT29100
go 

DECLARE @IDRRef binary(16)
DECLARE cur CURSOR FOR 
SELECT _IDRRef FROM _Reference29065 ORDER BY _IDRRef;
OPEN cur

FETCH NEXT FROM cur INTO @IDRRef

WHILE @@FETCH_STATUS = 0
BEGIN 
  
	INSERT INTO [dbo].[_Reference29065_VT29100]
           ([_Reference29065_IDRRef]
           ,[_KeyField]
           ,[_LineNo29101]
           ,[_Fld29102]
           ,[_Fld29103RRef]
           ,[_Fld29104])
     SELECT 
           @IDRRef
           ,_KeyField--<_KeyField, binary(4),>
           ,0--<_LineNo29101, numeric(5,0),>
           ,''--<_Fld29102, nvarchar(25),>
           ,0--<_Fld29103RRef, binary(16),>
           ,0--<_Fld29104, numeric(15,2),>)
	FROM #Temp_VT
		
    FETCH NEXT FROM cur INTO @IDRRef
END
CLOSE cur
DEALLOCATE cur



Результат запроса SELECT * FROM _Reference29065:

_IDRRef_Version_Marked_PredefinedID_Description_Fld290660x9C026045CBA873F911E89633400B3B470x00000000003DCD2F0x000x0000000000000000000000000000000000x01010800000000000000EFBBBF7B2255227D0x9C026045CBA873F911E89633400B3B480x00000000003DCD300x000x0000000000000000000000000000000010x01010800000000000000EFBBBF7B2255227D0x9C026045CBA873F911E89633400B3B490x00000000003DCD310x000x0000000000000000000000000000000020x01010800000000000000EFBBBF7B2255227D0x9C026045CBA873F911E89633400B3B4A0x00000000003DCD320x000x0000000000000000000000000000000030x01010800000000000000EFBBBF7B2255227D0x9C026045CBA873F911E89633400B3B4B0x00000000003DCD330x000x0000000000000000000000000000000040x01010800000000000000EFBBBF7B2255227D0x9C026045CBA873F911E89633400B3B4C0x00000000003DCD340x000x0000000000000000000000000000000050x01010800000000000000EFBBBF7B2255227D0x9C026045CBA873F911E89633400B3B4D0x00000000003DCD350x000x0000000000000000000000000000000060x01010800000000000000EFBBBF7B2255227D0x9C026045CBA873F911E89633400B3B4E0x00000000003DCD360x000x0000000000000000000000000000000070x01010800000000000000EFBBBF7B2255227D0x9C026045CBA873F911E89633400B3B4F0x00000000003DCD370x000x0000000000000000000000000000000080x01010800000000000000EFBBBF7B2255227D0x9C026045CBA873F911E89633400B3B500x00000000003DCD380x000x0000000000000000000000000000000090x01010800000000000000EFBBBF7B2255227D

Как видите ID последовательные.


2) В справочник _Reference29065 записываем 10 элементов. ID сформированные newid().
На каждый из этих 10 элементов, в ТЧ справочника _Reference29065_VT29100 вставляем по 40000 элементов. Итого 400 тыс.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
USE [UPP_11_04_2018]
GO

Truncate table _Reference29065

SET NOCOUNT ON

declare @count int;
set @count = 0;
while @count < 10 begin
   
	INSERT INTO _Reference29065 (

	[_IDRRef] ,
	[_Marked],
	[_PredefinedID],
	[_Description] ,
	[_Fld29066] 

	)
	SELECT 
	newid(),0,0,@count,0x01010800000000000000EFBBBF7B2255227D
	
   set @count = @count + 1;
end;
go


DROP TABLE IF EXISTS #Temp_VT

CREATE TABLE #Temp_VT(
	
	[_KeyField] int identity(1,1) not null primary key clustered,
	sequence int not null
) 
GO

SET NOCOUNT ON
declare @count int;
set @count = 0;
while @count < 40000 begin
   insert #Temp_VT (sequence)
   values (@count);

   set @count = @count + 1;
end;
go 

Truncate table _Reference29065_VT29100
go

DECLARE @IDRRef binary(16)
DECLARE cur CURSOR FOR 
SELECT _IDRRef FROM _Reference29065 ORDER BY _IDRRef;
OPEN cur
FETCH NEXT FROM cur INTO @IDRRef
WHILE @@FETCH_STATUS = 0
BEGIN 
  
	INSERT INTO [dbo].[_Reference29065_VT29100]
           ([_Reference29065_IDRRef]
           ,[_KeyField]
           ,[_LineNo29101]
           ,[_Fld29102]
           ,[_Fld29103RRef]
           ,[_Fld29104])
     SELECT 
           @IDRRef
           ,_KeyField--<_KeyField, binary(4),>
           ,0--<_LineNo29101, numeric(5,0),>
           ,''--<_Fld29102, nvarchar(25),>
           ,0--<_Fld29103RRef, binary(16),>
           ,0--<_Fld29104, numeric(15,2),>)
	FROM #Temp_VT
		
    FETCH NEXT FROM cur INTO @IDRRef
END
CLOSE cur
DEALLOCATE cur




Результат запроса SELECT * FROM _Reference29065:

_IDRRef_Version_Marked_PredefinedID_Description_Fld290660x1A1E4731A4BA444FBC4C88038496B6E60x00000000003DCD3B0x000x0000000000000000000000000000000030x01010800000000000000EFBBBF7B2255227D0x367F9D5EB173704DAAA4E2066B92D68D0x00000000003DCD420x000x0000000000000000000000000000000000x01010800000000000000EFBBBF7B2255227D0x5CA4F9301B5C3F4886328D658794FE0C0x00000000003DCD3D0x000x0000000000000000000000000000000040x01010800000000000000EFBBBF7B2255227D0x7D28E101246DA44FB930B6F217FB255E0x00000000003DCD400x000x0000000000000000000000000000000080x01010800000000000000EFBBBF7B2255227D0x891E713CB5F4D5429EACACF895AFCE8F0x00000000003DCD3F0x000x0000000000000000000000000000000010x01010800000000000000EFBBBF7B2255227D0xB24C78A0684566488FA1D54C51E216A10x00000000003DCD410x000x0000000000000000000000000000000070x01010800000000000000EFBBBF7B2255227D0xBEBACF1A68C19048AC7F17444C9868B50x00000000003DCD390x000x0000000000000000000000000000000050x01010800000000000000EFBBBF7B2255227D0xE4BBAC5D9E6AD74F93468A197E3DA2AD0x00000000003DCD3C0x000x0000000000000000000000000000000060x01010800000000000000EFBBBF7B2255227D0xEB64819CF63FAE4880D5936890D23ECF0x00000000003DCD3E0x000x0000000000000000000000000000000020x01010800000000000000EFBBBF7B2255227D0xFB00EE9A9F60314D88523BD863311DE40x00000000003DCD3A0x000x0000000000000000000000000000000090x01010800000000000000EFBBBF7B2255227D

ID не последовательны.


Средне времязамерялось для этой части алгоритма:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Truncate table _Reference29065_VT29100
go

DECLARE @IDRRef binary(16)
DECLARE cur CURSOR FOR 
SELECT _IDRRef FROM _Reference29065 ORDER BY _IDRRef;
OPEN cur

FETCH NEXT FROM cur INTO @IDRRef

WHILE @@FETCH_STATUS = 0
BEGIN 
  
	INSERT INTO [dbo].[_Reference29065_VT29100]
           ([_Reference29065_IDRRef]
           ,[_KeyField]
           ,[_LineNo29101]
           ,[_Fld29102]
           ,[_Fld29103RRef]
           ,[_Fld29104])
     SELECT 
           @IDRRef
           ,_KeyField--<_KeyField, binary(4),>
           ,0--<_LineNo29101, numeric(5,0),>
           ,''--<_Fld29102, nvarchar(25),>
           ,0--<_Fld29103RRef, binary(16),>
           ,0--<_Fld29104, numeric(15,2),>)
	FROM #Temp_VT
		
    FETCH NEXT FROM cur INTO @IDRRef
END
CLOSE cur
DEALLOCATE cur



В три прогона.

Для newsequenceID():

Total execution time265025682612

Для NewID():

Total execution time253524962538
:)


Как видите с точки зрения времени разницы нет.


А теперь самое интересное. Статистика для кластерного индекса, в обоих случаях:
index_type_descindex_depthpage_countavg_page_space_used_in_percentavg_fragmentation_in_percentrecord_countCLUSTERED INDEX3363799,16722263404990,274951883420401400000


В общем решение на NewID(), в данном случае имеет полное право на жизнь.
...
Рейтинг: 0 / 0
Данные 1С
    #39683565
Фотография Владимир Лазурко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритерийОтбораПрограммист 1сvitkhv,

А не проще нанять одного спеца на 2х оклад? Вопрос риторический.

одного за двойную плату? а зачем?Одного с КПД высшим тех двоих, но на их зарплату.
В результате экономия на затратах (чтобы не держать двоих некомпетентных и третьего их падавана неумного) и все задачи будут выполнены грамотно и "эта ваша 1с" не будет тормозить.
...
Рейтинг: 0 / 0
Данные 1С
    #39684873
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhv,

Я так и не понял, в справочнике предполагается 1 (максимум 3) элемента или вставка в табличную часть выполняется после записи элементов справочника в соответствии с их упорядочением по UUID?
...
Рейтинг: 0 / 0
Данные 1С
    #39684942
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDPvitkhv,

Я так и не понял, в справочнике предполагается 1 (максимум 3) элемента или вставка в табличную часть выполняется после записи элементов справочника в соответствии с их упорядочением по UUID?


vitkhvПотому как Элемент справочника есть:
Поле 1: GUID по NEWID() (ссылка), SEQUENCE ID не нужен так как справочник Трункейтиться раз в месяц.
Поле 2: Excel файл (ХранилищеЗначений) тип image(varbinary(max) если без режима совместимости и MSSQL>2008). Тут можно было бы и контрольной сумой файла обойтись. Такой себе аналог FileStream, который мне не разрешили развернуть.

Дальше:
Первая ТЧ есть сам Excel файл, уже загнанный по полям в таблицу 1С. Используется, что бы не читать огромные Excel файлы из файл стрима, по несколько раз, т.е. по сути кэш файла.
Вторая ТЧ уже для запроса СКД перед заливкой в нее используется различные алгоритмы обработки Артикулов из Excel средствами MSSQL и соединения с нашим справочником номенклатура.

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

В тесте у нас справочник (10 файлов) + первая ТЧ (по 40 тыс. строк на каждый файл) которая есть кэш Excel файла.
...
Рейтинг: 0 / 0
Данные 1С
    #39684949
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP,
вон там даже в _Reference29065 поле [_Fld29066] [varbinary](max) (тип будет image в режиме совместимости с 8.2) это хранилище значений в котором храниться файл.

В TSQL можно их даже сравнить в запросе.

Ну типа так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
INSERT INTO @P1(img)
SELECT BulkColumn 
FROM Openrowset( Bulk '"+ИмяФайла+"', Single_Blob) AS img

SELECT dbo.sp_getid(СпрПоставщиков.Ссылка) AS Ссылка
FROM @P1 AS TT
INNER JOIN dbo.Справочник.ПрайсыПоставщиков AS СпрПоставщиков
ON  CAST(СпрПоставщиков.Файл AS varbinary(max)) = TT.img 
...
Рейтинг: 0 / 0
Данные 1С
    #39684983
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот подход не проясняет запись в первую ТЧ, а для переноса записей из 1 ТЧ во 2 ТЧ избыточен.
...
Рейтинг: 0 / 0
Данные 1С
    #39684994
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDPЭтот подход не проясняет запись в первую ТЧ, а для переноса записей из 1 ТЧ во 2 ТЧ избыточен. нет не избыточен, потому как артикулы из файла, не равны артикулам в базе 1С. А в 1С нельзя применить даже простейшую REPLACE ,я уж молчу про clr.
...
Рейтинг: 0 / 0
Данные 1С
    #39685034
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP,

Ну согласитесь уже, что данная архитектура почти идеальна с точки зрения пользовательского юзабилити. Единственная ресурсоемкая операция это чтение файла. Как только файл попал в кэш, дальнейшие операции с ним не превышают 2 сек. Ну например такая убрать из всех артикулов и в 1с и в файле все буквы и сравнить только цифры 1сек. Или убрать из артикулов в файле все знаки минус и сравнить с артикулами в базе 1сек. Или по шаблону преобразовать артикулы в файле и сравнить с артикулами в БД - 1,5 сек. И пофигу пользователю сколько раз он решил поработать с файлом, только сегодня или ещё и завтра, все летает.
...
Рейтинг: 0 / 0
Данные 1С
    #39685037
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP,

А ну да в это время ещё и сравнение цен происходит с запросом к регистру сведений, срез последних, естественно без всяких виртуальных таблиц.
...
Рейтинг: 0 / 0
Данные 1С
    #39685061
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какое отношение артикулы имеют к кластерной индексу табличной части!?

Напомню, т.к. два ваших последних топика не имеют никакого отношения к моему вопросу, меня интересовало чем был обусловлен выбор справочника по сравнению с регистром сведений. С точки зрения разработки и поддержки - Вас понимаю. Со стороны sql server и дальнейшего вашего обоснования - нет.
...
Рейтинг: 0 / 0
Данные 1С
    #39685128
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDPКакое отношение артикулы имеют к кластерной индексу табличной части!?

Это разве не вы писали?
AHDPЭтот подход не проясняет запись в первую ТЧ, а для переноса записей из 1 ТЧ во 2 ТЧ избыточен.
Я так понял, что вторая ТЧ избыточна. И соответственно обосновываю как вторую, так и первую ТЧ справочника.

AHDPНапомню, т.к. два ваших последних топика не имеют никакого отношения к моему вопросу, меня интересовало чем был обусловлен выбор справочника по сравнению с регистром сведений. С точки зрения разработки и поддержки - Вас понимаю. Со стороны sql server и дальнейшего вашего обоснования - нет.

Напомню вам, что в обоснование своих слов я предоставил вам алгоритмы, архитектуру, тесты и ссылки. Может я от вас увижу критику на таком же уровне, а не пространные рассуждения про сторону SQL сервера?
...
Рейтинг: 0 / 0
65 сообщений из 65, показаны все 3 страниц
Форумы / [игнор отключен] [закрыт для гостей] / Данные 1С
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]