Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Обмен данными через СОМConnector          
kosalex Подменю пользователя
сообщение 28.10.14, 9:56
Сообщение #1

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

День добрый!
Подскажите, подключаюсь к базе 1С через СОМконнектор, делаю запрос к РС, в РС есть реквизит "СостояниеВагона" - Перечисление. Когда выгружаю запрос в таблицу значений, то на месте СостояниеВагона получается ComОбъект, как мне в таком случае найти нужное мне перечисление в базе приемнике и подставить его?

Petre Подменю пользователя
сообщение 28.10.14, 9:59
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2905
Из: Київ, Україна
Спасибо сказали: 1147 раз
Рейтинг: 1228.9

Получить строку его имени, найти соответствующее в базе-клиенте.


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Ardi Подменю пользователя
сообщение 28.10.14, 9:59
Сообщение #3

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

http://pro1c.org.ua/index.php?showtopic=218


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

kosalex Подменю пользователя
сообщение 28.10.14, 12:05
Сообщение #4

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

Цитата(Petre @ 28.10.14, 9:59) *
Получить строку его имени, найти соответствующее в базе-клиенте.


Имею вот такой код:
СОМСоединение = Новый COMОбъект("V83.ComConnector");
Сервер = "***";
ИмяБазы = "***";
Пользователь = "***";
Пароль = "***";
СтрокаПодключения = "Srvr = '" + Сервер + "';" + "Ref = '" + ИмяБазы + "';" + "Usr = '" + Пользователь + "';" + "Pwd = '" + Пароль + "';";

БазаИсточник = СОМСоединение.Connect(СтрокаПодключения);
БазаИсточник_Запрос = БазаИсточник.Newobject("Запрос");

ТекстЗапроса = "ВЫБРАТЬ
|    ПростойВагона.Период,
|    ПростойВагона.НомерВагона,
|    ПростойВагона.ПрибытияВагона,
|    ПростойВагона.УстановкаПодВыгрузку,
|    ПростойВагона.ОкончаниеВыгрузки,
|    ПростойВагона.ПрибытиеДокументовПослеДекларирования,
|    ПростойВагона.ПрибытиеИнструкцийВОтправкуПОРПВ,
|    ПростойВагона.УстановкаПодПогрузку,
|    ПростойВагона.ОкончаниеПогрузки,
|    ПростойВагона.ПрибытиеДокументовПослеТаможирования,
|    ПростойВагона.ВозвратПВст,
|    ПростойВагона.ВесПоПрибытию,
|    ПростойВагона.Ответственный,
|    ПростойВагона.СостояниеВагона,
|    ПростойВагона.ПринадлежностьВагона,
|    ПростойВагона.НоменклатураПрибытие,
|    ПростойВагона.НоменклатураОтправка
|ИЗ
|    РегистрСведений.ПростойВагона КАК ПростойВагона";

БазаИсточник_Запрос.Текст = ТекстЗапроса;

ТаблицаДанныхИсточникСОМОбъект = БазаИсточник_Запрос.Выполнить().Выгрузить();
СОМСоединение = Неопределено;
    
ТЗДанныеИсточник = Новый ТаблицаЗначений;

КЧ = Новый КвалификаторыЧисла(6,3);
ОписаниеТиповЧ = Новый ОписаниеТипов("Число",,,КЧ);

ТЗДанныеИсточник.Колонки.Добавить("Период",,"Период",);
ТЗДанныеИсточник.Колонки.Добавить("НомерВагона",,"Номер вагона",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытияВагона",,"Прибытие вагона",);
ТЗДанныеИсточник.Колонки.Добавить("УстановкаПодВыгрузку",,"Установка под выгрузку",);
ТЗДанныеИсточник.Колонки.Добавить("ОкончаниеВыгрузки",,"Окончание выгрузки",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеДокументовПослеДекларирования",,"Прибытие документов после декларирования",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеИнструкцийВОтправкуПОРПВ",,"Прибытие инструкций в отправку ПОР ПВ",);
ТЗДанныеИсточник.Колонки.Добавить("УстановкаПодПогрузку",,"Установка под погрузку",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеДокументовПослеТаможирования",,"Прибытие документов после таможирования",);
ТЗДанныеИсточник.Колонки.Добавить("ВозвратПВстКраматорск",,"Возврат ПВ ст.",);
ТЗДанныеИсточник.Колонки.Добавить("СостояниеВагона",,"Состояние вагона",);
ТЗДанныеИсточник.Колонки.Добавить("Ответственный",,"Ответственный",);
ТЗДанныеИсточник.Колонки.Добавить("ПринадлежностьВагона",,"Принадлежность вагона",);
ТЗДанныеИсточник.Колонки.Добавить("НоменклатураПрибытие",,"Номенклатура прибытие",);
ТЗДанныеИсточник.Колонки.Добавить("НоменклатураОтправка",,"Номенклатура отправка",);
ТЗДанныеИсточник.Колонки.Добавить("ВесПоПрибытию",ОписаниеТиповЧ,"Вес по прибытию");




Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
    СтрокаТЗ = ТЗДанныеИсточник.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
КонецЦикла;


Как получить имя? Если можно, то на моем примере

Если написать вот так:
ЭлементПеречисленияИсточникГруженый = БазаИсточник.Перечисления.СостояниеВагонов.Груженый.Метаданные().Имя
, то получаю имя самого перечисления, а не имя его значения

Ardi Подменю пользователя
сообщение 28.10.14, 12:28
Сообщение #5

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

[необходимо зарегистрироваться для просмотра ссылки]


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Спасибо сказали: kosalex,

kosalex Подменю пользователя
сообщение 29.10.14, 18:37
Сообщение #6

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

Помогите пожалуйста, никак не получается....(((

Как получить наименование перечисления с базе источнике?

Пишу так:
ЭлементПеречисленияИсточникГруженый = XMLСтрока(БазаИсточник.Перечисления.СостояниеВагонов.Груженый);
ЭлементПеречисленияИсточникПорожний = XMLСтрока(БазаИсточник.Перечисления.СостояниеВагонов.Порожний);


Ошибка!


Пишу так:
ЭлементПеречисленияИсточникГруженый = БазаИсточник.Перечисления.СостояниеВагонов.Груженый.Метаданные().Имя
, то получаю имя самого перечисления, а мне нужно имя его значения.

Плиз! Подскажите...

alex040269 Подменю пользователя
сообщение 30.10.14, 8:02
Сообщение #7

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Сообщить(БазаИсточник.Перечисления.СостояниеВагонов.Индекс(БазаИсточник.Перечисления.СостояниеВагонов.Порожний))


ЭлементПеречисленияИсточникПорожний = БазаИсточник.XMLСтрока(БазаИсточник.Перечисления.СостояниеВагонов.Порожний)


Сообщение отредактировал alex040269 - 30.10.14, 7:55


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

Спасибо сказали: kosalex,

Batchir Подменю пользователя
сообщение 30.10.14, 10:45
Сообщение #8

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1426 раз
Рейтинг: 0

ИндексПеречисления = База.Перечисления [ИмяПеречисления] .Индекс(КомОбъект);
ИмяЗначенияПеречисления = База.Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
ЗначениеПеречисления = Перечисления[ИмяПеречисления] [ИмяЗначенияПеречисления];


Сообщение отредактировал Batchir - 30.10.14, 10:46

kosalex Подменю пользователя
сообщение 30.10.14, 13:39
Сообщение #9

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

Цитата(Batchir @ 30.10.14, 10:45) *
ИндексПеречисления = База.Перечисления [ИмяПеречисления] .Индекс(КомОбъект);
ИмяЗначенияПеречисления = База.Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
ЗначениеПеречисления = Перечисления[ИмяПеречисления] [ИмяЗначенияПеречисления];


Не получается....ппц....куда это вставлять в моем коде?

Процедура ЗагрузитьДанныеПростойВагонаСБазыТест() Экспорт;
СОМСоединение = Новый COMОбъект("V83.ComConnector");
Сервер = "***";
ИмяБазы = "***";
Пользователь = "***";
Пароль = "***";
СтрокаПодключения = "Srvr = '" + Сервер + "';" + "Ref = '" + ИмяБазы + "';" + "Usr = '" + Пользователь + "';" + "Pwd = '" + Пароль + "';";

БазаИсточник = СОМСоединение.Connect(СтрокаПодключения);
БазаИсточник_Запрос = БазаИсточник.Newobject("Запрос");

ТекстЗапроса = "ВЫБРАТЬ
|    ПростойВагона.Период,
|    ПростойВагона.НомерВагона,
|    ПростойВагона.ПрибытияВагона,
|    ПростойВагона.УстановкаПодВыгрузку,
|    ПростойВагона.ОкончаниеВыгрузки,
|    ПростойВагона.ПрибытиеДокументовПослеДекларирования,
|    ПростойВагона.ПрибытиеИнструкцийВОтправкуПОРПВ,
|    ПростойВагона.УстановкаПодПогрузку,
|    ПростойВагона.ОкончаниеПогрузки,
|    ПростойВагона.ПрибытиеДокументовПослеТаможирования,
|    ПростойВагона.ВозвратПВстКраматорск,
|    ПростойВагона.ВесПоПрибытию,
|    ПростойВагона.Ответственный,
|    ПростойВагона.СостояниеВагона,
|    ПростойВагона.ПринадлежностьВагона,
|    ПростойВагона.НоменклатураПрибытие,
|    ПростойВагона.НоменклатураОтправка
|ИЗ
|    РегистрСведений.ПростойВагона КАК ПростойВагона";

БазаИсточник_Запрос.Текст = ТекстЗапроса;

ТаблицаДанныхИсточникСОМОбъект = БазаИсточник_Запрос.Выполнить().Выгрузить();

СОМСоединение = Неопределено;


ТЗДанныеИсточник = Новый ТаблицаЗначений;

КЧ = Новый КвалификаторыЧисла(6,3);
ОписаниеТиповЧ = Новый ОписаниеТипов("Число",,,КЧ);

ТЗДанныеИсточник.Колонки.Добавить("Период",,"Период",);
ТЗДанныеИсточник.Колонки.Добавить("НомерВагона",,"Номер вагона",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытияВагона",,"Прибытие вагона",);
ТЗДанныеИсточник.Колонки.Добавить("УстановкаПодВыгрузку",,"Установка под выгрузку",);
ТЗДанныеИсточник.Колонки.Добавить("ОкончаниеВыгрузки",,"Окончание выгрузки",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеДокументовПослеДекларирования",,"Прибытие документов после декларирования",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеИнструкцийВОтправкуПОРПВ",,"Прибытие инструкций в отправку ПОР ПВ",);
ТЗДанныеИсточник.Колонки.Добавить("УстановкаПодПогрузку",,"Установка под погрузку",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеДокументовПослеТаможирования",,"Прибытие документов после таможирования",);
ТЗДанныеИсточник.Колонки.Добавить("ВозвратПВстКраматорск",,"Возврат ПВ ст.",);
ТЗДанныеИсточник.Колонки.Добавить("СостояниеВагона",,"Состояние вагона",);
ТЗДанныеИсточник.Колонки.Добавить("Ответственный",,"Ответственный",);
ТЗДанныеИсточник.Колонки.Добавить("ПринадлежностьВагона",,"Принадлежность вагона",);
ТЗДанныеИсточник.Колонки.Добавить("НоменклатураПрибытие",,"Номенклатура прибытие",);
ТЗДанныеИсточник.Колонки.Добавить("НоменклатураОтправка",,"Номенклатура отправка",);
ТЗДанныеИсточник.Колонки.Добавить("ВесПоПрибытию",ОписаниеТиповЧ,"Вес по прибытию");


Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
    СтрокаТЗ = ТЗДанныеИсточник.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
КонецЦикла;

НаборЗаписейПриемник = РегистрыСведений.ПростойВагона.СоздатьНаборЗаписей();
НаборЗаписейПриемник.Записывать = Истина;


Для Каждого СтрокаДанных Из ТЗДанныеИсточник Цикл
    
    //Поиск ссылок на объекты
    Если СтрокаДанных.ПринадлежностьВагона.Description <> "" Тогда
        
        ПоискПринадлежностьВагона = Справочники.ПринадлежностьВагонов.НайтиПоНаименованию(СтрокаДанных.ПринадлежностьВагона.Description,Истина);
        Если Не ПоискПринадлежностьВагона.Пустая() Тогда
            СтрокаДанных.ПринадлежностьВагона = ПоискПринадлежностьВагона;    
        Иначе
        обПринадлежностьВагона = Справочники.ПринадлежностьВагонов.СоздатьЭлемент();
        обПринадлежностьВагона.Наименование = СтрокаДанных.ПринадлежностьВагона.Description;
        обПринадлежностьВагона.Записать();
        СтрокаДанных.ПринадлежностьВагона = обПринадлежностьВагона;
        КонецЕсли;
    КонецЕсли;

    Если СтрокаДанных.НоменклатураПрибытие.Description <> "" Тогда
    
        ПоискНоменклатураПрибытие =  Справочники.Номенклатура.НайтиПоНаименованию(СтрокаДанных.НоменклатураПрибытие.Description,Истина);
        Если Не ПоискНоменклатураПрибытие.Пустая() Тогда
            СтрокаДанных.НоменклатураПрибытие = ПоискНоменклатураПрибытие;
        Иначе
            обНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
            обНоменклатура.Наименование = СтрокаДанных.НоменклатураПрибытие.Description;
            обНоменклатура.Записать();
            СтрокаДанных.НоменклатураПрибытие = обНоменклатура;
        КонецЕсли;    
    КонецЕсли;
    
    Если СтрокаДанных.НоменклатураОтправка.Description <> "" Тогда
        ПоискНоменклатураОтправка =  Справочники.Номенклатура.НайтиПоНаименованию(СтрокаДанных.НоменклатураОтправка.Description,Истина);
        Если Не ПоискНоменклатураОтправка.Пустая() Тогда
            СтрокаДанных.НоменклатураОтправка = ПоискНоменклатураОтправка;
        Иначе
            обНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
            обНоменклатура.Наименование = СтрокаДанных.НоменклатураОтправка;
            обНоменклатура.Записать();
            СтрокаДанных.НоменклатураОтправка = обНоменклатура;
        КонецЕсли;
    КонецЕсли;
    
    ЗаписьПриемник = НаборЗаписейПриемник.Добавить();
    ЗаполнитьЗначенияСвойств(ЗаписьПриемник,СтрокаДанных,,);
    НаборЗаписейПриемник.Записать();
КонецЦикла;
КонецПроцедуры


Получилось прочитать название значения перечисления в базе источнике. Как теперь его сравнивать с тем значением которое я считал? Крыша едет не спеша....

Процедура ЗагрузитьДанныеПростойВагонаСБазыТест() Экспорт;
СОМСоединение = Новый COMОбъект("V83.ComConnector");
Сервер = "***";
ИмяБазы = "***";
Пользователь = "***";
Пароль = "***";
СтрокаПодключения = "Srvr = '" + Сервер + "';" + "Ref = '" + ИмяБазы + "';" + "Usr = '" + Пользователь + "';" + "Pwd = '" + Пароль + "';";

БазаИсточник = СОМСоединение.Connect(СтрокаПодключения);
БазаИсточник_Запрос = БазаИсточник.Newobject("Запрос");

ТекстЗапроса = "ВЫБРАТЬ
|    ПростойВагона.Период,
|    ПростойВагона.НомерВагона,
|    ПростойВагона.ПрибытияВагона,
|    ПростойВагона.УстановкаПодВыгрузку,
|    ПростойВагона.ОкончаниеВыгрузки,
|    ПростойВагона.ПрибытиеДокументовПослеДекларирования,
|    ПростойВагона.ПрибытиеИнструкцийВОтправкуПОРПВ,
|    ПростойВагона.УстановкаПодПогрузку,
|    ПростойВагона.ОкончаниеПогрузки,
|    ПростойВагона.ПрибытиеДокументовПослеТаможирования,
|    ПростойВагона.ВозвратПВстКраматорск,
|    ПростойВагона.ВесПоПрибытию,
|    ПростойВагона.Ответственный,
|    ПростойВагона.СостояниеВагона,
|    ПростойВагона.ПринадлежностьВагона,
|    ПростойВагона.НоменклатураПрибытие,
|    ПростойВагона.НоменклатураОтправка
|ИЗ
|    РегистрСведений.ПростойВагона КАК ПростойВагона";

БазаИсточник_Запрос.Текст = ТекстЗапроса;

ТаблицаДанныхИсточникСОМОбъект = БазаИсточник_Запрос.Выполнить().Выгрузить();

//Сдесь получаю наименование значений перечисления
НаименованиеПеречисленияП = БазаИсточник.XMLСтрока(БазаИсточник.Перечисления.СостояниеВагонов.Порожний);
НаименованиеПеречисленияГ = БазаИсточник.XMLСтрока(БазаИсточник.Перечисления.СостояниеВагонов.Груженый);

СОМСоединение = Неопределено;


ТЗДанныеИсточник = Новый ТаблицаЗначений;

КЧ = Новый КвалификаторыЧисла(6,3);
ОписаниеТиповЧ = Новый ОписаниеТипов("Число",,,КЧ);

ТЗДанныеИсточник.Колонки.Добавить("Период",,"Период",);
ТЗДанныеИсточник.Колонки.Добавить("НомерВагона",,"Номер вагона",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытияВагона",,"Прибытие вагона",);
ТЗДанныеИсточник.Колонки.Добавить("УстановкаПодВыгрузку",,"Установка под выгрузку",);
ТЗДанныеИсточник.Колонки.Добавить("ОкончаниеВыгрузки",,"Окончание выгрузки",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеДокументовПослеДекларирования",,"Прибытие документов после декларирования",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеИнструкцийВОтправкуПОРПВ",,"Прибытие инструкций в отправку ПОР ПВ",);
ТЗДанныеИсточник.Колонки.Добавить("УстановкаПодПогрузку",,"Установка под погрузку",);
ТЗДанныеИсточник.Колонки.Добавить("ПрибытиеДокументовПослеТаможирования",,"Прибытие документов после таможирования",);
ТЗДанныеИсточник.Колонки.Добавить("ВозвратПВстКраматорск",,"Возврат ПВ ст.",);
ТЗДанныеИсточник.Колонки.Добавить("СостояниеВагона",,"Состояние вагона",);
ТЗДанныеИсточник.Колонки.Добавить("Ответственный",,"Ответственный",);
ТЗДанныеИсточник.Колонки.Добавить("ПринадлежностьВагона",,"Принадлежность вагона",);
ТЗДанныеИсточник.Колонки.Добавить("НоменклатураПрибытие",,"Номенклатура прибытие",);
ТЗДанныеИсточник.Колонки.Добавить("НоменклатураОтправка",,"Номенклатура отправка",);
ТЗДанныеИсточник.Колонки.Добавить("ВесПоПрибытию",ОписаниеТиповЧ,"Вес по прибытию");

//В этом цикле нужно подставлять наименование перечисления и искать его в базе приемнике //КАК ЭТО СДЕЛАТЬ?
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
    СтрокаТЗ = ТЗДанныеИсточник.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
КонецЦикла;

НаборЗаписейПриемник = РегистрыСведений.ПростойВагона.СоздатьНаборЗаписей();
НаборЗаписейПриемник.Записывать = Истина;


Для Каждого СтрокаДанных Из ТЗДанныеИсточник Цикл
    
    //Поиск ссылок на объекты
    Если СтрокаДанных.ПринадлежностьВагона.Description <> "" Тогда
        
        ПоискПринадлежностьВагона = Справочники.ПринадлежностьВагонов.НайтиПоНаименованию(СтрокаДанных.ПринадлежностьВагона.Description,Истина);
        Если Не ПоискПринадлежностьВагона.Пустая() Тогда
            СтрокаДанных.ПринадлежностьВагона = ПоискПринадлежностьВагона;    
        Иначе
        обПринадлежностьВагона = Справочники.ПринадлежностьВагонов.СоздатьЭлемент();
        обПринадлежностьВагона.Наименование = СтрокаДанных.ПринадлежностьВагона.Description;
        обПринадлежностьВагона.Записать();
        СтрокаДанных.ПринадлежностьВагона = обПринадлежностьВагона;
        КонецЕсли;
    КонецЕсли;

    Если СтрокаДанных.НоменклатураПрибытие.Description <> "" Тогда
    
        ПоискНоменклатураПрибытие =  Справочники.Номенклатура.НайтиПоНаименованию(СтрокаДанных.НоменклатураПрибытие.Description,Истина);
        Если Не ПоискНоменклатураПрибытие.Пустая() Тогда
            СтрокаДанных.НоменклатураПрибытие = ПоискНоменклатураПрибытие;
        Иначе
            обНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
            обНоменклатура.Наименование = СтрокаДанных.НоменклатураПрибытие.Description;
            обНоменклатура.Записать();
            СтрокаДанных.НоменклатураПрибытие = обНоменклатура;
        КонецЕсли;    
    КонецЕсли;
    
    Если СтрокаДанных.НоменклатураОтправка.Description <> "" Тогда
        ПоискНоменклатураОтправка =  Справочники.Номенклатура.НайтиПоНаименованию(СтрокаДанных.НоменклатураОтправка.Description,Истина);
        Если Не ПоискНоменклатураОтправка.Пустая() Тогда
            СтрокаДанных.НоменклатураОтправка = ПоискНоменклатураОтправка;
        Иначе
            обНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
            обНоменклатура.Наименование = СтрокаДанных.НоменклатураОтправка;
            обНоменклатура.Записать();
            СтрокаДанных.НоменклатураОтправка = обНоменклатура;
        КонецЕсли;
    КонецЕсли;
    
    ЗаписьПриемник = НаборЗаписейПриемник.Добавить();
    ЗаполнитьЗначенияСвойств(ЗаписьПриемник,СтрокаДанных,,);
    НаборЗаписейПриемник.Записать();
КонецЦикла;
КонецПроцедуры

Batchir Подменю пользователя
сообщение 30.10.14, 14:40
Сообщение #10

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1426 раз
Рейтинг: 0

Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
    СтрокаТЗ = ТЗДанныеИсточник.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);

    ИмяПеречисления = "СостояниеВагона";
    КомОбъект = Строка [ИмяПеречисления];
    
    ИндексПеречисления = БазаИсточник .Перечисления [ИмяПеречисления] .Индекс(КомОбъект);
    ИмяЗначенияПеречисления = БазаИсточник .Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
    ЗначениеПеречисления = Перечисления[ИмяПеречисления] [ИмяЗначенияПеречисления];

    СтрокаТЗ [ИмяПеречисления] = ЗначениеПеречисления;

КонецЦикла;


Как-то так.

Но я бы дополнительно посоветовал сохранять найденные соответствия в какой-то кэш и если в нем не найдено, то лезть в БазаИсточник за данными

Спасибо сказали: kosalex,

kosalex Подменю пользователя
сообщение 30.10.14, 15:11
Сообщение #11

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

Цитата(Batchir @ 30.10.14, 14:40) *
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
    СтрокаТЗ = ТЗДанныеИсточник.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);

    ИмяПеречисления = "СостояниеВагона";
    КомОбъект = Строка [ИмяПеречисления];
    
    ИндексПеречисления = БазаИсточник .Перечисления [ИмяПеречисления] .Индекс(КомОбъект);
    ИмяЗначенияПеречисления = БазаИсточник .Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
    ЗначениеПеречисления = Перечисления[ИмяПеречисления] [ИмяЗначенияПеречисления];

    СтрокаТЗ [ИмяПеречисления] = ЗначениеПеречисления;

КонецЦикла;


Как-то так.

Но я бы дополнительно посоветовал сохранять найденные соответствия в какой-то кэш и если в нем не найдено, то лезть в БазаИсточник за данными




Что делает вот это "КомОбъект = Строка [ИмяПеречисления];" ? /Вылетает ошибка/

Пишу так:
//Запищем данные в ТЗ
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
        
СтрокаТЗ = ТЗДанныеИсточник.Добавить();

    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
    ИмяПеречисления = "СостояниеВагонов";
    КомОбъект = Строка[ИмяПеречисления]; //ОШИБКА  Поле объекта не обнаружено (СостояниеВагонов)    
    
    ИндексПеречисления = БазаИсточник.Перечисления[ИмяПеречисления].Индекс(КомОбъект);
    ИмяЗначениеПеречисления = БазаИсточник.Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
    ЗначениеПеречисления = Перечисления[ИмяПеречисления][ИмяЗначениеПеречисления];
    СтрокаТЗ[ИмяПеречисления] = ЗначениеПеречисления;

    
КонецЦикла;



Нашол что не так, вот код:
//Запищем данные в ТЗ
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
    СтрокаТЗ = ТЗДанныеИсточник.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
    ИмяПеречисления = "СостояниеВагонов";
    КомОбъект = Строка.СостояниеВагона;
    
    ИндексПеречисления = БазаИсточник.Перечисления[ИмяПеречисления].Индекс(КомОбъект); //РУГАЕТСЯ ВОТ ТУТ
    ИмяЗначениеПеречисления = БазаИсточник.Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
    ЗначениеПеречисления = Перечисления[ИмяПеречисления][ИмяЗначениеПеречисления];
    СтрокаТЗ[ИмяПеречисления] = ЗначениеПеречисления;
    
КонецЦикла;



Описание ошики:
ИндексПеречисления = БазаИсточник.Перечисления[ИмяПеречисления].Индекс(КомОбъект);
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.4.408): Несоответствие типов (параметр номер '1')


ПОЛУЧИЛОСЬ!СПАСИБО!

//Запищем данные в ТЗ
Для Каждого Строка Из ТаблицаДанныхИсточникСОМОбъект Цикл
    СтрокаТЗ = ТЗДанныеИсточник.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЗ,Строка,,);
    
    ИмяПеречисления = "СостояниеВагонов";
    КомОбъект = Строка.СостояниеВагона;
    
    Попытка
    ИндексПеречисления = БазаИсточник.Перечисления[ИмяПеречисления].Индекс(КомОбъект);
    ИмяЗначениеПеречисления = БазаИсточник.Метаданные().Перечисления[ИмяПеречисления].EnumValues.Get(ИндексПеречисления).Name;
    ЗначениеПеречисления = Перечисления[ИмяПеречисления][ИмяЗначениеПеречисления];
    СтрокаТЗ.СостояниеВагона = ЗначениеПеречисления;
    Исключение
    Продолжить;
    КонецПопытки;
    
КонецЦикла;


Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 18.04.24, 4:20
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!