Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 13:47

Проверка повторяющихся ИНН через запрос, помогите!

Автор VadikSandy, 04 июн 2011, 17:56

0 Пользователей и 1 гость просматривают эту тему.

VadikSandy

У меня - справочника - Номенклатура (там реквизиты Дата, НоменклатурныйНомер, ПродЦена и прочее) и Организации (там реквизит один-  ИНН). Так вот надо вести контроль за тем чтоб не добавлять в базу фирмы, ИНН которых уже есть.

Вот кусок кода что я написал, но пишет ошибку "Поле объекта не обнаружено (ИНН)" :dfbbdrfb:



ЗапросINN = Новый Запрос;
   ЗапросINN.Текст =
   "Выбрать
   |   Организации.INN
   |ИЗ
   |   Справочник.Организации КАК Организации
   |ГДЕ
   |   Организации.INN=&INN";
   
   ЗапросINN.УстановитьПараметр("INN",Текст.ИНН);
   
   Если НЕ ЗапросINN.Выполнить().Пустой() Тогда
      Предупреждение("Такой INN существует в базе");
      

   Иначе

//далее идет часть кода ответственная за заполнение реквизитов в случае, если такого ИНН не встречается


Помогите сделать запрос как надо :wacko:

VadikSandy

вот весь код внешнего отчета



Процедура КнопкаСформироватьНажатие(Кнопка)
   
Текст = Новый ТекстовыйДокумент;
// открытие файла
Текст.Прочитать("I:\export.txt", КодировкаТекста.ANSI);



ЗапросINN = Новый Запрос;
   ЗапросINN.Текст =
   "Выбрать
   |   Организации.INN
   |ИЗ
   |   Справочник.Организации КАК Организации
   |ГДЕ
   |   Организации.INN=&INN";
   
   ЗапросINN.УстановитьПараметр("INN",Текст.ИНН);
   
   Если НЕ ЗапросINN.Выполнить().Пустой() Тогда
      Предупреждение("Такой INN существует в базе");
      

   Иначе

   
//Заполним разделитель в файле
СимволРазделитель = ";";

//Перебираем строки файла и заполняем документ
Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл
   
   


//Получим очередную строку
Стр = Текст.ПолучитьСтроку(НомерСтроки);


//Занесем строку во временную переменную, с ней и будем работать
ТемпСтрока = Стр;

//Найдем разделитель
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);


//значение до разделителя выбираем
Дата = Лев(ТемпСтрока, НомерСимвола - 1);


//обрезаем строку до первого символа после разделителя
ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);

//Ищем следующий разделитель
//если это поледний реквизит можно просто взять оставшуюся строку
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
Номер = Число(Лев(ТемпСтрока, НомерСимвола - 1));

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
ИНН = Число(Лев(ТемпСтрока, НомерСимвола - 1));

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
ИмяОрг = Лев(ТемпСтрока, НомерСимвола);

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
Товар = Лев(ТемпСтрока, НомерСимвола);

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
НомНом = Число(Лев(ТемпСтрока, НомерСимвола - 1));

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
Ставка = Число(Лев(ТемпСтрока, НомерСимвола - 1));

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
Колво = Число(Лев(ТемпСтрока, НомерСимвола - 1));

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
Себест = Число(Лев(ТемпСтрока, НомерСимвола - 1));

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
ПродажЦена = Число(Лев(ТемпСтрока, НомерСимвола - 1));







////////////////////////////////////////////////

      Орг=Справочники.Организации.СоздатьЭлемент();
    Ном=Справочники.Номенклатура.СоздатьЭлемент();

      Орг.INN=ИНН;
   Ном.DATE=Дата;
   Ном.KOLVO=Колво;
   Ном.NOMNOM=НомНом;
   Ном.NUM=Номер;
   Ном.ORG=ИмяОрг;
   Ном.PRODCENA=ПродажЦена;
   Ном.SEBEST=Себест;
   Ном.STAVKA=Ставка;
   Ном.TOVAR=Товар;
   
   Ном.Записать();
    Орг.Записать();




////////////////////////////////////////////////







КонецЦикла;

КонецЕсли;

КонецПроцедуры



мало ли понадобится

VadikSandy

кажется что код запроса вставлена не в ту часть кода.....ндао вставлять после считывания строки из тхт файла

VadikSandy

Процедура КнопкаСформироватьНажатие(Кнопка)
   
Текст = Новый ТекстовыйДокумент;
// открытие файла
Текст.Прочитать("I:\exportбаза.txt", КодировкаТекста.ANSI);





   
//Заполним разделитель в файле
СимволРазделитель = ";";

//Перебираем строки файла и заполняем документ
Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл
   
   


//Получим очередную строку
Стр = Текст.ПолучитьСтроку(НомерСтроки);


//Занесем строку во временную переменную, с ней и будем работать
ТемпСтрока = Стр;

//Найдем разделитель
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);


//значение до разделителя выбираем
Дата = Лев(ТемпСтрока, НомерСимвола - 1);


//обрезаем строку до первого символа после разделителя
ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);

//Ищем следующий разделитель
//если это поледний реквизит можно просто взять оставшуюся строку
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
Номер = Число(Лев(ТемпСтрока, НомерСимвола - 1));

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
ИНН = Число(Лев(ТемпСтрока, НомерСимвола - 1));

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
ИмяОрг = Лев(ТемпСтрока, НомерСимвола);

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
Товар = Лев(ТемпСтрока, НомерСимвола);

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
НомНом = Число(Лев(ТемпСтрока, НомерСимвола - 1));

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
Ставка = Число(Лев(ТемпСтрока, НомерСимвола - 1));

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
Колво = Число(Лев(ТемпСтрока, НомерСимвола - 1));

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
Себест = Число(Лев(ТемпСтрока, НомерСимвола - 1));

ТемпСтрока = Сред(ТемпСтрока, НомерСимвола + 1);
НомерСимвола = Найти(ТемпСтрока, СимволРазделитель);
ПродажЦена = Число(Лев(ТемпСтрока, НомерСимвола - 1));





ЗапросINN = Новый Запрос;
   ЗапросINN.Текст =
   "Выбрать
   |   Организации.INN
   |ИЗ
   |   Справочник.Организации КАК Организации
   |ГДЕ
   |   Организации.INN=&INN";
   
   ЗапросINN.УстановитьПараметр("INN",ИНН);
   
   Если НЕ ЗапросINN.Выполнить().Пустой() Тогда
      Предупреждение("Такой INN существует в базе");
      

   Иначе


////////////////////////////////////////////////

      Орг=Справочники.Организации.СоздатьЭлемент();
    Ном=Справочники.Номенклатура.СоздатьЭлемент();

      Орг.INN=ИНН;
   Ном.DATE=Дата;
   Ном.KOLVO=Колво;
   Ном.NOMNOM=НомНом;
   Ном.NUM=Номер;
   Ном.ORG=ИмяОрг;
   Ном.PRODCENA=ПродажЦена;
   Ном.SEBEST=Себест;
   Ном.STAVKA=Ставка;
   Ном.TOVAR=Товар;
   
   Ном.Записать();
    Орг.Записать();


////////////////////////////////////////////////


   КонецЕсли;





КонецЦикла;


КонецПроцедуры



сам развиваю тему))) это пашет, но косячно, ладно разберусь)

chuevsf

Это долго. Сделай проще. ВЫведи список отсортированный по ИНН.
Организация ИНН

Увидишь задвоенность и будет тебе счастье.

Шурыгин Иван Сергеевич

а еще можно в запрос загнать такую строку КоличествоРазличных(Орг.ИНН) и Количество(Орг.ИНН) и увидишь сколько еще работать по исправлению
===================================
жизнь надо прожить так, чтоб вверху посмотрели.
и сказали "А ну ка повтори"
===================================

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск