Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: 1С для программиста

  Все выпуски  

RFpro.ru: 1С для программиста


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

М.Денис
Статус: Студент
Рейтинг: 445
∙ повысить рейтинг »
Тимошенко Дмитрий
Статус: Студент
Рейтинг: 389
∙ повысить рейтинг »
Владимир Лазурко
Статус: Профессионал
Рейтинг: 382
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / 1С для программиста

Номер выпуска:1076
Дата выхода:30.08.2009, 14:35
Администратор рассылки:Владимир Лазурко, Профессионал
Подписчиков / экспертов:529 / 122
Вопросов / ответов:1 / 3

Вопрос № 171599: Добрый день! 1с 8.1 обработка по загрузке контрагентов из txt. Сами контрагенты в справочник загружаются на Ура, а вот регистр КонтактнаяИнформация записываться упорно не хочет, выполняю код (в приложении), а в ответ: {Форма.Форма(97)}: Ошибк...



Вопрос № 171599:

Добрый день! 1с 8.1 обработка по загрузке контрагентов из txt. Сами контрагенты в справочник загружаются на Ура, а вот регистр КонтактнаяИнформация записываться упорно не хочет, выполняю код (в приложении), а в ответ:

{Форма.Форма(97)}: Ошибка при вызове метода контекста (Записать): Операция не выполнена!
КИ.Записать();

Обработку писал другой человек ,а до ума доводить пришлось мне. Вроде все посмотрел все ошибки поправил, а тут немогу понять в чем дело. Есть мысль что регистр владельца не распознает, отбор не делает, но вот почему? Не силен я в восьмерке! (((

Заранее спасибо!

Отправлен: 25.08.2009, 16:06
Вопрос задал: Serega_artem, Студент
Всего ответов: 3
Страница вопроса »


Отвечает Maxim S. Orlov, Студент :
Здравствуйте, Serega_artem!
Было бы не плохо, если бы вы еще и файл прикрепили с данными текстовыми ;), ну да ладно.

Ошибка вызвана тем, что только что созданный элемент на момент записи Регистра сведений еще не записан, что и вызывает ошибку.
Код:
Процедура КнопкаВыполнитьНажатие(Кнопка)
// Вставить содержимое обработчика.
Всего = 0;// Счетчик
// Проверка
Если ПустаяСтрока(ПутьКФайлу) = 1 Тогда
Предупреждение("Укажите файл!"); Возврат;
КонецЕсли;
Текст.Прочитать(ПутьКФайлу);
Для Ном = 1 По Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(Ном);
//(Найти(Стр,"@01")+5 Начало реквизита
//(Найти(Стр,"@01")+3 Начало длины реквизита, а она два символа
НачалоРеквизита = Н айти(Стр,"@01")+5;
НачалоДлиныРеквизита = Найти(Стр,"@01")+3;
ДлинаРеквизита = Сред(Стр,НачалоДлиныРеквизита,2);
НаименованиеК = Сред(Стр,НачалоРеквизита,ДлинаРеквизита); Если СпрКонтрагенты.НайтиПоНаименованию(НаименованиеК) = СпрКонтрагенты.ПустаяССылка() Тогда
НовыйЭлемент = СпрКонтрагенты.СоздатьЭлемент();
НачалоРеквизита = Найти(Стр,"@02")+5;
НачалоДлиныРеквизита = Найти(Стр,"@02")+3;
ДлинаРеквизита = Сред(Стр,НачалоДлиныРеквизита,2);
Имя = Сред(Стр,НачалоРеквизита,ДлинаРеквизита);
НачалоРеквизита = Найти(Стр,"@03")+5;
НачалоДлиныРеквизита = Найти(Стр,"@03")+3;
ДлинаРеквизита = Сред(Стр,НачалоДлиныРеквизита,2);
Отчество = Сред(Стр,НачалоРеквизита,ДлинаРеквизита);
НовыйЭлемент.Наименование = СокрЛП(НаименованиеК) + " " + Лев(Имя,1) + ". " + Лев(Отчество,1) + ".";
НовыйЭлемент.НаименованиеПолное = СокрЛП(Наименовани еК) + " " + СокрЛП(Имя) + " " + СокрЛП(Отчество);
ФИО = (СокрЛП(НаименованиеК) + " " + Лев(Имя,1) + ". " + Лев(Отчество,1) + ".");
//ФИОСсылка = ФИО;
НачалоРеквизита = Найти(Стр,"@04")+5;
НачалоДлиныРеквизита = Найти(Стр,"@04")+3;
ДлинаРеквизита = Сред(Стр,НачалоДлиныРеквизита,2);
ЮридическийАдрес = Сред(Стр,НачалоРеквизита,ДлинаРеквизита);
// СпрКонтрагенты.ЮридическийАдрес = СокрЛП(ЮридическийАдрес);
// СпрКонтрагенты.ПочтовыйАдрес = СокрЛП(ЮридическийАдрес);
НачалоРеквизита = Найти(Стр,"@05")+5;
НачалоДлиныРеквизита = Найти(Стр,"@05")+3;
ДлинаРеквизита = Сред(Стр,НачалоДлиныРеквизита,2);
Телефоны = Сред(Стр,НачалоРеквизита,ДлинаРеквизита);
// СпрКонтрагенты.Телефоны = СокрЛП(Телефоны);
НачалоРеквизита = Найти(Стр,"@06")+5;
НачалоДлиныРеквизита = Найти(Стр,"@06")+3;
ДлинаРеквизита = Сред (Стр,НачалоДлиныРеквизита,2);
ДокументСерия = Сред(Стр,НачалоРеквизита,ДлинаРеквизита);
ТипПеречисление = Перечисления.ТипыКонтактнойИнформации.Адрес;
ВидАдрес = "Фактический адрес контрагента";
//НоваяСтрокаТабличнойЧасти.Представление = ЮридическийАдрес;
// СпрКонтрагенты.ДокументСерия = СокрЛП(ДокументСерия);
НачалоРеквизита = Найти(Стр,"@07")+5;
НачалоДлиныРеквизита = Найти(Стр,"@07")+3;
ДлинаРеквизита = Сред(Стр,НачалоДлиныРеквизита,2);
ДокументНомер = Сред(Стр,НачалоРеквизита,ДлинаРеквизита);
// СпрКонтрагенты.ДокументНомер = СокрЛП(ДокументНомер);
НачалоРеквизита = Найти(Стр,"@08")+5;
НачалоДлиныРеквизита = Найти(Стр,"@08")+3;
ДлинаРеквизита = Сред(Стр,НачалоДлиныРеквизита,2);
ДокументДатаВыдачи = Сред(Стр,НачалоРеквизита,ДлинаРеквизита);
// СпрКонтрагенты.ДокументДатаВыдачи = СокрЛПДокументДатаВыдачи);
НачалоРеквизита = Найти(Стр,"@08&qu ot;)+5;
НачалоДлиныРеквизита = Найти(Стр,"@09")+3;
ДлинаРеквизита = Сред(Стр,НачалоДлиныРеквизита,2);
ДокументКем Выдан = Сред(Стр,НачалоРеквизита,ДлинаРеквизита);
// СпрКонтрагенты.ДокументКемВыдан = СокрЛП(ДокументКемВыдан);
НачалоРеквизита = Найти(Стр,"@10")+5;
НачалоДлиныРеквизита = Найти(Стр,"@10")+3;
ДлинаРеквизита = Сред(Стр,НачалоДлиныРеквизита,2);
ИНН = Сред(Стр,НачалоРеквизита,ДлинаРеквизита);
НовыйЭлемент.ИНН = СокрЛП(ИНН);
НовыйЭлемент.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо;
//НовыйЭлемент
//НовыйЭлемент.Записать(); - здесь необходимо снять комментарий со строчки

КИ = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
КИ.Отбор.Объект.Значение = НовыйЭлемент.Ссылка; - в этой строчке будет передана пустая ссылка, если элемент не записан.
КИ.Отбор.Объект.Использование = Истина;
КИ.Прочитать();
НоваяЗаписьКИ = КИ.Добавить();
НоваяЗаписьКИ.Объект = НовыйЭлемент.Ссылка;
НоваяЗаписьКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;
НоваяЗаписьКИ.Вид = "Теле фон контрагента";
НоваяЗаписьКИ.Представление = Телефоны;
НоваяЗаписьКИ.Поле1 = "1";
НоваяЗаписьКИ.Поле2 = "1";
НоваяЗаписьКИ.Поле3 = "1";
НоваяЗаписьКИ.Поле4 = "1";
НоваяЗаписьКИ.Поле5 = "1";
НоваяЗаписьКИ.Поле6 = "1";
НоваяЗаписьКИ.Поле7 = "1";
НоваяЗаписьКИ.Поле8 = "1";
НоваяЗаписьКИ.Поле9 = "1";
НоваяЗаписьКИ.Поле10 = "1";
НоваяЗаписьКИ.Комментарий = "123";
НоваяЗаписьКИ.ЗначениеПоУмолчанию = Истина;
НовыйЭлемент.Записать();
КИ.Записать();
Всего = Всего +1;
Иначе
Сообщить("Контрагент " + СокрЛП(НаименованиеК) + " уже существует!" );
КонецЕсли;
КонецЦикла;

Сообщить("Всего записанно "+Всего + " новых контрагента(ов)");
КонецПроцедуры
Оформил тэг "Код". Maxim S. Orlov, Вы имеете возможность оформлять ответ, пожалуйста, пользуйтесь ей.
-----
∙ Отредактировал: Владимир Лазурко, Профессионал
∙ Дата редактирования: 26.08.2009, 11:27 (время московское)

-----
Не надо чинить то, что еще не сломалось .......

Ответ отправил: Maxim S. Orlov, Студент
Ответ отправлен: 25.08.2009, 15:53

Оценка ответа: 5
Комментарий к оценке:
Большое спасибо за помощь!

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 253538 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Кулевский Сергей Владимирович, Студент :
    Здравствуйте, Serega_artem!
    Нельзя устанавливать отбор на несуществующий элемент.
    1. Сначала запишите его в системе (новЭлемент.Записать()), если это новый элемент. А потом устанавливайте отбор.
    2. Если хотите записывать в конце модуля, то попробуйте использовать, СсылкаНового(), когда устанавливаете отбор.
    Я рекомендую первый вариант, с маленькой доделкой. Организовать поиск по справочнику. А если элемент не найдется, то создавать уже.

    Ответ отправил: Кулевский Сергей Владимирович, Студент
    Ответ отправлен: 26.08.2009, 01:12

    Оценка ответа: 5
    Комментарий к оценке:
    Большое спасибо за помощь!

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 253556 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Anton Devitsin, Профессионал :
    Здравствуйте, Serega_artem.

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

    Надо записать элемент справочника, и только потом задавать его как значение измерения и записывать набор записей.

    И если он в твоей Вашей конфигурации периодический - не забудьте задать дату записи.

    внимательнее надо быть.

    Исправлено тыканье, ошибки.
    -----
    ∙ Отредактировал: skrech, Модератор
    ∙ Дата редактирования: 26.08.2009, 11:36 (время московское)

    Ответ отправил: Anton Devitsin, Профессионал
    Ответ отправлен: 26.08.2009, 10:49

    Оценка ответа: 5
    Комментарий к оценке:
    Большое спасибо за помощь!

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 253569 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.8 от 28.08.2009

    В избранное