Процедура СканироватьФайлНажатие(Элемент)
ВыбФайл = Новый Файл(ЭлементыФормы.ИмяФайла.Значение);
Если НЕ ВыбФайл.Существует() Тогда
ОбработатьОшибку("Файл "+ ЭлементыФормы.ИмяФайла.Значение +" не существует.",СтатусыСообщения.Важное,Истина,Истина,Истина);
ПолучитьОшибкиИзХранилища();
Возврат;
КонецЕсли;
Если СоставЗакачки.Количество()>0 Тогда
Ответ = Вопрос("Перед сканированием, очистить табличную часть?", РежимДиалогаВопрос.ДаНетОтмена);
Если Ответ = КодВозвратаДиалога.Да Тогда
//Вместе с очисткой таблицы, очистим предыдущие загрузки
мТаблицаОшибок.Очистить();
СоставЗакачки.Очистить();
Материалы.Очистить();
ИначеЕсли Ответ = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Попытка
DAO= Новый COMОбъект("DAO.DBEngine.36");
Исключение
Попытка
DAO= Новый COMОбъект("DAO.DBEngine.35");
Исключение
ОбработатьОшибку("Не удалось соединиться с DAO. "+ОписаниеОшибки(),СтатусыСообщения.Важное,Истина,Истина,Истина);
ПолучитьОшибкиИзХранилища();
Возврат;
КонецПопытки;
КонецПопытки;
Сообщить("Соединение с DAO, прошло успешно.",СтатусСообщения.Информация);
Сообщить("Попытка подключиться к Excel, для формирования ячеек.",СтатусСообщения.Информация);
//Перед открытием базы, с помощью DAO, присвоим первым 5 строкам колонок текст, в связи с особенностью DAO
Попытка
ФайлExcel=Новый COMОбъект("Excel.Application");
КнигаExcel = ФайлExcel.WorkBooks;
ExcelОбъект = КнигаExcel.Open(ЭлементыФормы.ИмяФайла.Значение);
Исключение
ОбработатьОшибку("Не удалось открыть Excel. "+ОписаниеОшибки(),СтатусыСообщения.Важное,Истина,Истина,Истина);
ПолучитьОшибкиИзХранилища();
Возврат;
КонецПопытки;
Попытка
Лист = ExcelОбъект.Sheets("POTRN");
Исключение
ОбработатьОшибку("Не удалось найти лист ""POTRN"". "+ОписаниеОшибки(),СтатусыСообщения.Важное,Истина,Истина,Истина);
ПолучитьОшибкиИзХранилища();
Возврат;
КонецПопытки;
ExcelОбъект.CheckCompatibility = Ложь;
ФайлExcel.DisplayAlerts = Ложь;
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Колонка");
ТЗ.Колонки.Добавить("Значение");
НСтрока = ТЗ.Добавить();
НСтрока.Колонка = 1;
НСтрока.Значение = "Строка";
НСтрока = ТЗ.Добавить();
НСтрока.Колонка = 2;
НСтрока.Значение = "Строка";
НСтрока = ТЗ.Добавить();
НСтрока.Колонка = 4;
НСтрока.Значение = "Строка";
НСтрока = ТЗ.Добавить();
НСтрока.Колонка = 5;
НСтрока.Значение = "Строка";
НСтрока = ТЗ.Добавить();
НСтрока.Колонка = 7;
НСтрока.Значение = 0;
Для каждого ТекТЗ Из ТЗ Цикл
Для Строка = 1 ПО 5 Цикл
Лист.Cells(Строка, ТекТЗ.Колонка).Value = ТекТЗ.Значение;
КонецЦикла;
КонецЦикла;
КоличествоСтрок = Лист.UsedRange.Rows.Count;
ИмяВременнегоФайла = ЭлементыФормы.ИмяФайла.Значение;
ИмяВременнегоФайла = Сред(ИмяВременнегоФайла,1,СтрДлина(ИмяВременнегоФайла)-4);
ИмяВременнегоФайла = ИмяВременнегоФайла + "_"+".xls";
Сообщить("Сохранение временного файла Excel.",СтатусСообщения.Информация);
Попытка
Лист.SaveAs(ИмяВременнегоФайла,56);
Сообщить("Сохранение прошло успешно.",СтатусСообщения.Информация);
Исключение
ФайлExcel.Quit();
ФайлExcel.Quit();
ОбработатьОшибку("Не удалось сохранить временный файл. "+ОписаниеОшибки(),СтатусыСообщения.Важное,Истина,Истина,Истина);
ПолучитьОшибкиИзХранилища();
Возврат;
КонецПопытки;
ФайлExcel.Quit();
ФайлExcel.Quit();
Сообщить("Попытка открытия базы данных, для выборки.",СтатусСообщения.Информация);
//Открыть базу данных
Попытка
//Для Microsoft Office 2003 и более ранних версий таблиц
db = DAO.Workspaces(0).OpenDatabase(""+ИмяВременнегоФайла+"", 0, 1, "Excel 8.0; HDR=NO;");
Сообщить("Открытие базы данных, прошло успешно.",СтатусСообщения.Информация);
Исключение
ОбработатьОшибку("Не удалось открыть базу данных. "+ОписаниеОшибки(),СтатусыСообщения.Важное,Истина,Истина,Истина);
ПолучитьОшибкиИзХранилища();
Возврат;
КонецПопытки;
//Получить записи
Recordset = Db.OpenRecordset("SELECT [f1],[f2],[f4],[f5],[f7] FROM [POTRN$A1:G"+СтрЗаменить(Строка(КоличествоСтрок),Символы.НПП,"")+"]");
МассивС = Новый Массив;
МассивС.Добавить(Тип("Строка"));
МассивЧ = Новый Массив;
МассивЧ.Добавить(Тип("Число"));
ОписаниеТиповС = Новый ОписаниеТипов(МассивС,,Новый КвалификаторыСтроки(255));
ОписаниеТиповЧ = Новый ОписаниеТипов(МассивЧ);
ОписаниеТиповС_ = Новый ОписаниеТипов(МассивС,,Новый КвалификаторыСтроки(10));
ОписаниеТиповС20 = Новый ОписаниеТипов(МассивС,,Новый КвалификаторыСтроки(20));
ОписаниеТиповС15 = Новый ОписаниеТипов(МассивС,,Новый КвалификаторыСтроки(15));
ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений.Колонки.Добавить("НомерСтр",ОписаниеТиповЧ);
ТаблицаЗначений.Колонки.Добавить("f1",ОписаниеТиповС);
ТаблицаЗначений.Колонки.Добавить("f2",ОписаниеТиповС20);
ТаблицаЗначений.Колонки.Добавить("f4",ОписаниеТиповС_);
ТаблицаЗначений.Колонки.Добавить("f5",ОписаниеТиповС15);
ТаблицаЗначений.Колонки.Добавить("f7",ОписаниеТиповЧ);
Сообщить("Добавление данных во временную таблицу, для последующего использования и обработки.",СтатусСообщения.Информация);
ОбработатьОшибку("Сканирование файла " +ЭлементыФормы.ИмяФайла.Значение+ ", выполено " + ТекущаяДата(),СтатусыСообщения.Информация);
СчетчикСтрок = 1;
Пока НЕ Recordset.eof Цикл
Строка = ТаблицаЗначений.Добавить();
Строка.НомерСтр = СчетчикСтрок;
Строка.f1 = Строка(Recordset.f1.value);
Попытка
Строка.f2 = Строка(Recordset.f2.value);
Исключение
ОбработатьОшибку("При обработке данных из файла не удалось определить код ТМЦ.
| Номер строки в файле " + СчетчикСтрок,СтатусыСообщения.ОченьВажное);
Строка.f2 = "";
КонецПопытки;
Строка.f4 = Строка(Recordset.f4.value);
Попытка
Строка.f5 = СокрЛП(Строка(Recordset.f5.value));
Исключение
ОбработатьОшибку("При обработке данных из файла не удалось определить код заказа.
| Номер строки в файле " + СчетчикСтрок,СтатусыСообщения.ОченьВажное);
Строка.f5 = "";
КонецПопытки;
Попытка
Строка.f7 = Число(Recordset.f7.value);
Исключение
ОбработатьОшибку("При обработке данных из файла не удалось определить потребность.
| Номер строки в файле " + СчетчикСтрок,СтатусыСообщения.ОченьВажное);
Строка.f7 = 0;
КонецПопытки;
СчетчикСтрок = СчетчикСтрок + 1;
Recordset.MoveNext();
КонецЦикла;
Сообщить("Данные добавленны во временную таблицу.",СтатусСообщения.Информация);
Запрос = Новый Запрос;
МВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МВТ;
ТекстМВТ = "ВЫБРАТЬ
| ТаблицаЗначений.НомерСтр КАК НомерСтр,
| ТаблицаЗначений.f1 КАК ТипТМЦ,
| ТаблицаЗначений.f2 КАК КодТМЦ,
| ТаблицаЗначений.f4 КАК ЕдиницаИзмерения,
| ТаблицаЗначений.f5 КАК КодЗаказа,
| ТаблицаЗначений.f7 КАК Потребность
|ПОМЕСТИТЬ ВР_ИсходнаяТаблица
|ИЗ
| &ТаблицаЗначений КАК ТаблицаЗначений";
Запрос.УстановитьПараметр("ТаблицаЗначений",ТаблицаЗначений);
ВР_МВТ_ТаблицаЗначений = ТаблицаЗначений.Скопировать();
Запрос.Текст = ТекстМВТ;
Запрос.Выполнить();
Запрос.Текст = "ВЫБРАТЬ
| ТаблицаЗначений.НомерСтр КАК НомерСтр,
| ТаблицаЗначений.ТипТМЦ КАК ТипТМЦ,
| ТаблицаЗначений.КодТМЦ КАК КодТМЦ,
| ТаблицаЗначений.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ТаблицаЗначений.КодЗаказа КАК КодЗаказа,
| ТаблицаЗначений.Потребность КАК Потребность
|ПОМЕСТИТЬ ИсходнаяТаблица
|ИЗ
| (ВЫБРАТЬ
| МИНИМУМ(ТаблицаЗначений.НомерСтр) КАК НомерСтр,
| ТаблицаЗначений.ТипТМЦ КАК ТипТМЦ,
| ТаблицаЗначений.КодТМЦ КАК КодТМЦ,
| ТаблицаЗначений.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ТаблицаЗначений.КодЗаказа КАК КодЗаказа,
| СУММА(ТаблицаЗначений.Потребность) КАК Потребность
| ИЗ
| ВР_ИсходнаяТаблица КАК ТаблицаЗначений
|
| СГРУППИРОВАТЬ ПО
| ТаблицаЗначений.ТипТМЦ,
| ТаблицаЗначений.КодТМЦ,
| ТаблицаЗначений.ЕдиницаИзмерения,
| ТаблицаЗначений.КодЗаказа) КАК ТаблицаЗначений
|ГДЕ
| ТаблицаЗначений.КодЗаказа <> """"
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗначенияСвойствОбъектов.Значение.Наименование КАК КодАвтокрана,
| Номенклатура.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ВР_ТаблицаНоменклатуры
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
| ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов.Объект
|ГДЕ
| ЗначенияСвойствОбъектов.Свойство.Код = ""М0000000001""
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| АналогиНоменклатуры.КодАвтокрана
|ПОМЕСТИТЬ ВР_АналогиНоменклатуры
|ИЗ
| (ВЫБРАТЬ
| ТаблицаНоменклатуры.КодАвтокрана КАК КодАвтокрана
| ИЗ
| ВР_ТаблицаНоменклатуры КАК ТаблицаНоменклатуры
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| АналогиНоменклатурыExcelСрезПоследних.КодExcel
| ИЗ
| РегистрСведений.АналогиНоменклатурыExcel.СрезПоследних(&Срез, ) КАК АналогиНоменклатурыExcelСрезПоследних) КАК АналогиНоменклатуры
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| АналогиНоменклатуры.КодАвтокрана,
| ТаблицаНоменклатуры.Ссылка КАК Номенклатура
|ПОМЕСТИТЬ ВР_ПромежуточнаяТаблица
|ИЗ
| ВР_АналогиНоменклатуры КАК АналогиНоменклатуры
| ЛЕВОЕ СОЕДИНЕНИЕ ВР_ТаблицаНоменклатуры КАК ТаблицаНоменклатуры
| ПО (ТаблицаНоменклатуры.КодАвтокрана = АналогиНоменклатуры.КодАвтокрана)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Результат.КодАвтокрана,
| Результат.Номенклатура КАК Ссылка
|ПОМЕСТИТЬ ВР_КодыАвтокрана
|ИЗ
| (ВЫБРАТЬ
| ПромежуточнаяТаблица.КодАвтокрана КАК КодАвтокрана,
| ВЫБОР
| КОГДА ПромежуточнаяТаблица.Номенклатура ЕСТЬ NULL
| ТОГДА АналогиНоменклатуры.Номенклатура
| ИНАЧЕ ПромежуточнаяТаблица.Номенклатура
| КОНЕЦ КАК Номенклатура
| ИЗ
| ВР_ПромежуточнаяТаблица КАК ПромежуточнаяТаблица
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналогиНоменклатурыExcel.СрезПоследних(&Срез, ) КАК АналогиНоменклатуры
| ПО (АналогиНоменклатуры.КодExcel = ПромежуточнаяТаблица.КодАвтокрана)) КАК Результат
|ГДЕ
| (НЕ Результат.Номенклатура ЕСТЬ NULL )
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ИсходнаяТаблица.НомерСтр КАК НомерСтр,
| ИсходнаяТаблица.ТипТМЦ КАК ТипТМЦ,
| ИсходнаяТаблица.КодТМЦ КАК КодТМЦ,
| ИсходнаяТаблица.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ИсходнаяТаблица.КодЗаказа КАК КодЗаказа,
| ИсходнаяТаблица.Потребность КАК Потребность,
| ПроизводимыеИзделияЗаводов.НоменклатурнаяГруппаИзделия КАК НоменклатурнаяГруппаИзделия,
| ПроизводимыеИзделияЗаводов.Ссылка КАК Ссылка,
| СУММА(0) КАК Материалы
|ИЗ
| ИсходнаяТаблица КАК ИсходнаяТаблица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПроизводимыеИзделияЗаводов КАК ПроизводимыеИзделияЗаводов
| ПО ИсходнаяТаблица.КодТМЦ = ПроизводимыеИзделияЗаводов.ЗаводскойКодКлючевойНоменклатуры
| И ИсходнаяТаблица.КодЗаказа = ПроизводимыеИзделияЗаводов.КодПроизводственногоЗаказа
|
|СГРУППИРОВАТЬ ПО
| ИсходнаяТаблица.НомерСтр,
| ИсходнаяТаблица.ТипТМЦ,
| ИсходнаяТаблица.КодТМЦ,
| ИсходнаяТаблица.ЕдиницаИзмерения,
| ИсходнаяТаблица.КодЗаказа,
| ИсходнаяТаблица.Потребность,
| ПроизводимыеИзделияЗаводов.Ссылка,
| ПроизводимыеИзделияЗаводов.НоменклатурнаяГруппаИзделия
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ИсходнаяТаблица.НомерСтр,
| ИсходнаяТаблица.ТипТМЦ,
| ИсходнаяТаблица.КодТМЦ,
| ИсходнаяТаблица.ЕдиницаИзмерения,
| ИсходнаяТаблица.КодЗаказа,
| ИсходнаяТаблица.Потребность,
| NULL,
| Номенклатура.Ссылка,
| 1
|ИЗ
| ИсходнаяТаблица КАК ИсходнаяТаблица
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ВР_КодыАвтокрана.КодАвтокрана КАК КодАвтокрана,
| ВР_КодыАвтокрана.Ссылка КАК Ссылка
| ИЗ
| ВР_КодыАвтокрана КАК ВР_КодыАвтокрана) КАК Номенклатура
| ПО (Номенклатура.КодАвтокрана = ИсходнаяТаблица.КодТМЦ)";
Запрос.УстановитьПараметр("Срез",Дата);
Сообщить("Выполняется обработка полученных данных.",СтатусСообщения.Информация);
РезультатЗП = Запрос.Выполнить().Выгрузить();
КоличествоДляОбработки = РезультатЗП.Количество();
Обработано = 1;
ТаблицаНеНайденных = Новый ТаблицаЗначений;
ТаблицаНеНайденных.Колонки.Добавить("КодТМЦ");
ОбязательныеРеквизитыШапки = "Организация,Контрагент,ДоговорМатериалы, ДоговорКомплектующие, Период";
Структура = Новый Структура(ОбязательныеРеквизитыШапки,Организация,Контрагент,ДоговорМатериалы,Дог
оворКомплектующие, Период);
Для Каждого Текстрока ИЗ Структура Цикл
Если Не ЗначениеЗаполнено(Текстрока.Значение) Тогда
Сообщить("Не заполнено значение "+""""+ЭтотОбъект.Метаданные().Реквизиты[Текстрока.Ключ].Синоним+"""" + "
|Поиск заказов может выполняться не корректно.", СтатусСообщения.Внимание);
КонецЕсли;
КонецЦикла;
Для каждого Тек_ВР Из РезультатЗП Цикл
Состояние("Обработано данных (" + Обработано + " из " + КоличествоДляОбработки + ")");
Обработано = Обработано + 1;
Если Тек_ВР.Ссылка = NULL Тогда
Если Тек_ВР.КодЗаказа = "Строка" ИЛИ Тек_ВР.КодТМЦ = "Строка" Тогда
Продолжить;
КонецЕсли;
ВР_НП = ТаблицаНеНайденных.Добавить();
ВР_НП.КодТМЦ = Тек_ВР.КодТМЦ;
//ОбработатьОшибку("Не найдена номенклатура!
// | Номер строки в файле " + Тек_ВР.НомерСтр + ", код заказа " + Тек_ВР.КодЗаказа + ", код ТМЦ "+ Тек_ВР.КодТМЦ,СтатусыСообщения.ОченьВажное);
продолжить;
КонецЕсли;
ЗапросСоответсвий = Новый Запрос;
ЗапросСоответсвий.Текст = "ВЫБРАТЬ
| СоответствиеЕдиницИзмерения.ЕдиницаПоКлассификатору
|ИЗ
| РегистрСведений.СоответствиеЕдиницИзмерения КАК СоответствиеЕдиницИзмерения
|ГДЕ
| СоответствиеЕдиницИзмерения.ЕдиницаТекст = &ЕдиницаТекст";
ЗапросСоответсвий.УстановитьПараметр("ЕдиницаТекст",Тек_ВР.ЕдиницаИзмерения);
РезультатСоответствия = ЗапросСоответсвий.Выполнить().Выбрать();
ЕдиницаПоКлассификатору = Новый Массив;
ЕдиницПоКлассификатору = "";
Если РезультатСоответствия.Количество() = 0 Тогда
ОбработатьОшибку("Не найдена единица измерения по классификатору, текстовая единица представленна в виде: "+ Тек_ВР.ЕдиницаИзмерения + "
| Номер строки в файле " + Тек_ВР.НомерСтр + ", код заказа " + Тек_ВР.КодЗаказа + ", код ТМЦ "+ Тек_ВР.КодТМЦ+", код на справочник "+ ?(Тек_ВР.Материалы = 0,"производимые изделия заводов ", "номенклатуры ") + Тек_ВР.Ссылка.Код,СтатусыСообщения.Внимание);
продолжить;
Иначе
Пока РезультатСоответствия.Следующий() Цикл
ЕдиницаПоКлассификатору.Добавить(РезультатСоответствия.ЕдиницаПоКлассификатору.С
сылка);
ЕдиницПоКлассификатору = ЕдиницПоКлассификатору + РезультатСоответствия.ЕдиницаПоКлассификатору.Наименование +", ";
КонецЦикла;
КонецЕсли;
ЕдиницПоКлассификатору = Сред(ЕдиницПоКлассификатору,1,СтрДлина(ЕдиницПоКлассификатору)-2);
ЗапросЕдиниц = Новый Запрос;
ЗапросЕдиниц.Текст = "ВЫБРАТЬ
| ЕдиницыИзмерения.Ссылка
|ИЗ
| Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
|ГДЕ
| ЕдиницыИзмерения.Владелец = &Владелец
| И ЕдиницыИзмерения.ЕдиницаПоКлассификатору В (&ЕдиницаПоКлассификатору)";
Если Тек_ВР.Материалы = 0 Тогда
ЗапросЕдиниц.УстановитьПараметр("Владелец",Тек_ВР.Ссылка.КлючеваяНоменклатура.Ссылка);
Иначе
ЗапросЕдиниц.УстановитьПараметр("Владелец",Тек_ВР.Ссылка.Ссылка);
КонецЕсли;
ЗапросЕдиниц.УстановитьПараметр("ЕдиницаПоКлассификатору",ЕдиницаПоКлассификатору);
ЕдиницыИзмерения = ЗапросЕдиниц.Выполнить().Выгрузить();
Если ЕдиницыИзмерения.Количество() = 0 Тогда
ОбработатьОшибку("Для номенклатуры "+?(Тек_ВР.Материалы = 0,Тек_ВР.Ссылка.КлючеваяНоменклатура, Тек_ВР.Ссылка)+ " не найдена единица измерения по классификатору (" + ЕдиницПоКлассификатору + ").
| Номер строки в файле " + Тек_ВР.НомерСтр + ", код заказа " + Тек_ВР.КодЗаказа + ", код ТМЦ "+ Тек_ВР.КодТМЦ,СтатусыСообщения.Внимание);
Продолжить;
КонецЕсли;
Если ЕдиницыИзмерения.Количество() > 1 Тогда
ОбработатьОшибку("Для номенклатуры "+?(Тек_ВР.Материалы = 0,Тек_ВР.Ссылка.КлючеваяНоменклатура, Тек_ВР.Ссылка)+ " найдено "+ ЕдиницыИзмерения.Количество() +" единиц измерения по классификатору (" + ЕдиницПоКлассификатору+").
| Номер строки в файле " + Тек_ВР.НомерСтр + ", код заказа " + Тек_ВР.КодЗаказа + ", код ТМЦ "+ Тек_ВР.КодТМЦ,СтатусыСообщения.Обычное);
КонецЕсли;
Если Тек_ВР.Материалы = 0 Тогда
Количество = ?(Тек_ВР.Ссылка.КоличествоКлючевойНоменклатуры=0,1,Тек_ВР.Ссылка.КоличествоКлю
чев
ойНоменклатуры);
НоваяСтрока = СоставЗакачки.Добавить();
НоваяСтрока.КоличествоВФайле = Тек_ВР.Потребность / (Количество * Тек_ВР.Ссылка.ЕдИзмКлючевойНоменклатуры.Коэффициент/ЕдиницыИзмерения[0].Ссылка.Коэффициент);
НоваяСтрока.НоменклатурнаяГруппа = Тек_ВР.Ссылка.НоменклатурнаяГруппаИзделия;
НоваяСтрока.КоличествоКЗакачке = НоваяСтрока.КоличествоВФайле;
НоваяСтрока.Номенклатура = Тек_ВР.Ссылка.НоменклатураИзделия;
НоваяСтрока.ПроизводимыеИзделияЗаводов = Тек_ВР.Ссылка;
НоваяСтрока.Потребность = Тек_ВР.Потребность;
НомерЗаказаМ = "А" + НоваяСтрока.ПроизводимыеИзделияЗаводов.КодПроизводственногоЗаказа + "М"+Месяц(Период);
НомерЗаказаК = "А" + НоваяСтрока.ПроизводимыеИзделияЗаводов.КодПроизводственногоЗаказа + "К"+Месяц(Период);
Запрос.Текст = "ВЫБРАТЬ
| ЕСТЬNULL(ЗаказПокупателя.Ссылка, ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)) КАК Заказ
|ИЗ
| Документ.ЗаказПокупателя КАК ЗаказПокупателя
|ГДЕ
| ЗаказПокупателя.Номер = &Номер
| И ЗаказПокупателя.ПометкаУдаления = ЛОЖЬ
| И ВЫБОР
| КОГДА ЗаказПокупателя.Организация <> ЗНАЧЕНИЕ(Справочник.Организации.ПустаяССылка)
| ТОГДА ЗаказПокупателя.Организация = &Организация
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И ВЫБОР
| КОГДА ЗаказПокупателя.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяССылка)
| ТОГДА ЗаказПокупателя.Контрагент = &Контрагент
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И ВЫБОР
| КОГДА ЗаказПокупателя.ДоговорКонтрагента <> ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяССылка)
| ТОГДА ЗаказПокупателя.ДоговорКонтрагента = &ДоговорКонтрагента
| ИНАЧЕ ИСТИНА
| КОНЕЦ";
Запрос.УстановитьПараметр("Организация",Организация);
Запрос.УстановитьПараметр("Контрагент",Контрагент);
Запрос.УстановитьПараметр("Номер",НомерЗаказаМ);
Запрос.УстановитьПараметр("ДоговорКонтрагента",ДоговорМатериалы);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
НоваяСтрока.ЗаказМатериалы = Результат.Заказ;
КонецЕсли;
Запрос.УстановитьПараметр("Номер",НомерЗаказаК);
Запрос.УстановитьПараметр("ДоговорКонтрагента",ДоговорКомплектующие);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
НоваяСтрока.ЗаказКомплектующие = Результат.Заказ;
КонецЕсли;
Иначе
НоваяСтрока = Материалы.Добавить();
НоваяСтрока.КодЗаказа = Тек_ВР.КодЗаказа;
НоваяСтрока.ЕдиницаИзмерения = ЕдиницыИзмерения[0].Ссылка;
НоваяСтрока.Номенклатура = Тек_ВР.Ссылка.Ссылка;
НоваяСтрока.Потребность = Тек_ВР.Потребность;//* Тек_ВР.Ссылка.ЕдиницаХраненияОстатков.Коэффициент/ЕдиницыИзмерения[0].Ссылка.Коэффициент;
НоваяСтрока.ТипТМЦ = Тек_ВР.ТипТМЦ;
КонецЕсли;
КонецЦикла;
ТаблицаНеНайденных.Свернуть("КодТМЦ");
Для каждого ТекСтрока Из ТаблицаНеНайденных Цикл
ОбработатьОшибку("Не найдена номенклатура по коду "+ ТекСтрока.КодТМЦ,СтатусыСообщения.ОченьВажное);
КонецЦикла;
Сообщить("Выполняется очищение соединений.",СтатусСообщения.Информация);
Recordset.Close();
db.Close();
ВыбФайл = Новый Файл(ИмяВременнегоФайла);
Если ВыбФайл.Существует() Тогда
ВыбФайл.УстановитьТолькоЧтение(ЛОЖЬ);
КонецЕсли;
Сообщить("Выполняется удаление временного файла.",СтатусСообщения.Информация);
Попытка
УдалитьФайлы(ВыбФайл.ПолноеИмя);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
ТаблицаЗначений.Свернуть("f5","");
РезультатЗП.Свернуть("КодЗаказа,Материалы","");
Для каждого ТекСтрока Из ТаблицаЗначений Цикл
СуществуетЗаказ = Ложь;
Для каждого ТекСтрокаЗП Из РезультатЗП Цикл
Если ТекСтрокаЗП.КодЗаказа = ТекСтрока.f5 И (ТекСтрокаЗП.Материалы = 0 ИЛИ ТекСтрока.f5 = "Строка" ИЛИ ТекСтрока.f5 = "") Тогда
СуществуетЗаказ = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если НЕ СуществуетЗаказ Тогда
ОбработатьОшибку("В справочнике производимые изделия заводов не удалось найти код заказа "+ТекСтрока.f5,СтатусыСообщения.Важное);
КонецЕсли;
КонецЦикла;
//ТекстЗапpoca = "
//| УНИЧТОЖИТЬ ВР_ИсходнаяТаблица
//|";
//
//Запрос.Текст = ТекстЗапpoca;
//Запрос.Выполнить();
//Запрос.Текст = ТекстМВТ;
//Запрос.УстановитьПараметр("ТаблицаЗначений",ВР_МВТ_ТаблицаЗначений);
//Запрос.Выполнить();
//
//Запрос.Текст = "ВЫБРАТЬ
// | ТаблицаЗначений.НомерСтр КАК НомерСтр,
// | ТаблицаЗначений.ТипТМЦ КАК ТипТМЦ,
// | ТаблицаЗначений.КодТМЦ КАК КодТМЦ,
// | ТаблицаЗначений.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
// | ТаблицаЗначений.КодЗаказа КАК КодЗаказа,
// | ТаблицаЗначений.Потребность КАК Потребность,
// | ПроизводимыеИзделияЗаводов.Ссылка
// |ИЗ
// | (ВЫБРАТЬ
// | МИНИМУМ(ТаблицаЗначений.НомерСтр) КАК НомерСтр,
// | ТаблицаЗначений.ТипТМЦ КАК ТипТМЦ,
// | ТаблицаЗначений.КодТМЦ КАК КодТМЦ,
// | ТаблицаЗначений.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
// | ТаблицаЗначений.КодЗаказа КАК КодЗаказа,
// | СУММА(ТаблицаЗначений.Потребность) КАК Потребность
// | ИЗ
// | ВР_ИсходнаяТаблица КАК ТаблицаЗначений
// |
// | СГРУППИРОВАТЬ ПО
// | ТаблицаЗначений.ТипТМЦ,
// | ТаблицаЗначений.КодТМЦ,
// | ТаблицаЗначений.ЕдиницаИзмерения,
// | ТаблицаЗначений.КодЗаказа) КАК ТаблицаЗначений
// | ПРАВОЕ СОЕДИНЕНИЕ Справочник.ПроизводимыеИзделияЗаводов КАК ПроизводимыеИзделияЗаводов
// | ПО ТаблицаЗначений.КодТМЦ = ПроизводимыеИзделияЗаводов.ЗаводскойКодКлючевойНоменклатуры
// | И ТаблицаЗначений.КодЗаказа = ПроизводимыеИзделияЗаводов.КодПроизводственногоЗаказа";
//
//ТаблицаНеНайденныхЗаказов = Запрос.Выполнить().Выгрузить();
//Для каждого ТекПозиция Из ТаблицаНеНайденныхЗаказов Цикл
// Если ТекПозиция.КодТМЦ = "КодТМЦ" ИЛИ ТекПозиция.КодТМЦ = "" ИЛИ ТекПозиция.КодЗаказа = "КодТМЦ" ИЛИ ТекПозиция.КодЗаказа = "" Тогда
// Продолжить;
// КонецЕсли;
// ОбработатьОшибку("В справочнике производимые изделия заводов не удалось найти код заказа: "+ ТекПозиция.КодЗаказа + ", и код ключевой номенклатуры: "+ТекПозиция.КодТМЦ,СтатусыСообщения.Важное);
//КонецЦикла;
Если СоставЗакачки.Количество() > 0 Тогда
ЭлементыФормы.Материалы.ОтборСтрок.КодЗаказа.Установить(СоставЗакачки[0].Произво
димыеИзделияЗаводов.КодПроизводственногоЗаказа);
КонецЕсли;
СохранитьОшибкиВХранилище();
ВывестиОшибки();
КонецПроцедуры