ПЕРЕДАЧА ДАНИХ ІЗ 1С В DBF-файл – ЧАСТИНА 2

5 Кінець

Для обраного співробітника пп 3 і 4 алгоритму реалізує наступний код:

дбфДобавіть () дбфId = сСотр_2Код

дбфParentId = сСотр_2РодітельКод дбфIsGroup = сСотр_2ЕтоГруппа () дбфName = сСотр_2Наіменованіе дбфEd = сСотр_20бразованіеВід () дбфEdId = сСотр_2ОбразованіеКод

дбфQrderEng = сСотр_2ПріказПріемВід () дбфOrderEngId = сСотр_2ПриказПриемНомерДок дбфOrderSal = сСотр_2ПріказОкладВід () дбфOrderSalId = сСотр_2ПриказОкладНомерДок дбфCalendar = сСотр_2КалендарьВід () дбф3апісать ()

Створення файлу salarydbf здійснить процедура СоздатьОклад, приймаюча обєктдбф2,містить поля файлу, сформовані у процедурі СоздатьПоляДБФ Попередньо, однак, ми, як і у випадку файлу employeedbf, сформуємо у процедурі ДляДБФ2 таблицю значеньтЗнач,на підставі якої процедурою СоздатьПоляДБФ будуть створені поля файлу salarydbf

Заповнення файлу salarydbf виконаємо у процедурі ПеренестіОклад за схемою, реалізованої в прикладі 3 розд 61 Процедура ПеренестіОклад викликається для обраного співробітника в процедурі ПеренестіСотр

Підсумковий код перенесення буде таким:

процедура АтрСвойства (тЗнач) далі

процедура ЕщеОднаСтрока (тЗнач, відСпр, тіпРек, ин, кон) далі процедура ДляДБФ (тЗнач) далі

процедура СоздатьПоляДБФ (тЗнач, ДБФ, пРекв) далі

процедура СоздатьСотр (ДБФ) далі процедура ДляДБФ2 (тЗнач) далі процедура СоздатьОклад (ДБФ) далі

процедура ПеренестіСотр (ДБФ, дбф2) далі

процедура ПеренестіОклад (співр, оп, ДБФ) далі

процедура Виконати () / / Повязана з кнопкою Пуск обробки Проба перем тЗнач, ДБФ, дбф2

ОчістітьОкноСообщеній ()

/ / Формуємо таблицю з описом реквізитів довідника Сотруднікі_2

АтрСвойства (тЗнач)

/ / Готуємо таблицю значень тЗнач для процедури створення файлу employeedbf ДляДБФ (тЗнач)

/ / Перегляд таблиці значень Результат см на рис 94 тЗначВибратьСтроку (, Властивості полів файлу employeedbf) СоздатьПоляДБФ (тЗнач, ДБФ, 0) / / Створюємо поля файлу employeedbf СоздатьСотр (ДБФ) / / Створюємо файл employeedbf ДляДБФ2 (тЗнач)

/ / Перегляд таблиці значень Результат см на рис 95 тЗначВибратьСтроку (, Властивості полів файлу salarydbf) СоздатьПоляДБФ (тЗнач, дбф2, 1) / / Створюємо поля файлу salarydbf

/ / Готуємо таблицю значень тЗнач для процедури створення файлу salarydbf СоздатьОклад (дбф2) / / Створюємо файл salarydbf

/ / Передача даних у файли employeedbf і salarydbf

/ / Викликає процедуру ПеренестіОклад Результати см на рис 96 і 97

ПеренестіСотр (ДБФ, дбф2) Попередження (Готово”)

КонецПроцедури / / Виконати

/ / Код процедур АтрСвойства і ЕщеОднаСтрока див вище

/ / Замінює в таблиці значень тЗнач дані стовпця Ідентифікатор,

/ / На відповідні імена поле файлу employeedbf Вставляє також дві

/ / Рядки для полів Parentld і IsGroup файлу employeedbf процедура ДляДБФ (тЗнач)

перем сЗнач, ин, поз, імяПоля, номСтрокі, колСтрок

/ / Список значень сЗнач містить перелік відповідностей між іменами

/ / DBF-полів файлу employeedbf і значеннями стовпця Ідентифікатор таблиці тЗнач

сЗнач = СоздатьОбект (СпісокЗначеній) сЗначДобавітьЗначеніе (Код, Id) сЗначДобавітьЗначеніе (Найменування, Name) сЗначДобавітьЗначеніе (Оклад, Salary) сЗначДобавітьЗначеніе (Образованіе_2, Ed) сЗначДобавітьЗначеніе (Образованіе_22; Edld) сЗначДобавітьЗначеніе (ПріказОПріеме, OrderEng) сЗначДобавітьЗначеніе (ПріказОПріеме2, OrderEngld) сЗначДобавітьЗначеніе (ІзмененіеОклада, OrderSal) сЗначДобавітьЗначеніе (ІзмененіеОклада2, OrderSalld) сЗначДобавітьЗначеніе (Календар, Calendar) тЗначВибратьСтрокі ()

/ / Заносимо замість наявного в стовпці Ідентифікатор значення імя DBF-поля поки тЗначПолучітьСтроку () = 1 цикл

поз = сЗначНайтіЗначеніе (тЗначІдентіфікатор) якщо поз> 0 тоді

сЗначПолучітьЗначеніе (поз, імяПоля) тЗначІдентіфікатор = імяПоля

КонецЕсли конецЦікла / / Поки

/ / Додаємо дані для двох полів файлу employeedbfParentID і IsGroup,

/ / А потім володіємо додані рядки слідом за першим рядком таблиці тЗнач

тЗначНоваяСтрока () тЗначІдентіфікатор = ParentID; тЗначТіп = Число;

/ / Довжина поля ParentID дорівнює довжині поля ID тЗначНайтіЗначеніе (Id, номСтрокі, 1)

тЗначДліна = тЗначПолучітьЗначеніе (номСтрокі, 3) тЗначТочность = 0

тЗначПеріодіческій = 0 тЗначНоваяСтрока () тЗначІдентіфікатор = IsGroup;

тЗначТіп = Логічний; тЗначДліна = 1 тЗначТочность 0 тЗначПеріодіческій = 0

/ / Зрушуємо нові рядки вгору колСтрок = тЗначКолічествоСтрок () тЗначСдвінутьСтроку (2 колСтрок, колСтрок) тЗначСдвінутьСтроку (2 колСтрок, колСтрок)

КонецПроцедури / / ДляДБФ

/ / Створює на основі таблиці значеньтЗначполя DBF-файл процедура СоздатьПоляДБФ (тЗнач, ДБФ, пРекв)

/ / Формальний параметр пРекв = 1, якщо створюється поле для періодичного реквізиту,

/ / Або пРекв = 0 в іншому випадку перем імяПоля, тіпПоля

ДБФ = СоздатьОбект (ХВаse)

тЗначВибратьСтрокі ()

/ / Кожен рядок таблиці значеньтЗнач,відповідає неперіодичних реквізиту

/ / Довідника Сотруднікі2, породжує одне DBF-поле поки тЗначПолучітьСтроку () = 1 цикл

/ / Значення періодичних реквізитів розміщуються в окремій таблиці

/ / (У нашому випадку йдеться про періодичне реквізиті Оклад) якщо (тЗначПеріодіческій = 1) і (пРекв = 0) тоді

продовжити / / Пропускаємо періодичний реквізит КонецЕсли

імяПоля = тЗначІдентіфікатор

якщо (тЗначТіп = Число) або (тЗначТіп = Числовий) тоді тіпПоля = N;

іначеЕслі тЗначТіп = Рядок тоді

тіпПоля = S;

іначеЕслі тЗначТіп = Дата тоді тіпПоля = D

іначеЕслі тЗначТіп = Логічний тоді

тіпПоля = L; КонецЕсли

дбфДобавітьПоле (імяПоля, тіпПоля, тЗначДліна, тЗначТочность)

конецЦікла / / Поки КонецПроцедури / / СоздатьПоляДБФ

процедура СоздатьСотр (ДБФ) / / Створює файл employeedbf

/ / Створюємо два індексу

/ / Індекс Name забезпечить сортування за значенням поля Name дбфДобавітьІндекс (Name, Name, 0, 0, “)

/ / Індекс Depart забезпечити сортування по групах (поле Parentld),

/ / А в межах груп по полю Name

дбфДобавітьІндекс (Depart, trim (str (ParentId)) + Name, 0, 0, “) дбфСоздатьФайл (employeedbf, employeecdx )

КонецПроцедури / / СоздатьСотр

/ / Готує таблицю значень тЗнач для створення файл salarydbf процедура ДляДБФ2 (тЗнач)

перем сЗнач, ин, значен, предст, номСтрокі, тЗнач2, ​​колСтрок

/ / Модифікуємо таблицю значень тЗнач відповідно до табл 92

/ / Для цього створимо список значеньсЗнач,містить відповідності між

/ / Старими і новими значеннями поля Ідентифікатор таблиці тЗнач

// Рядки таблиці значеньтЗнач,не відображені в списку сЗнач, видаляються сЗнач = СоздатьОбект (СпісокЗначеній)

сЗначДобавітьЗначеніе (Id, Id)

сЗначДобавітьЗначеніе (OrderSal, DocName) сЗначДобавітьЗначеніе (OrderSalId, DocId) сЗначДобавітьЗначеніе (Salary, Salary)

/ / Переміщаємо рядка, відображені в списку сЗнач, в верх таблиці значень тЗнач

// і робимо наказані списком сЗнач заміни імен для ін = 1 по сЗначРазмерСпіска () цикл

значен = сЗначПолучітьЗначеніе (ін, предст) номСтрокі = 0

тЗначНайтіЗначеніе (значен, номСтрокі, 1)

/ / Зміни значення поля Ідентифікатор відповідно до списку сЗнач

тЗначУстановітьЗначеніе (номСтрокі, 1, предст) тЗначСдвінутьСтроку (ін номСтрокі, номСтрокі)

конецЦікла / / Для

/ / Вивантажуємо рядка, відображені в списку сЗнач,в таблицю тЗнач2 тЗнач2 = СоздатьОбект (ТабліцаЗначеній) тЗначВигрузіть (тЗнач2, ​​1, сЗначРазмерСпіска ())

/ / Переносимо таблицю тЗнач2 в таблицю тЗнач

т3нач3агрузіть (т3нач2)

тЗнач2 = 0 / / Більш таблиця значень тЗнач2 не потрібна

/ / Додаємо в тЗнач рядок для дати і переміщаємо її на другу позицію таблиці тЗначНоваяСтрока () / / Додаємо новий рядок в таблицю значень тЗначІдентіфікатор = Date;

тЗначТіп = Дата; тЗначДліна = 0 тЗначТочность = 0 тЗначПеріодіческій = 0

/ / Ставимо рядок з датою на другу позицію колСтрок = тЗначКолічествоСтрок () тЗначСдвінутьСтроку (2 колСтрок, колСтрок)

КонецПроцедури / / ДляДБФ2

процедура СоздатьОклад (ДБФ) / / Створює файл salarydbf

/ / Створюємо один індекс

/ / Індекс IdDate забезпечить сортування за датою в межах заданого коду співробітника дбфДобавітьІндекс (IdDate, str (Id) + dtos (Date), 0, 0, “) дбфСоздатьФайл (salarydbf, &quotsalarycdx&quot)

КонецПроцедури / / СоздатьОклад

/ / Заповнює файл employeedbf і викликає процедуру ПеренестіОклад, яка додає

/ / Дані у файл salarydbf для обраного співробітника процедура ПеренестіСотр (ДБФ, дбф2)

перем сСотр_2, оп

/ / Створюємо обєкт типу Періодичний для роботи з файлом оп = СоздатьОбект (Періодичний)

сСотр_2 = СоздатьОбект (СправочнікСотруднікі_2) сСотр_2ВибратьЕлементи ()

поки сСотр_2ПолучітьЕлемент () = 1 цикл

дбфДобавіть () / / Нова запис у файлі employeedbf дбфId = сСотр_2Код

дбфParentId = сСотр_2РодітельКод

дбфIsGroup = сСотр_2ЕтоГруппа () дбфName = сСотр_2Наіменованіе дбфEd = сСотр_20бразованіеВід () дбфEdId = сСотр_20бразованіеКод

дбфOrderEng = сСотр_2ПріказПріемВід ()

дбфOrderEngId = сСотр_2ПриказПриемНомерДок дбфOrderSal = сСотр_2ПріказОкладВід () дбфOrderSalId = сСотр_2ПриказОкладНомерДок дбфCalendar = сСотр_2КалендарьВід ()

дбф3апісать () / / Зберігаємо дані

/ / Якщо вибрано співробітник, а не група якщо сСотр_2ЕтоГруппа () = 0 тоді

/ / Додаємо дані про оклад поточного співробітника в файл salarydbf

ПеренестіОклад (сСотр_2, оп, дбф2) КонецЕсли

конецЦікла / / поки

КонецПроцедури / / ПеренестіСотр

/ / Додає для співробітника співр записи в файл salarydbf процедура ПеренестіОклад (співр, оп, ДБФ)

перем док

/ / Прикріплюємо ОП до періодичного реквізиту Оклад знайденого співробітника опІспользоватьОбект (Оклад, сотрТекущійЕлемент ())

/ / Позиціонуємо перед першим записом історії окладів співробітника

опВибратьЗначенія ()

/ / Метод ПолучітьЗначеніе позиціонує ОП на наступному записі

/ / Періодичного реквізиту Оклад поки опПолучітьЗначеніе () = 1 цикл

/ / Документ, що викликав зміна окладу док = опТекущійДокумент ()

Джерело: Бартеньев О В 1С: Підприємство: програмування для всіх Базові обєкти та розрахунки на одній дискеті М: Діалог-МІФІ, 2005 464 с

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*