Переодически у пользователей не получается перезаписать документ который они редактируют 1С вылетает с сообщением о дублях ключей. Насколько я понимаю это таблица строк документа. Почему 1С не удаляет строки при перезаписи и заново и вставляет в таблицу. Возможно как-то надо по особенному настроить MS SQL чтобы эта проблема с 7.7. платформой не возникала. Используется https://infostart.ru/public/82018/ и MS SQL 2014. Олды :) Хелп !
Возможно как-то надо по особенному настроить MS SQL чтобы эта проблема с 7.7. платформой не возникала
Возможно. Но шансы, что кто-то точно скажет - как именно надо настроить под сей раритет - невелики,ИМХО.
Поэтому в крайнем случае может оказаться проще не решить, а обойти проблему, адаптировав к ней код 1С:
обнаружилось, что если вначале сделать документ непроведенным, то все дальнейшие изменения и проведения с ним будут совершаться нормально.
<...>
По аналогии - попробуйте удалить все строки документа с выгрузкой в ТЗ, записать документ без строк, завести строки заново.
(2) Вариант может и не плохой но с кучей побочек, как вариант можно вообще весь документ потерять если вдруг что-то случится когда пустой документ уже будет записан копия в ТЗ и 1С упадет, так же при этом будут разблокированы временно остатки по регистрам, что сможет их сделать доступными для проведения другого документа. Кстати с первой проблемой именно с перепроведением я тоже сталкивался и тоже решил именно таким способом сначала распроведением и повторной проводкой иначе тоже возникали такие ошибки но по регистру.
Вы абсолютно правы.
Необходимо смотреть код модуля.
В табличной части при перезаписи появляются дублирующие строки - возможно табличная часть наполняется одними и теми же данными, например:
При записи добавили 10, 20, 30 строки, при перезаписи они остаются в табличной части и снова же добавляются туда.
Для документа в конфигурации может быть определен один из двух вариантов работы с номерами строк табличной части.
Первый вариант предполагает возможность редактирования номеров строк. В таких документах автоматически сформированный номер можно изменить при вводе новой строки и в дальнейшем — в процессе редактирования строки.
(3) Автоматическая нумерация строк установлена, ошибка плавающая если после вылета перезайти и сделать те же самые изменения документ успешно сохранится.
...и костыль. Почему "костыль"? Потому что штатно 1С 7.7 работает только с MS SQL 2000, а всё, что после - самодеятельность, работоспособность которой никем не гарантируется!
Можно, конечно, спросить: "Как нужно раскрасить костыль, чтобы старый одноногий бегун с ним обгонял молодых и здоровых?"... но на серьезный ответ вряд ли стоит рассчитывать.
(9) да я в курсе этого всего но мера на данный момент без альтернативная конфигурация полностью самописная перейти на 8-ку крайне трудозатратно и практически бессмысленно.
(5) Автоматическая нумерация строк установлена, ошибка плавающая если после вылета перезайти и сделать те же самые изменения документ успешно сохранится.
(6) Регламенты хоть ведутся какие в скуле ? Реиндекс\обновление статы.. и т.д ?
Натрави профайлер, посмотри запрос, который вызывает падение..
Ну и в ддс или в самом скуле посмотри, что является примари кей для таблички, сделай выводы, из-за чего он неуникальным становится в момент записи.
Количество строк в доке какое ? lineno 4 знака..
(11) Количество строк не большое обычно не более 100. Примари кей это IDDOC + LINENO. Скорее до запроса INSERT есть еще какие-то которые поидее должны либо очищать весь документ полностью либо отдельные строки которые перезаписываются.
(13) какие вк используются, каков порядок их загрузки ?
turbomd есть ?
Автовввод новой строки есть ?
В коде нет явного установки номера строки ? Через выгрузку-загрузку таб части, например ?
(16)
1.
ЗагрузитьВнешнююКомпоненту("1cpp.dll");
ЗагрузитьВнешнююКомпоненту("1sci.dll");
ЗагрузитьВнешнююКомпоненту("vk_sleep_1C.dll");
vk_sleep=СоздатьОбъект("Addin.vk_sleep_1C");
vk_sleep.УстановитьПаузуПриБлокировке(100, "7.7");
vk_sleep.ИмяФайла=КаталогИБ()+"\trlock.tmp";
ЗагрузитьВнешнююКомпоненту("FormEx.dll");
2. при загруженом 1cpp помоему turbobl не нужен
3. Автоввода строки нет
4. установки строк в коде нет
Наиболее свежий SQL, который поддерживает уровень совместимости SQL Server 2000(80) это SQL Server 2008 R2. Думаю, Вам лучше развернуться на нем, с парой патчей dll.
(18)
1. выкинуть ромиковское поделие к едрени фени. Оно и так -то работало не как нннадо, а с солюшеном, его кто-то переделывал. Но, проще выкинуть и всем пользователям принудительно выставить время ожидания захвата таблиц в 0.
2.Занафига тебе 1sci ? Ты где-то в коде расскраску текста делаешь ?
3. turbomd<>turbobl, значит, не используешь, а зря. Не понимаю, как можно в клюшках что-то кодить без turbomd
4. 1cpp и формекс каких хоть версий ?
(17)солющен нормально работает с MS SQL2019
+19 ромиковская хрень, это vk_sleep_1C.dll, если что.
Время ожидания, можно выставить всем, или проверяя значение флага в cfg каждого пользователя в ПриНачалеРаботыСистемы, и если не какое ннадо - переписывать файл+ повторный заход пользователя, или с помощью вк от trad - там еще проще, просто создать нужный объект при старте системы и установить значение в 0.
вк от trad, эта:
V7AppProfile
(22) при времени в (0) будет сразу отбой при попытке захвата.
1.Если нужно что-то точно провести, то можно в цикл загнать с количеством попыток, например 10.
Но, с временем 0 никто никого не ждёт никогда. Это самый быстрый вариант работы базы.
3.нет, это отдельная вк от Орефкова. Использовать совместно с turbomd.vbs
Порядок использования - в ПриНачалеРАботы системы после загрузки 1cpp грузить turbomd.dll,
в пофигураторе использовать OpenConf, в папке скриптов должен валяться turbomd.vbs ( есть кучка версий разных авторов, желательно иметь тот, который еще и моксель умеет выгружать)
Использование - Ctrl+m в пофигураторе - выбрать скрипт- выгрузить в файл/загрузить из файла.
Все изменения У всех сразу в предприятии.
При желании, раз в неделю, сохранять в мд.
Хотя, у нас годами изменения в файле валялись.