Имя: Пароль:
1C
1С v8
Программная установка значения разделителя
,
0 YouAreEmpty
 
28.09.12
18:21
Здравствуйте. Есть самописная конфигурация в которой уже полгода ведется учет. Потом было решено сделать в базе режим разделения данных. Соответственно данным которые уже были раньше нужно поменять значение разделителя с пустого на опр. значение. Но для пользователя у которого разделитель не установлен при попытке установить у документов значение разделителя из кода, возникает ошибка "Не все разделители установлены". Причем интерактивно все меняется превосходно. Как можно изменить значение разделителя программно?
1 DrShad
 
28.09.12
18:24
а вы в модулях прописали установку разделителя?
2 YouAreEmpty
 
28.09.12
18:25
(1) Я обработкой установку делаю
3 DrShad
 
28.09.12
18:27
(2) значит что-то не учел
4 YouAreEmpty
 
28.09.12
18:29
(3) Ну если бы учел, на форум не писал бы)
5 DrShad
 
28.09.12
18:30
(4) нам телепатировать?
6 YouAreEmpty
 
28.09.12
18:32
(4) могу бросить код
7 DrShad
 
28.09.12
18:34
сколько строк?
8 YouAreEmpty
 
28.09.12
18:34
(7) около 60-ти
9 DrShad
 
28.09.12
18:35
кидай
10 YouAreEmpty
 
28.09.12
18:37
&НаСервере
Процедура ВыполнитьУстановкуРазделителяНаСервере()
   СписокОбъектовМетаданных = Новый СписокЗначений;
   ЭлементФраншизера = Справочники.Франшизеры.НайтиПоКоду("000000001");    
   МетаданныеРазделителя = Метаданные.ОбщиеРеквизиты.Франшизер;
   //АвтоИспользование = МетаданныеРазделителя.АвтоИспользование = АвтоИспользованиеОбщегоРеквизита.Использовать;
   СоставРазделителя = Метаданные.ОбщиеРеквизиты.Франшизер.Состав;
   
   
   Для Каждого ЭлементСостава Из СоставРазделителя Цикл
       Если ЭлементСостава.Использование = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.Использовать Тогда
           Если Метаданные.РегистрыСведений.Содержит(ЭлементСостава.Метаданные) Тогда
               Если ЭлементСостава.Метаданные.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда
                   СписокОбъектовМетаданных.Добавить(ЭлементСостава.Метаданные,ЭлементСостава.Метаданные.Имя);    
               КонецЕсли;
           Иначе
               СписокОбъектовМетаданных.Добавить(ЭлементСостава.Метаданные,ЭлементСостава.Метаданные.Имя);        
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   
   // Обработаем все типы объектов метеданных
   Для Каждого ЭлементМД Из СписокОбъектовМетаданных Цикл
       Если Метаданные.Документы.Содержит(ЭлементМД.Значение) Тогда
           
           ВыборкаДокументов = Документы[ЭлементМД.Представление].Выбрать();
           
           Пока ВыборкаДокументов.Следующий() Цикл
               ОбъектДокумент = ВыборкаДокументов.ПолучитьОбъект();                                            
               ОбъектДокумент.Франшизер = ЭлементФраншизера;
               ОбъектДокумент.Записать();
           КонецЦикла;
       ИначеЕсли Метаданные.Справочники.Содержит(ЭлементМД.Значение) Тогда
           ВыборкаДокументов = Справочники[ЭлементМД.Представление].Выбрать();
           
           Пока ВыборкаДокументов.Следующий() Цикл
               ОбъектДокумент = ВыборкаДокументов.ПолучитьОбъект();
               ОбъектДокумент.Франшизер = ЭлементФраншизера;
               ОбъектДокумент.Записать();
           КонецЦикла;
       //ИначеЕсли Метаданные.Константы.Содержит(ЭлементМД.Значение) Тогда
       //    МенеджерЗаписиКонстанты = Константы[ЭлементМД.Представление].СоздатьМенеджерЗначения();
       //    МенеджерЗаписиКонстанты.Франшизер = ЭлементФраншизера;
       //    МенеджерЗаписиКонстанты.Записать();
       ИначеЕсли Метаданные.РегистрыСведений.Содержит(ЭлементМД.Значение) Тогда
           НаборЗаписей = РегистрыСведений[ЭлементМД.Представление].СоздатьНаборЗаписей();
           НаборЗаписей.Прочитать();
               
           Для Каждого СтрокаНабораЗаписей ИЗ НаборЗаписей Цикл
               СтрокаНабораЗаписей.Франшизер = ЭлементФраншизера;    
           КонецЦикла;
               
               
           НаборЗаписей.Записать();
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры
11 DrShad
 
28.09.12
18:40
и не работает именно здесь?
НаборЗаписей = РегистрыСведений[ЭлементМД.Представление].СоздатьНаборЗаписей();
           НаборЗаписей.Прочитать();
               
           Для Каждого СтрокаНабораЗаписей ИЗ НаборЗаписей Цикл
               СтрокаНабораЗаписей.Франшизер = ЭлементФраншизера;    
           КонецЦикла;
               
               
           НаборЗаписей.Записать();
12 YouAreEmpty
 
28.09.12
18:41
(11) В любом месте где я пытаюсь установить этот реквизит а потом записать объект
13 DrShad
 
28.09.12
18:44
про ОбменДанными.Загрузка что нить слыхал?
14 YouAreEmpty
 
28.09.12
18:44
Попытка сначала установить этот реквизит, а потом включить режим разделения данных вообще закончилась ошибкой SDBL
15 YouAreEmpty
 
28.09.12
18:44
Да, слыхал
16 YouAreEmpty
 
28.09.12
18:45
(13) Только не пойму чем мне это может помочь
17 DrShad
 
28.09.12
18:45
юзай
18 YouAreEmpty
 
28.09.12
18:46
(17) И как же?
19 DrShad
 
28.09.12
18:46
как это чем? ты же при записи попадаешь на проверки
20 YouAreEmpty
 
28.09.12
18:47
(19) На какие проверки? Эти проверки осуществляет платформа а не мой код
21 DrShad
 
28.09.12
18:47
(18) я не знаю есть ли у вас в конфе конструкции с его использованием, но в типовых есть и помогают обойти проверки при и перед записью
22 YouAreEmpty
 
28.09.12
18:49
(21) Она просто организует выход из обработчика и все, если он вообще есть
23 DrShad
 
28.09.12
18:54
а при записи документа у тебя не хочет РС прописать?
24 YouAreEmpty
 
28.09.12
19:07
(23) И документ и справочник тоже не хочет
25 YouAreEmpty
 
29.09.12
18:33
Наверняка, кто-нибудь сталкивался с данной проблемой. Не верю что я здесь первооткрыватель
26 hhhh
 
29.09.12
20:10
всё-таки проверь (11): Документы[ЭлементМД.Представление]
27 YouAreEmpty
 
01.10.12
12:10
Проблема заключалась в том, что он пытался найти по наименованию элемент справочника, который входит в разделение, т.к. у пользователя из под которого я выполняю обработку, не установлен разделитель: получаю сообщение об ошибке. Как победить, пока не знаю(
28 Behemoth
 
16.10.12
13:09
Как-то так:
Пока ВыборкаДокументов.Следующий() Цикл
               ПараметрыСеанса.ФилиалИспользование = Ложь;
               ПараметрыСеанса.ФилиалЗначение = Филиал;
               ОбъектДокумент = ВыборкаДокументов.ПолучитьОбъект();
               ОбъектДокумент.ОбменДанными.Загрузка = Истина;
               ОбъектДокумент.Филиал = Филиал;
               ОбъектДокумент.Записать();
           КонецЦикла;
сейчас  сам  ковыряюсь
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой