Имя: Пароль:
1C
1C 7.7
v7: Создаётся документ другого (неправильного) типа
0 youalex
 
22.02.16
02:15
риветствую  уважаемое сообщество, прикольно что я сюда вернулся, как и собирался. В общем - нужна помощь. Как технического плана, так и морально-социального. Здравая критика также принимается и даже приветствуется.

Преамбула. Волею судеб - я программист 1С ,работающий на стороне, условно говоря,  интегратора. То есть, наша обработка, сваянная нашими силами,  работает на стороне клиентов - в их информационных системах, в том числе, заливая Заказы, которые наколотили торговые на своих КПК.

Амбула. Акт второй.  Технический.  В наш хелпдеск поступает заявка на тему "заказ не пришел в систему". Я прошу развернуть копию базы, ее разворачивают - анализирую. Тут отступление - эта проблема поступала и ранее, тогда я сделал отдельный лог загрузки заказов, куда пишется, в т.ч. ЗначениеВСтрокуВнутр() - текущего документа.  По этому логу -я получаю внутр. представление, копирую его в собственную обработку уид77 (тм) - и получаю "Реализация №..." При том, что документы загружались исключительно как Заявки. т.е..  условно:  док = СоздатьОбъект(Виддокумента);... заполнение... Док.Записать(). ВидДокумента = "ЗаявкаПокупателя" - однозначно.

Ладно, думаю  я , реализация так реализация. Открываю через обработку документ - не открывается, ругается что нет реквизита... не суть, нахожу данную реализацию через номер - действительно Реализация есть, добрые оперы ее уже пометили на удаление, по комментарию (это общий реквизит, и туда пишется внешний номер заказа) - понимаю что это оно самое. Этот документ - пустой, т.е реквизиты не заполнены, ТЧ пустая. Лезу обратно, сначала в dd, потом в dbf - нахожу данные (dh и dt данного документа). Находясь в легкой степени диссонанса, проверяю - копия ли? Копия. Тупо меняю ручками в 1SJOURN.dbf вид документа на Заявку. Не выходя из 1С - тупо обновляю журнал - и вуаля - имею заполненный и внешне корректный документ ЗаявкаПокупателя - правда помеченный понятно, и с номером реализации, тоже понятно.
То есть по факту - имеем дикую багу базы/платформы (лично я вижу такое впервые, а я повидал)))

Акт третий. Противостояние (не про Кротова, но рядом. )
Тут же, в заявке на хелп-деске, ничтоже сумняшеся, излагаю суть проблемной ситуации, вкратце. Предлагаю пути обхода данной проблемы (через строковое представление, запись документа в транзации (тут не уверен) - просто варианты, потому что ситуация мягко говоря непонятная и точно нештатная). Прошу помочь в разрешении ит-специалиста.
Получаю в итоге - совершенно дикие и нелепые обвинения, банальную агрессию. Риторику  в ключе, буквально: "я пятнадцать лет работаю на этой базе", "я руководитель отдела разработки", "молодой человек", короче я золотой колпак, а вы дерьмо, вы создали проблему, вы ее решайте.  В ответ на мой довод , что типа невозможно такую ситуацию создать внутри программного кода 1С - получаю совершенно дурацкий отлуп (ну тут понятно) - типа откуда я знаю, может вы напрямую пишете в dbf (буквально)

Акт четвертый (не акт, просто чтобы прояснить). Изначально, не планировал кого-то сделать крайним, перевести стрелу и вообще что-либо подобное. Напротив - расковырял проблему (может не стоило?) - вывел ее на свет, и наивно предполагал, что мне помогут ее решить (обойти на крайний случай). В итоге получил лютый неадекват.  Имхо, опять же, если бы мне (в мою бытность) - такую мину кто нибудь вскрыл - я был бы этому рад. Хотя бы потому, что уже знаю что мина есть,  и знаю чего ожидать.

Собственно вопросы: Технический - у кого-то была подобная ситуация? Причины, решение?
Социальный - интересует просто мнение относительно.
1 FN
 
22.02.16
02:58
Технически - могу посоветовать только обернуть все в транзакцию (весь код от создания объекта до записи/проведения).
Ловил похожие глюки при высоконагруженной базе и использовании "вложенного проведения" - когда из модуля проведения проводится другой документ.
Связано с не совсем корректной работой механизма , выдающего новые ИД для объектов. Сбоит при откате "вложенной" транзакции (вроде так).
2 Alexor
 
22.02.16
12:40
Сталкивался с таким глюком.
База ДБФ.
Пользователь записал документ, продолжает дальше работать.
Но остальные пользователи ничего не могут записать, получают сообщение о транзакции.

Если посмотреть, журнал регистрации, то получается, что документ "прыгнул" в другой документ, другого вида.

Способа решения проблемы пока не нашел.
База с большим кол-вом пользователей. Возможно из-за этого.
3 Alexor
 
22.02.16
12:44
(0) У тебя технически можно решить проблему, после записи, получать строковое представление объекта.
Проверять его вид и номер.

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

Веди лог транзакций своей обработки расширенный.
В случае проблемы сигнализацию.
4 Alexor
 
22.02.16
12:54
(1) >>>Технически - могу посоветовать только обернуть все в транзакцию (весь код от создания объекта до записи/проведения).

Проблему это возможно решит, но боюсь тут заказчик может взвыть за получение транзакций.
5 Джинн
 
22.02.16
12:59
Вы используете ЗначениеВСтрокуВнутр() при обменах?!
6 Mikeware
 
22.02.16
13:02
(0) "Тебе бы не картины, начальник, - тебе бы книжки писать"©
А вообще, в транзакцию в данном случае достаточно обернуть создание нового (пустого) дока заданного вида, и его запись. А после уже спокойно заполнть, записывать и проводить.
7 Mikeware
 
22.02.16
13:03
(2) "большое количество" = это сколько?
8 Alexor
 
22.02.16
13:10
(7) 180
9 Mikeware
 
22.02.16
13:11
(8) терминал?
10 Mikeware
 
22.02.16
13:18
+(9) я сталкивался с подобным на файловой, но не помню причину. Вроде натолкнуло на ответ что-то с итланда.. но хоть убей, не помню...
11 Alexor
 
22.02.16
14:15
(9) Да
12 Alexor
 
22.02.16
14:15
+11 Файловая.
13 Mikeware
 
22.02.16
14:17
(11) все равно, я так и не вспомнил...
14 Alexor
 
22.02.16
15:55
(13) если, вдруг, вспомнишь, напиши пожалуйста сюда или в почту.
15 youalex
 
22.02.16
21:19
(3) Док.Вид() = "ЗаявкаПокупателя", Строка(Док) = "Реализация...". Такие чудеса) Т.е. по строковому представлению - да, теоретически -  можно проверять.

(6) Интересная мысль, спасибо.  Думал о записи в транзакции, типа откатывать транзакцию в случае неверного типа. Но оставался  вопрос сможет ли транзакция корректно откатиться (база dbf). В случае же записи пустого документа - времени на запись будет нужно меньше (хотя бы из-за пустой ТЧ) - и шансов, что новый док "застолбит" свой id с правильным видом - больше. Думаю, стоит предложить этот вариант)
16 youalex
 
22.02.16
21:22
(5) в данном случае - только в целях логирования. А в целом - да, используется для сопоставлений (надежнее чем номер/дата или код для справочников)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс