строки с ОДИНАКОВЫМИ номерами

1. pisarevEV 8 02.12.13 12:46 Сейчас в теме
приветствую! случайно обнаружил в базе неск.документов, в ТЧ которых строки с ОДИНАКОВЫМ номером... например идет нумерация: 1,2,3,4,5....52,52,....55,55, т.е. встречаются ПАРЫ (троек не находил), когда разные по содержанию строки идут с одним номером. На базе стоит МОД, в остальном достаточно стандартная ТиС. Может кто сталкивался?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
12. piloturs 9 08.12.13 03:21 Сейчас в теме
(1) случайно, в модуле формы проблемных видов документов, не происходит ли временный расчет регистров?
15. pisarevEV 8 09.12.13 19:40 Сейчас в теме
(12) piloturs, происходит, а какая здесь связь?
16. piloturs 9 15.12.13 22:50 Сейчас в теме
(15) у меня просто такая же петрушка. Я сам запихнул временный расчет регистров в форму, для красивого вывода остатков ТМЦ. И после этого начал наступать на описанные Вами грабли. Только Вы скорее всего не заметили, что кроме задвоения нумерации, есть еще глюк с сортировкой строк.

Насчет переиндексации БД - это устранение следствий, а не причины.
Чтобы устранить причину, нужно исправить (или удалить нафиг) код временного расчета регистров.
если выложите кусок кода из модуля формы, где происходит временный расчет регистров, я Вам объясню конкретно на примере, почему так происходит.
2. vcv 89 02.12.13 13:24 Сейчас в теме
Лучше от этого избавляться. В ТиС механизм формирования проводок и некоторые отчеты завязаны на номер строки документа. Если номер не уникален, возможно некорректное формирование проводок и ошибки в, например, "Отчете по продажам".
Про причины появления ничего сказать не могу. Возможно виноват МОД, но с ним не сталкивался.
Для начала посмотри, стоит ли в конфигурации на проблемных документах галочка "Автоматическая нумерация строк".
3. pisarevEV 8 02.12.13 13:33 Сейчас в теме
да, стоит конечно... МОД вряд ли виноват... я ним много работаю на других базах, там все норм
4. varelchik 02.12.13 14:14 Сейчас в теме
5. pisarevEV 8 02.12.13 14:30 Сейчас в теме
(4) varelchik, гипотеза, или проверенный факт?
6. varelchik 02.12.13 15:00 Сейчас в теме
7. varelchik 02.12.13 15:00 Сейчас в теме
(5)+ такое могеть быть в dbf.
8. pisarevEV 8 02.12.13 15:28 Сейчас в теме
9. saveliev 23 02.12.13 15:54 Сейчас в теме
Удали все индексные файлы. Это должно помочь. Да и 1с-ка пошустрее заработает.
10. Sayrus 07.12.13 10:06 Сейчас в теме
varelchik прав все из за индексов
1)снести файлы индексов
2)запустить тестирование и исправление
3)в дбф еще есть глюк на переполнение таб. части лимит строк на 9999, лечиться только разбитием на несколько документов
11. asved.ru 36 07.12.13 12:50 Сейчас в теме
А в DBF файлах что?

Собственно номер строки не является ее идентификатором на уровне СУБД.
13. Lik2707 09.12.13 10:40 Сейчас в теме
Соглашусь. Если база dbf, первым делом желательно попробовать следующее - удалить все индексные файлы, после этого зайти в базу монопольно. Индексы восстановятся, и после этого проверить нумерацию строк. При битых индексах ещё и не такие чудеса бывают :)
14. varelchik 09.12.13 11:21 Сейчас в теме
(13).Во-во.
Было дело где-то в начале этого века переводили с dbf в sql так тама такого было с индексами шо прямо жуть.
17. pisarevEV 8 16.12.13 14:06 Сейчас в теме
да код вобщемто стандартный...:

ОбщРег = СоздатьОбъект("Регистры");
РегОтданные = ОбщРег.ПартииОтданные;
// установим фильтры на измерения
РегОтданные.УстановитьЗначениеФильтра("Фирма", Фирма, 1);
РегОтданные.УстановитьЗначениеФильтра("Договор", Договор, 1);

// если нужно, то выполним временный расчет регистра
Если Выбран() = 0 Тогда
// Новый документ
Если ДатаДок < ПолучитьДатуТА() Тогда
// выписываемый задним числом
РегОтданные.ВременныйРасчет();
ОбщРег.РассчитатьРегистрыПо(ДатаДок);
КонецЕсли;
Иначе
// Сохраненный документ.
Если СравнитьТА() < 1 Тогда
//Позиция не больше ТА.
РегОтданные.ВременныйРасчет();
ОбщРег.РассчитатьРегистрыНа(ТекущийДокумент());
КонецЕсли;
КонецЕсли;

ни дальше работаю с итогоми регистра...
18. piloturs 9 16.12.13 18:27 Сейчас в теме
(17) осмелюсь предположить, что Ваш документ относится к оперативному учету, и двигает регистры.
В модуле формы дока, есть модульные переменные "ОбщРег", "РегОтданные"
У меня пресчет регистров схож с Вашим (только я апеллирую к регистру ОстаткиТМЦ). У меня пресчет регистров оформлен отдельной процедурой и запускается в предопределенной процедуре ПриОткрытии(), а также в процедуре ПриИзмененииДаты(). Смею предположить, что у Вас, что-то подобное.

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

Т.е. открыта форма нового документа -> ПриОткрытии() -> ПересчетРегистров()
Добавляем штук 50 номенклатурных позиций и просто записываем документ.
Дальше, предположим, мы получаем задание выписать еще один такой же "быстрый" документ, на 1-2 строки. Мы не закрывая форму предыдущего записанного документа, создаем новый док, набиваем эти 2 номенклатурные позиции, проводим, распечатываем и закрываем второй док.
Что мы имеем - наш первый записанный док оказывается отодвинут за ТА.
Мы, не задумываясь над этим, переключаемся на первый док и продолжаем с ним работать дальше. Н-р добавляем еще несколько номенклатурных позиций, сортируем (обязательно!!!), проводим, внимательно просматриваем табличную часть ища глюки описанные Вами в (1), удостоверившись, что глюков нет, со спокойной совестью распечатываем и закрываем документ. Отдаем бумажные накладные на склад, и с чувством хорошо проделанной работы наслаждаемся кофе.
Но через несколько секунд/минут/часов, наш кайф обрывает возмущенный кладовщик, обзывая нас всякими нехорошими словами. В его накладной-простыне на > 50 наименований, последние отсортированы, так, как будто Вы специально корпели над тем, чтобы усложнить его и без того тяжелую (его имхо) жизнь.
Вы в недоумении берете бумажную накладную. Глядя на отсортированные абы-как данные, Вы вспоминаете, что четко проверили форму документа перед распечаткой и все было отсортировано нормально.
Момент истины: Вы открываете этот электронный документ и наблюдаете в ТЧ туже картину, что и в бумажной накладной. Помимо сбившейся сортировки, идет задвоение нумерации строк.

Резюме: тяжело сказать, почему это происходит (нужно наверно копаться в кишках одноэсины). Но если мы проводим ЗАПИСАННЫЙ документ (записанный до ТА и датированный рабочим днем) - срабатывает:
Если ( Проведен() = 0 ) Тогда
ПроводитьПослеТА(1,1);
КонецЕсли;
И именно в этот момент (при перемещении документа по шкале ТА) происходит все Выше описанное.
При этом ВАЖНО: изменения уже зафиксированы в БД, но форма не обновилась и нам визуально глюк не виден.

зы: уфф, запарился писать
19. Ёпрст 1063 16.12.13 18:33 Сейчас в теме
(18) Слишком много текста.
Не понял, какое отношение печатная форма имеет к ТЧ дока, при чем тут ТА вообще и обновление формы в частности.
23. piloturs 9 16.12.13 18:47 Сейчас в теме
(19) Ёпрст, ты видал в живую описанное топикстартером?
если не видал, то какое отношение твои посты имеют к этой теме?
25. Ёпрст 1063 16.12.13 18:50 Сейчас в теме
28. pisarevEV 8 17.12.13 11:57 Сейчас в теме
прошу прощения что отвлекся от собственного вопроса.
считаю ситуацию, описанную в (17) как минимум "странной",
в целом считаю что коллега в (20) 100% прав, я бы и вопрос не стал задавать если бы не одно НО: работаю с десятками в принципе однотипных баз ДВФ, на которых постоянно ломаются индексы в процессе текущей работы, но описанный в (1) глюк встречается только в одной, причем только в одном виде документов и уже не первый раз. Причем в этой "проблемной" базе, частота поломки индексов как раз самая низкая...
Собственно думал, что есть еще какой-то нюанс...
30. piloturs 9 17.12.13 21:26 Сейчас в теме
(28) pisarevEV, Вы пробовали воспроизвести глюк, следуя шагам в (18), или просто посчитали "ситуацию, описанную в (17) как минимум "странной""?
32. piloturs 9 17.12.13 22:41 Сейчас в теме
(28)
глюк встречается только в одной, причем только в одном виде документов и уже не первый раз


если конфигурации этих баз идентичны, то просто пользователи других баз не обращают внимания на этот глюк.
Только кладовщики, у которых накладная на сотни позиций, и в которой печенюшки абы-как перемешаны с мороженой рыбой и колбасой могут быть недовольны. А если в накладной десяток позиций, то можно и забить. Тем более, что глюк моделируется не так часто: у нас, когда был еще в доке, приведенный в (31) код, где-то 1 раз на 200 доков. Это те случаи, на которые обращали внимание.
33. piloturs 9 17.12.13 22:46 Сейчас в теме
(28) pisarevEV, я у себя просто удалил вышеприведенный код, и с тех пор этого глюка нет
если, же Вам расчет регистров важен, то попробуйте делать перерасчет регистров в процедуре ПриПовторномОткрытии()
34. pisarevEV 8 18.12.13 07:17 Сейчас в теме
(33) piloturs, по-правде говоря, просто не могу поверить в такую ситуацию, но безусловно на досуге проверю!
20. Ёпрст 1063 16.12.13 18:35 Сейчас в теме
И какое всё это отношение имеет к проблеме автора ?!
У которого тупо из-за битых индексов слетела нумерация в строках документа. Которая, как бэ ни на что не влияет.. вообще.
Ну разве что, тИи может не пройти или, в некоторых конфах есть привязка к нумеру строки документа в проводках.
(для ТиС это не актуально)
29. pisarevEV 8 17.12.13 11:59 Сейчас в теме
(20) Ёпрст, на самом деле есть некоторые проблемы из-за этого, но здесь не про них
21. Ёпрст 1063 16.12.13 18:44 Сейчас в теме
Ну и ясен пень, на демо-конфе не воспроизводится "эффект".
22. Ёпрст 1063 16.12.13 18:45 Сейчас в теме
ЗЫ: на типовой демке торговли.

Как сделаете воспроизводимый "эффект" на демке-торговли - welcome!
27. Ёпрст 1063 16.12.13 18:52 Сейчас в теме
Расчет итогов еще приплёл..
В общем, жду от вас решения из (22).
31. piloturs 9 17.12.13 21:54 Сейчас в теме
(22)
Торговля+Склад, ред. 9.39. Документ - Реализация.
Текстовые реквизиты на форме смотреть на скриншоте.
Код модуля формы документа:

Перем мОстаткиТоваров, мОбщийРег; // для получения остатков
//******************************************************************************
Процедура ПересчетРегистров()
мОбщийРег = СоздатьОбъект("Регистры");
мОстаткиТоваров = мОбщийРег.ОстаткиТМЦ;
Если Выбран() = 0 Тогда
// Новый документ
Если ДатаДок < ПолучитьДатуТА() Тогда
// выписываемый задним числом
мОстаткиТоваров.ВременныйРасчет();
мОбщийРег.РассчитатьРегистрыПо(ДатаДок);
КонецЕсли;
ИначеЕсли ДатаДок < ТекущийДокумент().ДатаДок Тогда
// Поменяли дату документа.
Если ДатаДок < ПолучитьДатуТА() Тогда
// выписываемый задним числом
мОстаткиТоваров.ВременныйРасчет();
мОбщийРег.РассчитатьРегистрыПо(ДатаДок);
КонецЕсли;
ИначеЕсли СравнитьТА() < 1 Тогда
//Позиция не больше ТА.
мОстаткиТоваров.ВременныйРасчет();
мОбщийРег.РассчитатьРегистрыНа(ТекущийДокумент());
КонецЕсли;

КонецПроцедуры // ПересчетРегистров()

//******************************************************************************
Функция ОстатокПоСкладу(пОстТоваров)
_Результат = "";
Если ПустоеЗначение(Номенклатура) = 1 Тогда
Возврат _Результат;
КонецЕсли;
_ОстатокТовараСкл = пОстТоваров.СводныйОстаток(Фирма, Номенклатура, Склад, , "Количество");
Если Коэффициент <> 1 Тогда // пересчитаем остаток в единицы документа
_ОстатокТовараСкл = ?(Коэффициент = 0, 0, _ОстатокТовараСкл / Коэффициент);
КонецЕсли;
Если _ОстатокТовараСкл < 0 Тогда
Форма.ТекстОстНаСкладе.Цвет(255);
Иначе
Форма.ТекстОстНаСкладе.Цвет(0,0,128);
КонецЕсли;
_Результат = СокрЛП(Формат(_ОстатокТовараСкл,"Ч-17.3")) + " " + Единица;
Возврат _Результат;

КонецФункции // ОстатокПоСкладу()

//******************************************************************************
Функция ОстатокПоФирме(пОстТоваров)
_Результат="";
Если ПустоеЗначение(Номенклатура) = 1 Тогда
Возврат _Результат;
КонецЕсли;
_ОстатокТовараФир = пОстТоваров.СводныйОстаток(Фирма, Номенклатура, , , "Количество");
Если Коэффициент <> 1 Тогда // пересчитаем остаток в единицы документа
_ОстатокТовараФир = ?(Коэффициент = 0, 0, _ОстатокТовараФир / Коэффициент);
КонецЕсли;
Если _ОстатокТовараФир < 0 Тогда
Форма.ТекстОстНаФирме.Цвет(255);
Иначе
Форма.ТекстОстНаФирме.Цвет(0,0,128);
КонецЕсли;
_Результат = СокрЛП(Формат(_ОстатокТовараФир,"Ч-17.3")) + " " + Единица;
Возврат _Результат;

КонецФункции // ОстатокПоФирме()

//******************************************************************************
Процедура ПриОткрытии()

........

ПересчетРегистров();

КонецПроцедуры // ПриОткрытии()
Прикрепленные файлы:
35. Ёпрст 1063 18.12.13 09:22 Сейчас в теме
37. Ёпрст 1063 18.12.13 09:35 Сейчас в теме
24. piloturs 9 16.12.13 18:49 Сейчас в теме
и вообще, мне не нравится твой высокомерный тон.
будь проще, и люди потянутся к тебе
26. piloturs 9 16.12.13 18:51 Сейчас в теме
надеюсь, что короткие сообщения доходят до тебя лучше. чем длинные
36. Ёпрст 1063 18.12.13 09:35 Сейчас в теме
Я не поленился, сделал как у тебя. Результат очевиден - ничего не происходит, никаких "глюков".
pisarevEV; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот