Имя: Пароль:
1C
1C 7.7
v7: Генерация GUID
0 san4ez1008
 
12.05.17
02:44
Всем доброго времени суток. Сбербанк дал примеры для разработки Спасибо от Сбербанка, у них функция реализована на JavaScript. Не могу понять, как в 1С ее переписать.
function s4(){
  return Math.floor((1 + Math.random()) * 0x10000)
             .toString(16)
             .substring(1);
};

function guid(){ // функция для получения guid
  return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
         s4() + '-' + s4() + s4() + s4();
}

хрен с ним с рандомом,
Ранд=_GetPerformanceCounter()%(100+1);
floor,toString и substring это что?
1 Sserj
 
12.05.17
03:44
V7PLUS.DLL

Инфо = СоздатьОбъект("AddIn.V7SysInfo");
ГУИД = Инфо.СоздатьGUID();
2 san4ez1008
 
12.05.17
04:53
(1) а без v7plus?
3 Злопчинский
 
12.05.17
05:05
(2) формекс, см. метод объекта "Сервис", получитьGuid типа, только фигурные скобки слева/справа убрать надо
4 Злопчинский
 
12.05.17
05:06
если формекс ненправославен в вашей раскольнической епархии - тогда более чем уверен что гуид можно получить из виндов, через WSH
5 Злопчинский
 
12.05.17
05:08
6 Злопчинский
 
12.05.17
05:08
а вообще - есть в КЗ
Книга знаний: Получение GUID в 1С
7 san4ez1008
 
12.05.17
05:08
(4) 1С голая,ни формекса, ни других доп.компонент нету
8 Злопчинский
 
12.05.17
05:14
(7) см (6) - через WSH
9 Злопчинский
 
12.05.17
05:15
(7) для существующих объектов 1С - ГУИД можно получить из внутреннего ИДа
10 VladZ
 
12.05.17
05:17
(7) Нету - поставь!
11 san4ez1008
 
12.05.17
05:22
(9) (10) спасибо,вопрос закрыт
12 san4ez1008
 
12.05.17
05:31
а по поводу Программное открытие форм
в 1С 7.7 нереально 2 формы на одну обработку?
13 Sserj
 
12.05.17
05:53
(2)(7) v7plus - часть стандартной поставки 7.7, чем она не походит?
14 vladmenleo
 
12.05.17
06:13
Дарю
Процедура Сформировать()
    Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
    Скрипт.Language = "JScript";
    Стр = "
    |
    |function s4(){
      |return Math.floor((1 + Math.random()) * 0x10000)
    |         .toString(16)
    |         .substring(1);
    |};
    |function guid(){

      |return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
    |     s4() + '-' + s4() + s4() + s4();
    |}
    |";
    Скрипт.AddCode(Стр);    
    Гуй = Скрипт.Run("guid");
    Сообщить(Гуй);
КонецПроцедуры
15 1dvd
 
12.05.17
08:16
да, блин. Вы что, ребята? этот код можно на голом 1С написать. Тупая генерация рандомом...
16 trdm
 
12.05.17
08:50
_GetPerformanceCounter() - может глючить. Нарывался на такое.
17 vladmenleo
 
12.05.17
09:19
(15) Ему пример Сбербанк дал, уже с алгоритмом который их устраивает, так сам бог велел его использовать
18 Oftan_Idy
 
12.05.17
09:45
(0) "floor,toString и substring это что?"

Уволен! За профнепригодность
19 san4ez1008
 
12.05.17
09:49
(18) floor понятно,округление до наименьшего,toString я как понял аналог Строка() в 1С. а substring это что? и 0x10000?
20 Oftan_Idy
 
12.05.17
09:53
(19) "substring"

Ну ты хоть бы блин в гугл-транслейт что-ли забил этот текст. Он тебе подскажет смысл этой функции, и ты глядишь догадаешься что в 1С есть точно такая же
21 Злопчинский
 
12.05.17
10:02
(12) без проблем
22 san4ez1008
 
12.05.17
10:07
(21) объясни глупому человеку,ибо было сказано "в 1С 7.7 одна обработка = одна форма"
23 Fedor-1971
 
12.05.17
10:17
(19) поищи в сети хелпик по WSH Script56.CHM там по басурмански (возможно, что появился и русский, но это врядли). Почитай на досуге

По (0) вычисляем нечто рандомное + отбрасываем дробную часть + переводим в строку по основанию 16 (т.е. не давим буквы, т.к. исходное число шестнадцатиричное) + после сих манипуляций получаем 5 символов в строке, посему забираем от 1 и до конца.
В чём сложность то?
24 Злопчинский
 
12.05.17
10:28
(22) если имеется в виду "открыть несколько форм одной обработки" то кури
ОткрытьФорму("Обработка.ПоказатьОстаткиТМЦ#ЧитайСП"+_GetPerformanceCounter(), Параметр);

если что-то типа
для умных одна форма обработки, а для "тупых" - свосем простенькая форма той же обработки - то нет, (хотя думаю мастера смогут извернуться при необходимости)
25 Fedor-1971
 
12.05.17
10:36
(24) Это два слоя на одной форме
26 ADirks
 
12.05.17
12:01
кстати, то, что приведено в (0) - это не GUID. это шляпа полная.
27 san4ez1008
 
12.05.17
12:04
(26) ну вот они так его генерируют
28 san4ez1008
 
12.05.17
12:04
(26) а как правильно тогда?
29 Злопчинский
 
12.05.17
12:04
А вы вообще знаете, что гуиды не бесконечные и их экономить надо и не гегерить по всяким поводам налево-направо?!
30 ADirks
 
12.05.17
12:08
(28) правильно любым способом, который использует встроенную в винду функцию генерации GUID'ов. С применением ВК к примеру.
GUID - это не просто случайное число.
31 san4ez1008
 
12.05.17
12:11
(30) то бишь лучше (6)
32 san4ez1008
 
12.05.17
12:16
так..ладно,теперь вопрос, как лучше сделать?
Выписка из ТЗ:

Формирование уникального идентификатора чека (параметр "RECEIPT" в расширении "PURCHASE_EXT_PARAMS")
Уникальный идентификатор чека – это GUID либо другой уникальный идентификатор, который генерируется при открытии нового чека продажи либо чека возврата.

В чеке продажи в запросах по операциям списания и начисления бонусов – передается одинаковое значение параметра "RECEIPT".
Аналогично для чека возврата, в запросах возврата по операциям списания и начисления бонусов передается одинаковое значение параметра "RECEIPT"
При этом идентификатор в чеке возврата не должен совпадать с идентификатором в чеке продажи.

В чеке лучше завести новый реквизит, который будет генерироваться в WSH или с помощью v7plus.dll?
33 Злопчинский
 
12.05.17
12:18
(32) уникальный в пределах какой области?
Если в рамках конторы и одна касса то уникальный ид вполне достаточно таймстамп датавремя
34 san4ez1008
 
12.05.17
12:19
(33) в рамках кучи ТТ по области
35 Злопчинский
 
12.05.17
12:24
(34) твймстамп+номеркаccы+кодточки
По токлму номеру при необходимости быстро определяется место чека безо всякой автоматизации, в отличие от безликого гуида
36 san4ez1008
 
12.05.17
12:39
(35) ок,будем думать,спасибо
37 Lokli
 
16.05.17
16:05
(23) Есть als для 7.7 по wsh.