|
устройство метаданных "изнутри" | ☑ | ||
---|---|---|---|---|
0
illi_dan
04.05.18
✎
20:41
|
Здравствуйте. Стоит задача по выгрузке произвольного объекта в текстовый файл.Пользователь выбирает документ который у него есть в базе и тот должен исчерпывающе быть представлен тестовом формате,что бы далее можно было произвести обратную операцию(текстовый файл должен будет преобразоваться в документ).Необходимо это реализовать через метаданные.В связи с непониманием устройства метаданных есть несколько вопросов:
1)Насколько я понимаю, у метаданных есть коллекции ТабличныЧасти и Реквизиты.У реквизита еще есть значение.Получается для выгрузки достаточно не более двух вложенных циклов или у этих параметров могут быть дочерние объекты,создаваемые пользователем? 2)Если реквизит - строка,то проблем с выгрузкой нету. Но как быть со сложными типами "ДокументССылка" и прочие? 3)Пытаюсь получить значение документа через [],пишет что преобразование значение к типу число не может быть выполнено Код: Для Каждого реквизит из Метаданные.Реквизиты цикл Типов=реквизит.Тип.Типы(); //Для Каждого тип из Типов цикл сч=сч+1; Текст.ДобавитьСтроку(реквизит + ":"+Параметры.ДокСсылка[реквизит]+Символы.ПС); //КонецЦикла КонецЦикла; Параметры.ДокСсылка - это объект,который выбрал пользователь в форме. Заранее благодарен за любую помощь. |
|||
11
Египтянин
04.05.18
✎
21:53
|
Текст.ДобавитьСтроку(Реквизит.ИМЯ + ":"+Параметры.ДокСсылка[Реквизит.ИМЯ]+Символы.ПС);
|
|||
12
MakaMaka
04.05.18
✎
21:54
|
(10) И как он перенесет номенклатуру таким макаром? Он так только комментарий перенесет, строку или число, а ссылочный объект он не перенесет. Его ждет БДСМ с узлами и тегами, при загрузке. Но эта тема будет в понедельник наверное, пока выгружать будем.
|
|||
13
Египтянин
04.05.18
✎
21:55
|
+(11) Вообще то нужно учиться пользоваться отладчиком.
(12) кого ты лечишь мальчик? Я с 7.7 начинал, и в тексте переносил и оле и дбф у меня десятки самописных выгрузок/загрузок. |
|||
14
illi_dan
04.05.18
✎
21:58
|
(8) УникальныйИдентиф (8) Функции УникальныйИдентификатор() Тоже запрещены. Я так понимаю нужно будет вернуть название реквизита и если он ссылочный,то искать такой в базе?
|
|||
15
illi_dan
04.05.18
✎
21:59
|
(10)Благодарю,но на ссылочных объектах все та же ошибка
|
|||
16
illi_dan
04.05.18
✎
22:01
|
(12) до понедельника сдать уже надо.Так что предстоит и загружать на выходных(
|
|||
17
Египтянин
04.05.18
✎
22:04
|
(16) Пишется минут за 30. Но мне лень.
|
|||
18
Египтянин
04.05.18
✎
22:05
|
Что пишет Сообщить(Реквизит.Имя)
Что пишет Сообщить(Параметры.ДокСсылка) |
|||
19
Египтянин
04.05.18
✎
22:06
|
(16) да забей, все равно за выходные 1С не выучишь. А без умения пользоваться отладчиком, тебя все равно с работы выгонят.
|
|||
20
Египтянин
04.05.18
✎
22:09
|
как быть сложными типами "ДокументССылка" и прочие?
Документ[ТвойТип].НайтиПоНомеру(ТвойНомер); Справочник[ТвойТип].НайтиПоКоду(ТвойКод); Ну или получать по УИД. А чего ты у постановщика задачи не спросил, по какому принципу синхронизироваться? По коду, по наименованию или по УИД? |
|||
21
MakaMaka
04.05.18
✎
22:11
|
(14) Бред какой то. Ну выгружай как строки.
(19) Согласен без умения работать отладчиком работать ТС не сможет. (13) Видел я подобные выгрузки, они частно похожи на скрипящее инвалидное кресло, порой там такое, что думаешь, лучше бы КД2.1 было, чем вольные написания творцов. |
|||
22
Египтянин
04.05.18
✎
22:13
|
(21) Чего тут такого страшного? Вот обычная загрузка
Перем Соединение Экспорт; Функция ОпределитьРежимЗаписиДокументаИЗаписать(СсылкаНаОбъект,ОбъектОЛЕ) Если СсылкаНаОбъект.Проведен и НЕ ОбъектОЛЕ.Проведен Тогда Если ОбъектОЛЕ.ПометкаУдаления Тогда ОбъектОЛЕ.ПометкаУдаления = Ложь; КонецЕсли; ОбъектОЛЕ.Записать(Соединение.РежимЗаписиДокумента.Проведение,Соединение.РежимПроведенияДокумента.Неоперативный); ИначеЕсли СсылкаНаОбъект.Проведен и ОбъектОЛЕ.Проведен Тогда ОбъектОЛЕ.Записать(Соединение.РежимЗаписиДокумента.Проведение,Соединение.РежимПроведенияДокумента.Неоперативный); ИначеЕсли Не СсылкаНаОбъект.Проведен и ОбъектОЛЕ.Проведен Тогда ОбъектОЛЕ.ПометкаУдаления = СсылкаНаОбъект.ПометкаУдаления; ОбъектОЛЕ.Записать(Соединение.РежимЗаписиДокумента.ОтменаПроведения,Соединение.РежимПроведенияДокумента.Неоперативный); ИначеЕсли СсылкаНаОбъект.Проведен И ОбъектОЛЕ.ЭтоНовый() Тогда ОбъектОЛЕ.ПометкаУдаления = СсылкаНаОбъект.ПометкаУдаления; ОбъектОЛЕ.Записать(Соединение.РежимЗаписиДокумента.ОтменаПроведения,Соединение.РежимПроведенияДокумента.Неоперативный); Иначе ОбъектОЛЕ.ПометкаУдаления = СсылкаНаОбъект.ПометкаУдаления; ОбъектОЛЕ.Записать(Соединение.РежимЗаписиДокумента.Запись,Соединение.РежимПроведенияДокумента.Неоперативный); КонецЕсли; КонецФункции Функция ПолучитьЗначениеПоВиду(Значение) Если Значение.Метаданные().Имя = "НазначенияСвойствКатегорийОбъектов" Тогда //ищем по коду, чтобы не задвоить предопределенные элементы Возврат Соединение.ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.НайтиПоКоду(Значение.Код); КонецЕсли; Если Значение.Метаданные().Имя = "Номенклатура" Тогда Возврат ПолучитьНоменклатуру(Значение); КонецЕсли; Если Не ЗначениеЗаполнено(Значение) Тогда Возврат Неопределено КонецЕсли; Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение)) Тогда ИдентификаторИсточник = Значение.УникальныйИдентификатор(); ИдентификаторПолучатель = Соединение.NewObject("УникальныйИдентификатор", СокрЛП(ИдентификаторИсточник)); СсылкаНаОбъект = Соединение.Справочники[Значение.Метаданные().Имя].ПолучитьСсылку(ИдентификаторПолучатель); Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда НовыйЭлемент = Соединение.Справочники[Значение.Метаданные().Имя].СоздатьЭлемент(); НовыйЭлемент.УстановитьСсылкуНового(СсылкаНаОбъект); НовыйЭлемент.Код = Значение.Код; НовыйЭлемент.Наименование = Значение.Наименование; Если ТипЗнч(Значение.Владелец) = Тип("ПланВидовХарактеристикСсылка.СвойстваОбъектов") Тогда НовыйЭлемент.Владелец = ПолучитьЗначениеПоВиду(Значение.Владелец); КонецЕсли; НовыйЭлемент.Записать(); Возврат НовыйЭлемент.Ссылка; Иначе Возврат СсылкаНаОбъект; КонецЕсли; ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение)) Тогда ИдентификаторИсточник = Значение.УникальныйИдентификатор(); ИдентификаторПолучатель = Соединение.NewObject("УникальныйИдентификатор", СокрЛП(ИдентификаторИсточник)); СсылкаНаОбъект = Соединение.ПланыВидовХарактеристик[Значение.Метаданные().Имя].ПолучитьСсылку(ИдентификаторПолучатель); Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда НовыйЭлемент = Соединение.ПланыВидовХарактеристик[Значение.Метаданные().Имя].СоздатьЭлемент(); НовыйЭлемент.УстановитьСсылкуНового(СсылкаНаОбъект); НовыйЭлемент.Код = Значение.Код; НовыйЭлемент.Наименование = Значение.Наименование; СтрокаТипа = ""; ТипЗначения = Значение.ТипЗначения.Типы(); Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗначения[0]) Тогда СтрокаТипа = "СправочникСсылка."; ОбъектСсылка = Новый (ТипЗначения[0]); СтрокаТипа = СтрокаТипа + ОбъектСсылка.Метаданные().Имя; ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипЗначения[0]) Тогда СтрокаТипа = "ПланВидовХарактеристикСсылка."; ОбъектСсылка = Новый (ТипЗначения[0]); СтрокаТипа = СтрокаТипа + ОбъектСсылка.Метаданные().Имя; ИначеЕсли ТипЗначения[0] = Тип("Строка") Тогда СтрокаТипа = "Строка"; ИначеЕсли ТипЗначения[0] = Тип("Число") Тогда СтрокаТипа = "Число"; ИначеЕсли ТипЗначения[0] = Тип("Булево") Тогда СтрокаТипа = "Булево"; ИначеЕсли ТипЗначения[0] = Тип("Дата") Тогда СтрокаТипа = "Дата"; КонецЕсли; НовыйЭлемент.ТипЗначения = Соединение.NewObject("ОписаниеТипов",СтрокаТипа); НовыйЭлемент.НазначениеСвойства = ПолучитьЗначениеПоВиду(Значение.НазначениеСвойства); НовыйЭлемент.Записать(); Возврат НовыйЭлемент.Ссылка; Иначе Возврат СсылкаНаОбъект; КонецЕсли; ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение)) Тогда ИдентификаторИсточник = Значение.УникальныйИдентификатор(); ИдентификаторПолучатель = Соединение.NewObject("УникальныйИдентификатор", СокрЛП(ИдентификаторИсточник)); СсылкаНаОбъект = Соединение.Документы[Значение.Метаданные().Имя].ПолучитьСсылку(ИдентификаторПолучатель); Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда Возврат Неопределено; Иначе Возврат СсылкаНаОбъект; КонецЕсли; ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение)) Тогда Возврат ПолучитьЗначениеПеречислениеОЛЕ(Значение); КонецЕсли; КонецФункции //функция переносит свойства из базы источника в базу приемника //СсылкаБазы - ссылка на элемент базы из которой переносятся свойства, например Номенклатура или характеристика //СсылкаОЛЕ - ссылка на элемент базы в которую переносятся свойства Функция СоздатьСвойства(СсылкаБазы,СсылкаОЛЕ) НаборЗаписейЗначенияСвойствОЛЕ = Соединение.РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей(); НаборЗаписейЗначенияСвойствОЛЕ.Отбор.Объект.Использование = Истина; НаборЗаписейЗначенияСвойствОЛЕ.Отбор.Объект.Значение = СсылкаОЛЕ; НаборЗаписейЗначенияСвойствОЛЕ.Очистить(); Запрос = Новый Запрос; ТекстЗапроса = "ВЫБРАТЬ | ЗначенияСвойствОбъектов.Объект, | ЗначенияСвойствОбъектов.Свойство, | ЗначенияСвойствОбъектов.Значение |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов |ГДЕ | ЗначенияСвойствОбъектов.Объект = &Ссылка"; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("Ссылка",СсылкаБазы); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл СтрокаНабораЗаписейОЛЕ = НаборЗаписейЗначенияСвойствОЛЕ.Добавить(); СтрокаНабораЗаписейОЛЕ.Объект = ПолучитьЗначениеПоВиду(Выборка.Объект); СтрокаНабораЗаписейОЛЕ.Свойство = ПолучитьЗначениеПоВиду(Выборка.Свойство); Если ТипЗнч(Выборка.Значение) = Тип("Строка") или ТипЗнч(Выборка.Значение) = Тип("Число") или ТипЗнч(Выборка.Значение) = Тип("Дата") или ТипЗнч(Выборка.Значение) = Тип("Булево") Тогда СтрокаНабораЗаписейОЛЕ.Значение = Выборка.Значение; Иначе СтрокаНабораЗаписейОЛЕ.Значение = ПолучитьЗначениеПоВиду(Выборка.Значение); КонецЕсли; КонецЦикла; НаборЗаписейЗначенияСвойствОЛЕ.Записать(); КонецФункции Функция ПолучитьВидКонтактнойИнформации(ВидКонтактнойИнформации) ВидКонтактнойИнформацииОЛЕ = Соединение.Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию(СокрЛП(ВидКонтактнойИнформации.Наименование)); Если ВидКонтактнойИнформацииОЛЕ.Пустая() Тогда ВидКонтактнойИнформацииОЛЕ = Соединение.Справочники.ВидыКонтактнойИнформации.СоздатьЭлемент(); ВидКонтактнойИнформацииОЛЕ.Код = ВидКонтактнойИнформации.Код; ВидКонтактнойИнформацииОЛЕ.Наименование = ВидКонтактнойИнформации.Наименование; ВидКонтактнойИнформацииОЛЕ.Тип = ПолучитьЗначениеПеречислениеОЛЕ(ВидКонтактнойИнформации.Тип); ВидКонтактнойИнформацииОЛЕ.ВидОбъектаКонтактнойИнформации = ПолучитьЗначениеПеречислениеОЛЕ(ВидКонтактнойИнформации.ВидОбъектаКонтактнойИнформации); ВидКонтактнойИнформацииОЛЕ.Записать(); Возврат ВидКонтактнойИнформацииОЛЕ.Ссылка; Иначе Возврат ВидКонтактнойИнформацииОЛЕ; КонецЕсли; КонецФункции Функция ЗаполнитьКонтактнуюИнформацию(КонтактноеЛицКонтрагента,ОбъектКонтактноеЛицоКонтрагентаОЛЕ) НаборКонтактнойИнформации = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); УправлениеКонтактнойИнформацией.ПрочитатьКонтактнуюИнформацию(НаборКонтактнойИнформации, КонтактноеЛицКонтрагента); НаборКонтактнойИнформацииОЛЕ = Соединение.РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); НаборКонтактнойИнформацииОЛЕ.Отбор.Объект.Значение = ОбъектКонтактноеЛицоКонтрагентаОЛЕ.Ссылка; НаборКонтактнойИнформацииОЛЕ.Отбор.Объект.Использование = Истина; Для Каждого СтрокаНабора Из НаборКонтактнойИнформации Цикл ЗаписьОЛЕ = НаборКонтактнойИнформацииОЛЕ.Добавить(); ЗаписьОЛЕ.Объект = ОбъектКонтактноеЛицоКонтрагентаОЛЕ.Ссылка; ЗаписьОЛЕ.Тип = ПолучитьЗначениеПеречислениеОЛЕ(СтрокаНабора.Тип); ЗаписьОЛЕ.Вид = ПолучитьВидКонтактнойИнформации(СтрокаНабора.Вид); Для Каждого Реквизит Из Метаданные.РегистрыСведений.КонтактнаяИнформация.Ресурсы Цикл ЗаписьОЛЕ[Реквизит.Имя] = СтрокаНабора[Реквизит.Имя]; КонецЦикла; КонецЦикла; НаборКонтактнойИнформацииОЛЕ.Записать(); КонецФункции Функция ПолучитьКонтактноеЛицо(КонтактноеЛицо,ПерезаписыватьРеквизиты=Ложь) Если Не ЗначениеЗаполнено(КонтактноеЛицо) Тогда Возврат Неопределено КонецЕсли; ИдентификаторИсточник = КонтактноеЛицо.УникальныйИдентификатор(); ИдентификаторПолучатель = Соединение.NewObject("УникальныйИдентификатор", СокрЛП(ИдентификаторИсточник)); СсылкаНаОбъект = Соединение.Справочники.КонтактныеЛица.ПолучитьСсылку(ИдентификаторПолучатель); Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда ОбъектКонтактноеЛицо = Соединение.Справочники.КонтактныеЛица.СоздатьЭлемент(); ОбъектКонтактноеЛицо.УстановитьСсылкуНового(СсылкаНаОбъект); ОбъектКонтактноеЛицо.ПометкаУдаления = КонтактноеЛицо.ПометкаУдаления; ОбъектКонтактноеЛицо.Код = КонтактноеЛицо.Ссылка.Код; ОбъектКонтактноеЛицо.Наименование = КонтактноеЛицо.Ссылка.Наименование; ОбъектКонтактноеЛицо.Записать(); Возврат ОбъектКонтактноеЛицо.Ссылка; Иначе Если ПерезаписыватьРеквизиты Тогда ОбъектКонтактноеЛицо = СсылкаНаОбъект.ПолучитьОбъект(); ОбъектКонтактноеЛицо.ПометкаУдаления = КонтактноеЛицо.ПометкаУдаления; ОбъектКонтактноеЛицо.Код = КонтактноеЛицо.Ссылка.Код; ОбъектКонтактноеЛицо.Наименование = КонтактноеЛицо.Ссылка.Наименование; ОбъектКонтактноеЛицо.Записать(); Возврат КонтактноеЛицо.Ссылка; Иначе Возврат СсылкаНаОбъект; КонецЕсли; КонецЕсли; КонецФункции Функция ПолучитьКонтактноеЛицоКонтрагента(КонтактноеЛицоКонтрагента,ПерезаписыватьРеквизиты=Ложь) Если Не ЗначениеЗаполнено(КонтактноеЛицоКонтрагента) Тогда Возврат Неопределено КонецЕсли; ИдентификаторИсточник = КонтактноеЛицоКонтрагента.УникальныйИдентификатор(); ИдентификаторПолучатель = Соединение.NewObject("УникальныйИдентификатор", СокрЛП(ИдентификаторИсточник)); СсылкаНаОбъект = Соединение.Справочники.КонтактныеЛицаКонтрагентов.ПолучитьСсылку(ИдентификаторПолучатель); Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда ОбъектКонтактноеЛицоКонтрагента = Соединение.Справочники.КонтактныеЛицаКонтрагентов.СоздатьЭлемент(); ОбъектКонтактноеЛицоКонтрагента.УстановитьСсылкуНового(СсылкаНаОбъект); ОбъектКонтактноеЛицоКонтрагента.ПометкаУдаления = КонтактноеЛицоКонтрагента.ПометкаУдаления; ОбъектКонтактноеЛицоКонтрагента.Код = КонтактноеЛицоКонтрагента.Ссылка.Код; ОбъектКонтактноеЛицоКонтрагента.Наименование = КонтактноеЛицоКонтрагента.Ссылка.Наименование; ОбъектКонтактноеЛицоКонтрагента.Владелец = ПолучитьКонтрагента(КонтактноеЛицоКонтрагента.Владелец); ОбъектКонтактноеЛицоКонтрагента.КонтактноеЛицо = ПолучитьКонтактноеЛицо(КонтактноеЛицоКонтрагента); ОбъектКонтактноеЛицоКонтрагента.Записать(); ЗаполнитьКонтактнуюИнформацию(КонтактноеЛицоКонтрагента,ОбъектКонтактноеЛицоКонтрагента); Иначе Если ПерезаписыватьРеквизиты Тогда ОбъектКонтактноеЛицоКонтрагента = СсылкаНаОбъект.ПолучитьОбъект(); ОбъектКонтактноеЛицоКонтрагента.ПометкаУдаления = КонтактноеЛицоКонтрагента.ПометкаУдаления; ОбъектКонтактноеЛицоКонтрагента.Код = КонтактноеЛицоКонтрагента.Ссылка.Код; ОбъектКонтактноеЛицоКонтрагента.Наименование = КонтактноеЛицоКонтрагента.Ссылка.Наименование; ОбъектКонтактноеЛицоКонтрагента.Владелец = ПолучитьКонтрагента(КонтактноеЛицоКонтрагента.Владелец); ОбъектКонтактноеЛицоКонтрагента.КонтактноеЛицо = ПолучитьКонтактноеЛицо(КонтактноеЛицоКонтрагента); ОбъектКонтактноеЛицоКонтрагента.Записать(); ЗаполнитьКонтактнуюИнформацию(КонтактноеЛицоКонтрагента,ОбъектКонтактноеЛицоКонтрагента); Возврат КонтактноеЛицоКонтрагента.Ссылка; Иначе Возврат СсылкаНаОбъект; КонецЕсли; КонецЕсли; КонецФункции Функция ПолучитьЕдиницуИзмерения(ЕдиницаИзмерения) ИдентификаторИсточник = ЕдиницаИзмерения.УникальныйИдентификатор(); ИдентификаторПолучатель = Соединение.NewObject("УникальныйИдентификатор", СокрЛП(ИдентификаторИсточник)); СсылкаНаОбъект = Соединение.Справочники.ЕдиницыИзмерения.ПолучитьСсылку(ИдентификаторПолучатель); Возврат СсылкаНаОбъект; КонецФункции Функция СоздатьБанковскиеСчета(Контрагент,ОЛЕВладелец) Если Не ЗначениеЗаполнено(Контрагент) Тогда Возврат Неопределено КонецЕсли; Выборка = Справочники.БанковскиеСчета.Выбрать(,Контрагент); Пока Выборка.Следующий() Цикл ИдентификаторИсточник = Выборка.Ссылка.УникальныйИдентификатор(); ИдентификаторПолучатель = Соединение.NewObject("УникальныйИдентификатор", СокрЛП(ИдентификаторИсточник)); СсылкаНаОбъект = Соединение.Справочники.БанковскиеСчета.ПолучитьСсылку(ИдентификаторПолучатель); Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда ОбъектБанковскиеСчета = Соединение.Справочники.БанковскиеСчета.СоздатьЭлемент(); ОбъектБанковскиеСчета.УстановитьСсылкуНового(СсылкаНаОбъект); ОбъектБанковскиеСчета.Код = Выборка.Ссылка.Код; ОбъектБанковскиеСчета.Наименование = Выборка.Ссылка.Наименование; ОбъектБанковскиеСчета.Владелец = ОЛЕВладелец; ОбъектБанковскиеСчета.НомерСчета = Выборка.Ссылка.НомерСчета; ОбъектБанковскиеСчета.Банк = Соединение.Справочники.Банки.НайтиПоКоду(Выборка.Ссылка.Банк.Код); ОбъектБанковскиеСчета.БанкДляРасчетов = Соединение.Справочники.Банки.НайтиПоКоду(Выборка.Ссылка.БанкдляРасчетов.Код); ОбъектБанковскиеСчета.ТекстКорреспондента = Выборка.Ссылка.ТекстКорреспондента; ОбъектБанковскиеСчета.ТекстНазначения = Выборка.Ссылка.ТекстНазначения; ОбъектБанковскиеСчета.ВидСчета = Выборка.Ссылка.ВидСчета; ОбъектБанковскиеСчета.ВалютаДенежныхСредств = ПолучитьЗначениеВалюты(Выборка.Ссылка.ВалютаДенежныхСредств); ОбъектБанковскиеСчета.НомерИДатаРазрешения = Выборка.Ссылка.НомерИДатаРазрешения; ОбъектБанковскиеСчета.ДатаОткрытия = Выборка.Ссылка.ДатаОткрытия; ОбъектБанковскиеСчета.ДатаЗакрытия = Выборка.Ссылка.ДатаЗакрытия; ОбъектБанковскиеСчета.МесяцПрописью = Выборка.Ссылка.МесяцПрописью; ОбъектБанковскиеСчета.СуммаБезКопеек = Выборка.Ссылка.СуммаБезКопеек; ОбъектБанковскиеСчета.Записать(); КонецЕсли; КонецЦикла; КонецФункции Функция ПолучитьБанковскийСчет(БанковскийСчет,ПерезаписыватьРеквизиты=Ложь) Если Не ЗначениеЗаполнено(БанковскийСчет.Владелец) Тогда Возврат Неопределено КонецЕсли; ИдентификаторИсточник = БанковскийСчет.УникальныйИдентификатор(); ИдентификаторПолучатель = Соединение.NewObject("УникальныйИдентификатор", СокрЛП(ИдентификаторИсточник)); СсылкаНаОбъект = Соединение.Справочники.БанковскийСчетыКонтрагентов.ПолучитьСсылку(ИдентификаторПолучатель); Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда Возврат Неопределено; Иначе Если ПерезаписыватьРеквизиты Тогда ОбъектБанковскиеСчета = СсылкаНаОбъект.ПолучитьОбъект(); ОбъектБанковскиеСчета.Код = БанковскийСчет.Код; ОбъектБанковскиеСчета.Наименование = БанковскийСчет.Наименование; ОбъектБанковскиеСчета.Владелец = ПолучитьКонтрагента(БанковскийСчет.Владелец); ОбъектБанковскиеСчета.НомерСчета = БанковскийСчет.НомерСчета; ОбъектБанковскиеСчета.Банк = Соединение.Справочники.Банки.НайтиПоКоду(БанковскийСчет.Банк.Код); ОбъектБанковскиеСчета.БанкДляРасчетов = Соединение.Справочники.Банки.НайтиПоКоду(БанковскийСчет.БанкдляРасчетов.Код); ОбъектБанковскиеСчета.ТекстКорреспондента = БанковскийСчет.ТекстКорреспондента; ОбъектБанковскиеСчета.ТекстНазначения = БанковскийСчет.ТекстНазначения; ОбъектБанковскиеСчета.ВидСчета = БанковскийСчет.ВидСчета; ОбъектБанковскиеСчета.ВалютаДенежныхСредств = ПолучитьЗначениеВалюты(БанковскийСчет.ВалютаДенежныхСредств); ОбъектБанковскиеСчета.НомерИДатаРазрешения = БанковскийСчет.НомерИДатаРазрешения; ОбъектБанковскиеСчета.ДатаОткрытия = БанковскийСчет.ДатаОткрытия; ОбъектБанковскиеСчета.ДатаЗакрытия = БанковскийСчет.ДатаЗакрытия; ОбъектБанковскиеСчета.МесяцПрописью = БанковскийСчет.МесяцПрописью; ОбъектБанковскиеСчета.СуммаБезКопеек = БанковскийСчет.СуммаБезКопеек; ОбъектБанковскиеСчета.Записать(); Возврат ОбъектБанковскиеСчета.Ссылка; Иначе Возврат СсылкаНаОбъект; КонецЕсли; КонецЕсли; КонецФункции Функция СоздатьДоговоры(Контрагент,ОЛЕВладелец) Если Не ЗначениеЗаполнено(Контрагент) Тогда Возврат Неопределено КонецЕсли; Выборка = Справочники.ДоговорыКонтрагентов.Выбрать(,Контрагент); Пока Выборка.Следующий() Цикл ИдентификаторИсточник = Выборка.Ссылка.УникальныйИдентификатор(); ИдентификаторПолучатель = Соединение.NewObject("УникальныйИдентификатор", СокрЛП(ИдентификаторИсточник)); СсылкаНаОбъект = Соединение.Справочники.ДоговорыКонтрагентов.ПолучитьСсылку(ИдентификаторПолучатель); Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда ОбъектДоговоры = Соединение.Справочники.ДоговорыКонтрагентов.СоздатьЭлемент(); ОбъектДоговоры.УстановитьСсылкуНового(СсылкаНаОбъект); ОбъектДоговоры.ПометкаУдаления = Выборка.ПометкаУдаления; ОбъектДоговоры.Наименование = Выборка.Наименование; ОбъектДоговоры.Владелец = ОЛЕВладелец; ОбъектДоговоры.Организация = Соединение.Справочники.Организации.НайтиПоКоду("000000001"); ОбъектДоговоры.ВидДоговора = ПолучитьЗначениеПеречислениеОЛЕ(Выборка.ВидДоговора); ОбъектДоговоры.ПроцентПредоплаты = Выборка.ПроцентПредоплаты; ОбъектДоговоры.Дата = Выборка.Дата; ОбъектДоговоры.ВедениеВзаиморасчетов = ПолучитьЗначениеПеречислениеОЛЕ(Выборка.ВедениеВзаиморасчетов); ОбъектДоговоры.ВалютаВзаиморасчетов = ПолучитьЗначениеВалюты(Выборка.ВалютаВзаиморасчетов); ОбъектДоговоры.ВидУсловийДоговора = ПолучитьЗначениеПеречислениеОЛЕ(Выборка.ВидУсловийДоговора); ОбъектДоговоры.Номер = Выборка.Номер; ОбъектДоговоры.СрокДействия = Выборка.СрокДействия; ОбъектДоговоры.КонтролироватьСуммуЗадолженности = Выборка.КонтролироватьСуммуЗадолженности; ОбъектДоговоры.КонтролироватьЧислоДнейЗадолженности = Выборка.КонтролироватьЧислоДнейЗадолженности; ОбъектДоговоры.Записать(); КонецЕсли; КонецЦикла; КонецФункции Функция ПолучитьДоговор(Договор,ПерезаписыватьРеквизиты=Ложь); Если Не ЗначениеЗаполнено(Договор) Тогда Возврат Неопределено КонецЕсли; ИдентификаторИсточник = Договор.УникальныйИдентификатор(); ИдентификаторПолучатель = Соединение.NewObject("УникальныйИдентификатор", СокрЛП(ИдентификаторИсточник)); СсылкаНаОбъект = Соединение.Справочники.ДоговорыКонтрагентов.ПолучитьСсылку(ИдентификаторПолучатель); Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда Возврат Неопределено; Иначе Если ПерезаписыватьРеквизиты Тогда ОбъектДоговоры = СсылкаНаОбъект.ПолучитьОбъект(); ОбъектДоговоры.ПометкаУдаления = Договор.ПометкаУдаления; ОбъектДоговоры.Код = Договор.Ссылка.Код; ОбъектДоговоры.Наименование = Договор.Ссылка.Наименование; ОбъектДоговоры.Владелец = ПолучитьКонтрагента(Договор.Владелец); ОбъектДоговоры.Организация = Справочники.Организации.НайтиПоКоду("000000001"); ОбъектДоговоры.ВидДоговора = ПолучитьЗначениеПеречислениеОЛЕ(Договор.Ссылка.ВидДоговора); ОбъектДоговоры.ПроцентПредоплаты = Договор.Ссылка.ПроцентОплаты; ОбъектДоговоры.Дата = Договор.Ссылка.Дата; ОбъектДоговоры.Номер = Договор.Ссылка.Номер; ОбъектДоговоры.СрокДействия = Договор.Ссылка.СрокДействия; ОбъектДоговоры.КонтролироватьСуммуЗадолженности = Договор.Ссылка.КонтролироватьСуммуЗадолженности; ОбъектДоговоры.КонтролироватьЧислоДнейЗадолженности = Договор.Ссылка.КонтролироватьЧислоДнейЗадолженности; ОбъектДоговоры.Записать(); Возврат ОбъектДоговоры.Ссылка; Иначе Возврат СсылкаНаОбъект; КонецЕсли; КонецЕсли; КонецФункции Функция ПолучитьТипЦен(ТипЦен,ПерезаписыватьРеквизиты=Ложь) Если Не ЗначениеЗаполнено(ТипЦен) Тогда Возврат Неопределено; КонецЕсли; ИдентификаторИсточник = ТипЦен.УникальныйИдентификатор(); ИдентификаторПолучатель = Соединение.NewObject("УникальныйИдентификатор", СокрЛП(ИдентификаторИсточник)); СсылкаНаОбъект = Соединение.Справочники.ТипыЦенНоменклатуры.ПолучитьСсылку(ИдентификаторПолучатель); Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда ОбъектТипЦены = Соединение.Справочники.ТипыЦенНоменклатуры.СоздатьЭлемент(); ОбъектТипЦены.УстановитьСсылкуНового(СсылкаНаОбъект); ОбъектТипЦены.ПометкаУдаления = ТипЦен.ПометкаУдаления; ОбъектТипЦены.Код = ТипЦен.Ссылка.Код; ОбъектТипЦены.Наименование = ТипЦен.Ссылка.Наименование; ОбъектТипЦены.ВалютаЦены = Соединение.Константы.ВалютаУправленческогоУчета.Получить(); ОбъектТипЦены.ЦенаВключаетНДС = Истина; ОбъектТипЦены.Записать(); Возврат ОбъектТипЦены.Ссылка; Иначе Если ПерезаписыватьРеквизиты Тогда ОбъектТипЦены = СсылкаНаОбъект.ПолучитьОбъект(); ОбъектТипЦены.ПометкаУдаления = ТипЦен.ПометкаУдаления; ОбъектТипЦены.Код = ТипЦен.Ссылка.Код; ОбъектТипЦены.Наименование = ТипЦен.Ссылка.Наименование; ОбъектТипЦены.ВалютаЦены = Соединение.Константы.ВалютаУправленческогоУчета.Получить(); ОбъектТипЦены.ЦенаВключаетНДС = Истина; ОбъектТипЦены.Записать(); Возврат ОбъектТипЦены.Ссылка; Иначе Возврат СсылкаНаОбъект; КонецЕсли; КонецЕсли; КонецФункции Функция ПолучитьЗначениеПеречислениеОЛЕ(Перечисление) Если Не ЗначениеЗаполнено(Перечисление) Тогда Возврат Перечисления[Перечисление.Метаданные().Имя].ПустаяСсылка() КонецЕсли; Индекс = Перечисления[Перечисление.Метаданные().Имя].Индекс(Перечисление); Возврат Соединение.Перечисления[Перечисление.Метаданные().Имя].Получить(Индекс); КонецФункции Функция УстановитьЕдиницы(Номенклатура,ВладелецОЛЕ) Выборка = Справочники.ЕдиницыИзмерения.Выбрать(,Номенклатура); Пока Выборка.Следующий() Цикл ИдентификаторИсточник = Выборка.Ссылка.УникальныйИдентификатор(); ИдентификаторПолучатель = Соединение.NewObject("УникальныйИдентификатор", СокрЛП(ИдентификаторИсточник)); СсылкаНаОбъект = Соединение.Справочники.ЕдиницыИзмерения.ПолучитьСсылку(ИдентификаторПолучатель); Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда ОбъектЕдиница = Соединение.Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); ОбъектЕдиница.УстановитьСсылкуНового(СсылкаНаОбъект); ОбъектЕдиница.Наименование = Выборка.Ссылка.Наименование; ОбъектЕдиница.Код = Выборка.Ссылка.Код; ОбъектЕдиница.Владелец = ВладелецОЛЕ.Ссылка; ОбъектЕдиница.Записать(); КонецЕсли; КонецЦикла; КонецФункции Функция ПолучитьБазовуюЕдиницуИзмерения(БазоваяЕдиницаИзмерения,ПерезаписыватьРеквизиты = Ложь) ИдентификаторИсточник = БазоваяЕдиницаИзмерения.УникальныйИдентификатор(); ИдентификаторПолучатель = Соединение.NewObject("УникальныйИдентификатор", СокрЛП(ИдентификаторИсточник)); СсылкаНаОбъект = Соединение.Справочники.КлассификаторЕдиницИзмерения.ПолучитьСсылку(ИдентификаторПолучатель); Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда ОбъектКлассификаторЕдиницИзмерения = Соединение.Справочники.КлассификаторЕдиницИзмерения.СоздатьЭлемент(); ОбъектКлассификаторЕдиницИзмерения.УстановитьСсылкуНового(СсылкаНаОбъект); ОбъектКлассификаторЕдиницИзмерения.ПометкаУдаления = БазоваяЕдиницаИзмерения.ПометкаУдаления; ОбъектКлассификаторЕдиницИзмерения.Код = БазоваяЕдиницаИзмерения.Ссылка.Код; ОбъектКлассификаторЕдиницИзмерения.Наименование = БазоваяЕдиницаИзмерения.Ссылка.Наименование; ОбъектКлассификаторЕдиницИзмерения.НаименованиеПолное = БазоваяЕдиницаИзмерения.НаименованиеПолное; ОбъектКлассификаторЕдиницИзмерения.МеждународноеСокращение = БазоваяЕдиницаИзмерения.МеждународноеСокращение; ОбъектКлассификаторЕдиницИзмерения.Записать(); Возврат ОбъектКлассификаторЕдиницИзмерения.Ссылка; Иначе Если ПерезаписыватьРеквизиты Тогда ОбъектКлассификаторЕдиницИзмерения = СсылкаНаОбъект.ПолучитьОбъект(); ОбъектКлассификаторЕдиницИзмерения.ПометкаУдаления = БазоваяЕдиницаИзмерения.ПометкаУдаления; ОбъектКлассификаторЕдиницИзмерения.Код = БазоваяЕдиницаИзмерения.Ссылка.Код; ОбъектКлассификаторЕдиницИзмерения.Наименование = БазоваяЕдиницаИзмерения.Ссылка.Наименование; ОбъектКлассификаторЕдиницИзмерения.НаименованиеПолное = БазоваяЕдиницаИзмерения.НаименованиеПолное; ОбъектКлассификаторЕдиницИзмерения.МеждународноеСокращение = БазоваяЕдиницаИзмерения.МеждународноеСокращение; ОбъектКлассификаторЕдиницИзмерения.Записать(); Возврат ОбъектКлассификаторЕдиницИзмерения.Ссылка; Иначе Возврат СсылкаНаОбъект; КонецЕсли; КонецЕсли; КонецФункции Функция ПолучитьНоменклатуру(Номенклатура,ПерезаписыватьРеквизиты=Ложь) Если Не ЗначениеЗаполнено(Номенклатура) Тогда Возврат Неопределено КонецЕсли; ИдентификаторИсточник = Номенклатура.УникальныйИдентификатор(); ИдентификаторПолучатель = Соединение.NewObject("УникальныйИдентификатор", СокрЛП(ИдентификаторИсточник)); СсылкаНаОбъект = Соединение.Справочники.Номенклатура.ПолучитьСсылку(ИдентификаторПолучатель); Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда //такая Номенклатура отстутсвует Если Номенклатура.ЭтоГруппа Тогда ОЛЕНоменклатура = Соединение.Справочники.Номенклатура.СоздатьГруппу(); ОЛЕНоменклатура.УстановитьСсылкуНового(СсылкаНаОбъект); ОЛЕНоменклатура.ПометкаУдаления = Номенклатура.ПометкаУдаления; ОЛЕНоменклатура.Родитель = ПолучитьНоменклатуру(Номенклатура.Родитель); ОЛЕНоменклатура.Код = Номенклатура.Код; ОЛЕНоменклатура.Наименование = Номенклатура.Наименование; ОЛЕНоменклатура.Записать(); Возврат ОЛЕНоменклатура.Ссылка; Иначе ОЛЕНоменклатура = Соединение.Справочники.Номенклатура.СоздатьЭлемент(); ОЛЕНоменклатура.УстановитьСсылкуНового(СсылкаНаОбъект); ОЛЕНоменклатура.Родитель = ПолучитьНоменклатуру(Номенклатура.Родитель); ОЛЕНоменклатура.ПометкаУдаления = Номенклатура.ПометкаУдаления; ОЛЕНоменклатура.Код = Номенклатура.Код; ОЛЕНоменклатура.Наименование = Номенклатура.Наименование; ОЛЕНоменклатура.НаименованиеПолное = Номенклатура.НаименованиеПолное; ОЛЕНоменклатура.БазоваяЕдиницаИзмерения = ПолучитьБазовуюЕдиницуИзмерения(Номенклатура.БазоваяЕдиницаИзмерения); ОЛЕНоменклатура.ВестиУчетПоХарактеристикам = Номенклатура.ВестиУчетПоХарактеристикам; ОЛЕНоменклатура.СтавкаНДС = Соединение.Перечисления.СтавкиНДС.НДС18; ОЛЕНоменклатура.Артикул = Номенклатура.Артикул; ОЛЕНоменклатура.ВидНоменклатуры = Соединение.Справочники.ВидыНоменклатуры.НайтиПоКоду("000000001"); ОЛЕНоменклатура.Записать(); УстановитьЕдиницы(Номенклатура,ОЛЕНоменклатура); ОЛЕНоменклатура.ЕдиницаХраненияОстатков = ПолучитьЕдиницуИзмерения(Номенклатура.ЕдиницаХраненияОстатков); ОЛЕНоменклатура.ЕдиницаИзмеренияМест = ПолучитьЕдиницуИзмерения(Номенклатура.ЕдиницаИзмеренияМест); ОЛЕНоменклатура.ТипЦенРеквизит = ПолучитьТипЦен(Номенклатура.ТипЦенРеквизит); ОЛЕНоменклатура.Записать(); Возврат ОЛЕНоменклатура.Ссылка; КонецЕсли; Иначе Если ПерезаписыватьРеквизиты Тогда Если Номенклатура.ЭтоГруппа Тогда ОЛЕНоменклатура = СсылкаНаОбъект.ПолучитьОбъект(); ОЛЕНоменклатура.ПометкаУдаления = Номенклатура.ПометкаУдаления; ОЛЕНоменклатура.Родитель = ПолучитьНоменклатуру(Номенклатура.Родитель); ОЛЕНоменклатура.Код = Номенклатура.Код; ОЛЕНоменклатура.Наименование = Номенклатура.Наименование; ОЛЕНоменклатура.Записать(); Возврат ОЛЕНоменклатура.Ссылка; Иначе ОЛЕНоменклатура = СсылкаНаОбъект.ПолучитьОбъект(); ОЛЕНоменклатура.Родитель = ПолучитьНоменклатуру(Номенклатура.Родитель); ОЛЕНоменклатура.ПометкаУдаления = Номенклатура.Пометк |
|||
23
illi_dan
04.05.18
✎
22:17
|
(20) код как я понимаю тоже уникальный идентификатор объекта?Использовать уникальные идентификаторы нельзя, у меня нету тз, есть просто задание по итогу которого либо я подхожу,либо нет.Смотрят скорее всего на умение нестандартно мыслить и быстро обучаться.
|
|||
24
MakaMaka
04.05.18
✎
22:18
|
Соединение.Справочники.Номенклатура.СоздатьГруппу();
НормальнО? Не долго работает? Не напрягает? |
|||
25
Египтянин
04.05.18
✎
22:19
|
(23) код и наименование это реквизит, который есть у всех справочников. Если стоит галочка уникальность кодов, то уникальный, если не стоит то не уникальный.
|
|||
26
Египтянин
04.05.18
✎
22:19
|
(24) в 2006 году с этими вашими экспертами не парились, писали абы работало.
|
|||
27
MakaMaka
04.05.18
✎
22:20
|
(23) Если тебе надо выгружать данные и нет идентификаторов, то ищи либо по наименованию либо по коду. НЕ ЗАБУДЬ ЮНЫЙ ПАДАВАН ПРОВЕРЯТЬ НА ГРУППУ! Наименование это прекрасно, но НЕЛЬЗЯ забывать о иерархии справочников!
|
|||
28
Египтянин
04.05.18
✎
22:20
|
это еще под 8.0 загрузка.
|
|||
29
Египтянин
04.05.18
✎
22:21
|
(23) а куда ты хоть устраиваешься? Франчайзи, фикси?
|
|||
30
MakaMaka
04.05.18
✎
22:21
|
(28) Да я и не говорю что не рабочий вариант, рабочий и очень даже, но есть способ сделать тоже самое технологичнее и проще ( на мой взгляд) но код нормальный, молодец.
|
|||
31
MakaMaka
04.05.18
✎
22:22
|
(29) это недофранч с неочень грамотным руководителем. На фикси он бы сидел с отчетом. А это если фикси, то скорее всего на нетленку с обменом с таким же нетленным сайтом
|
|||
32
Египтянин
04.05.18
✎
22:28
|
(30) Ну спасибо! Ты же говорил, скрипящее инвалидное колесо. Однако у людей небось до сих пор работает.
(31) а ты откуда знаешь куда он устраивается? |
|||
33
MakaMaka
04.05.18
✎
22:30
|
(32) Да работает, оно тихо работает и тихо отваливается. Ты вот как поймешь работает выгрузка или спотыкается?
Выход у тебя один, Попытка Попытка Попытка Попытка Исключение КонецПопытки; Исключение КонецПопытки; Исключение КонецПопытки; Исключение КонецПопытки; |
|||
34
Египтянин
04.05.18
✎
22:32
|
(33) где ты там в моем коде хоть одну Попытка Исключение нашел?
|
|||
35
MakaMaka
04.05.18
✎
22:32
|
(32) А я вижу что он спрашивает.
Так что там про попытки? Сколько у тебя их? если у тебя их нет, то выгрузка точно инвалид, т.к. она тихо отвалится и усе, тушите свет |
|||
36
MakaMaka
04.05.18
✎
22:35
|
а отвалится она через 2-3 релиза обновления базы приемника, т.к. все меняется очень быстро.
|
|||
37
Египтянин
04.05.18
✎
22:35
|
(35) але она через планы обмена работает. Если она отвалится, то при следующей выгрузке/загрузке отработает.
|
|||
38
Египтянин
04.05.18
✎
22:36
|
(36) А чего есть такой обмен, который при изменении релизов не отваливается?
|
|||
39
MakaMaka
04.05.18
✎
22:37
|
Тогда забираю слова назад про выгрузку, т.к. у нас просто через КОМ работает выгрузка, типа как хочет ТС, это дичь дикая.
|
|||
40
MakaMaka
04.05.18
✎
22:40
|
Короче без плана обмена подобная выгрузка дикая дичь. Я видел как она реализована на 2 РС, это вырви глаз.
|
|||
41
Египтянин
04.05.18
✎
22:40
|
ну перепишите как то так
|
|||
42
Египтянин
04.05.18
✎
22:40
|
Соединение = Неопределено;
ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); Узел = ПланыОбмена.ТорговаяБаза.НайтиПоКоду("000000003"); ИмяБазы = Узел.ИмяБазыДанных; ИмяСервера = Узел.СерверБазыДанных; Пользователь = Узел.Пользователь; Пароль = Узел.Пароль; ВыполнитьСоединение(ТипСоединения); ЗапСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); ЗапСообщения.НачатьЗапись(ЗаписьXML, Узел); Выборка = ПланыОбмена.ВыбратьИзменения(Узел, ЗапСообщения.НомерСообщения); Пока Выборка.Следующий() Цикл Данные = Выборка.Получить(); Если ТипЗнч(Данные) = Тип("ДокументОбъект.РеализацияТоваровУслуг") Тогда ВыгрузитьДокументРеализацияТоваровУслуг(Данные.Ссылка); ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Данные); ИначеЕсли ТипЗнч(Данные) = Тип("ДокументОбъект.ВозвратТоваровОтПокупателя") Тогда ВыгрузитьДокументВозвратОтПокупателя(Данные.Ссылка); ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Данные); ИначеЕсли ТипЗнч(Данные) = Тип("СправочникОбъект.Номенклатура") Тогда ПолучитьНоменклатуру(Данные.Ссылка,Истина); ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Данные); ИначеЕсли ТипЗнч(Данные) = Тип("СправочникОбъект.ХарактеристикиНоменклатуры") Тогда ПолучитьХарактеристику(Данные.Ссылка,Истина); ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Данные); КонецЕсли; КонецЦикла; |
|||
43
MakaMaka
04.05.18
✎
22:42
|
(42) вот тут я могу сказать, проще сделать правила регистрации, что бы регистрировать все с отборами и прочими плюшками. Т.к. только регистрация объекта проходит дважды, при записи и в момент выгрузки, ТС об этом вообще не знает. Для него это темный лес.
|
|||
44
Египтянин
04.05.18
✎
22:43
|
(43) ну отключи автоматическую регистрацию, напиши свою.
|
|||
45
MakaMaka
04.05.18
✎
22:46
|
(44) А ее полюбому отключать, иначе БСП работать не будет.
|
|||
46
MakaMaka
04.05.18
✎
22:47
|
Египтянин код зачетный, честно. Нормальная обработка, еще раз извиняюсь за дерзость и наглость, ты меня хорошо обсадил. Признаю.
|
|||
47
Asmody
04.05.18
✎
22:48
|
(22) За слово 'OLE' в 2018 году принято давать клавиатурой по рукам.
|
|||
48
Египтянин
04.05.18
✎
22:52
|
(47) Успокойси, код 2006 года, я сам уже лет 5-7 ничего не пишу.
|
|||
49
systemstopper
04.05.18
✎
22:55
|
(47) а как надо говорить?
|
|||
50
systemstopper
04.05.18
✎
22:55
|
(48) а что ты делаешь сам?
|
|||
51
Египтянин
04.05.18
✎
22:57
|
(50) да х. пинаю.
|
|||
52
MakaMaka
04.05.18
✎
23:13
|
(49) надо не говорить, а надо делать, планы обмена по правилам конвертации и регистрации. КД 2.1 минимум и хорошо если КД 3.0,
|
|||
53
illi_dan
05.05.18
✎
00:08
|
(29) (27) Навалял рекурсивную функцию пока без проверки на группу,однако падает с ошибкой "преобразование к типу Число не может быть выполнено"
&НаСервере функция ЗаписатьФайл(ДокСсылка) перем Метаданные; Метаданные=ДокСсылка.метаданные(); Текст=новый ТекстовыйДокумент; Для Каждого реквизит из Метаданные.реквизиты цикл Если Найти(реквизит.ПолноеИмя(),"Ссылка")>0 Тогда ЗаписатьФайл(метаданные.НайтиПоНомеру(реквизит.номер())); Иначе Текст.ДобавитьСтроку(реквизит + ":"+ДокСсылка[реквизит.Имя]+Символы.ПС); КонецЕсли КонецЦикла; Текст.Записать(объект.ПутьКФайлу); КонецФункции |
|||
54
hhhh
05.05.18
✎
00:26
|
(53) назвать переменную "Метаданные" - это извини меня дебилизм. Это слово занято.
пиши проще ХренЗнаетКАкаяПеременная = ДокСсылка.метаданные(); и вот это что за бред? НайтиПоНомеру(реквизит.номер()) то есть у тебя есть реквизит. Но ты как бы не хочешь к нему обратиться. Хочешь еще прогнать по кругу поиск, чтобы было занятно. Зачем его искать, когда он есть уже? |
|||
55
mexanik_96
05.05.18
✎
00:33
|
почему запрещено то, почему запрещено это?
|
|||
56
illi_dan
05.05.18
✎
00:46
|
(54) да,показалось что эта функция как взятие адреса в "c")
|
|||
57
hhhh
05.05.18
✎
00:55
|
(56) реквизит - это и есть адрес.
|
|||
58
illi_dan
05.05.18
✎
02:02
|
Прогнал в отладчике
Если Найти(реквизит.ПолноеИмя(),"Ссылка")>0 Тогда Сюда вообще не заходит,и при обращении по [] выдает ошибку "преобразование к типу Число не может быть выполнено",в чем может быть проблема? |
|||
59
illi_dan
05.05.18
✎
02:05
|
Ан нет,работает вроде бы со скрипом,но в условие не заходит(
|
|||
60
hhhh
05.05.18
✎
02:19
|
(59) ну нет в имени реквизита слова "Ссылка". Очень редки такие имена. Обычно простое имя реквизита "Контрагент", "Склад", например. Наверно вам не имя нужно, а тип реквизита.
|
|||
61
illi_dan
05.05.18
✎
02:39
|
(60) Да,мне нужно узнать является ли эта переменная ссылкой.Однако я работаю с метаданными, и ТипЗнч от него возвращает просто "объект метаданных" вне зависимости от того,ссылка это или нет. И не знаю,как решить(
|
|||
62
Провинциальный 1сник
05.05.18
✎
02:49
|
(8) Главное не забыть о возможности циклических ссылок.. Стандартная сериализация ЗначениеВСтрокуВнутр и сериализация в XML на этом роняют платформу.
|
|||
63
hhhh
05.05.18
✎
02:54
|
(61) глупо писать ТипЗнч, пиши Тип. Ну и вообще открой справку, хотя бы для хохмы. Ctrl-F1 очень удобная вещь, называется синтакс помощник.
|
|||
64
mistеr
05.05.18
✎
09:09
|
(61) Ты справкой принципиально не пользуешься?
|
|||
65
Lama12
05.05.18
✎
10:39
|
ИМХО. Похоже (0) студен сдающий зачет.
|
|||
66
MakaMaka
05.05.18
✎
14:16
|
(65) походу он пересдающий зачет и студенту грозят весенним призывом.
|
|||
67
ugorchina
05.05.18
✎
15:35
|
(0) а куда усстраиваешься то? Я то же хочу!
|
|||
68
NSSerg
05.05.18
✎
16:19
|
(47) А если разовую задачу, которую при помощи ОЛЕ можно написать за 5 минут - пишут час чтоб не получить клавиатурой по рукам - что в этом случае делать?
|
|||
69
Garykom
гуру
05.05.18
✎
16:50
|
(68) Зачем писать 5 минут, когда можно писать час?
|
|||
70
NSSerg
05.05.18
✎
17:54
|
(69) Потому что денег больше за то же время не получишь точно, а вот санкций от начальника, который разбирается в программировании - схлопотать можешь. И в любом случае от скорости решения задач зависят и репутация и зарплата.
|
|||
71
Garykom
гуру
05.05.18
✎
18:19
|
(70) Часто нечто временное (разовая задача) превращается в постоянно.
А когда переставили винду/платформу и OLE перестало работать это стабильная ситуация и на решение проблемы уйдет намного больше времени чем "час". И да использую веб-сервисы или иные способы (да хоть банальная выгрузка/загрузка файлов врукопашную или с помощью КД что еще проще) обычно сравнимы по скорости написания с OLE. А если человек больше ничего кроме ОЛЕ не знает тут уже извините. ЗЫ Сам был одно время фанатом ОЛЕ пока не столкнулся с траблами в будущем возникающими. |
|||
72
NSSerg
05.05.18
✎
19:08
|
(71) постоянная задача загрузки какой-то мелочи из экселя, загрузка на десяток строк. И что предлагается вместо оле?
|
|||
73
NSSerg
05.05.18
✎
19:13
|
(71) и при чем тут фанатство? нормальный разработчик использует то что эффективней для конкретной задачи. А когда разработчика бзикует на ограничениях, это уже здорово вредит работе, а когда он через файлы обмена или вебсервисы или с помощью КД пытается загрузить из экселя простейшую плоскую табличку - это уже, извините, человеку пора к доктору :)
|
|||
74
Garykom
гуру
05.05.18
✎
19:20
|
(72) Вместо оле предлагается ТабличныйДокумент.Прочитать()
|
|||
75
Garykom
гуру
05.05.18
✎
19:21
|
(73) Вменяемый разработчик должен думать "а что будет потом?" Вместо тяп/ляп и в продакшен.
Если ОЛЕ лучше чем все прочие методы - вперед и с песней. Но сначала ознакомьтесь со всеми прочими методами. |
|||
76
NSSerg
05.05.18
✎
20:37
|
(75) Ты следил вообще за веткой? На какой пост я отвечал?
Зачем ты мне сейчас это пишешь? Это я пишу о том, что если в данном случае ОЛЕ лучше, то извращение использовать другие методы. А ты со мной спорил. Теперь хочешь всё перевернуть с ног на голову? |
|||
77
Garykom
гуру
05.05.18
✎
20:48
|
(76) В 2018 году ОЛЕ лучше в 0.1% случаев.
|
|||
78
vis_tmp
05.05.18
✎
20:55
|
(74)Кстати, вопрос: как этим методом получить гиперссылку из ячейки Excel-а?
Гиперссылка представляет из себя URL на картинку на сайте. |
|||
79
Garykom
гуру
05.05.18
✎
21:49
|
(78) Обычный текст возвращается же
|
|||
80
NSSerg
05.05.18
✎
22:17
|
(77) любая разовая простая загрузка из эксель. это раз.
во вторых не в любом языке есть табличный документ. Сначала ты ограничил себя в методах, теперь ограничил себя восьмеркой. |
|||
81
NSSerg
05.05.18
✎
22:21
|
+ (80) а в третьих это маразм, когда есть прямые методы работы с данными, которые уже находятся в открытом на экране файле - городить огород вместо десяти простейших строк кода.
|
|||
82
Garykom
гуру
05.05.18
✎
23:00
|
(80) (81) Ответ будет только один.
С какого перепугу взял что MS Office установлен? |
|||
83
Garykom
гуру
05.05.18
✎
23:05
|
Зачем ограничивать себя одной технологией, который в придачу может и не быть?
Не проще использовать нечто более универсальное, куда можно засунуть данные разными способами. Пишешь загрузку из ТабДок, а как данные туда попали это уже отдельный вопрос. "Прочитать()", ВК (нативная/com) или нечто иное типа веб-сервиса это уже пофиг для нашего кода. В одном месте поменять/добавить и все работает. А если у тебя прямая загрузка из Excel через OLE без промежуточной ТЗ/ТД то привет, приехали. |
|||
84
ugorchina
06.05.18
✎
07:31
|
Многие спорят что лучше и все как один кричат что ОЛЕ это плохо да объясните уже наконец чем плох ОЛЕ?
|
|||
85
ugorchina
06.05.18
✎
07:32
|
(84) мне вот нравится работать с ОЛЕ но что в нем плохого то? Скорость,? , Что ещё?
|
|||
86
ugorchina
06.05.18
✎
07:46
|
+(85) и ещё поделитесь информацией можно ли как то из сторонней программы работать с По ОЛЕ с 1с как например у клиента стоит скажем атол рабочее место кассира и есть возможность внесения доработок в данную программу так вот я всегда задавался вопросом а как подружится к 1с напрямую и выполнять ее код из сторонней прогрыммы как например создать документ по ОЛЕ (но не между 1с и 1с а между мое ПО и 1с) ? Есть ли вообще такого рода возможность?
|
|||
87
hhhh
06.05.18
✎
08:30
|
(85) ОЛЕ уже всё. Пользуйся вэб-сервисами и другими новомодными штуками. Это абсолютно то же самое, даже код примерно такой же, но ряд преимуществ: не зависишь от платформы, автоматическая проверка входных параметров, работа со смартфонами и планшетами.
|
|||
88
ugorchina
06.05.18
✎
09:02
|
(87) как я понимаю ответ и на (86)?
|
|||
89
hhhh
06.05.18
✎
11:04
|
(88) ну это только для 7.7 имеет смысл, там реквизитов в документе 5, от силы 10 штук. А в восьмерке, там всё другое. Другие масштабы. Там реквизитов штук 50 + несколько табчастей, по 20-30 реквизитов в каждой. И многие из них являются справочниками или тоже документами. В общем еще и поиск по журналам и их рекурсивно создавать придется. Вставить такую программу внутрь программы атолл проблематично.
|
|||
90
vis_tmp
06.05.18
✎
11:35
|
(79)Тоже так думал, но нет возвращается текст "Изображение"...
|
|||
91
Garykom
гуру
06.05.18
✎
13:56
|
(90) "СпособЧтенияЗначений = Значение" не помогает?
|
|||
92
vis_tmp
06.05.18
✎
14:26
|
(90)Именно так и читаю
|
|||
93
vis_tmp
06.05.18
✎
14:27
|
(92)к(91)
|
|||
94
Garykom
гуру
06.05.18
✎
14:33
|
(92) А если наоборот Текст?
|
|||
95
DmitriyDI
06.05.18
✎
15:17
|
(0) с нуля такое писать можно неделями, а то и месяцами, чтобы все работало универсально, считаю, что эта задача перебор для собеседования.
|
|||
96
Garykom
гуру
06.05.18
✎
15:21
|
(95) Ты не совсем прав, это замечательная учебная задача.
В процессе даже если не напишет полностью рабочее то придется освоить кучу всего. Например при обходе/выгрузке реквизитов когда они объектные надо при рекурсии понимать когда остановиться. "Документ Реализация" - "Реквизит Справочник Контрагенты" - У справочника свои реквизиты и их тоже надо выгружать? А тут еще цикла получится когда совершенно случайно у справочника есть реквизит типа документ = Реализация )) |
|||
97
DmitriyDI
06.05.18
✎
15:28
|
(96) я не спорю, в качестве учебной, а вот в качестве для собеседования, считаю что перебор, не просят же написать с нуля базу аналог бухгалтерии, интересная задача, выучить можно массу всего и т.д.
ну тут явный перебор, я бы задумался стоит ли идти в такое место. |
|||
98
Йохохо
06.05.18
✎
15:35
|
(97) задача наверняка для стажера, то есть достаточно показать, что знаешь циклы, можешь перебрать реквизиты, для обратной задачи умеешь найти по номеру
|
|||
99
vis_tmp
07.05.18
✎
06:36
|
(94)Попробовал текстом, результат тот же...
А у тебя это получалось на практике? Если есть желание посмотреть, могу прислать мой Excel файлик-пример |
|||
100
vis_tmp
07.05.18
✎
06:36
|
100
|
|||
101
Адинэснег
07.05.18
✎
07:09
|
(0) ВыгрузкаЗагрузкаДанныхXML.epf
Там же есть флаг "Выгружать пр необходимости", выгружающий "дочерние" объекты ссылок соответствующих типов |
|||
102
Garykom
гуру
07.05.18
✎
11:30
|
(99) Да скинь на почту, у меня просто libreoffice а не ms office и гиперссылки прекрасно читаются
|
|||
103
s202
07.05.18
✎
11:36
|
И ведь большинство работодателей, выбирая между тобой (которому за 40, и который умеет) и малолетним долбойобом из (0) - выберет малолетнего долбойоба. Только потому, что он малолетний.
|
|||
104
vis_tmp
07.05.18
✎
11:41
|
(102)Выслал, посмотри, если не сложно.
Очень хочется понять как доставать гиперссылку. |
|||
105
Nyarlathotep
07.05.18
✎
11:44
|
(0) Иллидан, ты опять кровью демонов упоролся?)) Накой оно тебе?)
|
|||
106
Azverin
07.05.18
✎
11:44
|
(0) а эта что, задача на собеседовании? - жесть...
|
|||
107
NSSerg
07.05.18
✎
12:49
|
(103) На условные 50 тысяч возьмет малолетнего, а на 500 опытного.
|
|||
108
Garykom
гуру
07.05.18
✎
14:08
|
(107) Угу только часто (почему то) работодатели считают что 9 женщин смогут родить ребенка за месяц.
И наймут 10 малолетних по 50 тысяч... |
|||
109
NSSerg
07.05.18
✎
16:33
|
(108) Но никто же не заставляет опытному идти к таким клиентам? На рынке навалом работодателей которые наелись молодыми и неопытными, и понимают разницу. Кто мешает устраиваться на работу к таким?
|
|||
110
Garykom
гуру
07.05.18
✎
16:59
|
(109) Требование переезда в другой город, по удаленке мало кто хочет давать работу.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |