Имя: Пароль:
1C
1С v8
Как программно убрать пробелы при загрузке данных
0 amadeus2010
 
05.11.13
10:37
Добрый день как убрать пробелы между цифрами при заполнении значений
Вот строка кода
Строка.НомерМаршрута = Формат(Лист.Cells(ПоСтрокам,20).Value,"ЧГ=");
Если в администрировании в региональных настройках в группировка поставить 0 то пробелы исчезают, но клиент не хочет так как боится сбить настройки. Поле в форме куда загружается строка имеет строковый тип
1 Ненавижу 1С
 
гуру
05.11.13
10:38
Строка.НомерМаршрута = Лист.Cells(ПоСтрокам,20).Text;
2 amadeus2010
 
05.11.13
10:44
пробелы все равно остались между цифрами получается так 1 002 004
3 amadeus2010
 
05.11.13
10:46
пардон был не прав все получилось, в обработке в реквизите номер маршрута стоял тип число вместо строка
4 depthzer0
 
05.11.13
10:47
ЧГ=0 - единственный вариант для форматной строки.
а СтрЗаменить(Лист.Cells(ПоСтрокам,20).Text, " ", "") не помогает?
5 amadeus2010
 
05.11.13
11:01
Получилось вот так
Строка.НомерМаршрута = Лист.Cells(ПоСтрокам,20).Text;
спасибо (1)
6 Господин ПЖ
 
05.11.13
11:03
346467567567563 жертва неразрывного пробела...
7 amadeus2010
 
05.11.13
11:16
еще вопрос по теме при загрузке данных в пустой справочник идет дублирование наименований по коду Спр.Наименование = Строка.ShopName; в контрагентах создаются 2 наименования но с разными кодами,хотя в тестовой базе такого не было
8 Ненавижу 1С
 
гуру
05.11.13
11:26
(7) на то она и тестовая
9 amadeus2010
 
05.11.13
11:28
рабочая база тоже пустая и не содержит никаких контрагентов
10 amadeus2010
 
05.11.13
11:29
просто интересно как такое возможно, клиент начал делать мозги
11 Холодильник
 
05.11.13
11:30
(7) для начала необходимо искать контрагентов по наименованию, а потом создавать новых
12 Холодильник
 
05.11.13
11:30
+ у вас в третьей строке кода ошибка
13 amadeus2010
 
05.11.13
11:32
(12) какая ошибка у меня только Спр.Наименование = Строка.ShopName,
я сейчас сделал так
//////////////////////////////////////////////////
Спр = Справочники.Контрагенты.СоздатьЭлемент();
    
    Если Справочники.Контрагенты.НайтиПоНаименованию(Строка.ShopName).Пустая() тогда
    Спр.Наименование = Строка.ShopName;
    Спр.НаименованиеПолное=Строка.ShopName;
    Спр.Покупатель = Истина;
    Спр.ИНН =Строка.НомерМаршрута;
    Спр.ЮрФизЛицо=Перечисления.ЮрФизЛицо.ЮрЛицо;
    Спр.Подразделение=Справочники.Подразделения.НайтиПоНаименованию(Строка.Filial, Истина);
    Спр.Родитель =Группа.Ссылка;
    Спр.Комментарий = Строка.ContactPerson + ";";
     Иначе Сообщить("Найден элемент справочника с указанным наименованием!");
    КонецЕсли;
///////////////////////////////////////////////////////
14 Ненавижу 1С
 
гуру
05.11.13
11:34
может наименование обрезается?
15 Господин ПЖ
 
05.11.13
11:37
код УГ.
16 Холодильник
 
05.11.13
11:41
код - мега УГ.
зачем создавать, а потом искать?
17 amadeus2010
 
05.11.13
11:45
если я должен вынести в начало кода, а потом создать элемент так?
18 Холодильник
 
05.11.13
11:52
алгоритм:

Ищем по наименованию.
   если не находим - создаем новый
   если находим - ничего не делаем, либо получаем объект и изменяем
19 amadeus2010
 
05.11.13
12:00
я немного подправил код
///////////////////////////////////
Если Справочники.Контрагенты.НайтиПоНаименованию(Строка.ShopName).Пустая() тогда

    Спр = Справочники.Контрагенты.СоздатьЭлемент();
    //Спр.Код=Строка.Код;
        Спр.Наименование = Строка.ShopName;
    Спр.НаименованиеПолное=Строка.ShopName;
    Спр.Покупатель = Истина;
    Спр.ИНН =Строка.НомерМаршрута;
    Спр.ЮрФизЛицо=Перечисления.ЮрФизЛицо.ЮрЛицо;
    Спр.Подразделение=Справочники.Подразделения.НайтиПоНаименованию(Строка.Filial, Истина);
    Спр.Родитель =Группа.Ссылка;
    Спр.Комментарий = Строка.ContactPerson + ";";
     Иначе Сообщить("Найден элемент справочника с указанным наименованием!");
    КонецЕсли;
///////////////////////////////////////////////////
20 Холодильник
 
05.11.13
12:02
не используйте в качестве имени переменной "строка"
это зарезервированное слово, лучше вместо него использовать, например, "СтрокаФайла"
И обрезайте пробелы в строковых реквизитах:

Спр.Наименование = СокрЛП(СтрокаФайла.ShopName);
21 Ненавижу 1С
 
гуру
05.11.13
12:07
(20) "не используйте в качестве имени переменной "строка"
это зарезервированное слово"

это миф (для 8.х)
22 xantimans
 
05.11.13
12:07
(0)стрзаменить(Лист.Cells(ПоСтрокам,20).Value, символы.нпп,"")
23 Холодильник
 
05.11.13
12:08
(21) это не миф, а правила хорошего кода.
24 amadeus2010
 
05.11.13
12:08
(22) это вместо Строка.НомерМаршрута = Формат(Лист.Cells(ПоСтрокам,20).Value,"ЧГ=");
25 Холодильник
 
05.11.13
12:09
+оно к ошибке может и не приведет, но лучше этим не злоупотреБЛЯТЬ и называть переменные соответственно их предназначениям
26 xantimans
 
05.11.13
12:12
(24) вместо
27 amadeus2010
 
05.11.13
12:29
(26) понятно, интересно пока не убирал пробелы между цифрами все садилось нормально без дублей, сейчас ни ИНН не заполняется и наименования дублируются
28 amadeus2010
 
05.11.13
12:36
насчет ИНН разобрался в форме были поставлены 0000 у реквизита,теперь основной менеджер покупателя вставляется 2 менеджера
29 amadeus2010
 
05.11.13
12:54
можно как-то избавиться от двойной записи наименований в справочник?
30 amadeus2010
 
05.11.13
13:14
Строка.ShopName = СокрЛП(Лист.Cells(ПоСтрокам,21).Value);
дает 2 записи одного наименования
31 amadeus2010
 
06.11.13
11:49
добрый день извините что снова обращаюсь к вчерашней теме, не могли бы подсказать по коду должны заполниться контрагенты находящиеся в разных группах. У меня сейчас если закомментировать код относящийся к другой группе не происходит дублирование элементов вот код
//////////////////////////////////////////////////////
КодГруппы = "000001169";
ПоискПоПолномуКоду = Ложь; // значение по умолчанию
Группа = Справочники.Контрагенты.НайтиПоКоду(КодГруппы, ПоискПоПолномуКоду);

Если Группа.Пустая() Тогда
    Группа = Справочники.Контрагенты.СоздатьГруппу();
    Группа.Код = КодГруппы;
    Группа.Наименование = Справочники.Контрагенты.НайтиПоНаименованию("2-Bakmil Filial?");
    Группа.ЭтоГруппа = Истина;
    Группа.Записать();
ИначеЕсли Не Группа.ЭтоГруппа Тогда
    Сообщить("Найден элемент справочника с указанным кодом!");
    
    // Предусмотреть прерывание алгоритма.
КонецЕсли;


Для Каждого Строка Из Таб Цикл
    ПоСтрокам = ПоСтрокам + 1;
    Если  Не Строка.Пометка Тогда
        Продолжить;
    КонецЕсли;
    

    //Если Справочники.Контрагенты.НайтиПоНаименованию(Строка.ShopName).Пустая() тогда

    Спр = Справочники.Контрагенты.СоздатьЭлемент();
    Спр.Наименование = Строка.ShopName;    
    Спр.НаименованиеПолное=Строка.ShopName;
    Спр.Покупатель = Истина;
    Спр.ИНН =Строка.НомерМаршрута;
    Спр.ЮрФизЛицо=Перечисления.ЮрФизЛицо.ЮрЛицо;
    Спр.Подразделение=Справочники.Подразделения.НайтиПоНаименованию(Строка.Filial, Истина);
    Спр.Родитель =Группа.Ссылка;
    Спр.Комментарий = Строка.ContactPerson + ";";
    // Иначе Сообщить("Найден элемент справочника с указанным наименованием!");
    //КонецЕсли;

    
    НазначатьМенеджера = Ложь;

    ФЛ = Справочники.ФизическиеЛица.НайтиПоНаименованию(Строка.Salesman, Истина);

    Если ФЛ = Неопределено Тогда

       Сообщить("Не задано имя менеджера!");
    ИначеЕсли ФЛ.Пустая() Тогда
       Сообщить("Не найден менеджер «" + Строка.Salesman + "»");
    Иначе
           НазначатьМенеджера = Истина;
    КонецЕсли;

    Если НазначатьМенеджера Тогда
           ПЛ = Справочники.Пользователи.НайтиПоРеквизиту("ФизЛицо", ФЛ);
        НазначатьМенеджера = НЕ ПЛ.Пустая();
    КонецЕсли;

    Если НазначатьМенеджера Тогда

           НовМенеджер = Спр.МенеджерыПокупателя.Добавить();
           НовМенеджер.МенеджерПокупателя = ПЛ;

           Спр.ОсновнойМенеджерПокупателя = ПЛ;
    КонецЕсли;
    Спр.Записать();
      

    Договор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
    Договор.ТипЦен =Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Standart Qiym?t");
    Договор.Владелец =Спр.Ссылка;
    Договор.Организация = Справочники.Организации.НайтиПоНаименованию("Crocus");
    Договор.Наименование = "?sas M?qavil?";
    Договор.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
    Договор.ВидУсловийДоговора = Перечисления.ВидыУсловийДоговоровВзаиморасчетов.БезДополнительныхУсловий;
    Договор.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом;
    Договор.ВалютаВзаиморасчетов = Справочники.Валюты.НайтиПоКоду(944);
    Договор.КонтролироватьСуммуЗадолженности = Истина;
    Договор.КонтролироватьЧислоДнейЗадолженности = Истина;
    Договор.ВестиПоДокументамРасчетовСКонтрагентом = Истина;
    Договор.ДопустимаяСуммаЗадолженности = 0;
    Договор.ДопустимоеЧислоДнейЗадолженности = 0;
    Договор.Дата = ТекущаяДата();
    Договор.Записать();
    
    
        
    РегистрАдрес = РегистрыСведений.КонтактнаяИнформация.СоздатьМенеджерЗаписи();
    РегистрАдрес.Объект = Спр.Ссылка;
    РегистрАдрес.Представление = Строка.Address;
    РегистрАдрес.Вид = Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента;
    РегистрАдрес.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
    РегистрАдрес.Записать();
    
    РегистрТелефон = РегистрыСведений.КонтактнаяИнформация.СоздатьМенеджерЗаписи();
    РегистрТелефон.Объект = Спр.Ссылка;
    РегистрТелефон.Поле3 = Строка.Mob;
    
    РегистрТелефон.Представление =Строка.Mob;
    РегистрТелефон.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента;
    РегистрТелефон.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;
    РегистрТелефон.Записать();
    

    Спр.ОсновнойДоговорКонтрагента = Договор.Ссылка;
  
КонецЦикла;

//КодГруппы = "000001171";
//ПоискПоПолномуКоду = Ложь; // значение по умолчанию
//Группа = Справочники.Контрагенты.НайтиПоКоду(КодГруппы, ПоискПоПолномуКоду);
//
//Если Группа.Пустая() Тогда
//    Группа = Справочники.Контрагенты.СоздатьГруппу();
//    Группа.Код = КодГруппы;
//    Группа.Наименование = Справочники.Контрагенты.НайтиПоНаименованию("1-D?rn?g?l Filial?");
//    Группа.ЭтоГруппа = Истина;
//    Группа.Записать();
//ИначеЕсли Не Группа.ЭтоГруппа Тогда
//    Сообщить("Найден элемент справочника с указанным кодом!");
//    
//    // Предусмотреть прерывание алгоритма.
//КонецЕсли;

//Для Каждого Строка Из Таб Цикл
//    ПоСтрокам = ПоСтрокам + 1;
//    Если  Не Строка.Пометка Тогда
//        Продолжить;
//    КонецЕсли;
//    

//    //Если Справочники.Контрагенты.НайтиПоНаименованию(Строка.ShopName).Пустая() тогда

//    Спр = Справочники.Контрагенты.СоздатьЭлемент();
//    //Спр.Код=Строка.Код;
//    Спр.Наименование = Строка.ShopName;
//    Спр.НаименованиеПолное=Строка.ShopName;
//    Спр.Покупатель = Истина;
//    Спр.ИНН =Строка.НомерМаршрута;
//    Спр.ЮрФизЛицо=Перечисления.ЮрФизЛицо.ЮрЛицо;
//    Спр.Подразделение=Справочники.Подразделения.НайтиПоНаименованию(Строка.Filial, Истина);
//    Спр.Родитель =Группа.Ссылка;
//    Спр.Комментарий = Строка.ContactPerson + ";";
//    // Иначе Сообщить("Найден элемент справочника с указанным наименованием!");
//    //КонецЕсли;

//    НазначатьМенеджера = Ложь;

//    ФЛ = Справочники.ФизическиеЛица.НайтиПоНаименованию(Строка.Salesman, Истина);

//    Если ФЛ = Неопределено Тогда

//       Сообщить("Не задано имя менеджера!");
//    ИначеЕсли ФЛ.Пустая() Тогда
//       Сообщить("Не найден менеджер «" + Строка.Salesman + "»");
//    Иначе
//           НазначатьМенеджера = Истина;
//    КонецЕсли;

//    Если НазначатьМенеджера Тогда
//           ПЛ = Справочники.Пользователи.НайтиПоРеквизиту("ФизЛицо", ФЛ);
//        НазначатьМенеджера = НЕ ПЛ.Пустая();
//    КонецЕсли;

//    Если НазначатьМенеджера Тогда

//           НовМенеджер = Спр.МенеджерыПокупателя.Добавить();
//           НовМенеджер.МенеджерПокупателя = ПЛ;

//           Спр.ОсновнойМенеджерПокупателя = ПЛ;
//    КонецЕсли;
//    Спр.Записать();
//      

//    Договор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
//    Договор.ТипЦен =Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Standart Qiym?t");
//    Договор.Владелец =Спр.Ссылка;
//    Договор.Организация = Справочники.Организации.НайтиПоНаименованию("Crocus");
//    Договор.Наименование = "?sas M?qavil?";
//    Договор.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
//    Договор.ВидУсловийДоговора = Перечисления.ВидыУсловийДоговоровВзаиморасчетов.БезДополнительныхУсловий;
//    Договор.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом;
//    Договор.ВалютаВзаиморасчетов = Справочники.Валюты.НайтиПоКоду(944);
//    Договор.КонтролироватьСуммуЗадолженности = Истина;
//    Договор.КонтролироватьЧислоДнейЗадолженности = Истина;
//    Договор.ВестиПоДокументамРасчетовСКонтрагентом = Истина;
//    Договор.ДопустимаяСуммаЗадолженности = 0;
//    Договор.ДопустимоеЧислоДнейЗадолженности = 0;
//    Договор.Дата = ТекущаяДата();
//    Договор.Записать();
//    
//    
//        
//    РегистрАдрес = РегистрыСведений.КонтактнаяИнформация.СоздатьМенеджерЗаписи();
//    РегистрАдрес.Объект = Спр.Ссылка;
//    РегистрАдрес.Представление =Строка.Address;
//    РегистрАдрес.Вид = Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента;
//    РегистрАдрес.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
//    РегистрАдрес.Записать();
//    
//    РегистрТелефон = РегистрыСведений.КонтактнаяИнформация.СоздатьМенеджерЗаписи();
//    РегистрТелефон.Объект = Спр.Ссылка;
//    РегистрТелефон.Поле3 = Строка.Mob;
//    
//    РегистрТелефон.Представление = Строка.Mob;
//    РегистрТелефон.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента;
//    РегистрТелефон.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;
//    РегистрТелефон.Записать();
//    

//    Спр.ОсновнойДоговорКонтрагента = Договор.Ссылка;
//  
//КонецЦикла;

///////////////////////////////////////////////////////////
т.е идет повторение кода для заполнения контрагентов в разных группах. Как можно сделать так чтобы остальной код заполняющий договоры, адрес не повторялся дважды?
32 Холодильник
 
06.11.13
12:00
за что ты нас так неуважаешь, выкладывая простыню закомменченного кода?((


А за
" Группа.Наименование = Справочники.Контрагенты.НайтиПоНаименованию("2-Bakmil Filial?");"

даже помогать не хочу, извини.


_______________

Позовите специалиста, прекратите насилие над базой и над здравым смыслом
33 amadeus2010
 
06.11.13
12:12
(32) не хотел никого обидеть только выложил весь код для полного понимания процесса. Если я комментирую часть кода то контрагенты садятся в нужную группу без дублирования,если раскомментировать эту часть кода то уже начинается дубляж записей. Специалиста звать не получиться
34 amadeus2010
 
06.11.13
12:45
нашел причину дубляжа вот исправленный код
/////////////////////////////////////////////////////
КодГруппы = "000001169";
ПоискПоПолномуКоду = Ложь; // значение по умолчанию
Группа = Справочники.Контрагенты.НайтиПоКоду(КодГруппы, ПоискПоПолномуКоду);

Если Группа.Пустая() Тогда
    Группа = Справочники.Контрагенты.СоздатьГруппу();
    Группа.Код = КодГруппы;
    //Группа.Наименование = Справочники.Контрагенты.НайтиПоНаименованию("2-Bakmil Filial?");
    Группа.Наименование = "2-Bakmil Filial?";
    Группа.ЭтоГруппа = Истина;
    Группа.Записать();
ИначеЕсли Не Группа.ЭтоГруппа Тогда
    Сообщить("Найден элемент справочника с указанным кодом!");
    
    // Предусмотреть прерывание алгоритма.
КонецЕсли;


КодГруппы = "000001171";
ПоискПоПолномуКоду = Ложь; // значение по умолчанию
Группа = Справочники.Контрагенты.НайтиПоКоду(КодГруппы, ПоискПоПолномуКоду);

Если Группа.Пустая() Тогда
    Группа = Справочники.Контрагенты.СоздатьГруппу();
    Группа.Код = КодГруппы;
    Группа.Наименование = "1-D?rn?g?l Filial?";
    Группа.ЭтоГруппа = Истина;
    Группа.Записать();
ИначеЕсли Не Группа.ЭтоГруппа Тогда
    Сообщить("Найден элемент справочника с указанным кодом!");
    
    // Предусмотреть прерывание алгоритма.
КонецЕсли;

    

    Спр = Справочники.Контрагенты.СоздатьЭлемент();
    //Спр.Код=Строка.Код;
    Спр.Наименование = Строка.ShopName;
    Спр.НаименованиеПолное=Строка.ShopName;
    Спр.Покупатель = Истина;
    Спр.ИНН =Строка.НомерМаршрута;
    Спр.ЮрФизЛицо=Перечисления.ЮрФизЛицо.ЮрЛицо;
    Спр.Подразделение=Справочники.Подразделения.НайтиПоНаименованию(Строка.Filial, Истина);
    Спр.Родитель =Группа.Ссылка;
    Спр.Комментарий = Строка.ContactPerson + ";";

    НазначатьМенеджера = Ложь;

    ФЛ = Справочники.ФизическиеЛица.НайтиПоНаименованию(Строка.Salesman, Истина);

    Если ФЛ = Неопределено Тогда

       Сообщить("Не задано имя менеджера!");
    ИначеЕсли ФЛ.Пустая() Тогда
       Сообщить("Не найден менеджер «" + Строка.Salesman + "»");
    Иначе
           НазначатьМенеджера = Истина;
    КонецЕсли;

    Если НазначатьМенеджера Тогда
           ПЛ = Справочники.Пользователи.НайтиПоРеквизиту("ФизЛицо", ФЛ);
        НазначатьМенеджера = НЕ ПЛ.Пустая();
    КонецЕсли;

    Если НазначатьМенеджера Тогда

           НовМенеджер = Спр.МенеджерыПокупателя.Добавить();
           НовМенеджер.МенеджерПокупателя = ПЛ;

           Спр.ОсновнойМенеджерПокупателя = ПЛ;
    КонецЕсли;
    Спр.Записать();
////////////////////////////////////////////////////////
и так далее по коду.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn