ЗАВАНТАЖЕННЯ ПОЧАТКОВОГО САЛЬДО ІЗ DBF-ФАЙЛА

При зміні програмних засобів неминуче виникають завдання перенесення залишків зі старих файлів в нові Нерідко стерпні дані можна записати в DBFфайли Припустимо, що так воно і є і початкове сальдо потрібно перенести з файлу baldbf, фрагмент якого представлений в табл 77, в створений нами і поки що порожній ЖЗ

Фрагмент файлу baldbf з початковим сальдо

Таблиця 77

Employee

Balance

Абрамова Лариса Сергіївна

260

Агальцов Юрій Олексійович

170

Бараненко Іван Ілліч

030

Алгоритмперенесення нетруден:

| Початок

2 Відкрити файл baldbf і переміститися на його перший запис ,

3 Ще не виявлений кінець файлу baldbf, виконати:

31 Здійснити пошук по найменуванню елемента довідника Сотруднікі_2, застосовуючи як найменування значення поля Employee файлу baldbf

32 Якщо елемент знайдено, то

Додати в ЖЗ запис, обєктом якої є знайдений елемент, використовуючи як результату значення поля Balance файлу baldbf

кінець якщо 32

Перейти до наступного запису файлу baldbf

кінець циклу 3

4 Додати запис в документ НачПеріода_2 про перший розрахунковому періоді ЖЗ

р Кінець

В 1С подібні алгоритми програмуються за допомогою обєктів типу XBase, що дозволяють управляти DBF-файлами Розмістимо за звичаєм код, який реалізує алгоритм перенесення в модулі обробки Проба Малюнки, що відображають результати роботи програми перенесення даних, наведені відразу після її тексту

Процедура одінСотр (ЖЗ, співр, тДок, хозОп, нтп, начС) далі функція ЕстьВЖЗ (ЖЗ, співр) далі

Процедура ФіксіроватьСменуРП (ЖЗ, док, нтп) далі

процедура Виконати () перем ДБФ

перем файл, папка, фио, співр

перем сСотр_2, ЖЗ, док, тДок, хозОп, прапор, флагЖЗ, нтп ОчістітьОкноСообщеній ()

/ / Відкриваємо діалог для вибору файлу baldbf

прапор = ФСВибратьФайл (0, файл, папка, Виберіть файл, | * DBF) якщо прапор = 0 тоді

повернення КонецЕсли

ДБФ = СоздатьОбект (ХВаве) дбфОткритьФайл (папка + файл) якщо дбфОткрита () = 0 тоді

Попередження (Не вдалося відкрити файл + файл) повернення

КонецЕсли

сСотр_2 = СоздатьОбект (СправочнікСотруднікі_2) ЖЗ = СоздатьОбект (ЖурналРасчетовЗарплата_2) хозОп = СоздатьОбект (СправочнікХозОпДляВР)

/ / Шукаємо простим перебором в довіднику ХозОпДляВР вид розрахунку НачСальдо_2 хозОпВибратьЕлементи ()

прапор = 0

поки хозОпПолучітьЕлемент () = 1 цикл

якщо хозОпВР = ВідРасчетаНачСальдо_2 тоді прапор = 1

перервати КонецЕсли

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

якщо прапор = 0 тоді

Попередження (Господарська операція для ВР Початкове сальдо не знайдена”) повернення

КонецЕсли

док = СоздатьОбект (ДокументНачПеріода_2)

/ / Номер документа не змінюється і завжди дорівнює одиниці докНайтіПоНомеру (1, Дата (0))

якщо докВибран () = 0 тоді

Попередження (Створюю документ НачПеріода_2 під номером 1″, 2) докНовий ()

докНомерДок = 1

докДатаДок = ТекущаяДата () докЗапісать ()

КонецЕсли

тДок = докТекущійДокумент ()

нтп = жзНачалоТекущегоПеріода () флагЖЗ = 0

дбфКодоваяСтраніца (0) / / Використовуємо Windows-кодування дбфПервая () / / Переміщаємося на перший запис DBF-файлу

/ / Перебираємо все, крім віддалених, записи раніше відкритого DBF-файлу

дбфПоказивать Дистанційні (0)

поки дбфВКонце () = 0 цикл / / Ще не досягнуто кінець DBF-файла фио = дбфEmployee / / ПІБ співробітника

/ / Задаємо пошук у всьому довіднику Сотруднікі_2

прапор = сСотр_2НайтиПоНаименованию (ПІБ, 0) якщо прапор = 1 тоді

флагЖЗ = 1 / / В ЖЗ додана принаймні один запис співр = сСотр_2ТекущійЕлемент ()

/ / Запис для одного співробітника

одінСотр (ЖЗ, співр, тДок, хозОп, нтп, дбфBalance) КонецЕсли

/ / Додаємо запис в документ НачПеріода_2 про перший розрахунковому періоді ЖЗ

/ / Результат см на рис 727

ФіксіроватьСменуРП (ЖЗ, док, нтп)

/ / Виклики форм ЖЗ та документа НачПеріода_2 під номером 1

