helpf.pro
Регистрация

v8.2 УП: Битая Ссыль как решить ????

ilias54rus1
01.07.2013 15:35Прочитано: 4377
Код 1C v 8.х
 Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	Если ЗначениеНеЗаполнено(ДатаВступления) Тогда
		Предупреждение("Не заполнена дата вступления приказа на стоимость обучения. Проведение документа отменено");
		Отказ = Истина;
		Возврат;
	КонецЕсли;
			
	Для каждого Строка из Товары  Цикл
		
		Если ЗначениеНеЗаполнено(ВУЗ) или ЗначениеНеЗаполнено(Строка.ПрограммаОбучения) или ЗначениеНеЗаполнено(Строка.ФормаОбучения) или ЗначениеНеЗаполнено(Строка.Специальность)
			или ЗначениеНеЗаполнено(Строка.Сумма)  или ЗначениеНеЗаполнено(Строка.Валюта) или ЗначениеНеЗаполнено(Строка.ПериодичностьОплаты) Тогда 
			Предупреждение("В строке "+Строка.НомерСтроки+" не установлены все реквизиты для установки стоимости обучения");
			Если ЭтотОбъект.Проведен Тогда
			    ЭтотОбъект.Проведен = Ложь;
			    ЭтотОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
			КонецЕсли;	
			Прервать;
		КонецЕсли;	
		
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	ПриказПоСтоимостиОбучения.Ссылка,
		|	ПриказПоСтоимостиОбучения.Товары.(
		|		Справочник
		|	),
		|	СтоимостьОбучения.Ссылка КАК СсылкаСправочник
		|ИЗ
		|	Документ.ПриказПоСтоимостиОбучения КАК ПриказПоСтоимостиОбучения
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СтоимостьОбучения КАК СтоимостьОбучения
		|		ПО ПриказПоСтоимостиОбучения.Товары.Справочник = СтоимостьОбучения.Ссылка	
		|ГДЕ
		|	СтоимостьОбучения.ВУЗ = &ВУЗ
		|	И СтоимостьОбучения.ФормаОбучения = &ФормаОбучения
		|	И СтоимостьОбучения.ПрограммаОбучения = &ПрограммаОбучения
		|	И СтоимостьОбучения.Специальность = &Специальность
		|	И СтоимостьОбучения.ДатаВступления = &Дата";
		
		Запрос.УстановитьПараметр("ВУЗ", ВУЗ);
		Запрос.УстановитьПараметр("ФормаОбучения",Строка.ФормаОбучения);
		Запрос.УстановитьПараметр("ПрограммаОбучения", Строка.ПрограммаОбучения);
		Запрос.УстановитьПараметр("Специальность", Строка.Специальность);
		Запрос.УстановитьПараметр("Дата", ДатаВступления);
		
		Результат = Запрос.Выполнить();
		Выборка = Результат.Выбрать();
		
		Если Выборка.Следующий() Тогда
			СправочникСсылка = Выборка.СсылкаСправочник.ПолучитьОбъект();
		Иначе
			СправочникСсылка = Справочники.СтоимостьОбучения.СоздатьЭлемент();
		КонецЕсли;
		
		СправочникСсылка.ВУЗ = ВУЗ;
		СправочникСсылка.ФормаОбучения = Строка.ФормаОбучения;
		СправочникСсылка.ПрограммаОбучения = Строка.ПрограммаОбучения;
		СправочникСсылка.Специальность = Строка.Специальность;
		СправочникСсылка.Сумма = Строка.Сумма;
		СправочникСсылка.Валюта = Строка.Валюта;
		СправочникСсылка.ПериодичностьОплаты = Строка.ПериодичностьОплаты;
		СправочникСсылка.НомерПриказа = НомерПриказа;
		СправочникСсылка.ДатаВступления = ДатаВступления;
		СправочникСсылка.Наименование = СокрЛП(Строка.ПрограммаОбучения)+" "+СокрЛП(Строка.Специальность)+" "+СокрЛП(Строка.ФормаОбучения)+" "+СокрЛП(ВУЗ)+" "+Формат(ДатаВступления, "ДФ=dd.MM.yyyy");
		СправочникСсылка.Записать();
		Строка.Справочник = СправочникСсылка.Ссылка;
		
		//Запись истории номенклатуры
		Запрос2 = Новый Запрос;
		Запрос2.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	Номенклатура.Ссылка
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура
		|ГДЕ
		|	Номенклатура.Группы.ПрограммаОбучения = &ПрограммаОбучения
		|	И Номенклатура.Группы.ВУЗ = &ВУЗ
		|	И Номенклатура.Группы.ФормаОбучения = &ФормаОбучения
		|	И Номенклатура.Группы.Специальность = &Специальность";
		
		Запрос2.УстановитьПараметр("ВУЗ", ВУЗ);
		Запрос2.УстановитьПараметр("ПрограммаОбучения", Строка.ПрограммаОбучения);
		Запрос2.УстановитьПараметр("ФормаОбучения", Строка.ФормаОбучения);
		Запрос2.УстановитьПараметр("Специальность", Строка.Специальность);
		
		Результат = Запрос2.Выполнить();
		НоменклатураВыборка = Результат.Выбрать();
		
		Пока НоменклатураВыборка.Следующий() Цикл
			
			
			ПолеТаблица = Новый ТаблицаЗначений;
			
			ПолеТаблица.Колонки.Добавить("ДатаВступления");
			ПолеТаблица.Колонки.Добавить("Валюта");
			ПолеТаблица.Колонки.Добавить("Сумма");
			Запрос = Новый Запрос;
			Запрос.Текст = "ВЫБРАТЬ
			|	СтоимостьОбучения.Ссылка,
			|	СтоимостьОбучения.ВУЗ,
			|	СтоимостьОбучения.ФормаОбучения,
			|	СтоимостьОбучения.ПрограммаОбучения,
			|	СтоимостьОбучения.Специальность,
			|	СтоимостьОбучения.Сумма,
			|	СтоимостьОбучения.Валюта,
			|	СтоимостьОбучения.ПериодичностьОплаты,
			|	СтоимостьОбучения.Номенклатура,
			|	СтоимостьОбучения.НомерПриказа,
			|	СтоимостьОбучения.ДатаВступления
			|ИЗ
			|	Справочник.СтоимостьОбучения КАК СтоимостьОбучения
			|ГДЕ
			|	СтоимостьОбучения.ВУЗ = &ВУЗ
			|	И СтоимостьОбучения.ФормаОбучения = &ФормаОбучения
			|	И СтоимостьОбучения.ПрограммаОбучения = &ПрограммаОбучения
			|	И СтоимостьОбучения.Специальность = &Специальность";
			
			
			Запрос.УстановитьПараметр("ВУЗ", ВУЗ);
			Запрос.УстановитьПараметр("ПрограммаОбучения", Строка.ПрограммаОбучения);
			Запрос.УстановитьПараметр("ФормаОбучения", Строка.ФормаОбучения);
			Запрос.УстановитьПараметр("Специальность", Строка.Специальность);
			
			Результат = Запрос.Выполнить();
			Выборка = Результат.Выбрать();
			Если Выборка.Количество() = 0 Тогда
				
				Продолжить;
			КонецЕсли;
			Пока Выборка.Следующий() Цикл
				НоваяСтрока = ПолеТаблица.Добавить();
				НоваяСтрока.ДатаВступления = Выборка.ДатаВступления;
				НоваяСтрока.Валюта = Выборка.Валюта;
				НоваяСтрока.Сумма = Выборка.Сумма;
			КонецЦикла;	
			Для каждого СтрокаСтоимости из ПолеТаблица Цикл
				НоваяДата = СтрокаСтоимости.ДатаВступления;
				НоваяВалюта = СтрокаСтоимости.Валюта;
				НоваяСумма = СтрокаСтоимости.Сумма;
				
				Запрос1 = Новый Запрос;
				Запрос1.Текст = "ВЫБРАТЬ
				|	ЦеныНоменклатуры.Период КАК Период,
				|	ЦеныНоменклатуры.Регистратор,
				|	ЦеныНоменклатуры.Номенклатура,
				|	ЦеныНоменклатуры.Валюта,
				|	ЦеныНоменклатуры.Цена,
				|	ЦеныНоменклатуры.ТипЦен
				|ИЗ
				|	РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
				|ГДЕ
				|	ЦеныНоменклатуры.Период = &Дата
				|	И ЦеныНоменклатуры.Валюта = &Валюта
				|	И ЦеныНоменклатуры.Цена = &Сумма
				|	И ЦеныНоменклатуры.Номенклатура = &Номенклатура";
				
				Запрос1.УстановитьПараметр("Номенклатура", НоменклатураВыборка.Ссылка);
				Запрос1.УстановитьПараметр("Дата", НоваяДата);
				Запрос1.УстановитьПараметр("Валюта", НоваяВалюта);
				Запрос1.УстановитьПараметр("Сумма", НоваяСумма);
				
				Результат = Запрос1.Выполнить();
				Выборка = Результат.Выбрать();
				Если Выборка.Количество() = 0 Тогда		
					ПерСтоим =  Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
					ПерСтоим.Дата = НоваяДата;
					
					Если НоваяВалюта.Пустая() Тогда
						Сообщить("Не установлена валюта стоимости. Принята валюта руб!");
						НоваяВалюта = Справочники.Валюты.НайтиПоКоду("810"); 
						СпрЦенТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в РУБ");
						СпрСтоимТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в РУБ");
					КонецЕсли;
					СпрСтоимВалюта = НоваяВалюта.Ссылка; 
					Если Найти(ВРег(НоваяВалюта), "РУБ") <> 0 Тогда
						СпрСтоимТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в РУБ");
						СпрЦенТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в РУБ");
					ИначеЕсли Найти(ВРег(НоваяВалюта), "USD") <> 0  Тогда
						СпрСтоимТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в USD");
						СпрЦенТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в USD");
					ИначеЕсли Найти(ВРег(НоваяВалюта), "УЕ") <> 0 Тогда
						СпрСтоимТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в УЕ");
						СпрЦенТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в УЕ");
					КонецЕсли;
					СпрСтоимЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("год");
					СпрСтоим = ПерСтоим.Товары.Добавить();   
					СпрЦен = ПерСтоим.ТипыЦен.Добавить();
					СпрЦен.ТипЦен = СпрЦенТипЦен;
					СпрСтоим.ТипЦен = СпрСтоимТипЦен;
					СпрСтоим.Цена = НоваяСумма;
					СпрСтоим.Валюта = СпрСтоимВалюта;
					СпрСтоим.ЕдиницаИзмерения = СпрСтоимЕдиницаИзмерения;
					СпрСтоим.Номенклатура = НоменклатураВыборка.Ссылка;
					Попытка
						ПерСтоим.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
						Сообщить("Создан документ "+СокрЛП(ПерСтоим)+" для записи истории номенклатуры!");
					Исключение
						Сообщить("Документ установки цен номенклатуры с такими параметрами уже существует");
					КонецПопытки;
				КонецЕсли;
			КонецЦикла;
			
		КонецЦикла;
	КонецЦикла;
	ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись);
	
КонецПроцедуры
Проблема при записи справочника изза этого не могу идти далее   

Изменено 01.07.13 16:04:43
Yandex
Возможно, вас также заинтересует
Реклама на портале
ilias54rus1
01.07.2013 15:36Ответ № 1
Справочник стоимость обучения
ilias54rus1
01.07.2013 15:37Ответ № 2
он завивисмый от приказов на стоимость обучения
E_Migachev
01.07.2013 16:05Ответ № 3
(2) ilias54rus1, так с какой ошибкой вылетает?
ilias54rus1
01.07.2013 16:37Ответ № 4
64 ошибка типо есть а его нету вот что я думаю просто сделать проверку а не запись зависмого документа что он существует потому что код разрабов может и праывильный но возможно не полный
ilias54rus1
02.07.2013 07:36Ответ № 5
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.ПриказПоСтоимостиОбучения.МодульОбъекта(64)}: Ошибка при вызове метода контекста (Записать)

по причине:

по причине:
В данной транзакции уже происходили ошибки!
E_Migachev
02.07.2013 10:37Ответ № 6
(5) ilias54rus1,
строка 64 это:
Код 1C v 8.х
 ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись);   
?
ошибка В данной транзакции уже происходили ошибки!
попробуй разбить код на чисти и таким образом найдешь ошибку
ilias54rus1
02.07.2013 14:52Ответ № 7
СправочникСсылка.Записать(); проблема возникает даже здесь при банальной записи в справочник СТоимостьОбучения данные берем из таблицы товары в данном документе
)
ilias54rus1
02.07.2013 14:54Ответ № 8
хотя справочник пуст как стеклышко
*06
Mokey
02.07.2013 14:59Ответ № 9
(7) ilias54rus1, а данные подходят? с какой ошибкой не записывается элемент справочника? Чудес не бывает. У меня нет конфы, я смотрю только на приведённый Вами код.
ilias54rus1
03.07.2013 07:09Ответ № 10
С ошибкой <Объект не найден> (77:8a9f001a4bf17cb111e2e38db6904be4) вот такой но строки он должен читать с формы приказа четко понимаю этот факт но как у них это реализовано не вижу )
E_Migachev
03.07.2013 17:52Ответ № 11
(10) ilias54rus1, а то за объект ты можешь определить? отладчиком?
ilias54rus1
04.07.2013 12:22Ответ № 12
Определяю есть подозрение что он не сохраняет выходной документ
E_Migachev
04.07.2013 17:43Ответ № 13
ну так не понять, разбивай код на куски и отладчиком прогоняй, только так поймешь почему ошибка
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!