Код 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