Имя: Пароль:
1C
1C 7.7
v7: ТиС не удается изменить константу Контроль отрицательных остатков ТМЦ
0 Злопчинский
 
03.08.17
15:07
..мутная история...
но интересно
тем не менее: есть база ТиС
в которой не удается поменять значение констант
Константа.КонтрольОтрицательныхОстатков
Константа.НомерРелиза

вот такой код

//*******************************************
Процедура Сформировать()
    
    Сообщить("до: "+Константа.КонтрольОтрицательныхОстатков);
    Константа.КонтрольОтрицательныхОстатков = Перечисление.СпособыКонтроляОстатковТМЦ.ПоКомпании;
    Сообщить("после: "+Константа.КонтрольОтрицательныхОстатков);
    
КонецПроцедуры

никаких ошибок не дает, но к изменению константы не приводит:

до: По фирме
после: По фирме

такое ощущение, что либо сбой в файле констант (что очень сомнительно)
либо что файл констант как-то кем-то хитро подредактирован. Ибо после его физического удаления - когда он создается заново - все отрабатывает нормально...

собственно вопрос - почему не удается изменить значение константы?
1 Злопчинский
 
03.08.17
15:08
..и как найти - почему?
2 Базис
 
naïve
03.08.17
15:09
Привет. В глобальнике глянь - 77 позволяет фильтровать запись констант программно.
3 Базис
 
naïve
03.08.17
15:10
Наверное, "ПриЗаписиКонстанты"
4 Злопчинский
 
03.08.17
15:13
(3) проверено. там проблем нет.
5 Ёпрст
 
03.08.17
15:15
(0) периодическая ?
6 Ёпрст
 
03.08.17
15:16
ну и это, 1sconst.cdx прибей что ле, если дбф база
7 Злопчинский
 
03.08.17
15:17
(5) нет
(6) не помогает
8 Ёпрст
 
03.08.17
15:18
(7) ну найди в файле 1sconst эту запись и осмотри, че там
9 Злопчинский
 
03.08.17
15:19
как найти, с ID мало работал
10 Хряк
 
03.08.17
15:20
удали ея (или переименуй), добавь заново - все будет работать
есть такой глюк в константах по непонятным причинам
11 1dvd
 
03.08.17
15:22
(9) dd (dds) файл смотри
12 KishMish
 
03.08.17
15:23
(0) а по Перечисление.СпособыКонтроляОстатковТМЦ.ПоКомпании это не по фирме?
13 Злопчинский
 
03.08.17
15:25
(11) не, как из
Константа.КонтрольОтрицательныхОстатков
получить ID в 1SCONST.DBF
?
14 Злопчинский
 
03.08.17
15:26
(12) к сабжу темы отношения не имеет, но ответ: нет, "по компании" это не "по фирме"
15 Базис
 
naïve
03.08.17
15:27
Прямым запросом - поля имя и ID из таблицы. Под рукой 77 нет, но там просто всё ,ты же знаешь.
16 aka AMIGO
 
03.08.17
15:28
(14) Какой Тип Константы? Перечисление?
17 Злопчинский
 
03.08.17
15:29
(16), да, перечисление
18 Злопчинский
 
03.08.17
15:29
(15) я в прямых туп
19 Злопчинский
 
03.08.17
15:31
(10) блин, сколько работаю - ни разу не сталкивался, сейчас попробую
20 aka AMIGO
 
03.08.17
15:34
Может, Латинские буквы затесались? :)
Работаешь под опенконфом?
21 Злопчинский
 
03.08.17
15:35
(10) Попробовал.
Получилось.
22 Злопчинский
 
03.08.17
15:36
(20) где лат.буквы затесались?
опенконф - работаю.
там где проблема - опенкофа нет
23 aka AMIGO
 
03.08.17
15:36
Вот и хорошо.
24 Злопчинский
 
03.08.17
15:37
(23) пока - все плохо.
почему код в (0) - не дает изменений в базе?
25 aka AMIGO
 
03.08.17
15:37
(22) Имелось в виду - после точки печатал вручную, либо выбирал из списка опенконфа..
Ну, ладно, получилось - и заботу с плеч долой :)
26 aka AMIGO
 
03.08.17
15:38
(24) Погодь малёк, я попробую у себя.
27 Злопчинский
 
03.08.17
15:38
(25) не, это неправильно
28 Злопчинский
 
03.08.17
15:39
подозрительно то, что такая проблема - на двух константах
.
Константа.КонтрольОтрицательныхОстатков
Константа.НомерРелиза
.
вариант из (10) - прокатил, но это не наш путь.
29 Злопчинский
 
03.08.17
15:43
гуру, подскажите лучше как для
Константа.КонтрольОтрицательныхОстатков
получить ID (который в 1SCONST.DBF)
?
30 aka AMIGO
 
03.08.17
15:44
(28) Смотри.
https://i.paste.pics/f83c431f6655466b290d38d5777c93d6.png
И это после твоего кода.

Теперь - когда я жмакнул по константе - значение тут-же поменялось на "по Компании"
т.е. окно списка констант должно быть обновлено
Так что, имхо - всё у тебя путём, меняется
31 aka AMIGO
 
03.08.17
15:46
вот после жмакания - если не веришь:
https://i.paste.pics/6f31c92c6a26476d1f77025bc0c389a7.png
32 Злопчинский
 
03.08.17
15:48
(30) проблема в том - что у тебя - меняется, а у меня НЕ МЕНЯЕТСЯ. ни интерактивно, ни программно.
33 aka AMIGO
 
03.08.17
15:49
Ааа.. блин.. понял.. посмотрел в сабж твой. Извини
34 aka AMIGO
 
03.08.17
15:52
(32) глянь еще в "Описание структуры метаданных"
такие параметры?
    - Константа
        - Идентификатор    "КонтрольОтрицательныхОстатков"
        - Синоним    "Контроль отрицательных остатков ТМЦ"
        - Комментарий
        - Тип    "Перечисление"
        - Вид    "СпособыКонтроляОстатковТМЦ"
        - Длина    "0"
        - Точность    "0"
        - НеОтрицательный    "0"
        - РазделятьТриады    "0"
        - Периодический    "0"
        - ОбластьРаспространения    "ВсеИнформационныеБазы"
35 Злопчинский
 
03.08.17
15:53
(34)
- Константа
        - Идентификатор    "КонтрольОтрицательныхОстатков"
        - Синоним    "Контроль отрицательных остатков ТМЦ"
        - Комментарий
        - Тип    "Перечисление"
        - Вид    "СпособыКонтроляОстатковТМЦ"
        - Длина    "0"
        - Точность    "0"
        - НеОтрицательный    "0"
        - РазделятьТриады    "0"
        - Периодический    "0"
        - ОбластьРаспространения    "ВсеИнформационныеБазы"

1 в 1
36 Злопчинский
 
03.08.17
15:54
(33) лучше (29) подскажи
37 Злопчинский
 
03.08.17
16:00
ууу, злыдни.. приходится по всяким помойкам лазить искать
38 aka AMIGO
 
03.08.17
16:00
(35) :(

(36) - не знаю, не получал ни разу, разве только в дбф заглянуть
https://i.paste.pics/375b49938536d813e2157c0394452a27.png
39 aka AMIGO
 
03.08.17
16:02
(38) + в 8-ке пользовал, и не раз, а в 7-ке вроде ни к чему было
40 Злопчинский
 
03.08.17
16:03
"<"+ЗначениеВСтрокуБД(Перечисление.СпособыКонтроляОстатковТМЦ.ПоКомпании)+">" = <   4K5   >
"<"+ЗначениеВСтрокуБД(Перечисление.СпособыКонтроляОстатковТМЦ.ПоФирме)+">"  = <   4K2   >
41 Злопчинский
 
03.08.17
16:05
это ID самого значения константы, то есть VALUE
.
а как получить ID, соответсвующий константе как объекту?
/
то есть как получить именно вот этот 16W
?
43 aka AMIGO
 
03.08.17
16:08
Через метаданные - никак?
44 aka AMIGO
 
03.08.17
16:17
Вообще-то можно прямо из дбф-файлика и взять.. Предварительно скопировав его, он может быть захвачен 1с-ом
45 Злопчинский
 
03.08.17
16:21
так.. походу такое злопство как в (0) проистекает из того, что в файлике констант есть несколько записей на один объект...
46 Злопчинский
 
03.08.17
16:22
ща... еще не одна бяка от Сергея Михайловича просто так не уходила...
47 aka AMIGO
 
03.08.17
16:24
(45) ничё се!.. :)
48 Ёпрст
 
03.08.17
16:24
select *
from 1sconst as Периодика
where

   Периодика.objid = :ТС  
   and Периодика.id = $ИсторияРеквизита.НужныйВидСправочника.НужныйРеквизитВЭтомСправочнике
49 Ёпрст
 
03.08.17
16:24
Ид константы, или штатно, или через метадатаворк
50 Злопчинский
 
03.08.17
16:31
ТАК И ЕСТЬ!
Константа.КонтрольОтрицательныхОстатков
https://content.screencast.com/users/Che66/folders/Jing/media/f0d3cf4d-ff55-4c13-9e2d-4afe85fec069/2017-08-03_1623.png
(для константа.номеррелиза - аналогично!)

видим что для константы присутствует две записи.
ХОТЯ ДОЛЖНА БЫТЬ ОДНА
.
первая запись = ПО КОМПАНИИ
вторая запись = ПО ФИРМЕ
.
в меню-операции-константы (и в "настройки параметров учета")
показывается вторая запись (то есть СЧИТЫВАЕТСЯ ПОСЛЕДНЯЯ ЗАПИСЬ?)
51 Злопчинский
 
03.08.17
16:33
то есть когда есть код

КонтрольОстатков = Константа.КонтрольОтрицательныхОстатков;
то в КонтрольОстатков - сидит последняя считанная запись (? это так)
52 Вафель
 
03.08.17
16:37
(51) Та на которую индекс указывает
53 aka AMIGO
 
03.08.17
16:37
(51) или только первая встреченная
54 Злопчинский
 
03.08.17
16:38
!!!
а вот когда пишем код
Константа.КонтрольОтрицательныхОстатков = КакоеТоНовоеЗначение;

то новое значение пишется в ПЕРВУЮ запись!
(проверил!)
55 Злопчинский
 
03.08.17
16:38
(52) а вот хрен! смотри (54)
56 aka AMIGO
 
03.08.17
16:39
(54) убирай скорей эту бяку, С.М. :)
57 Базис
 
naïve
03.08.17
16:39
Ты неправильную базу-то сохранил? ТиИ исправляет это?
58 Ёпрст
 
03.08.17
16:39
(55) посмотри, что в индексном файле.
59 Ёпрст
 
03.08.17
16:40
(57) ТиИ это никогда не исправляло.
60 Ёпрст
 
03.08.17
16:40
+58 через IDXView.exe
61 Злопчинский
 
03.08.17
16:44
Итого, картинки и значения
.
ПО КОМПАНИИ = 4К5
ПО ФИРМЕ = 4К2
ПО УПР.АНАЛИТИКЕ = 4К3
.

исходное:
1 запись = по компании
2 запись = по фирме
если прочитать значения то получим 2 запись (и увидим ее в обработке настройка параметров учета)

https://content.screencast.com/users/Che66/folders/Jing/media/f0d3cf4d-ff55-4c13-9e2d-4afe85fec069/2017-08-03_1623.png

выполним код:
    Сообщить("до: "+Константа.КонтрольОтрицательныхОстатков);
    Константа.КонтрольОтрицательныхОстатков = Перечисление.СпособыКонтроляОстатковТМЦ.ПоУпрАналиткие;
    Сообщить("после: "+Константа.КонтрольОтрицательныхОстатков);

в табло увидим:
.
до: по фирме
после: по фирме
.
а в базе увидим что ПЕРВАЯ запись изменилась (в соответсвии с присвоением по коду)

https://content.screencast.com/users/Che66/folders/Jing/media/0b488e4b-5728-4bf3-a255-7b3a53275ce6/2017-08-03_1636.png

и тут встает интересный вопрос
а почему !_при чтении берется ОДНА ЗАПИСЬ ТАБЛИЦЫ
а почему !_при записи используется ДРУГАЯ ЗАПИСЬ ТАБЛИЦЫ
???
62 Ёпрст
 
03.08.17
16:45
(61) всё из-за cdx файла. и задвоенной записи в 1sconst
63 aka AMIGO
 
03.08.17
16:45
cdx используется/не используется..
64 Злопчинский
 
03.08.17
16:48
(60) сейчас...
65 Базис
 
naïve
03.08.17
16:49
А выгрузка-загрузка оставит одно значение?
66 Злопчинский
 
03.08.17
16:50
(62) задвоенная запись - ПОНЯТНО!
но cdx - ведь ПОЗИЦИОНИРОВАНИЕ при чтении и при записи должно идти по ОДНОМУ И ТОМУ ЖЕ УКАЗАТЕЛЮ ?
67 Злопчинский
 
03.08.17
17:04
А киньте кто в мыло [email protected] эту прогу IDXView.exe
кучу ччылок облазил - нет результата
68 Сияющий Асинхраль
 
03.08.17
17:08
(0) Недавно пару дней угробил из-за того, что в ТиСе не мог поменять значение константы, ни программно, ни руками значение никак не менялось. Сделал полное тестирование базы, ничего не помогало. В итоге нашел где-то в нете подобный случай, где константу удалось привести в себя только заменой файла констант из старой копии базы. Мне помогло, попробуй, может и у тебя тот же случай...
69 Масянька
 
03.08.17
17:08
(66) Давно это было...
Я все-таки (не слушая умных людей) в одной программе попробовала многие-ко-многим.
Через пару месяцев вылезла ошибка (не помню уже досконально) - именно считывание одной, а запись другой. Тоже - dbf.
Не знаю - как реализовано в семерке. Очень бы хотелось глянуть.
70 Злопчинский
 
03.08.17
17:14
(68) точно так же как у меня в этом случае.
в моем случае - причину нашли - две записи на константу вместо одной.
непонятки с чтением/записью остались еще.. но лечить как минимум два способа.

1 способ.
удалить константу и ввести ее заново в конфигураторе (НАДО ОСТОРОЖНО!, потому что для конст.контрольотрицостатков - пройдет норм, а для конст.номеррелиза - при неграмотных действиях поведет за особйо отработку ОбновленияИБ от начала времен (первый запуск), прочие траблы могут быть и для других констант)
2 способ.
обрыть файл констант и удалить дубли руками.

есть подозрение что Епрст про причину трабла (не дает исправлять) знал, но промолчал... ;-)
71 Злопчинский
 
03.08.17
17:17
прогу получил. спсб.
сейчас посмотрю что в индексах если осилю
72 Ёпрст
 
03.08.17
17:17
(70) А ?
про дубли в 1сконст ?
Есть такое, сталкивался, только не с константами, а с периодикой в них.
Правил ручками, прямым запросом и не задумывался.

ЗЫ: вот в справочниках, дубли id справочника, можно было и штатно поиметь, на кубани раньше была ветка, как получить сей эффект.
73 Злопчинский
 
03.08.17
17:18
но вот откуда такие дубли появились - ЭТО ОЧЕНЬ ИНТЕРЕСНО.
если чтение/запись/создание индекса для таких дублей предсказуемо та тоакую фишку можно использовать для блокировки изменения настроек...
74 Злопчинский
 
03.08.17
17:20
(72) вот теперь и не с периодикой.
есть у меня подозрение что это не следствие сбоя, как мне сказали, а что кто-то там из приходящих пошаманил ручками..
ибо когда взялся за ремонт - быстро столкнулся с непоняткой и взял паузу (копию базы), сказал - найдете спеца - если то вопросов нет.. - спеца нашли (но ко мне за помощью один чел обращался, а спеца нашли другие люди из конторы) - "пришел, поправил за 5 минут". вот мне и подозрительно это... вдобавок ибо Архангельск.. самые спецы - в Арзхангельске?
75 Злопчинский
 
03.08.17
17:25
76 Злопчинский
 
03.08.17
17:26
индекс - неуникальный в DD
77 Злопчинский
 
03.08.17
17:30
78 Злопчинский
 
03.08.17
17:33
видно, что в индексе есть две записи - первая в начале файла, вторая в конце файла.
.
в качестве рабочей гипотезы примем следующее:
1. при записи пишет в ту запись, которая первая в индексе (типа перед записью позиционируемся на единственную запись, получаемцю по индексу), то есть для записи выбирается одна щзапись.
2. при чтении количество выбираемых записей неограничено и, похоже, что в качестве результата чтения берется ПОСЛЕДНЯЯ прочитанная по индексу запись...
.
как вам такое?
79 Злопчинский
 
03.08.17
17:34
ну, вот.. не прошло и 20 лет как еще один секрет 1С 7.7 раскрыт!
ура, товарищи!
80 Злопчинский
 
03.08.17
17:35
(72) поправить - не проблема. главное - понять и простить...
;-)
81 Злопчинский
 
03.08.17
17:42
фича:
если дубль положить в правильную запись таблицы (в физическом следовании записей) - то можно сказать, что индекс построится _предсказуемо_: в индексе в дублирующихся записях первой записью будет запись с меньшим физ.номером записи (RecNO)
- и здесь можно уже это юзать с "пользой", как например, хитрую защиту от от изменения настроек. так как настройки всегда применяться штатно будут "по чтению"... а изменение записи - ничем не поможет, так как изменяем первую запись, а применяться в работе будет всегда последняя...
82 Злопчинский
 
03.08.17
17:43
фиг его знает... в данном моем случае то ли это сбой был, то ли преднамеренно кто-то так сделал - 100% не возьмусь утверждать, но имхается что не без вмешательства... ;-)
83 Ёпрст
 
03.08.17
17:44
(82) понаделай побольше записей с одним ид, для достоверности
84 Злопчинский
 
03.08.17
17:51
(83) попробую, но не прям сейчас.. убегаю
85 Злопчинский
 
03.08.17
23:14
(83) посоветовался со спецом по движку (ходжик) - смысла не вижу.. растолковал мне он... в зависимости от "контекста" для извлечения нужных записей применяются разные методы поиска в индексном файле. и результат (конкретная запись) могут быть разные....
.
но фиг с вами... сделаю тестик "для достоверности"
86 Злопчинский
 
03.08.17
23:15
а причина таких "дублей" которых не должно быть - это битые индексы часто или глюки железа
87 Злопчинский
 
04.08.17
01:50
(83) исключительно из-за пиетета... ;-)

ЗначениеВСтрокуБД(Перечисление.СпособыКонтроляОстатковТМЦ.ПоФирме)  =    4K2  
ЗначениеВСтрокуБД(Перечисление.СпособыКонтроляОстатковТМЦ.ПоУпрАналитике)  =    4K3  
ЗначениеВСтрокуБД(Перечисление.СпособыКонтроляОстатковТМЦ.ПоЮрЛицу)  =    4K4  
ЗначениеВСтрокуБД(Перечисление.СпособыКонтроляОстатковТМЦ.ПоКомпании)  =    4K5  
ЗначениеВСтрокуБД(Перечисление.СпособыКонтроляОстатковТМЦ.НеКонтролировать)  =    4K6

Генерим в константах вместо правильной одной записи значения константы несколько "неправильных" записей

https://content.screencast.com/users/Che66/folders/Jing/media/1d4c3461-1273-4898-b4a7-caeb81786bfc/2017-08-04_0146.png
88 Злопчинский
 
04.08.17
01:56
.. если попробовать прочитать значение константы - то должно получиться ПОСЛЕДНЕЕ (по индексному файлу), то есть "НеКонтролировать"

проверяю (делаю все вживую вместе с написанием поста): так и есть:

https://content.screencast.com/users/Che66/folders/Jing/media/cca42bce-6bb5-450d-bea9-7a36c2ec658a/2017-08-04_0152.png

индекс:
https://content.screencast.com/users/Che66/folders/Jing/media/897b8419-8143-4016-ae37-78e500f03977/2017-08-04_0155.png
89 Злопчинский
 
04.08.17
01:57
попробуем изменить значение константы, установить его в 4К4 = ПоЮрЛицу:

//*******************************************
Процедура Сформировать()
    
    Сообщить("до: "+Константа.КонтрольОтрицательныхОстатков);
    Константа.КонтрольОтрицательныхОстатков = Перечисление.СпособыКонтроляОстатковТМЦ.ПоЮрЛицу;
    Сообщить("после: "+Константа.КонтрольОтрицательныхОстатков);
    
КонецПроцедуры
90 Злопчинский
 
04.08.17
01:59
что должно получиться:
до: НеКонтролировать
после: НеКонтролировать
- то есть "трабла" - константа почему-то не поменялась..
(потому что мы ЧИТАЕМ и получим последнюю запись из индекса)
91 Злопчинский
 
04.08.17
02:01
92 Злопчинский
 
04.08.17
02:06
.. что мы увидим в файле DBF - по идее мы увидим что _первая_ запись станет равна 4К4 (ПоЮрЛицу) - как мы присваивали константе..

проверяем... ЕСТЬ!
https://content.screencast.com/users/Che66/folders/Jing/media/55b8ee2c-4ce1-47d1-a80b-36ff6251995a/2017-08-04_0204.png

- то бишь при чтении мы позиционированы на одной записи, а при записи мы позиционированы на совсем другой...
93 Злопчинский
 
04.08.17
02:08
и еще тестик, гифтик для Ёпрста...
вернем все взад, см. (87)

https://content.screencast.com/users/Che66/folders/Jing/media/1d4c3461-1273-4898-b4a7-caeb81786bfc/2017-08-04_0146.png
94 Злопчинский
 
04.08.17
02:16
..гифтик не получился.. хотел подшаманить индексный файо, чтобы первый запись с клбючом указывала не на первую запись а на третью например, тогда - по идее - при записи константы менялась бы не первая а третья запись в файле... не удалось - индексный файл не дает редактировать, а как так сделать - не знаю...
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс