| 
    
            
         
         | 
    
  | 
Программная запись нового элемента справочника, ошибка | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Анастасия Изотова    
     25.08.15 
            ✎
    10:24 
 | 
         
        Добрый день, уважаемые специалисты.
 
        Подскажите, мне нужно создать программно несколько элементов справочника. Пишу код: Процедура Функ(Кнопка) СпрФизическиеЛица = Справочники.ФизическиеЛица; НовЭл = Справочники.ФизическиеЛица.СоздатьЭлемент(); НовЭл.Фамилия = "Петров"; НовЭл.Имя = "Петр"; НовЭл.Пол = "Петрович"; НовЭл.Наименование = СокрЛП(Фамилия) + " " + СокрЛП(Имя) + " " + СокрЛП(Отчество) + " (" + Формат(ДатаРождения,"ДЛФ=D") + ")"; НовЭл.ДатаРождения = "12.15.15"; НовЭл.Записать(); КонецПроцедуры но 1С ругается что : {Форма.Форма(596,1)}: Определения процедур и функций должны размещаться перед операторами тела модуля я что то не не там разместила ? это простая 8.1., Модуль формы внешней обработки  | 
|||
| 
    1
    
        ДенисЧ    
     25.08.15 
            ✎
    10:26 
 | 
         
        где-то раньше после КонецПроцедуры ; затесалась     
         | 
|||
| 
    2
    
        Остап Сулейманович    
     25.08.15 
            ✎
    10:26 
 | 
         
        (0) Перед "Процедура Функ(Кнопка)" написано что-то типа КонецПроцедуры; или КонецФункции;. И написано именно с точкой-запятой в конце, которой там быть не должно.     
         | 
|||
| 
    3
    
        Господин ПЖ    
     25.08.15 
            ✎
    10:27 
 | 
         
        НовЭл.Пол = "Петрович";
 
        петрович, карл!!  | 
|||
| 
    4
    
        Остап Сулейманович    
     25.08.15 
            ✎
    10:28 
 | 
         
        (0) И эттта... НовЭл.Пол = "Петрович"; Это что за пол такой? Знаю мужской, женский. И даже средний. Но пол Петрович - впервые слышу. )))     
         | 
|||
| 
    5
    
        ДенисЧ    
     25.08.15 
            ✎
    10:30 
 | 
         
        (4) Там опечатка, должно быть "Михалыч"...     
         | 
|||
| 
    6
    
        aka AMIGO    
     25.08.15 
            ✎
    10:30 
 | 
         
        (1) синтаксконтроль разве не ловит эти ";" ?
 
        должен-бы..  | 
|||
| 
    7
    
        Остап Сулейманович    
     25.08.15 
            ✎
    10:31 
 | 
         
        (6) Буду банален. Это 1С, детка.
 
        ЗЫ Это была шутка есличо.  | 
|||
| 
    8
    
        Анастасия Изотова    
     27.08.15 
            ✎
    09:20 
 | 
         
        Парни, ну серьезно ))  Михалыч, это для теста, я же проверяю, как оно работать станет...
 
        Ошибка ушла. Но!, не записываются данные в поля ПолеВыбора (в частности Пол, дата рождения) . ТАм просто пусто: переписала попроще: НовыйЭлемент = Справочники.ФизическиеЛица.СоздатьЭлемент(); НовыйЭлемент.Наименование = "Новый999"; НовыйЭлемент.Пол = "111"; НовыйЭлемент.ДатаРождения = "12.12.1202"; НовыйЭлемент.Фамилия = "1"; НовыйЭлемент.Имя = "2"; НовыйЭлемент.Отчество = "3"; НовыйЭлемент.Записать(); В итоге создает записи только по простых Строковых полях )  | 
|||
| 
    9
    
        Альбатрос    
     27.08.15 
            ✎
    09:24 
 | 
         
        (8) А ты думала в сказке оказалась? Думаешь, все эти реквизиты имеют тип "Строка"? И даже никакой РС не задействован?     
         | 
|||
| 
    10
    
        Апош    
     27.08.15 
            ✎
    09:28 
 | 
         
        (8) "111" - это Перечисления.ПолыФизЛиц.Девочка или Перечисления.ПолыФизЛиц.Мальчик?     
         | 
|||
| 
    11
    
        Альбатрос    
     27.08.15 
            ✎
    09:30 
 | 
         
        (10) Это таки "Петрович" )))))     
         | 
|||
| 
    12
    
        Апош    
     27.08.15 
            ✎
    09:30 
 | 
         
        (11) Гадя Петрович Хренова?     
         | 
|||
| 
    13
    
        Альбатрос    
     27.08.15 
            ✎
    09:31 
 | 
         
        (12) Судя по вводным данным - именно она )))     
         | 
|||
| 
    14
    
        Апош    
     27.08.15 
            ✎
    09:32 
 | 
         
        (8) твои строки неявно преобразуются к типу левого операнда, чтоб ты знала     
         | 
|||
| 
    15
    
        Альбатрос    
     27.08.15 
            ✎
    09:32 
 | 
         
        Вот это тоже супер: НовЭл.ДатаРождения = "12.15.15";
 
        Марсианское летоисчисление?  | 
|||
| 
    16
    
        Апош    
     27.08.15 
            ✎
    09:34 
 | 
         
        >НовыйЭлемент.Отчество = "3";
 
        поправь на "3ич" или "3на"  | 
|||
| 
    17
    
        capllary_
 surgut 27.08.15 
            ✎
    09:46 
 | 
         
        (0) Для низмоводов:
 
        НовыйЭлемент = Справочники.ФизическиеЛица.СоздатьЭлемент(); НовыйЭлемент.Наименование = "Пупкин Василий Иванович"; НовыйЭлемент.Пол = Перечисления.ПолФизическихЛиц.Мужской; НовыйЭлемент.ДатаРождения = Дата("20141231"); НовыйЭлемент.Фамилия = "Пупкин"; НовыйЭлемент.Имя = "Василий"; НовыйЭлемент.Отчество = "Иванович"; НовыйЭлемент.Записать(); Как-то так) джейзет рулит)  | 
|||
| 
    18
    
        Апош    
     27.08.15 
            ✎
    09:48 
 | 
         
        ну уж дату можно было и литералом записать     
         | 
|||
| 
    19
    
        Trotter    
     27.08.15 
            ✎
    09:50 
 | 
         
        Почему пишут так НовЭл.Фамилия = "Петров";
 
        а потом вот так СокрЛП(Фамилия); ? Почему не так НовЭл.Фамилия = СокрЛП("Петров"); ?  | 
|||
| 
    20
    
        Trotter    
     27.08.15 
            ✎
    09:51 
 | 
         
        НовЭл.Наименование = СокрЛП(НовЭл.Фамилия) ?     
         | 
|||
| 
    21
    
        hhhh    
     27.08.15 
            ✎
    09:55 
 | 
         
        (20) перестраховываются. Вдруг у разработчиков конфы рука дрогнет спьяну и они сделают реквизит "Фамилия" строкой фиксированной длины. А тут всё готово, Сразу СокрЛП и всё в порядке.     
         | 
|||
| 
    22
    
        13_Mult    
     27.08.15 
            ✎
    09:58 
 | 
         
        (17) А как же РегистрыСведений.ФИОФизЛиц ?     
         | 
|||
| 
    23
    
        Trotter    
     27.08.15 
            ✎
    10:00 
 | 
         
        А для этого разве нету в общих модулях функциях добавление нового лица ?) или есть ?     
         | 
|||
| 
    24
    
        Анастасия Изотова    
     27.08.15 
            ✎
    10:56 
 | 
         
        to   capllary_surgut  - спасибо за джей зет!  
 
        я правда не знаю, кто такой этот Джей Зет, может рэппер какой, но не суть важно! получилось! и огромное вам за это спасибо! Скажите, а можно подобную манипуляцию - программное занесение человека в справочник, сделать для группы лиц, циклом ? на основании табличной части *? есть табличная часть, куда я заношу десяток таких людей, указав ФИО, пол, телефон, и по всей этой компании создаются набор элементов в справочнике ?  | 
|||
| 
    25
    
        Lexey_    
     27.08.15 
            ✎
    11:00 
 | 
         
        (24) а что натолкнуло на мысль о невозможности?     
         | 
|||
| 
    26
    
        Апош    
     27.08.15 
            ✎
    11:07 
 | 
         
        (25) она разрешения спрашивает
 
        (24) благословляем  | 
|||
| 
    27
    
        ДенисЧ    
     27.08.15 
            ✎
    11:08 
 | 
         
        (24) Я присоединяюсь. Не имею никаких возражений к реализации.     
         | 
|||
| 
    28
    
        Славен    
     27.08.15 
            ✎
    11:11 
 | 
         
        (24) помещаешь всё из (17) в цикл
 
        Для каждого ... из ... цкил  | 
|||
| 
    29
    
        Trotter    
     27.08.15 
            ✎
    11:12 
 | 
         
        (24) Для Каждого Стр ИЗ ИЗ     
         | 
|||
| 
    30
    
        Trotter    
     27.08.15 
            ✎
    11:12 
 | 
         
        ИЗ ИЗ -> ИЗ ТЗ     
         | 
|||
| 
    31
    
        Анастасия Изотова    
     01.09.15 
            ✎
    04:19 
 | 
         
        Допустим табличная часть называется: Персоны
 
        Тогда попробуем просмотреть построчно табличную часть и согласно каждой строке создать записи в Справочнике физ лиц: ТЗКомплекс = Персоны.Выгрузить(); ТЗКомплекс.Свернуть("Пол","ДатаРождения","Фамилия","Имя","Отчество","Категория","БСО"); Для Каждого СтрКомплекс Из ТЗКомплекс Цикл НовыйЭлемент.Пол = СтрКомплекс.Пол; НовыйЭлемент.ДатаРождения = СтрКомплекс.ДатаРождения; НовыйЭлемент.Фамилия = СтрКомплекс.Фамилия; НовыйЭлемент.Имя = СтрКомплекс.Имя; НовыйЭлемент.Отчество = СтрКомплекс.Отчество; НовыйЭлемент.Категория = СтрКомплекс.Категория; НовыйЭлемент.БСО = СтрКомплекс.БСО; НовыйЭлемент.Записать(); Я вот насчет свертки-развертки не уверена (((  | 
|||
| 
    32
    
        mehfk    
     01.09.15 
            ✎
    04:32 
 | 
         
        А что в СП написано по этому поводу?     
         | 
|||
| 
    33
    
        Анастасия Изотова    
     02.09.15 
            ✎
    10:29 
 | 
         
        Если честно - синтаксис помошник подсказывает в общем, что значит тот или иной обьект ...
 
        А мне понять нужно, в чем тут ошибка, в этом куске кода ?  | 
|||
| 
    34
    
        Анастасия Изотова    
     02.09.15 
            ✎
    10:30 
 | 
         
        Я наверное неправильно что то делаю, но эти ИЗ-ИЗ, я не уверена что правильно написала код ((     
         | 
|||
| 
    35
    
        Lexey_    
     02.09.15 
            ✎
    10:42 
 | 
         
        (31) а зачем ТЗКомплекс сворачивать?     
         | 
|||
| 
    36
    
        hhhh    
     02.09.15 
            ✎
    10:53 
 | 
         
        (34) вообще добавления нет
 
        НовЭл = Справочники.ФизическиеЛица.СоздатьЭлемент(); куда делось?  | 
|||
| 
    37
    
        mehfk    
     02.09.15 
            ✎
    11:00 
 | 
         
        (33) А о количестве и типах параметров методов он дает представление?     
         | 
|||
| 
    38
    
        ДенисЧ    
     02.09.15 
            ✎
    11:00 
 | 
         
        (37) о количестве - даёт     
         | 
|||
| 
    39
    
        mistеr    
     02.09.15 
            ✎
    11:15 
 | 
         
        (24) Сделай еще одну форму списка для справочника, и всего делов.
 
        С другой стороны, опыт написания кода тоже нужно где-то набирать...  | 
|||
| 
    40
    
        Анастасия Изотова    
     03.09.15 
            ✎
    08:12 
 | 
         
        Форма списка для справочника - для чего ?
 
        У меня табличная часть на форме, куда заносятся новые люди. Далее нажимаю на процедуру: Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | ТабличнаяЧасть.Номер, | ТабличнаяЧасть.Фамилия, | ТабличнаяЧасть.Имя, | ТабличнаяЧасть.Отчество, | ТабличнаяЧасть.Пол, | ТабличнаяЧасть.ДатаРождения, | ТабличнаяЧасть.БСО | ИЗ | Документ.ПервичныйДокумент.Услуги КАК ТабличнаяЧасть"; Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл НовыйЭлемент = Справочники.ФизическиеЛица.СоздатьЭлемент(); НовыйЭлемент.Пол = Результат.Пол; НовыйЭлемент.ДатаРождения = Результат.ДатаРождения; НовыйЭлемент.Фамилия = Результат.Фамилия; НовыйЭлемент.Имя = Результат.Имя; НовыйЭлемент.Отчество = Результат.Отчество; НовыйЭлемент.БСО = Результат.БСО; НовыйЭлемент.Записать(); КонецЦикла; как вы думаете, выберет она из табличной части людей и занесет их в справочник ?  | 
|||
| 
    41
    
        Брегорьян    
     03.09.15 
            ✎
    08:13 
 | 
         
        это загадка такая? ответ - может быть     
         | 
|||
| 
    42
    
        Брегорьян    
     03.09.15 
            ✎
    08:14 
 | 
         
        а вообще, сделала хрень. массовое создание элементов лучше обработкой делать     
         | 
|||
| 
    43
    
        hhhh    
     03.09.15 
            ✎
    09:27 
 | 
         
        (40) не указано, какой конкретно документ в запросе. То есть все документы базы берете?     
         | 
|||
| 
    44
    
        Анастасия Изотова    
     03.09.15 
            ✎
    09:30 
 | 
         
        to hhhh -  документ так и называется Первичный документ. В нем есть табличная часть, которая называется Услуги. это я как пример.  
 
        to Брегорьян - Ну хорошо, последую вашему совету. вот внешняя обработка. одна из моих любых. вот на обработке табличная часть. с полями: фио, пол, и т.д. вот на форме кнопка вот запускается процедура вот запрос оббегает строки табличной части вот в цикле, согласно Результатам запроса выше, создаются в справочнике физ лиц обьекты, Иванов, Петров, Сидоров, с реквизитами уже внесенными, согласно табличной части выше ... общая идея такая. Скажите, в этом коде выше все необходимое есть ?  | 
|||
| 
    45
    
        hhhh    
     03.09.15 
            ✎
    09:35 
 | 
         
        (43) но в базе могут быть миллионы этих "Первичный документ.". Вы сразу несколько миллионов физ лиц создаете?     
         | 
|||
| 
    46
    
        Trotter    
     03.09.15 
            ✎
    09:36 
 | 
         
        (45) Раньше хоть свёртка была     
         | 
|||
| 
    47
    
        Анастасия Изотова    
     03.09.15 
            ✎
    09:37 
 | 
         
        оу, и правда. а я думала запрос пойдет по ЭТОМУ документу, который и вызвал обработку. Да, я была не права.
 
        А можно задать условие, в запросе, что именно ЭТОТ документ, который открыт ?  | 
|||
| 
    48
    
        Славен    
     03.09.15 
            ✎
    09:43 
 | 
         
        (47) в запрос добавь условие 
 
        |ГДе | Документ.ПервичныйДокумент.Ссылка = &Твойдок Запрос.Параметры.Установить("ТвойДок", ТвойДок);  | 
|||
| 
    49
    
        Trotter    
     03.09.15 
            ✎
    09:45 
 | 
         
        из (48) ТвойДок - это ссылка на твой документ.     
         | 
|||
| 
    50
    
        Анастасия Изотова    
     03.09.15 
            ✎
    09:52 
 | 
         
        Ага, то есть если я ЭТО во внешнюю обработку впишу, а ее подцеплю к системе, то при открытии в документе, по штатным меню, она сама этот док, ее открыший найдет ?
 
        а если я открою ее через файл->открыть, то нужно на форму встроить строку выбора документа, связав ее с полем данных: ТвойДок ... и указать - в какой док лезть, и из какого брать табличную часть ?  | 
|||
| 
    51
    
        Славен    
     03.09.15 
            ✎
    09:57 
 | 
         
        рука лицо     
         | 
|||
| 
    52
    
        mistеr    
     03.09.15 
            ✎
    10:32 
 | 
         
        (40) >Форма списка для справочника - для чего ?
 
        У нее предназначение такое - массовый ввод элементов в справочник в табличном виде. И все, что ты тут пытаешься накодить, уже реализовано в платформе.  | 
|||
| 
    53
    
        Анастасия Изотова    
     03.09.15 
            ✎
    10:48 
 | 
         
        почитала про форму списка. У меня есть в справочнике ФизЛиц в списке Форм, ФормаСписка.
 
        создать еще одну ? А в чем общая затея заключается ? мне то нужно было на основании некоей табличной части из обработки внешней создать: 1. несколько записей в справочнике. 2. документы создать одного типа, на эти физ лица и с типовым заполнением реквизитов и полей. 3. провести это все.  | 
|||
| 
    54
    
        Брегорьян    
     03.09.15 
            ✎
    10:52 
 | 
         
        (53) я сейчас примерно то же ваяю. можешь ждать код-полуфабрикат ;)     
         | 
|||
| 
    55
    
        Анастасия Изотова    
     03.09.15 
            ✎
    10:55 
 | 
         
        серьезно ?  Было бы неплохо очень ! 
 
        to Славен - я может не совсем понятно описала, но .. Обычно так внешние обработки у меня и выглядят. Строка выбора документа на форме. По ней выбираю какой то документ в базе. И при выполнении процедур, она что то с Этим, выбранным документом делает. В данном случае "ТвойДок", ТвойДок); - ты ведь про это, да ?  | 
|||
| 
    56
    
        Брегорьян    
     03.09.15 
            ✎
    10:57 
 | 
         
        (55) можешь в почту напоминалку кинуть     
         | 
|||
| 
    57
    
        mistеr    
     03.09.15 
            ✎
    11:29 
 | 
         
        (53) Это уже не просто соэдание элементов справочника. Делай как делала.     
         | 
|||
| 
    58
    
        Славен    
     03.09.15 
            ✎
    12:05 
 | 
         
        (55) да, замени ТвойДок, который не в кавычках, на ссылку документа     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |