|
Запись в регистр сведений | ☑ | ||
---|---|---|---|---|
0
vladimirpetrov11
05.12.12
✎
13:27
|
Здравствуйте! Подскажите как найти определенную запись в регистре сведений, подчиненном регистратору. Регистр сведений содержит объекты: Справочник.ЛицевыеСчета. У каждого лицевого есть уникальный код, по которому нужно его найти в регистре, чтобы вбить в свойство: "Общая площадь" значение площади.
Вот картинки, чтобы поняли какой регистр: http://s47.radikal.ru/i118/1212/ac/38bd3259c73c.jpg на этой картинке видно, что по нескольким лицевым площади вбиты: http://s40.radikal.ru/i089/1212/91/0b83cbbfae85.jpg Данные о площадях лицевых будут загружаться из файла ексель с полями: Код лицевого, Общая площадь ЛС. |
|||
1
Error pro
05.12.12
✎
13:29
|
(0) Тебе программно или интерактивно?
Отбор.Регистратор.Установить(Ссылка) |
|||
2
Wobland
05.12.12
✎
13:31
|
запрос уже предлагали?
|
|||
3
Alexey_AA
05.12.12
✎
13:31
|
вот недавно подобную задачку делал
ВыборкаКонтЛ = РегистрыСведений.КонтактнаяИнформация.Выбрать(Новый Структура("Объект", док.КонтактноеЛицо)); ТЗконтИнф=новый ТаблицаЗначений; ТЗконтИнф.Колонки.Добавить("Вид"); ТЗконтИнф.Колонки.Добавить("Представление"); //выбираем все контакты в ТЗ Пока ВыборкаКонтЛ.Следующий() Цикл НоваяСтрока=ТЗконтИнф.Добавить(); НоваяСтрока[0]=ВыборкаКонтЛ.Вид; НоваяСтрока[1]=ВыборкаКонтЛ.Представление; КонецЦикла; |
|||
4
vladimirpetrov11
05.12.12
✎
13:38
|
(1)Мне примеры кодов бы с решением аналогичных задач поболее, вот как Алексей кинул(3) Спасибо.
Скиньте ещё пожалуйста, кто сталкивался. Интересует только работа с регистром: поиск по объекту (коду объекта) и запись значения. |
|||
5
Alexey_AA
05.12.12
✎
13:44
|
не за что!;)
если ТЗконтИнф.Количество()=0 тогда //сообщить("инфы по данному контакту нету"); //добавить номер договора если не ячНомерДог="" тогда НаборКонтактнойИнформации=РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); НоваяЗапись= НаборКонтактнойИнформации.Добавить(); НоваяЗапись.Объект=док.КонтактноеЛицо; НоваяЗапись.Тип = Перечисления.ТипыКонтактнойИнформации.Другое; НоваяЗапись.Вид = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Абонентский договор 1",истина); НоваяЗапись.Представление = ячНомерДог; НаборКонтактнойИнформации.Записать(ложь); КонецЕсли; //добавить номер карты |
|||
6
Alexey_AA
05.12.12
✎
13:46
|
загружал инфу из экселя в документы и регистры. если интересно скину всю обработку на почту, там просто текста куча и в принципе на тот момент я не умел пользоваться запросами, но обрабатывает 500 записей экселя она за одну минуту
|
|||
7
Cunni
05.12.12
✎
13:48
|
(6) есть типовая с диска ИТС)
|
|||
8
vladimirpetrov11
05.12.12
✎
13:50
|
(6) у меня в екселе более 16000 записей)) Если не сложно скинь на почту: [email protected] Или может скайп есть?
|
|||
9
vladimirpetrov11
05.12.12
✎
13:52
|
(6) В 1с 7.7 написал кучу обработок. И по загрузке из экселя в справочнике в том числе (тоже могу скинуть если вдруг нужно будет). А вот в 8-ке не бум-бум. Буду разбираться сидеть...
|
|||
10
Alexey_AA
05.12.12
✎
13:59
|
(9) да я сам воттолько начал свой путь, когда-то давно учился на 7.7, но в тот момент не мог себе позволитьработу сменить. скинул на почту
|
|||
11
hhhh
05.12.12
✎
14:01
|
(8) 16000 это на уровне детского сада размер. Вот если бы 16 млн. - вот тогда надо начинать переживать.
|
|||
12
samozvanec
05.12.12
✎
14:06
|
(3) НоваяСтрока=ТЗконтИнф.Добавить();
НоваяСтрока[0]=ВыборкаКонтЛ.Вид; НоваяСтрока[1]=ВыборкаКонтЛ.Представление; и че, работает? |
|||
13
Alexey_AA
05.12.12
✎
14:09
|
(12) еще как работает!
|
|||
14
vladimirpetrov11
05.12.12
✎
14:10
|
(9) Спасибо!
(11) Успокоил)))) |
|||
15
samozvanec
05.12.12
✎
14:17
|
(13) по индексу только чтение для строки ТЗ
|
|||
16
Alexey_AA
05.12.12
✎
14:23
|
(15) у меня работает!
СтрокаТаблицыЗначений (ValueTableRow) СтрокаТаблицыЗначений (ValueTableRow) Элементы коллекции: Произвольный Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются значения в колонке данной строки. Возможно обращение к значению колонки данной строки посредством оператора [...]. В качестве аргумента передается индекс колонки (нумерация с 0). |
|||
17
Alexey_AA
05.12.12
✎
14:26
|
(15) ушел проверять? :)
|
|||
18
vladimirpetrov11
06.12.12
✎
10:11
|
Продолжение... (я до сих пор бьюсь)
Подскажите как правильно произвести запись в регистр (подчинен регистратору): Делаю так: Для Строчка=1 по КоличествоСтрок цикл Если НЕ Спр.НайтиПоКоду(СокрЛП(Ексель.Cells(Строчка,1).Text))=Спр.ПустаяСсылка() тогда Получилось=Спр.НайтиПоКоду(СокрЛП(Ексель.Cells(Строчка,1).Text)); НаборЗаписей=РегистрыСведений.ркЗначенияПериодическихСвойствОбъектов.СоздатьНаборЗаписей(); //НаборЗаписей.Отбор.Регистратор. НоваяЗапись=НаборЗаписей.Добавить(); НоваяЗапись.Объект=Получилось; НоваяЗапись.Период=ТекущаяДата(); НоваяЗапись.Активность=Истина; НоваяЗапись.Значение=СокрЛП(Ексель.Cells(Строчка,9).Text); НоваяЗапись.Свойство=ПланыВидовХарактеристик.ркДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Общая площадь лицевого счета"); Попытка НаборЗаписей.Записать(); Исключение Сообщить(ОписаниеОшибки()+"ЛС: "+Получилось); КонецПопытки; Иначе Сообщить("Код: "+СокрЛП(Ексель.Cells(Строчка,1).Text)+ " не найден!"); КонецЕсли; КонецЦикла; Не записывает |
|||
19
hhhh
06.12.12
✎
10:25
|
(18) зачем два раза искать по коду одно и то же? Время сервера девать некуда?
|
|||
20
vladimirpetrov11
06.12.12
✎
10:26
|
(19)Да это мелочи, потом исправим.. Ошибку вот такую выдает:
{Форма.Форма.Форма(33)}: Ошибка при вызове метода контекста (Записать): Ошибка записи! Не установлен отбор по регистратору (Регистр сведений: Значения периодических свойств объектов)ЛС: ГУРЬЯНОВ СЕРГЕЙ АЛЕКСАНДРОВИЧ |
|||
21
vladimirpetrov11
06.12.12
✎
10:28
|
Вот так сделал, но неверно:
НаборЗаписей.Отбор.Регистратор.Установить("ркИзменениеСвойствЗначенийОбъектов"); Как же отобрать правильно? |
|||
22
Reset
06.12.12
✎
10:31
|
(21) см (1)
|
|||
23
hhhh
06.12.12
✎
10:31
|
НаборЗаписей.Отбор.Регистратор.Установить("ркИзменениеСвойствЗначенийОбъектов");
тут не строка должна быть а ссылка на ваш документ регистратор. НаборЗаписей.Отбор.Регистратор.Установить(Регистратор); и потом тоже НоваяЗапись.Регистратор=Регистратор; |
|||
24
vladimirpetrov11
06.12.12
✎
10:33
|
(22), (23) вроде дошло. Сейчас попробую. Спасибо!
|
|||
25
vladimirpetrov11
06.12.12
✎
10:55
|
Для Строчка=1 по КоличествоСтрок цикл
ЛС=Спр.НайтиПоКоду(СокрЛП(Ексель.Cells(Строчка,1).Text)); Если НЕ ЛС=Спр.ПустаяСсылка() тогда НаборЗаписей=РегистрыСведений.ркЗначенияПериодическихСвойствОбъектов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(Документы.ркИзменениеЗначенийСвойствОбъектов); НоваяЗапись=НаборЗаписей.Добавить(); //НоваяЗапись.Регистратор=Документы.ркИзменениеЗначенийСвойствОбъектов; НоваяЗапись.Объект=ЛС; НоваяЗапись.Период=ТекущаяДата(); НоваяЗапись.Активность=Истина; НоваяЗапись.Значение=СокрЛП(Ексель.Cells(Строчка,9).Text); НоваяЗапись.Свойство=ПланыВидовХарактеристик.ркДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Общая площадь лицевого счета"); Попытка НаборЗаписей.Записать(); Исключение Сообщить(ОписаниеОшибки()+"ЛС: "+ЛС); КонецПопытки; Иначе Сообщить("Код: "+СокрЛП(Ексель.Cells(Строчка,1).Text)+ " не найден!"); КонецЕсли; КонецЦикла; Такая же ошибка выходит |
|||
26
vladimirpetrov11
06.12.12
✎
11:02
|
Видимо я неправильно ссылку задал. Подскажите нубу, как надо.
|
|||
27
Reset
06.12.12
✎
11:05
|
Должен быть документ, который будет являться регистратором для записей в регистре. Указывать нужно ссылку на него.
|
|||
28
Reset
06.12.12
✎
11:06
|
Конкретный, подчерну, документ. А не произвольная фигня, которую ты пытаешься туда пихать.
|
|||
29
Reset
06.12.12
✎
11:06
|
подчеркну*
|
|||
30
Reset
06.12.12
✎
11:13
|
Наверняка же есть документ, предназнченный для заполнения регистра. Вот его нужно заполнять и проводить, а не напрямую в р-р писать.
|
|||
31
vladimirpetrov11
06.12.12
✎
11:23
|
(28)Ну вот этот документ: "Документы.ркИзменениеЗначенийСвойствОбъектов" и является регистратором
|
|||
32
vladimirpetrov11
06.12.12
✎
11:26
|
(30) т.е. нужно сначала заполнить сам документ регистратор? Есть пример, чтобы я не доставал тупыми вопросами??
|
|||
33
vladimirpetrov11
06.12.12
✎
11:46
|
Весь нет облазил но ничего нет кроме этого примера:
НаборЗаписей = РегистрыСведений.ЛимитыВозвратнойТары.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = ВыбранныйРегистратор.Дата; НоваяЗапись.Номенклатура = ВыбраннаяНоменклатура; НоваяЗапись.ДоговорКонтрагента = ВыбранныйДоговор; НоваяЗапись.ЛимитПоставщика = 50; НаборЗаписей.Записать(); |
|||
34
hhhh
06.12.12
✎
12:11
|
НовыйДОк = Документы.ркИзменениеЗначенийСвойствОбъектов.СоздатьДокумент();
НовыйДок.Дата = ТекущаяДата(); НовыйДок.Записать(); ВыбранныйРегистратор = НовыйДок.Ссылка; |
|||
35
vladimirpetrov11
06.12.12
✎
12:16
|
(34)Ясно. Спасибо! А я ограничился просто созданием, даже не записал док...мда
|
|||
36
vladimirpetrov11
07.12.12
✎
13:42
|
Вообщем все ништяк, протестировал со всех сторон. Решил на серваке запустить и опа! Операция с екселем вообще не проходит. Почему так???
Вот ВЕСЬ код обработки: Перем Ексель,КоличествоСтрок; Функция ПроверкаExcel() Попытка Ексель=Новый COMОбъект("Excel.Application"); // устанавливаем связь с выбранным файлом Ексель.Workbooks.Open(СсылкаНаExcel); Ексель.ScreenUpdating = 0; //для ускорения Ексель.EnableEvents = 0; //не нужны нам "левые" предупреждения... Ексель.Visible = 0; //да и видеть все это не надо :) КоличествоСтрок= Ексель.ActiveSheet.UsedRange.Rows.Count; //количество строк с записями в выбранном файле КоличествоСтолбцов = Ексель.ActiveSheet.UsedRange.Columns.Count; К=1; Спр=Справочники.ркЛицевыеСчета; Исключение Сообщить("Проверьте правильность выбора файла для загрузки!"); Возврат ложь; КонецПопытки; Попытка НужнаяДата=КонецМесяца(ПараметрыСеанса.ркДатаТекущегоРасчетногоПериода);//НачалоГода(ТекущаяДата()); Док=Документы.ркИзменениеЗначенийСвойствОбъектов.СоздатьДокумент(); Док.Дата=НужнаяДата; Док.Записать(); НаборЗаписей=РегистрыСведений.ркЗначенияПериодическихСвойствОбъектов.СоздатьНаборЗаписей(); ВыбранныйРегистратор=Док.Ссылка; НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор); Для Строчка=1 по КоличествоСтрок цикл Если СтрДлина(СокрЛП(Ексель.Cells(Строчка,1).Text))<6 тогда ЛС=Спр.НайтиПоКоду(СокрЛП(Ексель.Cells(Строчка,1).Text)); Если НЕ ЛС=Спр.ПустаяСсылка() тогда НоваяСтрока= Док.Состав.Добавить(); // Заполнить значения реквизитов. НоваяСтрока.НачалоДействия=НужнаяДата; НоваяСтрока.Значение = Число(СокрЛП(Ексель.Cells(Строчка,9).Text)); НоваяСтрока.Объект=ЛС; НоваяСтрока.Свойство=ПланыВидовХарактеристик.ркДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Общая площадь лицевого счета"); НоваяЗапись=НаборЗаписей.Добавить(); НоваяЗапись.Объект=ЛС; НоваяЗапись.Период = ВыбранныйРегистратор.Дата; НоваяЗапись.Активность=Истина; НоваяЗапись.Значение=Число(СокрЛП(Ексель.Cells(Строчка,9).Text)); НоваяЗапись.Свойство=ПланыВидовХарактеристик.ркДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Общая площадь лицевого счета"); К=К+1; Иначе Сообщить("Код: "+СокрЛП(Ексель.Cells(Строчка,1).Text)+ " не найден!"); КонецЕсли; КонецЕсли; КонецЦикла; Попытка НаборЗаписей.Записать(); Исключение Сообщить(ОписаниеОшибки()+"ЛС: "+ЛС); КонецПопытки; Попытка Док.Записать(); Исключение Сообщить(ОписаниеОшибки()+"ЛС: "+ЛС); КонецПопытки; Ексель.ActiveWorkBook.Close(); //закрываем Excel Возврат К; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецФункции &НаКлиенте Процедура Загрузить(Команда) Если не ЗначениеЗаполнено(СсылкаНаExcel) тогда Сообщить("Выберите путь к файлу Excel"); Иначе Результат=ПроверкаExcel(); Если НЕ Результат=Ложь тогда Сообщить("Всего записано ЛС: "+Результат); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Выбрать(Команда) Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Заголовок = "Выберите файл"; Диалог.ПолноеИмяФайла = ""; Фильтр = "Excel2003(*.xls)|*.xls|Excel2007(*.xlsx)|*.xlsx"; Диалог.Фильтр = Фильтр; Если Диалог.Выбрать() Тогда Попытка СсылкаНаExcel= Строка(Диалог.ПолноеИмяФайла); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли; КонецПроцедуры |
|||
37
vladimirpetrov11
07.12.12
✎
13:55
|
Не был ексель установлен на сервере, установил. Но та же ошибка
|
|||
38
Reset
07.12.12
✎
13:57
|
Удаляй эксель, все равно ведь не помогло - ошибка та же.
|
|||
39
vladimirpetrov11
07.12.12
✎
13:58
|
(38) а если без шуток?
|
|||
40
Reset
07.12.12
✎
13:59
|
Я к тому, что называть ошибку - хороший тон.
Понятно, что локальный файл не находит, но зачем это в секрете держать? |
|||
41
zladenuw
07.12.12
✎
14:00
|
(40) та да
|
|||
42
Reset
07.12.12
✎
14:00
|
Шутки у тебя в комментариях...
|
|||
43
vladimirpetrov11
07.12.12
✎
14:01
|
{Форма.Форма.Форма(6)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Excel): Метод Open из класса Workbooks завершен неверно
Вот такая ошибка |
|||
44
vladimirpetrov11
07.12.12
✎
14:02
|
Файл на сервере
|
|||
45
Reset
07.12.12
✎
14:03
|
Относительный путь к файлу, возможно, разный
|
|||
46
vladimirpetrov11
07.12.12
✎
14:04
|
(42)Ну да, тупой. Ну что сделаешь. разьясните подробнее
(45) как поправить эту ситуацию? |
|||
47
vladimirpetrov11
07.12.12
✎
14:05
|
Куда файл поместить, чтобы считал нормально?
|
|||
48
Reset
07.12.12
✎
14:08
|
Сначала выяснить, действительно ли дело в этом. Если так, то формировать такое имя, чтобы было валидно на сервере.
Кроме того, могут другие причины быть, недоступен файл по правам и тд Вообще, я не адепт УП, но по моему, локальный файл передавать на сервер нужно не "ссылкой",а через хранилище |
|||
49
vladimirpetrov11
07.12.12
✎
14:21
|
(48) Права все (работаю от администратора), имя поменял на Zagr. Та же фигня. А через хранилище как передавать, объясни пожалуйста?
PS: Хотел выгрузить базу, установить локально, обновить и загрузить обратно на сервер. Но работаю по удаленному доступу и на комп пользователя база не устанавливается, пишет, что не все данные загружены, типа лимит размера базы превышен. Ехать далеко до них, так бы копию снял и на своем компе сделал все.... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |