Имя: Пароль:
1C
1С v8
Программная запись нового элемента справочника, ошибка
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) да, замени ТвойДок, который не в кавычках, на ссылку документа