/ / Для перегляду результату ОткритьФорму (ЖурналРасчетовЗарплата_2) ОткритьФорму (тДок)

інакше

Попередження (В ЖЗ не перенісся жодного запису”) КонецЕсли

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

процедура одінСотр (ЖЗ, співр, тДок, хозОп, нтп, начС)

/ / Якщо розрахунок з ВР НачСальдо_2 обєкт вже має, то оновлюємо тільки результат якщо ЕстьВЖЗ (ЖЗ, співр) = 0 тоді

/ / Додаємо розрахунок з ВР НачСальдо_2 для обраного співробітника

жзНовая () жзУстановітьРеквізіт (Документ, тДок) жзУстановітьРеквізіт (РодітельскійДокумент, тДок) жзУстановітьРеквізіт (Обєкт, співр) жзУстановітьРеквізіт (ВідРасч, ВідРасчетаНачСальдо_2) жзУстановітьРеквізіт (хозОп, хозОпХозОП) жзУстановітьРеквізіт (ДатаНачала, нтп) жзУстановітьРеквізіт (ДатаОкончанія, нтп) жзУстановітьРеквізіт (Розрахована, 1)

інакше / / Робимо розрахунок нефіксованим

/ / Журнал позиціонується функцією ЕстьВЖЗ на потрібній записи

/ / Підготовка до оновлення результату

жзОсвободітьЗапісь () / / Робимо запис нефіксованим КонецЕсли

/ / Заносимо в атрибут Результат величину початкового сальдо співробітника жзУстановітьРеквізіт (Результат, начС)

/ / Не забуваємо записати нові значення реквізитів

жз3апісать () жзФіксіроватьЗапісь ()

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

/ / Поверне 1, якщо початкове сальдо для вибраного обєкту вже введено,

/ / Або О-інакше функція ЕстьВЖЗ (ЖЗ, співр)

якщо жзВибратьПеріодПоОбекту (співр) = 1 тоді поки жзПолучітьЗапісь () = 1 цикл

якщо жзВідРасч = ВідРасчетаНачСальдо_2 тоді повернення 1

КонецЕсли

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

повернення 0 КонецФункции / / ЕстьВЖЗ

/ / Заносить дані про зміну розрахункового періоду в документ НачПеріода_2 процедура ФіксіроватьСменуРЩжз, док, нтп)

// період змінна типу РасчетнийПеріод

докНоваяСтрока () / / Додаємо в документ новий рядок докНовПеріод = жзОпісательПеріода (НТП)

/ / Дата зміни розрахункового періоду ЖЗ Зарплата_2 докДатаУстановкі = ТекущаяДата () докПользователь = ІмяПользователя () докЗапісать ()

КонецПроцедури / / ФіксіроватьСменуРП

Рис 726 Розрахунки НачСальдо_2 введені з файлу baldbf

Рис 727 Перший розрахунковий період в документі НачПеріода_2 № 1

Зауваження:

1 Перший розрахунковий період задається при створенні ЖЗ в поле Дата відліку (див рис 719)

2 Не виключено, що для зміни кодування записів DBF-файла, вам доведеться вдатися до вбудованим функціям OemToAnsi і AnsiToOem, наведеним у табл 28

742&nbsp&nbsp&nbsp ЗВІТ ПО початкове сальдо

Звіти, як ми вже знаємо, сподручнее всього будувати на базі запитів Напишемо запит, який здійснює вибір з ЖЗ розрахунків із заданим типом ВР, і розмістимо його в модулі обробки Проба Запит і супроводжуючий його код вкрай прості:

/ / Формує та виконує запит запр

функція ВипЗапр (запр, ВРДляЗапр) далі

процедура ВиводЗапрТЗнач (запр) далі / / Виводить запит в таблицю значень процедура ВиводЗапрСооб (запр) далі / / Виводить запит у вікно повідомлень

процедура Виконати () перем запр, ВРДляЗапр

ВРДляЗапр = ВідРасчетаНачСальдо_2 запр = СоздатьОбект (Запит)

/ / Передаємо функції ВипЗапр значення ВР для відбору розрахунків

/ / Функція ВипЗапр формує і виконує запит запр

// Якщо запит виконано

якщо ВипЗапр (запр, ВРДляЗапр) = 1 тоді

ВиводЗапрТЗнач (запр)

//

Виводить запит в таблицю значень

ВиводЗапрСооб (запр)

//

Виводить запит у вікно повідомлень

КонецЕсли

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

функція ВипЗапр (запр, ВРДляЗапр) / / Формує та виконує запит запр

перем ЖЗ, нтп, текстЗапр / /текстЗапр текст запиту ЖЗ = СоздатьОбект (ЖурналРасчетовЗарплата_2)

нтп = жзНачалоТекущегоПеріода () текстЗапр =

| Період з нтп по нтп / / Відповідний для Початкового сальдо період

/ / Визначаємо змінні запиту вони містять потрібні нам дані

| Співр = ЖурналРасчетовЗарплата_20бъект

| ВР = ЖурналРасчетовЗарплата_2ВидРасч

| Рез = ЖурналРасчетовЗарплата_2Результат

/ / Задаємо порядок вибірки даних

| Угруповання співр порядок сотрНаіменованіе

/ / Умова відбору даних

| Умова (ВР = ВРДляЗапр) ;

/ / Виконуємо запит

повернення запрВиполніть (текстЗапр) КонецФункции / / ВипЗапр

процедура ВиводЗапрТЗнач (запр) / / Виводить запит в таблицю значень перем тЗнач

/ / Обєкт тЗнач створюємо для проміжної демонстрації вибірки запиту

тЗнач = СоздатьОбект (ТабліцаЗначеній)

/ / Вивантажуємо для попереднього перегляду всі змінні запиту

/ / В таблицю значень тЗнач

запрВигрузіть (тЗнач, 1)

/ / Перегляд таблиці значень (результатів запиту) Результат см на рис 728 тЗначВибратьСтроку (, Початкове сальдо в таблиці значень)

енецПроцедури / / ВиводЗапрТЗнач

виводить запит у вікно повідомлень

Результат має ту ж структуру, що і дані в таблиці, наведеної на рис 728 еоцедура ВиводЗапрСооб (запр)

/ / У цій процедурі ще раз ілюструється метод запитів Угруповання поки запрГруппіровка (співр) = 1 цикл

якщо запрЕтоГруппа (співр) = 1 тоді

Повідомити (Співробітники підрозділу + запрсотр)

інакше

Повідомити (СокрЩзапрсотр) + СімволТабуляціі + запрВР + СімволТабуляціі + запррез)

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

КонецПроцедури / / ВиводЗапрСооб

Рис 728 Результат запиту про початковому сальдо з групами

Групи (імена батьків) не потраплять в запит, якщо оператор Угруповання доповнити опцією Без груп:

[Угруповання співр порядок сотрНаіменованіе без груп що призведе до наступного результату:

Рис 729 Результат запиту про початковому сальдо з групами

З рис 728 і 729 видно, що елементи-батьки довідника Сотруднікі_2 є в запиті групами і метод запрЕтоГруппа (співр) поверне для них одиницю Для інших записів цей метод поверне нуль

Перший рядок таблиці значень відображає початок вибірки Рядок містить пусте значення змінної запиту співр Перше ж вживання методу

запрГруппіровка (співр)

призведе до переміщення позиції вибірки на її першу, що містить непорожнє значення змінної співр запис

Якщо в текст запиту додати змінну рід, утримувати батьків обєкта:

| Рід = ЖурналРасчетовЗарплата_20бъектРодитель то результат запиту не зміниться

Якщо ж до того ж в тексті запиту розмістити і угруповання за рід, тобто пере-

дати методу Виконати такий текст:

текстЗапр =

| Період з нтп по нтп

| Рід = ЖурналРасчетовЗарплата_2ОбъектРодитель

| Співр = ЖурналРасчетовЗарплата_2Объект

I BP = ЖурналРасчетовЗарплата_2ВидРасч

| Рез = ЖурналРасчетовЗарплата_2Результат

| Угруповання рід

| Угруповання співр порядок сотрНаіменованіе

| Умова (ВР = ВРДляЗапр) ;

то в таблиці значень ми побачимо додаткові рядки, в яких змінна запиту співр має пусте значення (рис 730)

Рис 730 Запит з двома групами

Ці рядки, крім першої, починають групирід Перший рядок це початок вибірки У ній і рід і співр мають порожні значення

При подвійний угрупованню, щоб отримати доступ до даних запиту нижчого рівня, необхідно перш вибрати вищестоящі групи Тому доведеться змінити код процедури ВиводЗапрСооб на наступний:

/ / Виводить запит у вікно повідомлень для випадку подвійний угруповання процедура ВиводЗапрСооб (запр)

/ / У цій процедурі ще раз ілюструється метод запитів Угруповання поки запрГруппіровка (рід) = 1 цикл

Повідомити (Співробітники підрозділу + запррод) поки запрГруппіровка (співр) = 1 цикл

якщо запрЕтоГруппа (співр) = 0 тоді Повідомити (СокрП (запрсотр) + Символ Табуляції + запрВР +

СімволТабуляціі + запррез) КонецЕсли

конецЦікла / / Поки запрГруппіровка (співр) = 1 конецЦікла / / Поки запрГруппіровка (рід) = 1

КонецПроцедури / / ВиводЗапрСооб

Результат відповідає рис 728: Співробітники підрозділу 01 Цех

Співробітники підрозділу 01/1

Агальцов Юрій Олексійович

Початкове сальдо

17

Добрецов Борис Юрійович

Початкове сальдо

01

Співробітники підрозділу 01/2

Ьараненков Іван Ілліч

Початкове сальдо

03

Порівняння двох запитів показує, що при запитах до ЖЗ для виведення співробітників з розбивкою по цехах немає необхідності вводити в текст запиту змінну рід і влаштовувати другу групу Всі необхідні дані дасть угруповання за змінної запиту співр

Джерело: Бартеньев О В 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>

*

*