Как создать plu код в 1с
н = 0;
МетаКоллекция = Метаданные["Документы"];
Для Каждого МетаДокумент из МетаКоллекция Цикл
н = н + 1;
Имя = МетаДокумент.Имя;
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Тз = Результат.Выгрузить();
КонецФункции // ПолучитьИменаСуществующихДокументов
// ТипВозвращаемогоЗначения:
// 0 = список значений метаобъектов
Функция ПолучитьИменаРегистровНакопленияДвижений(ТипВозвращаемогоЗначения=0, ФлагСтрого=Истина)
Перем Запрос, Результат, Выборка, Сз;
Попытка
Результат = Запрос.Выполнить();
Исключение
Возврат Неопределено; // пожарный вариант (далее будет запвисеть от ФлагСтрого)
КонецПопытки;
Если ТипВозвращаемогоЗначения = 0 Тогда
КонецЕсли;
Сз = Новый СписокЗначений;
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сз.Добавить(Выборка.Имя);
КонецЦикла;
Запрос = Неопределено;
Возврат Сз;
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Перем Запрос, Результат, Выборка, Сз, х;
ТекстЗапроса = Запрос.Текст; // отладка
Попытка
Результат = Запрос.Выполнить();
Исключение
Возврат Неопределено; // пожарный вариант (далее будет запвисеть от ФлагСтрого)
КонецПопытки;
Сз = Новый СписокЗначений;
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сз.Добавить(Выборка.Имя);
КонецЦикла;
Запрос = Неопределено;
Возврат Сз;
ФлагЗакрытьЭксель = Ложь;
Если Не Эксель.Visible Тогда
ФлагЗакрытьЭксель = Истина;
КонецЕсли;
Тз = Новый ТаблицаЗначений;
Колонка = Колонка + 1;
Значение = СокрЛП(Лист.Cells(Ряд, Колонка).Value);
КонецЦикла;
Ряд = Ряд + 1;
Значение = СокрЛП(Лист.Cells(Ряд, 1).Value);
КонецЦикла;
Если ФлагЗакрытьЭксель Тогда
Эксель.Quit();
КонецЕсли;
Возврат Тз;
КонецФункции // ТзИзЭкселя
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
//Объект = Выборка.ПолучитьОбъект();
Возврат Ложь;
КонецЦикла;
Возврат Истина;
КонецФункции // БитаяСсылка
Функция ПланОбменаСоставМиграция()
//х = Метаданные["ПланыОбмена"]["Полный"].Состав.Содержит(Метаданные["Справочники"]["Контрагенты"]);
//х = Метаданные["ПланыОбмена"]["Полный"].Состав.Содержит(Метаданные["Справочники"]["ГруппыПользователейТорговогоОборудования"]);
//Если Не Метаданные["ПланыОбмена"]["Полный"].Состав.Содержит(Метаданные["Справочники"][МетаОбъект.Имя]) Тогда
// Продолжить;
//КонецЕсли;
КонецФункции // ПланОбменаСоставМиграция
// 04.04.08
Функция ТзВЭксель(Тз, ИмяФайла, ФлагПерезаписать=Ложь) Экспорт
Перем Эксель, Книга, Лист, Ячейка, Ряд, к, Ид;
ФлагЗакрытьЭксель = Ложь;
Если Не Эксель.Visible Тогда
ФлагЗакрытьЭксель = Истина;
КонецЕсли;
Книга = Эксель.Workbooks.Add(); // новая книга
Лист = Книга.Worksheets(1);
Лист.Cells.Font.Size = 8; // по умолчанию
Для к = 1 По Тз.Колонки.Количество() Цикл
Лист.Cells(Ряд, к).Value = Строка(Тз.Колонки.Получить(к-1).Имя);
КонецЦикла;
Для Каждого СтрокаТз из Тз Цикл
ОбработкаПрерыванияПользователя();
Если ФлагЗакрытьЭксель Тогда
Эксель.Quit();
КонецЕсли;
// 24.04.08
Функция ЗагрузитьТзИзХмл(ИмяФайла, ИмяУзла) Экспорт
Для н = 1 По Узлы.Length Цикл
Узел = Узлы.Item(н-1);
Если Узел.tagName <> ИмяУзла Тогда
Продолжить;
КонецЕсли;
ФлагЕстьКолонка = 0;
Попытка
ЧернаяДыра = Тз.ПолучитьЗначение(Тз.НомерСтроки, Ид);
ФлагЕстьКолонка = 1;
Исключение
КонецПопытки;
Если ФлагНоваяСтрока = 0 Тогда
//Тз.НоваяСтрока();
СтрокаТз = Тз.Добавить();
ФлагНоваяСтрока = 1;
КонецЕсли;
//Тз.УстановитьЗначение(Тз.НомерСтроки, Ид, Атрибут.Value);
СтрокаТз[Ид] = Атрибут.Value;
ФлагЕстьКолонка = 0;
Попытка
//ЧернаяДыра = Тз.ПолучитьЗначение(Тз.НомерСтроки, Ид);
ЧернаяДыра = СтрокаТз[Ид];
ФлагЕстьКолонка = 1;
Исключение
КонецПопытки;
Если ФлагНоваяСтрока = 0 Тогда
Тз.НоваяСтрока();
ФлагНоваяСтрока = 1;
КонецЕсли;
//Тз.УстановитьЗначение(Тз.НомерСтроки, Ид, Подузел.Text);
СтрокаТз[Ид] = Подузел.Text;
Возврат Тз;
КонецФункции // ЗагрузитьТзИзХмл
Функция ПринадлежитПериоду(Дат, ДатаНачала, ДатаОкончания)
Если Не ЗначениеЗаполнено(Дат) Тогда
Возврат Ложь;
КонецЕсли;
Если ЗначениеЗаполнено(ДатаНачала) Тогда // указана дата начала
Если Дат < ДатаНачала Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ДатаОкончания) Тогда // указана дата окончания
Если Дат > ДатаОкончания Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Возврат Истина;
КонецФункции // ПринадлежитПериоду
xlThin = 2;
xlMedium = -4138;
xlEdgeLeft = 7;
xlEdgeTop = 8;
xlEdgeBottom = 9;
xlEdgeRight = 10;
Excel.DisplayAlerts = 0; // False
КнигаДанные = Excel.Workbooks.Add(); // новая книга
Лист = КнигаДанные.Worksheets(1);
Тз.НоваяСтрока();
Тз.Объект = Лист.Cells(Ряд,1).Value; // вид документа
Ряд = Ряд + 1;
КонецЦикла;
Лист.Cells(2,1).Select(); // выделить ячейку
ExcelApp.Workbooks.Open(ИмяФайла,0,ТолькоЧтение);
ExcelApp.Calculation = -4135;// xlCalculationManual
ExcelApp.EnableAnimations = 0; // False
ExcelApp.DisplayAlerts = 0; // False
ExcelApp.ScreenUpdating = 0; // False
ExcelApp.DisplayStatusBar = 0; // False
Если Тз.ЭкономПлан <> ТекущийЭкономПлан Тогда
// Определим количество валют по текущему ЭП
СзВ.УдалитьВсе();
ТзВ.ВыбратьСтроки();
Пока ТзВ.ПолучитьСтроку() = 1 Цикл
Если ТзВ.ЭкономПлан <> Тз.ЭкономПлан Тогда
Продолжить;
КонецЕсли;
Если ТзВ.Валюта.Расчетная = 1 Тогда // доллар ЦБ + %
Продолжить; // т.к. в ходит в одну категорию с долларом ЦБ
КонецЕсли;
Ряд = (КолВалют+1+1)+1; // (для валют + пустая строка + шапка) + следующая строка
РядШапки = Ряд-1;
Ряд1 = Ряд; // для объединения ячеек с оператором
// Добавим параметры
КолонкаКурсов = 6;
Область = Лист.Range(Лист.Cells(1, 1), Лист.Cells(КолВалют, 7));
Область.Borders(7).Weight = 2; // xlLeft
Область.Borders(8).Weight = 2; // xlTop
Область.Borders(9).Weight = 2; // xlBotton
Область.Borders(10).Weight = 2; // xlRight
Область.Borders(11).Weight = 2; // xlInsideVertical
Область.Borders(12).Weight = 2; // xlInsideHorizontal
Область = Лист.Range(Лист.Cells(РядШапки, 1), Лист.Cells(РядШапки, 7));
Область.Font.Size = 10;
Область.Font.Bold = 1;
Книга.Windows(1).DisplayGridlines = 0;
Книга.Windows(1).Zoom = 120;
Лист.DisplayAutomaticPageBreaks = 0;
// (данные вмещается по ширине листа)
ТекущийЭкономПлан = Тз.ЭкономПлан;
КонецЕсли;
Если ПустоеЗначение(ВалютаСкидки) = 1 Тогда
Скидка = 0;
ФормулаСкидки = 0;
НомерЦветаСкидки = -4142; // нет цвета
// А теперь ввод строки закончен! :) Уф!
Ряд = Ряд + 1;
КонецЦикла; // по строкам Тз
// 12.08.10
Функция ПолучитьСвойствоОбъекта(Объект, КодСвойства) Экспорт
Если Не ЗначениеЗаполнено(Объект) Тогда
Возврат Неопределено;
КонецЕсли;
РезультатЗапроса = Запрос.Выполнить();
Тз = РезультатЗапроса.Выгрузить();
Если Тз.Количество() > 0 Тогда
Возврат Тз.Получить(0).Значение;
КонецЕсли;
Процедура Объединить(Лист, Ряд1, Колонка1, Ряд2, Колонка2)
Область = Лист.Range(Лист.Cells(Ряд1, Колонка1), Лист.Cells(Ряд2, Колонка2));
Область.Merge();
Область.HorizontalAlignment = -4108; // xlCenter
Область.VerticalAlignment = -4108; // xlCenter
Область.WrapText = 1;
КонецПроцедуры // Ячейка
Функция ОбластьЛиста(Лист, Ряд1, Колонка1, Ряд2, Колонка2)
Возврат Лист.Range(Лист.Cells(Ряд1,Колонка1), Лист.Cells(Ряд2,Колонка2));
Эксель.DisplayAlerts = 0; // False
Эксель.Visible = 1; // на период отладки
Книга = Эксель.Workbooks.Add(); // новая книга
//Эксель.Visible = 1; // на случай ускорения прорисовки
КонецПроцедуры // Создать КнигуЭксель
Процедура ЗаполнитьЛист(ТзПлан, Эксель, Книга, НомерЛиста, ИмяЛиста)
Лист = Книга.Worksheets(НомерЛиста);
//Sheets.Add After:=Sheets(Sheets.Count)
Лист.Name = ИмяЛиста;
Лист.Cells.Font.Size = 8; // по умолчанию
РядЗаголовка = 1;
РядПервыйТаблицы = РядЗаголовка + 3;
КолонкаНоменклатура = 1;
КолонкаПерваяТаблицы = КолонкаНоменклатура + 4;
НомерДаты = 1;
Дат = НачалоДня(НачПериода);
Пока Дат
Объединить(Лист, РядЗаголовка, КолонкаНоменклатура, РядЗаголовка+2, КолонкаНоменклатура);
Объединить(Лист, РядЗаголовка, КолонкаНоменклатура+1, РядЗаголовка+2, КолонкаНоменклатура+1);
Объединить(Лист, РядЗаголовка, КолонкаНоменклатура+2, РядЗаголовка+2, КолонкаНоменклатура+2);
Объединить(Лист, РядЗаголовка, КолонкаНоменклатура+3, РядЗаголовка+2, КолонкаНоменклатура+3);
Дат = НачалоДня(Дат + 60 * 60 * 24);
НомерДаты = НомерДаты + 1;
КонецЦикла;
// Вывод таблицы
Тз = ТзПлан; // для удобства
НомСтр = 0;
Для Каждого СтрокаТз из Тз Цикл
// отладка
//Если НомСтр > 5 Тогда
// Прервать;
//КонецЕсли;
Если СтрокаТз.НомерЛиста <> НомерЛиста Тогда
Продолжить;
КонецЕсли;
НомСтр = НомСтр + 1;
Код = СтрокаТз.Код;
Номенклатура = СтрокаТз.Номенклатура;
КолПлан = СтрокаТз.КолПлан;
Ряд = РядПервыйТаблицы + (НомСтр-1);
НомерДаты = 1;
Дат = НачалоДня(НачПериода);
Пока Дат
Ид = ИдПоДате(Дат);
КолПланДня = СтрокаТз[Ид];
Дат = НачалоДня(Дат + 60 * 60 * 24);
НомерДаты = НомерДаты + 1;
КонецЦикла; // по колонкам дней
КонецЦикла; // по списку номенклатуры
Дат = НачалоДня(Дат + 60 * 60 * 24);
НомерДаты = НомерДаты + 1;
КонецЦикла; // по колонкам дней
Колонка2 = КолонкаПерваяТаблицы+3*(НомерДаты-1)-1;
Область = ОбластьЛиста(Лист, 1, 1, РядПервыйТаблицы+(НомСтр-1), Колонка2);
Область.Borders(7).Weight = 2; // xlLeft
Область.Borders(8).Weight = 2; // xlTop
Область.Borders(9).Weight = 2; // xlBotton
Область.Borders(10).Weight = 2; // xlRight
Область.Borders(11).Weight = 2; // xlInsideVertical
Область.Borders(12).Weight = 2; // xlInsideHorizontal
Область = ОбластьЛиста(Лист, 1, 1, 1, 1);
Область.Select(); // вернемся в угло листа
//Эксель.ActiveWindow.DisplayZeros = 0;
Окно = Книга.Windows(1);
Окно.DisplayZeros = 0;
Окно.SplitRow = 3;
Окно.SplitColumn = 4;
Окно.FreezePanes = -1; // Tree
//expression.Add(Type, AlertStyle, Operator, Formula1, Formula2)
//Книга.Windows(1).DisplayGridlines = 0;
//Книга.Windows(1).Zoom = 120;
//Лист.DisplayAutomaticPageBreaks = 0;
РезультатЗапроса = Запрос.Выполнить();
Тз = РезультатЗапроса.Выгрузить();
//Сообщить(Тз.Количество());
// Заполнение справочника Роли
сСпр = гСоединение.Справочники.Роли;
Для Каждого Роль из Метаданные.Роли Цикл
сЭлемент = сСпр.СоздатьЭлемент();
сЭлемент.Наименование = Роль.Имя;
сЭлемент.Порядок = Метаданные.Роли.Индекс(Роль)+1;
сЭлемент.Записать();
сРезультатЗапроса = сЗапрос.Выполнить();
сТз = сРезультатЗапроса.Выгрузить();
Если сТз.Количество() = 0 Тогда
Возврат;
КонецЕсли;
сОбъект = сСтрокаТз.Ссылка.ПолучитьОбъект();
сОбъект.УстановитьПометкуУдаления(Истина);
КонецЦикла;
сНз = гСоединение.РегистрыБухгалтерии.Налоговый.СоздатьНаборЗаписей();
сНз.Отбор.Регистратор.Установить(сДокумент.Ссылка);
Для Каждого СтрокаТз из Тз Цикл
Если НачалоМесяца(СтрокаТз.ДатаПериода) <> НачалоМесяца(Дата1) Тогда
Продолжить;
КонецЕсли;
Функция Word_Замена() Экспорт
// 1) сделать замену строки ЭтотОбъект.Ссылка на ЭтотОбъектСсылка
// После заменить ЭтотОбъект. на пустую строку
Ворд.Visible = Истина;
Ворд.Documents.Open(ИмяФайла);
//Function Execute([FindText], [MatchCase], [MatchWholeWord], [MatchWildcards], [MatchSoundsLike], [MatchAllWordForms], [Forward], [Wrap], [Format], [ReplaceWith], [Replace], [MatchKashida], [MatchDiacritics], [MatchAlefHamza], [MatchControl]) As Boolean
// Function Execute(. , , , )
Поиск.Execute(. , 2, , , , ); // wdReplaceAll
Функция ПолучитьРасширениеКартинки(х) Экспорт
Перем СтрРасширение, ФорматК;
Функция ПолучитьРазмерКартинки(оКартинка) Экспорт
Перем ИмяФайла;
Кол = 1;
Пока Иэ.Busy Цикл
//Пауза();
Кол = Кол + 1;
Если Кол > 3 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Функция УстановитьЗначениеСвойстваНоменклатуры(Объект, ИмяСвойства, Значение) Экспорт
Если Объект.Пустая() Тогда
Возврат Неопределено;
КонецЕсли;
нзЗначенияСвойств = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
нзЗначенияСвойств.Отбор.Объект.Установить(Объект);
нзЗначенияСвойств.Отбор.Свойство.Установить(оСвойство);
функция ПолучитьЗначениеСвойстваНоменклатуры(Объект, ИмяСвойства) экспорт
Перем Запрос;
если РезультатЗапроса.Следующий() тогда
Функция ПолучитьЗначениеСвойства(Свойство, СтрЗначение) Экспорт
если Не ЗначениеЗаполнено(Свойство) тогда
Возврат Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка();
конецЕсли;
Если ПустаяСтрока(СтрЗначение) Тогда
Возврат Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка();
КонецЕсли;
РезультатЗапроса = Запрос.Выполнить();
Тз = РезультатЗапроса.Выгрузить();
//Дз = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
л = СтрДлина(СтрЗначение);
//л = СтрДлина(СтрЗначение)-1; // пожарный вариант
// можно улучшить
// выбрать не помеченные, если нет, то получить помеченный
Для Каждого СтрокаТз из Тз Цикл
//Если х = НРег(СокрЛП(СтрЗначение)) Тогда
Если Лев(х, л) = Лев(НРег(СокрЛП(СтрЗначение)), л) Тогда // пожарный вариант
Возврат СтрокаТз.Ссылка;
КонецЕсли;
КонецЦикла; // не нашли
Функция СоздатьСвойствоНоменклатуры(ИмяСвойства) Экспорт
ЧтениеXML = Новый ЧтениеXML;
т1 = ТекущаяДата();
ЧтениеXML.ОткрытьФайл(гПуть);
т1 = ТекущаяДата();
ЧтениеXML.ОткрытьФайл(гПуть);
мСтек = Новый Массив(100); // в стеке храним Ид родителей и обращаемся к массиву только при смене родителя
//1 ELEMENT_NODE
//2 ATTRIBUTE_NODE
//3 TEXT_NODE
//4 CDATA_SECTION_NODE
//5 ENTITY_REFERENCE_NODE
//6 ENTITY_NODE
//7 PROCESSING_INSTRUCTION_NODE
//8 COMMENT_NODE
//9 DOCUMENT_NODE
//10 DOCUMENT_TYPE_NODE
//11 DOCUMENT_FRAGMENT_NODE
//12 NOTATION_NODE
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда // новый элемент
РазмерСтека = РазмерСтека + 1;
Ид = Ид + 1;
мСтек.Установить(РазмерСтека, Ид);
ИдРодителя = Ид;
// откроем (увеличим) стек
Если РазмерСтека > РазмерСтекаПик Тогда
РазмерСтекаПик = РазмерСтека;
КонецЕсли;
//СтрокаБ.Уровень = ТзСтек.Количество()-1;
//мСтек.Установить(РазмерСтека, Ид);
ИдРодителя = мСтек.Получить(РазмерСтека);
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
Ид = Ид + 1;
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Атрибут Тогда
Ид = Ид + 1;
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Комментарий Тогда
Ид = Ид + 1;
Иначе
Ид = Ид + 1;
КонецЦикла; // по элементам xml-файла
т2 = ТекущаяДата();
дт2 = т2-т1;
СтрокаТз = Тз.Добавить();
СтрокаТз.Файл = Файл;
СтрокаТз.Путь = Файл.ПолноеИмя;
СтрокаТз.Имя = Файл.Имя;
Возврат Тз;
КонецФункции // ПолучитьСписокФайлов
Функция URLEncode( value )
length = СтрДлина( value );
Для i = 1 По length Цикл
symbol = Сред( value, i, 1 );
//code = КодСимвола( symbol );
code = КодСимволаASCII( symbol );
result = result + Сред( table, code*3 + 1, 3 );
КонецЦикла;
Возврат result;
КонецФункции
Если Не ЗначениеЗаполнено(Документ1) или Не ЗначениеЗаполнено(Документ2) Тогда
Возврат Неопределено;
КонецЕсли;
РезультатЗапроса = Запрос.Выполнить();
Тз = РезультатЗапроса.Выгрузить();
//Дз = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
Если Тз.Количество() <> 2 Тогда
Возврат Неопределено;
ИначеЕсли Тз[0].Ссылка = Документ1 Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
пОбработка = Приложение.ВнешниеОбработки.Создать(ИмяОбработки);
пОбработка.Авто = Истина;
пОбработка.Дата1 = НачПериода;
пОбработка.Дата2 = КонПериода;
пОбработка.ПолучитьФорму().Открыть();
Читайте также: