|
v7: Позиция документа | ☑ | ||
---|---|---|---|---|
0
PZh
06.12.11
✎
16:25
|
Как 1С-ина определяет что идет раньше, если документы находятся на одной секунде?
В DATE_TIME_IDDOC участок отвечающий за время - одинаков. Я так понял, что они заложили до 10 000 документов в секунду, но забыли реализовать? |
|||
1
antoneus
06.12.11
✎
16:31
|
по iddoc
|
|||
2
NS
06.12.11
✎
16:31
|
DATE_TIME_IDDOC
Составное поле обозначающее позицию документа во времени + ID документа. 8 первых символов - дата документа в виде «ГГГММДД». 6 следующих символов время документа в 36-ричной системе исчисления, причем время рассчитывается от начала дня в сотых частях милисекунды (10-5), т.е. время 00:00:01 будет равно 10000, или же в 36-ричной системе «7PS». 9 последних символа - ID документа. Этот ID также составной, 6 символов - порядковый номер введенного документа в сситему в 36-ричной системе (причем считаются не только сохраненные документы, а также те, которые не были сохранены), последние 3 символа - идентификатор базы УРИБ (если данные вводятся в распределенной ИБ). Тип - Строка(23) |
|||
3
PZh
06.12.11
✎
16:38
|
(2) Спасибо Кэп!
(1) А как же поменять документы местами? Переписывать все ссылки во всех таблицах? |
|||
4
filh
06.12.11
✎
16:41
|
(3) штатными средствами
|
|||
5
NS
06.12.11
✎
16:42
|
(3) Пожалуйста, обращайтесь еще!
|
|||
6
PZh
06.12.11
✎
16:46
|
(4) Что за штатные средства?
Вы хотите таки сказать, что одинесина переписывает все ссылки во всех таблицах в этом случае???? Мне в это как-то с трудом верится. Что пробовать что ли? |
|||
7
filh
06.12.11
✎
16:47
|
(6) непонятно, что вообще надо и для чего1
|
|||
8
Эльниньо
06.12.11
✎
16:51
|
(7) Видимо местами поменять доки в одной секунде
|
|||
9
filh
06.12.11
✎
16:52
|
(8) это понятно, но для чего?
|
|||
10
filh
06.12.11
✎
16:54
|
(6) воттебе штатные:
//****************************************************************************** // ПоКнопкеВремя() // // Параметры: // Нет // // Возвращаемое значение: // Нет // // Вызывается из формул элементов диалога // Пок кнопке "Время". // // Описание: // Отрабатывает нажатие кнопки "Время". // Служит для изменения времени документа в пределах дня. // Процедура ПоКнопкеВремя() ТекДок=ТекущийДокумент; Если ТекДок.Выбран()=0 Тогда Возврат; КонецЕсли; Если ТекДок.ДатаДок <= Константа.ДатаЗапретаРедактирования Тогда Предупреждение("Нельзя изменять документы с датой, более ранней чем дата запрета редактирования документов!",60); Возврат; КонецЕсли; Меню=СоздатьОбъект("СписокЗначений"); Меню.ДобавитьЗначение("Назад", "Переместить назад"); Меню.ДобавитьЗначение("Вперед", "Переместить вперед"); Меню.ДобавитьЗначение("ВНачало","Переместить в начало дня"); Меню.ДобавитьЗначение("ВКонец", "Переместить в конец дня"); Вариант=""; Если Меню.ВыбратьЗначение(Вариант,,,,1)=0 Тогда Возврат; КонецЕсли; Док=СоздатьОбъект("Документ"); Попытка; НачатьТранзакцию(); Если Вариант="Назад" Тогда Док.ОбратныйПорядок(1); Док.ВыбратьДокументы(ТекДок.ДатаДок,СформироватьПозициюДокумента(ТекДок.ПолучитьПозицию(),-1)); Если Док.ПолучитьДокумент()=0 Тогда ОтменитьТранзакцию(); Возврат; КонецЕсли; Время2=ПолучитьВремяДокументаЧислом(Док); Если Док.ПолучитьДокумент()=1 Тогда Время1=ПолучитьВремяДокументаЧислом(Док); Иначе Время1=0; КонецЕсли; Время=Время2-60; Если Время<=Время1 Тогда Время=Окр((Время2+Время1)/2); КонецЕсли; Если (Время<=Время1) или (Время>=Время2) Тогда Предупреждение("Нет возможности переставить документ!", 60); ОтменитьТранзакцию(); Возврат; КонецЕсли; ИначеЕсли Вариант="Вперед" Тогда Док.ОбратныйПорядок(0); Док.ВыбратьДокументы(СформироватьПозициюДокумента(ТекДок.ПолучитьПозицию(),1),ТекДок.ДатаДок); Если Док.ПолучитьДокумент()=0 Тогда ОтменитьТранзакцию(); Возврат; КонецЕсли; Время1=ПолучитьВремяДокументаЧислом(Док); Если Док.ПолучитьДокумент()=1 Тогда Время2=ПолучитьВремяДокументаЧислом(Док); Иначе Время2=3600*23+60*59+59+1; КонецЕсли; Время=Время1+60; Если Время>=Время2 Тогда Время=Окр((Время2+Время1)/2); КонецЕсли; Если (Время<=Время1) или (Время>=Время2) Тогда Предупреждение("Нет возможности переставить документ!", 60); ОтменитьТранзакцию(); Возврат; КонецЕсли; ИначеЕсли Вариант="ВНачало" Тогда Док.ОбратныйПорядок(0); Док.ВыбратьДокументы(ТекДок.ДатаДок,СформироватьПозициюДокумента(ТекДок.ПолучитьПозицию(),-1)); Если Док.ПолучитьДокумент()=0 Тогда ОтменитьТранзакцию(); Возврат; КонецЕсли; Время2=ПолучитьВремяДокументаЧислом(Док); Время1=0; Время=Время2-60; Если Время<=Время1 Тогда Время=Окр((Время2+Время1)/2); КонецЕсли; Если (Время<=Время1) или (Время>=Время2) Тогда Предупреждение("Нет возможности переставить документ!", 60); ОтменитьТранзакцию(); Возврат; КонецЕсли; ИначеЕсли Вариант="ВКонец" Тогда Док.ОбратныйПорядок(1); Док.ВыбратьДокументы(СформироватьПозициюДокумента(ТекДок.ПолучитьПозицию(),1),ТекДок.ДатаДок); Если Док.ПолучитьДокумент()=0 Тогда ОтменитьТранзакцию(); Возврат; КонецЕсли; Время1=ПолучитьВремяДокументаЧислом(Док); Время2=3600*23+60*59+59+1; Время=Время1+60; Если Время>=Время2 Тогда Время=Окр((Время2+Время1)/2); КонецЕсли; Если (Время<=Время1) или (Время>=Время2) Тогда Предупреждение("Нет возможности переставить документ!", 60); ОтменитьТранзакцию(); Возврат; КонецЕсли; КонецЕсли; Провести=0; Док.НайтиДокумент(ТекДок); Если Док.Проведен()=1 Тогда Док.СделатьНеПроведенным(); Провести=1; КонецЕсли; УстановитьВремяДокументаЧислом(Док,Время); Док.Записать(); Если Провести=1 Тогда Док.Провести(); КонецЕсли; ЗафиксироватьТранзакцию(); Исключение Сообщить(ОписаниеОшибки(),"!"); КонецПопытки; КонецПроцедуры // ПоКнопкеВремя() |
|||
11
filh
06.12.11
✎
16:55
|
+10 еще вот это надо:
//****************************************************************************** // ПолучитьВремяДокументаЧислом(Док) // // Параметры: // Док - документ, чьё время надо получить // // Возвращаемое значение: // Нет // // Описание: // Преобразует время документа в число. // Функция ПолучитьВремяДокументаЧислом(Док) Перем Ч,М,С; Док.ПолучитьВремя(Ч,М,С); Возврат 3600*Ч+60*М+С; КонецФункции // ПолучитьВремяДокументаЧислом() //****************************************************************************** // УстановитьВремяДокументаЧислом(Док, Сек) // // Параметры: // Док - документ, чьё время надо установить // Сек - число, новое время документа в секундах (с начала дня) // // Возвращаемое значение: // Нет // // Описание: // Устанавливает новое время документа. // Процедура УстановитьВремяДокументаЧислом(Док, Сек) Перем Ч,М,С; Ч=Цел(Сек/3600); Сек=Сек-Ч*3600; М=Цел(Сек/60); С=Сек-М*60; Док.УстановитьВремя(Ч,М,С); КонецПроцедуры // УстановитьВремяДокументаЧислом() |
|||
12
filh
06.12.11
✎
16:56
|
А вообще, см. типовую ТиС, в общем журнале найдешь.
|
|||
13
PZh
06.12.11
✎
16:58
|
(10)
Это ответ. Короче вывод: 1С-ина не поддерживает перемещения документов в пределах секунды. |
|||
14
Ёпрст
06.12.11
✎
17:10
|
(6) да + пересчитывает итоги
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |