Имя: Пароль:
1C
1C 7.7
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)

Предупреждение("Нет возможности переставить документ!", 60)


Это ответ.
Короче вывод: 1С-ина не поддерживает перемещения документов в пределах секунды.
14 Ёпрст
 
06.12.11
17:10
(6) да + пересчитывает итоги
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн