Свежая пресса
Обновление внешних форм отчетов 1С

Опубликовано: 2017.07.10

Приветствуем читателей нашего сайта и спешим сообщить вам о выходе новых форм отчетов 1С.

Подробнее...
Внимание. Новые обновления 1С от компании FinSoft

Опубликовано: 2017.05.29

Приветствуем читателей сайта. Предлагаем вам ознакомиться с изменениями в новых обновлениях 1С для конфигураций:

Подробнее...
1С: работаем дальше!

Опубликовано: 2017.05.17

В связи с медийным штормом, разыгравшимся вчера в Украине по поводу указа Президента о запрете ряда ру-сервисов, в число которых якобы вошел и программный продукт 1С, компания FinSoft, как говорят в Одессе, имеет сказать пару слов.

Подробнее...

Обучающие статьи. Урок 31 - Загрузка данных из DBF

Опубликовано: 2017.06.19

Урок 31. Компания FinSoft

Приветствуем читателей нашего сайта. Сегодня на очереди изучение процесса загрузки данных из DBF.

Загрузку из DBF файлов можно хорошо рассмотреть на примере загрузки платежей с клиент-банка. Выписки, из которых сохраняют как раз таки в файлы DBF.

Для начала нам нужно подготовиться. Нужно имитировать получения нами файлика из банка. Для этого подойдет программка «DBFNavigator» - ее можно бесплатно скачать в интернете. Создадим новый файл с названием «Export» и с такими полями (колонками):

Урок 31. Загрузка из dbf 

  • DATE – Дата платежа;
  • COUNT_A – Счет плательщика;
  • MFO_A – МФО банка плательщика;
  • OKPO_A – ОКПО плательщика;
  • NAME_A – Наименование плательщика;
  • COUNT_B – Счет получателя;
  • MFO_B – МФО получателя;
  • OKPO_B – ОКПО получателя;
  • NAME_B – наименование получателя;
  • SUMMA – сумма платежа;
  • N_D – номер документа в системе банка;
  • N_P – назначение платежа;

У поля дата тип дата, у поля сумма тип число точность два, остальные поля строковые. Создадим несколько строк с платежами в этом файле.

Нам нужно добавить такие ситуации – оплата от нас поставщику и оплата нам от поставщика. Заполним колонки плательщика. В первой строке плательщик мы, во второй контрагент:

Урок 31. Загрузка из dbf 

Теперь заполним колонки получателя. В первой строке получатель наш контрагент, во второй мы:

Урок 31. Загрузка из dbf 

Заполним суммы и назначения. В первой строке отплата от нас поставщику на 1000, во второй от клиента нам. Т.е. получилось три действующих лица. Наша организация, поставщик и покупатель:

Урок 31. Загрузка из dbf 

Теперь, когда файл готов вернемся в 1С и создадим внешнюю обработку «ЗагрузкаИзDBF».

Реквизиты:

  • ИмяФайла – Строка, неограниченная длина.
  • ДатаЗагрузки – Дата, состав дата.
  • НашСчет – Справочник ссылка банковские счета.
  • Организация – Справочник ссылка организации.

Табличная часть данные с реквизитами:

  • Отметка – тип булево.
  • ВидДокумента – строка, длина 50
  • СчетКонтрагента– Составной, Строка и Справочник ссылка банковские счета
  • Контрагент – Составной, Строка и Справочник ссылка контрагенты
  • ДоговорКонтрагента – Составной, Строка и Справочник ссылка договора контрагентов
  • Приход – число, длина 15, точность 2
  • Расход – число, длина 15, точность 2
  • НазначениеПлатежа – строка, неограниченная длина.
  • МФОБанкаКонтрагента – строка, длина 6
  • ОКПОКонтрагента – строка, длина 8
  • НомерПлатежа – число, длина 10, точность 0

Поле «имя файла» так же будет служить нам для открытия нужного файла. Код в этой процедуре будет такой же, как и в загрузке Excel, но, с другим фильтром:

Листинг 1.Загрузка через DBF. Фильтр расширения для выбора файлов

Урок 31. Загрузка из dbf 

Так же создадим процедуру ПриОткрытии, в ней заполним реквизит ДатаЗагрузки текущей датой, а так же поставим флажки сохранения значений на все остальные реквизиты кроме даты.

На командной панели табличной части данные добавим три кнопки:

  • «Загрузить из DBF» процедура в этой кнопке будет парсить файл с платежами.
  • «Проверить данные», эта кнопка будет проверять, есть ли такие контрагенты в базе по их ОКПО. Если их нет, то создавать новых контрагентов и основной договор, если есть, то подставлять контрагента в строку табличной части и его основной договор.
  • «Загрузить в базу» - процедура этой кнопки будет создавать непосредственно платежи.

Естественно логичней было бы определять контрагентов на стадии загрузки из файла, а не по отдельной кнопке, но я решил намеренно разделить этот процесс для простоты восприятия.

Добавим код в процедуру кнопки «Загрузить из DBF»:

Листинг 2.Загрузка через DBF. Парсинг файла. Открытие файла

Урок 31. Загрузка из dbf 

Думаю по комментариям все понятно. Стоит отдельно отметить только кодировку, если в «DBFNavigator» у вас была нажата кнопка  вам следует установить кодировку чтения не ANSI, аOEM. Это особенность DBF файлов. Если этого не сделать, все буквенные символы будут иметь такой вид:

Урок 31. Загрузка из dbf

Перейдем непосредственно к циклу чтения файла:

Листинг 3.Загрузка через DBF. Парсинг файла. Цикл чтения

Урок 31. Загрузка из dbf 

Для начала проверим, совпадает ли дата платежа с датой загрузки. В реальных условиях в файлах-платежах могут быть данные за месяц. Для перехода к следующей строке файла используем метод «Следующая()».

Далее проверяем колонку с расчетным счетом, сначала счетом плательщика, если совпало, значит, плательщик мы и в строку с контрагентом нам нужно заполнить получателя наших денег. Вид документа будет платежка исходящая.

Если наш счет совпал со второй колонкой счет получателя, значит, деньги заплатали нам, и мы  добавим в строку уже плательщика. Вид документа будет платежка входящая.

Назначение платежа и номер документа не зависят от счета, поэтому вынесли их после условий.

Листинг 4.Загрузка через DBF. Парсинг файла. Конец цикла

Урок 31. Загрузка из dbf

В завершении проверим, есть ли загруженные платежи и сообщим пользователю, а так же закроем файл.

Немного изменений на форме, чтобы все выглядело симпатичней для пользователя. Давайте добавим привязку по владельцу полю наш счет к организации, чтобы пользователю не открывался список всех счетов. Если вы забыли, у поля есть такое свойство:

Урок 31. Загрузка из dbf

Так же сделаем, чтобы визуально колонки Счет, контрагент и договор были в одной колонке, для этого есть свойство положение, зададим его колонке контрагент и договор 

Урок 31. Загрузка из dbf 

А так же скроем колонки МФО, ОКПО и Отметка. Их пользователю наблюдать незачем. Вы можете оставить их видимыми, если считаете что так правильно.

Теперь перейдем ко второй процедуре, проверка загруженных данных. Создадим цикл по табличной части. Первое что мы сделаем в цикле, это проверим, все ли колонки заполнены.

Листинг 5.Загрузка через DBF. Проверка реквизитов

Урок 31. Загрузка из dbf 

Листинг 6.Загрузка через DBF. Поиск контрагента

Урок 31. Загрузка из dbf 

После проверки основных значений попробуем найти контрагента по его ОКПО. Если такого нет, тогда создадим нового контрагента. Вид контрагента, покупатель или поставщик, будет определен видом документа.

Если по какой-то причине не удалось создать контрагента, выведем сообщение пользователю и пропустим эту строку, все дальнейшие действия требуют существующего контрагента.

Листинг 7.Загрузка через DBF. Поиск договора

Урок 31. Загрузка из dbf 

Предположим, что в условиях задачи у контрагента всегда один договор одного типа. Тип определяем от вида документа в строке, если запрос ничего не нашел – создадим новый договор иначе у нас будет только один на выбор в цикле.

После манипуляций с договором можем его установить, как основной для контрагента. Но это не обязательно, особенно если у контрагента всегда множество договоров. Тогда вам нужно добавлять еще какие- то условия поиска, например дату или номер договора.

Листинг 8.Загрузка через DBF. Создание договора

Урок 31. Загрузка из dbf 

Для простоты понимания я вынес создание договора в отдельную функцию СоздатьДоговор(Контрагент, ВидДокумента) в параметры этой функции я передаю контрагента, которого нам удалось найти ранее запросом и вид документа с обрабатываемой строки. На основании вида документа создается и вид договора.

Листинг 9.Загрузка через DBF. Создание банка и счета

Урок 31. Загрузка из dbf 

В этой части цикла я проверяю основной счет контрагента, я предполагаю, по условиям задания, что у контрагента только один счет. Первое что я делаю, если счет не заполнен – пробую найти банк. Это отдельная функция ДобавитьБанкПоМФО(МФОБанка). МФО это код банка. Эта функция достаточно большая и ее нет смысла копировать сюда, вы найдете ее содержимое в обработке примере для этого курса.

Далее я ищу счет по его номеру, если не нахожу, то создаю новый счет и записываю его в контрагента.

Вкратце код функции поиска банка можно привести сюда так:

Листинг 10.Загрузка через DBF. Поиск банка

Урок 31. Загрузка из dbf 

В конце цикла добавляем проверку, если все реквизиты для будущего документа заполнены, то поставим отметку в строке, на нее будем ориентироваться, когда будем создавать документы.

Листинг 11.Загрузка через DBF. Последняя проверка в цикле

Урок 31. Загрузка из dbf

Получиться у нас должно нечто такое:

Урок 31. Загрузка из dbf 

Теперь перейдем к загрузке непосредственно платежей. Тут все просто- все реквизиты у нас уже готовы, осталось записать их в документ.

Начинаем писать код в процедуре кнопки «ЗагрузитьВБазу». Создаем цикл по табличной части данные. Добавляем условие на реквизит Отметка, если он истина тогда обрабатываем строку.

Первое что нужно сделать после проверки отметки, определить сумму документа:

Листинг 12.Загрузка через DBF. Создание документов

Урок 31. Загрузка из dbf 

После получения суммы запишем основные реквизиты

Листинг 13.Загрузка через DBF. Создание ППИ и ППВ

Урок 31. Загрузка из dbf 

Листинг 14.Загрузка через DBF. Заполнение общих реквизитов и запись документа

Урок 31. Загрузка из dbf 

Вот и все, загрузка платёжек готова!

Так же, наша компания проводит обучение по курсам:

 Обучение проводится в вечернее время, что позволит вам не отрываться от работы или обучения, практикующим программистом нашей компании.

 От вас требуются уверенные знания ПК, и желание научиться чему-то новому.