| 
			| 
					
						| Nodir2525 
								Участник  Offline | 
								|  | «  : 21-09-2010 05:51 »  |  | 
 
 Конфигурация- Справочники
 - Контрагент
 - Фамилия
 - Имя
 - Отчество
 - ДокументНомер
 
 Документы
 - ВводНовыхКлиентов
 - Шапка
 - Фамилия
 - Имя
 - Отчество
 - ДокументНомер
 --------------------------------------------------------------------------------------------------
 
 - Модуль Документа- Документ.ВводНовыхКлиентов
 -------------------------------------------------------------------------------------------------
 Процедура ОбработкаПроведения()
 
 СпрК=СоздатьОбъект("Справочник.Контрагент");
 СпрК.Новый();
 СпрК.Фамилия=Фамилия;
 СпрК.Имя=Имя;
 СпрК.Отчество=Отчество;
 СпрК.ДокументНомер=ДокументНомер;
 СпрК.ДокументДатаВыдачи=ДокументДатаВыдачи;
 СпрК.ДокументКемВыдан=ДокументКемВыдан;
 СпрК.Наименование=СокрЛП(СпрК.Фамилия)+" "+СокрЛП(СпрК.Имя)+" "+СокрЛП(СпрК.Отчество);
 СпрК.Записать();
 
 КонецПроцедуры
 ------------------------------------------------------------------------------------------------
 У меня такой Вапрос?
 Когда Я водил нового клиента он создавался на справочнике.
 Но база ведает ошибку.
 
 СпрК.Записать();
 {Документ.ВводНовыхКлиентов.Модуль Документа(14)}: Не определена дата! Элемент не может быть записан!
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| kiser 
								Участник    Offline | 
								|  | « Ответ #1 : 21-09-2010 10:54 »  |  | 
 
 Может среди реквизитов справочника есть периодические? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Nodir2525 
								Участник  Offline | 
								|  | « Ответ #2 : 21-09-2010 13:00 »  |  | 
 
 На Свойства Реквизита стоит галочка "Периодический, Изменяется Документами"Я хочу только водили новых клиентов через "ВводНовыхКлиентов" и делали изменение только через Конфигурацию - Документы - ИзменениеДанныхКлиентов!!!
 Чтобы через Справочник - Контрагент - не смогли водит и изменят данный!!!
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #3 : 21-09-2010 18:48 »  |  | 
 
 Nodir2525, Проведение документа - в общем случае операция не разовая, а у тебя при каждом проведении будет создаваться новый элемент справочника. Нужно добавить дополнительные проверки чтобы элемент не создавался повторно.Если у реквизита справочника установлены такие параметры, как ты описал (и снят флажок Ручное изменение) - то правильно устанавливать реквизит нужно с помощью процедуры УстановитьРеквизитСправочника();
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Nodir2525 
								Участник  Offline | 
								|  | « Ответ #4 : 21-09-2010 20:05 »  |  | 
 
 Kivals процедуры УстановитьРеквизитСправочника();
 можно пример написать
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| AndyG 
								Постоялец    Offline | 
								|  | « Ответ #5 : 22-09-2010 05:32 »  |  | 
 
 Открываем Стандартную конфигурацию и смотрим обработку "ПервыйЗапуск"там есть примеры, вот кусок:
 
 Валюты = СоздатьОбъект("Справочник.Валюты");
 Валюты.Новый();
 Валюты.Код = "0";
 Валюты.Наименование = "Руб";
 Валюты.ПолнНаименование = "Рубли";
 Валюты.Записать();
 Валюты.Кратность.Установить('01.01.1980',1); //периодический
 Валюты.Курс.Установить('01.01.1980',1);//периодический
 
 Но как правильно заметил Kivals, возможно элемент справочника уже присутствует, тогда следует
 написать проверку дублирования, и если есть элемент, то спозиционироваться на нем и код будет
 несколько другой:
 УстановитьРеквизитСправочника(<ЭлементСправочника>,<НазваниеРеквизита>,<Значение>,<ДатаУстановки>,<ИмяТипа>,<Длина>,<Точность>)
 Хотя я использовал в доках и вариант 1, те Спр.Реквизит.Установить(дата, значение)
 
 |  
						| 
								|  |  
								| « Последнее редактирование: 22-09-2010 08:46 от AndyG » |  Записан | 
 |  |  | 
	| 
			| 
					
						| kiser 
								Участник    Offline | 
								|  | « Ответ #6 : 22-09-2010 12:16 »  |  | 
 
 ИМХО надо так: Процедура ОбработкаПроведения()
 СпрК=СоздатьОбъект("Справочник.Контрагент");
 СпрК.Новый();
 УстановитьРеквизитСправочника(СпрК,"Фамилия",Фамилия,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"Имя",Имя,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"Отчество",Отчество,ДатаДок);
 //если остальные реквизиты не периодические, то так и останутся
 СпрК.ДокументНомер=ДокументНомер;
 СпрК.ДокументДатаВыдачи=ДокументДатаВыдачи;
 СпрК.ДокументКемВыдан=ДокументКемВыдан;
 СпрК.Наименование=СокрЛП(Фамилия)+" "+СокрЛП(Имя)+" "+СокрЛП(Отчество);
 //если хочешь использовать СпрК.Фамилия, СпрК.Имя и СпрК.Отчество тогда
 //СпрК.Наименование=СокрЛП(СпрК.Фамилия.Получить(ДатаДок))+" "+СокрЛП(СпрК.Имя.Получить(ДатаДок))+" "+СокрЛП(СпрК.Отчество.Получить(ДатаДок));
 //поскольку периодические реквизиты не только записываются по дате, но и читаются
 СпрК.Записать();
 
 КонецПроцедуры
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #7 : 22-09-2010 14:49 »  |  | 
 
 ...СпрК.Новый();
 УстановитьРеквизитСправочника(СпрК,"Фамилия",Фамилия,ДатаДок);
 ...
Не прокатит. Нужно так: ...СпрК.Записать();
 УстановитьРеквизитСправочника(СпрК,"Фамилия",Фамилия,ДатаДок);
 ...
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Nodir2525 
								Участник  Offline | 
								|  | « Ответ #8 : 23-09-2010 05:40 »  |  | 
 
 KISERЯ попробовал, как ты написал. Но у меня не получается.
 У меня на конфигурации только это написано.
 Может куда та что-то надо писать.
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Nodir2525 
								Участник  Offline | 
								|  | « Ответ #9 : 23-09-2010 05:49 »  |  | 
 
 Kivals, Код:
 ...
 СпрК.Новый();
 УстановитьРеквизитСправочника(СпрК,"Фамилия",Фамилия,ДатаДок);
 ...Не прокатит. Нужно так:
 
 Код:
 ...
 СпрК.Записать();
 УстановитьРеквизитСправочника(СпрК,"Фамилия",Фамилия,ДатаДок);
 ...
 
 
 Мне надо так писат!!!
 
 Процедура ОбработкаПроведения()
 СпрК=СоздатьОбъект("Справочник.Контрагент");
 СпрК.Новый();
 СпрК.Записать();
 УстановитьРеквизитСправочника(СпрК,"Фамилия",Фамилия,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"Имя",Имя,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"Отчество",Отчество,ДатаДок);
 УстановитьРеквизитСправочник(СпрК,"ДокументНомер",ДокументНомер,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ДокументДатаВыдачи",ДокументДатаВыдачи,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ДокументКемВыдан",ДокументКемВыдан,ДатаДок);
 СпрК.Наименование=СокрЛП(СпрК.Фамилия.Получить(ДатаДок))+" "+СокрЛП(СпрК.Имя.Получить(ДатаДок))+" "+СокрЛП(СпрК.Отчество.Получить(ДатаДок));
 
 КонецПроцедуры
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| kiser 
								Участник    Offline | 
								|  | « Ответ #10 : 23-09-2010 05:51 »  |  | 
 
 Так последний вариант работает? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Nodir2525 
								Участник  Offline | 
								|  | « Ответ #11 : 23-09-2010 06:10 »  |  | 
 
 Последний вариант работаетНо в Контрагенте в Наименование не чего нету пуста.
 
 СпрК.Наименование=СокрЛП(СпрК.Фамилия.Получить(ДатаДок))+" "+СокрЛП(СпрК.Имя.Получить(ДатаДок))+" "+СокрЛП(СпрК.Отчество.Получить(ДатаДок));
 не работает на верно.
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #12 : 23-09-2010 13:35 »  |  | 
 
 Процедура ОбработкаПроведения()СпрК=СоздатьОбъект("Справочник.Контрагент");
 СпрК.Новый();
 СпрК.Наименование=СокрЛП(СпрК.Фамилия.Получить(ДатаДок))+" "+СокрЛП(СпрК.Имя.Получить(ДатаДок))+" "+СокрЛП(СпрК.Отчество.Получить(ДатаДок));
 СпрК.Записать();
 УстановитьРеквизитСправочника(СпрК,"Фамилия",Фамилия,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"Имя",Имя,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"Отчество",Отчество,ДатаДок);
 УстановитьРеквизитСправочник(СпрК,"ДокументНомер",ДокументНомер,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ДокументДатаВыдачи",ДокументДатаВыдачи,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ДокументКемВыдан",ДокументКемВыдан,ДатаДок);
 КонецПроцедуры
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Nodir2525 
								Участник  Offline | 
								|  | « Ответ #13 : 24-09-2010 06:47 »  |  | 
 
 Серавно!!!
 СпрК.Наименование=СокрЛП(СпрК.Фамилия.Получить(ДатаДок))+" "+СокрЛП(СпрК.Имя.Получить(ДатаДок))+" "+СокрЛП(СпрК.Отчество.Получить(ДатаДок));
 не работает на верно.
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #14 : 24-09-2010 11:20 »  |  | 
 
 Сори - не глянул (естественно эти реквизиты еще не установлены)Вот так долно быть:
 СпрК.Наименование=СокрЛП(Фамилия)+" "+СокрЛП(Имя)+" "+СокрЛП(Отчество);
 где Фамилия, Имя, Отчество - это реквизиты документа
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #15 : 24-09-2010 11:21 »  |  | 
 
 Суть моего изменения кода была в том, что присвоить СпрК.Наименование нужно до того, как записывать (или же записать еще раз, но это не совсем верно) |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Nodir2525 
								Участник  Offline | 
								|  | « Ответ #16 : 27-09-2010 09:13 »  |  | 
 
 нашло такой.Процедура ОбработкаПроведения()
 СпрК=СоздатьОбъект("Справочник.Контрагент");
 СпрК.ИспользоватьДату(ДатаДок);
 СпрК.Новый();
 СпрК.Фамилия=Фамилия;
 СпрК.Имя=Имя;
 СпрК.Отчество=Отчество;
 СпрК.ДокументНомер=ДокументНомер;
 СпрК.ДокументДатаВыдачи=ДокументДатаВыдачи;
 СпрК.ДокументКемВыдан=ДокументКемВыдан;
 СпрК.Наименование=СокрЛП(СпрК.Фамилия)+" "+СокрЛП(СпрК.Имя)+" "+СокрЛП(СпрК.Отчество);
 СпрК.Записать();
 КонецПроцедуры
 
 В чем разница с вашим модулем.
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #17 :  27-09-2010 09:59 »   |  | 
 
 Разница в том, что твой вариант просто устанавливает реквизиты на указанную даты (не привязывая их к документу), что имеет свои минусы:0. Такой режим предусматривает ручное изменение периодических реквизитов - в некоторых случаях это недопустимо
 1. На каждую дату можно установить только одно значение - значит 2 документа в один день сделать нельзя, точнее можно, но первое значение будет "затерто".
 3. Значение не привязано к документу, т.е. нельзя просто посмотреть в историю реквизита и узнать каким документом изменение внесено
 4. При отмене проведения документа значения реквизитов не отменятся.
 
 Возможно для твоей задачи это и приемлемо, но это неправильный подход (ИМХО)
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Nodir2525 
								Участник  Offline | 
								|  | « Ответ #18 : 28-09-2010 06:58 »  |  | 
 
 Сори - не глянул (естественно эти реквизиты еще не установлены)Вот так долно быть:
 СпрК.Наименование=СокрЛП(Фамилия)+" "+СокрЛП(Имя)+" "+СокрЛП(Отчество);
 где Фамилия, Имя, Отчество - это реквизиты документа
 
 Да это плохо. На Вашем варианте  СпрК.Наименование=СокрЛП(Фамилия)+" "+СокрЛП(Имя)+" "+СокрЛП(Отчество); Не работает |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| kiser 
								Участник    Offline | 
								|  | « Ответ #19 : 28-09-2010 07:55 »  |  | 
 
 Процедура ОбработкаПроведения()//Проверка на наличие такого
 Спр1 = СоздатьОбъект("Справочник.Контрагент");
 Спр1.ВыбратьЭлементы();
 Если Спр1.НайтиПоНаименованию(СокрЛП(Фамилия)+" "+СокрЛП(Имя)+" "+СокрЛП(Отчество),0,1) = 1 тогда
 Если Вопрос("Такой контрагент есть! Добавить этого?", "Да+Нет") = "Нет" Тогда
 Возврат;
 КонецЕсли;
 КонецЕсли;
 
 //Добавление нового
 СпрК=СоздатьОбъект("Справочник.Контрагент");
 СпрК.Новый();
 СпрК.Наименование=СокрЛП(Фамилия)+" "+СокрЛП(Имя)+" "+СокрЛП(Отчество);
 СпрК.Записать();
 ТекСпр =  СпрК.ТекущийЭлемент();
 УстановитьРеквизитСправочника(СпрК,"Фамилия",Фамилия,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"Имя",Имя,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"Отчество",Отчество,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ДокументНомер",ДокументНомер,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ДокументСерия",ДокументСерия,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ДокументДатаВыдачи",ДокументДатаВыдачи,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ДокументКемВыдан",ДокументКемВыдан,ДатаДок);
 
 КонецПроцедуры
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #20 : 28-09-2010 11:38 »  |  | 
 
 Если Вопрос("Такой контрагент есть! Добавить этого?", "Да+Нет") = "Нет"kiser , не рекомендую использовать интерактивные функции при проведении. В крайнем случае (если уж очень хочется) - то с установленным таймаутом (обычно - последний параметр). Причина: например есть 100 000 документов, которые надо перепровести чтобы исправить последовательность. Запускаем вечером, смотрим что первые 100 документов проводятся нормально и уходим домой, предполагая, что за ночь все проведется. Утром видим картину: на 200-м документе у нас завис вопрос и все остановилось   Проверять результат ГрупповаяОбработка() - не выход, т.к. документы могут массово проводиться и самонаписаной обработкой. |  
						| 
								|  |  
								| « Последнее редактирование: 28-09-2010 11:43 от Kivals » |  Записан | 
 |  |  | 
	| 
			| 
					
						| kiser 
								Участник    Offline | 
								|  | « Ответ #21 : 28-09-2010 12:22 »  |  | 
 
 Если Вопрос("Такой контрагент есть! Добавить этого?", "Да+Нет") = "Нет"kiser , не рекомендую использовать интерактивные функции при проведении. В крайнем случае (если уж очень хочется) - то с установленным таймаутом (обычно - последний параметр). Причина: например есть 100 000 документов, которые надо перепровести чтобы исправить последовательность. Запускаем вечером, смотрим что первые 100 документов проводятся нормально и уходим домой, предполагая, что за ночь все проведется. Утром видим картину: на 200-м документе у нас завис вопрос и все остановилось   Проверять результат ГрупповаяОбработка() - не выход, т.к. документы могут массово проводиться и самонаписаной обработкой.Спасибо за совет. Ну это пример проверки на наличие, а кусок кода с вопросом можно заменить уже по выбору разработчика. Например на отмену проведения или перезапись существующего. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #22 : 28-09-2010 13:15 »  |  | 
 
 Согласен, просто посчитал нужным написать это рядом с кодом: чтобы использующие этот код новички не взяли такой подход за правило. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Nodir2525 
								Участник  Offline | 
								|  | « Ответ #23 : 06-10-2010 06:52 »  |  | 
 
 СПАСИБО!!!ПОЛУЧИЛСЯ!!!
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Nodir2525 
								Участник  Offline | 
								|  | « Ответ #24 : 06-10-2010 13:08 »  |  | 
 
 Процедура ОбработкаПроведения()СпрК=СоздатьОбъект("Справочник.Контрагент");
 СпрК.Новый();
 СпрК.Наименование=СокрЛП(Фамилия)+" "+СокрЛП(Имя)+" "+СокрЛП(Отчество);
 СпрК.Записать();
 УстановитьРеквизитСправочника(СпрК,"Фамилия",Фамилия,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"Имя",Имя,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"Отчество",Отчество,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ДокументНомер",ДокументНомер,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ДокументСерия",ДокументСерия,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ДокументДатаВыдачи",ДокументДатаВыдачи,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ДокументКемВыдан",ДокументКемВыдан,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ЮридическиеАдрес",ЮридическиеАдрес,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"КодСОАТОЮрАдрес",КодСОАТОЮрАдрес,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ПочтовыйИндексЮр",ПочтовыйИндексЮр,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"Страна",Страна,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ПочтовыйАдрес",КодСОАТОПочАдрес,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ПочтовыйАдрес",КодСОАТОПочАдрес,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"ПочтовыйАдрес",КодСОАТОПочАдрес,ДатаДок);
 УстановитьРеквизитСправочника(СпрК,"Регион",Регион,ДатаДок);
 КонецПроцедуры
 
 ОШИБКА!!!
 СпрК.Записать();
 {Документ.ВводНовыхКлиентФиз.Модуль Документа(28)}: Неверно задан код!
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #25 : 06-10-2010 15:03 »  |  | 
 
 Для справочника Контрагент:Какой тип и длина кода?
 Установлен ли флаг автонумерации?
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Nodir2525 
								Участник  Offline | 
								|  | « Ответ #26 : 07-10-2010 04:37 »  |  | 
 
 ДА!!!СПАСИБО!!!
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |