7.7 Помогите разобраться

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем step86, 17 окт 2012.

  1. TopicStarter Overlay
    step86
    Offline

    step86 Опытный в 1С

    Регистрация:
    22 май 2009
    Сообщения:
    137
    Симпатии:
    0
    Баллы:
    26
    Выполняю загрузку из Эксель файла

    Код:
    Процедура Выполнить()
    Попытка
    ExcelApp = СоздатьОбъект("Excel.Application");
    Исключение
    Предупреждение(ОписаниеОшибки()+"; программа Excel не установлена на данном компьютере!");
    СтатусВозврата(0);
    КонецПопытки;
    
    Книга=ExcelApp.WorkBooks.Open(ИмяФайлаЗагрузки);
    Страница=Книга.WorkSheets(1);
    
    пСтрока = 3;
    
    СпрДог  = СоздатьОбъект("Справочник.Договоры");
    СпрКонт = СоздатьОбъект("Справочник.Контрагенты");
    
    Пока ПустоеЗначение(ExcelApp.Cells(пСтрока,1).Value) = 0 Цикл
    //СпсЕкс.ДобавитьЗначение(Врег(СокрЛП(ExcelApp.Cells(1,Ном).Value))); 
    //СпрДог.НайтиПоРеквизиту("НомерЛицевогоСчета", СокрЛП(ExcelApp.Cells(пСтрока,1).Value), 1);
    //СпрДог.ВыбратьЭлементыПоРеквизиту("НомерЛицевогоСчета", СокрЛП(ExcelApp.Cells(пСтрока,1).Value), 0, 0);
    //ДоговорНайденК = 0;
    //ДоговорНайденВ = 0;
    //Пока СпрДог.ПолучитьЭлемент(1) = 1 Цикл
    // Если СпрДог.УслугиКанализации = 1 Тогда
    //  ДоговорНайденК = 1;
    // Иначе
    //  ДоговорНайденВ = 1;
    // КонецЕсли;
    //КонецЦикла;
    стрДопНаим = "";
    
    Если (СокрЛП(ExcelApp.Cells(пСтрока,3).Value) <> "Канализация") Или (СокрЛП(ExcelApp.Cells(пСтрока,3).Value) <> "Канализация без г.в.") Тогда
    Родитель = ГруппаКонтрагентов;
    Иначе
    Родитель = ГруппаКонтрагентов2;
    стрДопНаим = " (канализация)";
    КонецЕсли;
    
    //СпрКонт = СпрКонт.ТекущийЭлемент();
    //СпрКонт.НайтиПоРеквизиту("Наименование", СокрЛП(ExcelApp.Cells(пСтрока,2).Value), 1);
    СпрКонт.НайтиПоНаименованию(СокрЛП(ExcelApp.Cells(пСтрока,2).Value), 0);
    Если СпрКонт.Выбран() = 0 Тогда
    СпрКонт.Новый();
    СпрКонт.Наименование = СокрЛП(ExcelApp.Cells(пСтрока,2).Value);
    СпрКонт.ПолнНаименование = СокрЛП(ExcelApp.Cells(пСтрока,2).Value);
    СпрКонт.ВидКонтрагента = Перечисление.ВидыКонтрагентов.ЧастноеЛицо;
    СпрКонт.ЮридическийАдрес = СокрЛП(ExcelApp.Cells(пСтрока,5).Value);
    СпрКонт.ПочтовыйАдрес = СокрЛП(ExcelApp.Cells(пСтрока,5).Value);
    СпрКонт.Родитель = Родитель;
    СпрКонт.Записать();
    Иначе
    СпрКонт = СпрКонт.ТекущийЭлемент();
    КонецЕсли;
    
    Если стрДопНаим = "" Тогда
    СтрокаПоиска = "л/с " + СокрЛП(ExcelApp.Cells(пСтрока,1).Value) + " " + СокрЛП(ExcelApp.Cells(пСтрока,5).Value);
    Иначе
    СтрокаПоиска = "л/с " + СокрЛП(ExcelApp.Cells(пСтрока,1).Value) + " " + СокрЛП(ExcelApp.Cells(пСтрока,5).Value) + СтрДопНаим;
    КонецЕсли;
    
    Сообщить(СокрЛП(ExcelApp.Cells(пСтрока,1).Value) + " / " + СокрЛП(ExcelApp.Cells(пСтрока,3).Value));
    
    СпрДог.НайтиПоНаименованию(СтрокаПоиска, 0);
    Если СпрДог.Выбран() = 0 Тогда
    СпрДог.Новый();
    СпрДог.Наименование = СтрокаПоиска;
    
    СпрДог.Владелец = СпрКонт;
    //СпрДог.Родитель = ГруппаДоговоров;
    СпрДог.ТипАбонента = 1;
    СпрДог.НомерЛицевогоСчета = СокрЛП(ExcelApp.Cells(пСтрока,1).Value);
    СпрДог.Адрес = СокрЛП(ExcelApp.Cells(пСтрока,5).Value);
    колвочел = СокрЛП(ExcelApp.Cells(пСтрока,6).Value);
    СпрДог.ИспользоватьДату(НачМесяца(РабочаяДата()));
    СпрДог.КоличествоЧеловек = колвочел;
    //СпрДог.КоличествоЧеловек.Установить(НачМесяца(РабочаяДата()),колвочел);
    Если СокрЛП(ExcelApp.Cells(пСтрока,4).Value) = "Да" Тогда
    СпрДог.НаличиеСчетчика = 1;
    Иначе
    СпрДог.НаличиеСчетчика = 0;
    КонецЕсли;
    
    Если СтрДопНаим = "" Тогда
    СпрДог.УслугиКанализации = 0;
    Иначе
    СпрДог.УслугиКанализации = 1;
    КонецЕсли;
    
    Если СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "Вода" Тогда
    СпрДог.ПС_АГВ_ВНК_Многоточ_Водозаб = 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "Канализация" Тогда
    СпрДог.ПКанализация = 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "Канализация без г.в." Тогда
    СпрДог.ПКанализацияБезГВ = 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "Вода с газом" Тогда
    СпрДог.ПВодопКаналБезВанныСГазом = 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "Вода во дворе" Тогда
    СпрДог.ПВодоразборныеКолонки = 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "Вода в бараке" Тогда
    СпрДог.ПВодопКаналБезВанныСГазом = 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "Вода с АГВ" Тогда
    СпрДог.ПВодопКаналВаннаАГВ = 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "вода с форсункой" Тогда
    СпрДог.ПВодопКаналВаннаАГВ = 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "канализация без воды" Тогда
    СпрДог.ПВодопКаналБезВанныСГазом = 1;   
    КонецЕсли;
    Иначе
    Если СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "Вода" Тогда
    СпрДог.ПС_АГВ_ВНК_Многоточ_Водозаб = СпрДог.ПС_АГВ_ВНК_Многоточ_Водозаб + 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "Канализация" Тогда
    СпрДог.ПКанализация = СпрДог.ПКанализация + 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "Канализация без г.в." Тогда
    СпрДог.ПКанализацияБезГВ = СпрДог.ПКанализацияБезГВ + 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "Вода с газом" Тогда
    СпрДог.ПВодопКаналБезВанныСГазом = СпрДог.ПВодопКаналБезВанныСГазом + 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "Вода во дворе" Тогда
    СпрДог.ПВодоразборныеКолонки = СпрДог.ПВодоразборныеКолонки + 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "Вода в бараке" Тогда
    СпрДог.ПВодопКаналБезВанныСГазом = СпрДог.ПВодопКаналБезВанныСГазом + 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "Вода с АГВ" Тогда
    СпрДог.ПВодопКаналВаннаАГВ = СпрДог.ПВодопКаналВаннаАГВ + 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "вода с форсункой" Тогда
    СпрДог.ПВодопКаналВаннаАГВ = СпрДог.ПВодопКаналВаннаАГВ + 1;
    ИначеЕсли СокрЛП(ExcelApp.Cells(пСтрока,3).Value) = "канализация без воды" Тогда
    СпрДог.ПВодопКаналБезВанныСГазом = СпрДог.ПВодопКаналБезВанныСГазом + 1;   
    КонецЕсли;
    КонецЕсли;
    СпрДог.Записать();
    //СпрКонт.ОсновнойДоговор = СпрДог.ТекущийЭлемент();
    //СпрКонт.Записать();
    пСтрока = пСтрока + 1;
    КонецЦикла;
    
    Сообщить("ВЫПОЛНЕНО УСПЕШНО!!!");
    
    КонецПроцедуры
    Выдает ошибку
    Код:
    СпрКонт.НайтиПоРеквизиту("Наименование", СокрЛП(ExcelApp.Cells(пСтрока,2).Value), 1);
    {C:\USERS\СТЕНЯ\DESKTOP\ЖКУ\ЗАПОЛНЕНИЕДАННЫХЖКУ.ERT(64)}: Объект не может быть перепозиционирован!
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Используйте НайтиПоНаименованию
  3. GlukAl
    Offline

    GlukAl Опытный в 1С

    Регистрация:
    4 окт 2012
    Сообщения:
    187
    Симпатии:
    7
    Баллы:
    29
    Код:
      //СпрКонт.НайтиПоРеквизиту("Наименование", СокрЛП(ExcelApp.Cells(пСтрока,2).Value), 1);
    СпрКонт.НайтиПоНаименованию(СокрЛП(ExcelApp.Cells(пСтрока,2).Value), 0);
    
    Поиск возможен только объектов созданных командой
    Код:
    СоздатьОбъект()
    вот такими строками
    Код:
    СпрКонт = СпрКонт.ТекущийЭлемент();
    вы его уничтожаете и создаете постаянную ссылку на какой-то элемент справочника
  4. TopicStarter Overlay
    step86
    Offline

    step86 Опытный в 1С

    Регистрация:
    22 май 2009
    Сообщения:
    137
    Симпатии:
    0
    Баллы:
    26
    Еще вопрос, у меня для каждого контрагента иногда нужно создавать два договора, первый создается с кодом "000001" и второй "000001" и при записи возникает ошибка код не уникальный, как изменить код второго договора???

    Вот пробывал так не получается код присваевается "000001"????

    Код:
       Если ДогКанал = 1 Тогда
    //СпрДог.Код = "000002";
    СпрДог.УстановитьНовыйКод();
    КонецЕсли;
    
  5. GlukAl
    Offline

    GlukAl Опытный в 1С

    Регистрация:
    4 окт 2012
    Сообщения:
    187
    Симпатии:
    7
    Баллы:
    29
    После выполнения такой строки поиск (перепозиционирование будет не возможно)
  6. GlukAl
    Offline

    GlukAl Опытный в 1С

    Регистрация:
    4 окт 2012
    Сообщения:
    187
    Симпатии:
    7
    Баллы:
    29
    Код:
    спр=СоздатьОбъект("Справочник.Договоры");
    спр.НайтиЭлемент(СпрДог);
    спр.УстановитьНовыйКод();
    спр.Записать();
    вроде все работает
    или забываете записать изменения после установки нового кода??
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Не забываем что справочник договоры - подчиненный. Определяем владельца при создании и все ок.
Похожие темы
  1. Михаил.
    Ответов:
    3
    Просмотров:
    213
Загрузка...

Поделиться этой страницей