Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Войти | Зарегистрироваться )


Свернуть

> Добро пожаловать на наш форум

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

Логин:   
Пароль:
 

Форум:

Новые темы (за 20 дней):

Последние сообщения:

Наши сервисы:

Дополнительно:

Новости для бухгалтера:

 
функционал типа "График платежей" или "Планирование оплат" при долгосрочных договорах в актуальных конфигурациях [раздел Программирование в 1С Предприятие 8.3]
Автор karko — 17.09.19, 18:01 — 0 комментариев
Коллеги, подскажите пожалуйста - в какой из конфигураций есть функционал типа "График платежей" или "Планирование оплат" например при долгосрочных договорах, с регулярной оплатой плановых платежей, то ли событие, то ли напоминание, пока не придумал, как делается это в стандартных, что-то не припомню, точно где-то есть,
своё написать то не сложно, хотелось бы посмотреть работающую софтину и не изобретать велосипед, заранее благодарен
Просмотров: 10, оставить комментарий   
Создать подсистему на подобие рабочего стола [раздел Программирование в 1С Предприятие 8.3]
Автор Gigi — 16.09.19, 12:31 — 11 комментариев
Всем привет!
Вынужден опять нарушить свое уединение программиста отшельника, и отрыв от всякого общества, кроме клавиатуры и монитора. И выйти опять на люди.
Ужас как не охота общаться но придется ...
Вопрос следующий
Предполагаю, что 1С не позволяет это, но все таки можно ли это сделать.
Как известно обычная подсистема УП имеет панель навигации, панель действий и рабочую панель
Но это стандарт который сопутствует созданной любой подсистеме. Любой, кроме одной единственной, встроенной в конфигурацию. Имею ввиду ту самую подсистему: "Рабочий стол".
Так что, создаваемые подсистемы все строго стандартизированы. И настолько что никак невозможно избавиться от этого стандарта. Навязанного разработчиками. А ведь не всегда нужен этот стандарт. Часто нужно что бы при нажатии на подсистему появлялась не та навязываемая форма с навигацией и т.д., а что бы вместо этих панелей на все области всплывала УКАЗАННАЯ ОДНА ФОРМА. Т.е. было точно так же как в подсистеме "Рабочий стол".
Вот что нужно.
Поэтому вопрос: позволяет ли 1С это сделать?
Если да то как?
А если нет то, безнадежно не позволяет, или есть пути ... ну естественно мучительные... похожие наверно на то как сидя за столом есть не руками а ногами.
Буду признателен!
Просмотров: 204, последний комментарий от Gigi   
В чем ошибка условия? 1С 7.70.003 торговля склад для Украины? [раздел Программирование в 1С Предприятие 7.7]
Автор ZUBR — 15.09.19, 16:55 — 11 комментариев
Здравствуйте. Даю фрагмент сырого кода отчета по результатам работы сотрудников. Никак не пойму, почему не работает условие.

Процедура Сформировать() 
    
      Спр = СоздатьОбъект("Справочник.Сотрудники");
      Расх = СоздатьОбъект("Документ.РасходнаяНакладная");
      ТЗ = СоздатьОбъект("ТаблицаЗначений");
    
       ТЗ.НоваяКолонка ("Сотрудник");
       ТЗ.НоваяКолонка ("КолСис");   // количество систем
       .............................................................................
           .............................................................................
Спр.ВыбратьЭлементы();
      Пока Спр.ПолучитьЭлемент()=1 Цикл
            ТЗ.НоваяСтрока();
          ТЗ.Сотрудник = Спр.Наименование;
          ...................................................
                 ..................................................
        К = 0;
      
           Расх.ВыбратьДокументы(НачДата,КонДата);
          
      Пока Расх.ПолучитьДокумент()=1 Цикл
          // Сообщить("Сотр:"+ ТЗ.Сотрудник);
          //  Сообщить("Инж:"+ Расх.Инженер);
           // Сообщить("След. накл");
          
          Если ТЗ.Сотрудник = Расх.Инженер Тогда
                К=К+1;
              //  Иначе К=10;
              КонецЕсли;
              
            КонецЦикла;
      ТЗ.КолСис = К;
    КонецЦикла;
    
ТЗ.ВыбратьСтроку();

КонецПроцедуры


Строки
// Сообщить("Сотр:"+ ТЗ.Сотрудник);
                         //  Сообщить("Инж:"+ Расх.Инженер);
                         // Сообщить("След. накл");

и строку
//  Иначе К=10;


я вставлял с целью диагностики проблемы. Пришел к выводу, что условие
 Если ТЗ.Сотрудник = Расх.Инженер Тогда
не выполняется , когда оно должно выполняться. Реквизит Инженер в РасходныхНакладных берется из Справочника Сотрудники. Оттуда же берется и значение ТЗ. Сотрудник. Почему же при совпадении этих значений программа считает, что они не равны?! Программа в таблицу записывает К= 10. А если закомментировать тестовую строку Иначе К=10, тогда в столбце ТЗ.КолСис вообще ничего не прописывается. То есть, условие железно должно выполняться, а программа ведет себя так, вроде оно не выполняется. Уже сутки ломаю голову. Спасибо!
Просмотров: 221, последний комментарий от andrew76   
Как вывести значение булево(да или нет) в колонку Формы списка документа [раздел Программирование в 1С Предприятие 8.3]
Автор jojojoba2 — 13.09.19, 16:04 — 1 комментариев
Добрый деннь!
1С8.3 УПП

Подскажите подалуйста, как вывести значение булево(да или нет) в колонку Формы списка(обычную) документа.
Я создал реквизит типа булево. На форме списка создал колонку,подвязал реквизит к колонке. Выводит в строках формы значение - "Нет".

Как сделать чтобы при определенных условиях(если в структуре подчиненных документов есть НалоговаяНакладная) выводилось значение "Да".

Я в событии формы списка при открытии Создал процедуру :

Процедура ПриОткрытии(ОформленияСтрок)    
    МасЗаказы = Новый Массив;
    Для Каждого Стр Из ОформленияСтрок Цикл
        ДанныеСтроки = Стр.ДанныеСтроки;
        МасЗаказы.Добавить(ДанныеСтроки.Ссылка);
    КонецЦикла;
    //
    зЗапрос = Новый Запрос;
    Запрос.Текст =

          "ВЫБРАТЬ
          |    СвязанныеДокументы.Ссылка
          |ИЗ
          |    КритерийОтбора.СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК СвязанныеДокументы";
    
          Запрос.УстановитьПараметр("ЗначениеКритерияОтбора",ЭтаФорма.ЭлементыФормы.Список.ТекущаяСтрока);
                                                                
    Результат = Запрос.Выполнить();  
    
  
    Для Каждого Стр Из ОформленияСтрок Цикл
        тд = Стр.ДанныеСтроки;        
        Выборка.Сбросить();
        Если Выборка.НайтиСледующий(тд.Ссылка, "НалоговаяНакладная") Тогда


   ОформлениеСтроки.Ячейки.Флаг = Истина;     как правильно написать эту строку ???????????????? Выдает ошибку :


Документ.ЗаказПокупателя.Форма.ФормаСписка.Форма(104)}: Значення не є значенням об`єктного типу (Ячейки)

Подскажите пожалуйста как правильно написать код : если значение запроса = нужное значение то в строке напротив документа поставить значение "ДА"

Спасибо за любую помощь.
Просмотров: 91, последний комментарий от sava1   
Вывести флажок в поле формы списка [раздел Программирование в 1С Предприятие 8.3]
Автор jojojoba2 — 13.09.19, 10:04 — 6 комментариев
Добрый день!

Есть задача - необходимо в документе ЗаказПокупателя в поле ввода колонки формы списка вывести флажок напротив документа если в структуре подчиненных документов, есть Реализация и Налоговая накладная.

Подскажите каким методом, запросом это возможно сделать?
Как правильно настроить колонку в свойствах?
В каком событии лучше писать процедуру?

Если есть пример кода буду благодарен.
Просмотров: 88, последний комментарий от Vofka   
Настроить вывод в заголовки отчетов время и дата формирования отчета, как было в 1с77 [раздел Система компоновки данных]
Автор andreykyiv@bigmir.net — 12.09.19, 12:18 — 12 комментариев
Заказчик просит настроить вывод в заголовки отчетов время и дата формирования отчета, как было в 1с77
В конфигурациях на 1с77 над заголовком отчета справа обязательно выводилось время и дата формирования отчета.
Заказал финдир, которому нужно анализировать много отчетов, но бывает непонятно, какой из распечатанных отчетов имеет более поздний, и именно его нужно принять во внимание.
От себя придумал такое решение:
В разделе Параметры создаю новый параметр "Дата вывода отчета", тип параметра "Дата"
В доп. настройках отчета указываю опцию "выводить параметры"
Если данный параметр заполнен - он будет выведен ПОД заголовком отчета
Немного не то, что просили, но есть.
Если ли возможность присвоить параметру автоматически значение "ТекущаяДата()"?
Или может есть у кого другой вариант решения. То я буду вдячний
Просмотров: 140, последний комментарий от sava1   
Суммирует номенклатуру приложения 2 к НН при вигрузке в xml или FREDO [раздел Программирование в 1С Предприятие 8.3]
Автор Sirius83 — 12.09.19, 11:42 — 1 комментариев
1С:Підприємство 8.3 (8.3.10.2252)
"Управление производственным предприятием для Украины", редакция 1.3 (1.3.53.1)

Доброго времени! Бухгалтер делает коректировку НН (приложение 2) согласно инструкции по коректировки количества двумя строками одной и той же номенклатуры.


но при вигрузке в XML или напрямую в Fredo звіт, получаєтся следующая картина

тобиш сумируется одна и таже номенклатура а так быть не должно ибо потом в Фредо опять ей надо редактировать документ и делать двумя строками, как в Приложении 2
Просмотров: 50, последний комментарий от Макс1С   
Нельзя упорядочить список по колонке [раздел Программирование в 1С Предприятие 8.3]
Автор l2d808 — 12.09.19, 9:00 — 2 комментариев
Добрый день уважаемое сообщество.
Использую 1с (8.3.12.1440). Конфигурация самописная.
Был создан справочник. один из реквизитов этого справочника имеет такие свойства:
Тип: Строка
Длина:0
Допустимая длина: переменная
Неограниченная длина: True
Использование: Для элемента
Полнотекстовой поиск:Использовать
История данных: Использовать

В форме списка этого справочника, при попытке упорядочить элементы за этим реквизитом выпадает ошибка: "Нельзя упорядочить список по колонке "Адреса"! Выберете другую колонку для упорядочивания. "
Упорядочить по другим полям не составляет проблемы. Включая и по полям реквизитов с такими же свойствами.
Как решить эту проблему?
Буду благодарен за помощь.
Просмотров: 59, последний комментарий от l2d808   
Другие контакты в Адреса Организации и Контрагенти [раздел Программирование в 1С Предприятие 8.3]
Автор bandrah — 11.09.19, 10:57 — 11 комментариев
Є поле "Другие контакты" в картці організації і конрагента підкажіть де ці дані зберігаються, щоб можна було хоть якось звернутися до цих даних, знайшов тільки ці дані ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации - Список = "ПолноеНаименование,КодПоЕДРПОУ,КодПоДРФО,ИНН,НомерСвидетельства,ЮридическийАдрес,Телефоны,НомерСчета,Банк,МФО"; Дане поле потрібне для адресу на англійській мові в зовнішній макет підтягнути!
Просмотров: 174, последний комментарий от bandrah   
Подразделение в расчетной ведомости организации [раздел Программирование обычных форм 1С 8.2 и не интерфейсной логики]
Автор aik2001 — 10.09.19, 12:47 — 8 комментариев
Есть несколько сотрудников которые работали в одном подразделении, а потом в другом, переведены кадровым перемещением, не совместители.
Если в ведомости делать отбор по актуальному подразделению сотрудник попадает в него если, по старому подразделению то в старое.
Если без отбора то показывает в актуальном. В чем может быть причина.


Управление торговым предприятием для Украины", редакция 1.2. (1.2.51.1)
Просмотров: 154, последний комментарий от aik2001   
Оъединение данных одного отчета по 2-м датам [раздел Система компоновки данных]
Автор Constantus — 10.09.19, 12:46 — 1 комментариев
Приветствую, Форумчане!
1с8.3, БСП, УФ, самопис

Имеется довольно сложный, но работоспособный отчет на СКД:
Подразделение; Заказ, Долг (+другая мелочь)

Основным параметром отбора является дата.

Нужно как-то совместить в одном отчете данные этого отчета по 2-м датам.

Причем количество записей по Дата01 и по Дата02 будут отличаться, но все остальные реквизиты (кроме Долга) совпадают.

Думал создать 2-а набора записей и как-то их связать и объединить.

1. Набор: дата 05.08.19

Заказ00; 1000;
Заказ01; 100 денег; 0
Заказ02; 200 денег; 0
Заказ03; 300 денег; 0

2. Набор: дата 12.08.19

Заказ01; 0; 50
Заказ02; 0; 50
Заказ03; 0; 0
Заказ04; 0; 300

Результат с колонками по датам 05.08 и 12.08

Заказ00; 1000; 0
Заказ01; 100; 50
Заказ02; 200; 50
Заказ03; 300; 0
Заказ04; 0; 300

Подскажите как правильно оъединить эти данные на основе одной структуре отчета, только по 2-м датам с разным количестовм записей.
Просмотров: 62, последний комментарий от fly   
Откуда берется должность на форме справочника сотрудники [раздел Программирование в 1С Предприятие 8.3]
Автор lolmatrix — 10.09.19, 12:57 — 8 комментариев
Здравствуйте, пытаюсь разобраться в ЗУп 3.1, подскажите , пожалуйста в справочнике сотрудники есть параметризуемая команда ДолжностьПоШтатномуРасписанию, но из какого места попадает туда эта команда и соответственно какой код исполняет команда,
никак не найду, подскажите пожалуйста уважаемы специалисты
как найти код этой команды или место откуда же попадает
она на форму и подскажите пожалуйста откуда вообще попадает должность на форму справочника сотрудники ,
заранее благодарен всем за ответы


Просмотров: 157, последний комментарий от lolmatrix   
Полный журнал при запуске [раздел Программирование в 1С Предприятие 7.7]
Автор Yankl — 09.09.19, 10:21 — 2 комментариев
7.70.027 "Бухучет" для Украины (7.70.332)
При запуске программы открывается форма Полный журнал. Кто знает где спрятан код автозапуска.
Просмотров: 113, последний комментарий от Yankl   
Помогите понять принцип создания запросов в 1с 7.7 конф 7.7.00 [раздел Программирование в 1С Предприятие 7.7]
Автор ZUBR — 08.09.19, 22:14 — 4 комментариев
И снова здравствуйте! Уважаемые гуру, помогите, пожалуйста, разобраться в создании запросов. Хочу понять основные принципы и закрепить на практике. Вопросов будет несколько, но все по запросам. И все практические. Уважаемые Модераторы, прошу разрешить обсудить эти вопросы в одной теме. Думаю, так будет лучше. Они все будут касаться процедуры формирования запросов. Но если администрация сайта посчитает, что, все же, нужно по каждому вопросу создавать отдельную тему, я беспрекословно подчинюсь. Итак.
У меня есть РасходныеНакладные по ремонтам техники. В табличной части этих накладных есть есть Товары с реквизитом ВидТовара = Товар, а есть различные виды выполняемых работ, которые в справочнике числятся как товар с реквизитом ВидТовара = Услуга. Мне нужно в отчете по всем проведенным накладным просуммировать все виды работ. Без, собственно, товаров. Например, есть товар с видом Услуга, который называется "Чистка бойлера". Или "ЗаменаНагревателя". Ясно, что это работа. Поэтому этот товар имеет ВидТовара = Услуга. Остальные же товары, например, Выключатель, Прокладка и т.д. имеет ВидТовара = Товар. После многих попыток я пришел к следующему коду, который работает:


Процедура Сформировать()   
    НужныйТовар = Константа.НужныйТовар;
    ВидТовараУм = Константа.ВидТовараУм;
    
    ЗапросСуммы = СоздатьОбъект("Запрос");
ТекстЗапроса =
    "
    |Период с НачДата по КонДата;
    |ОбрабатыватьДокументы Проведенные;
    
    |Товар = Документ.РасходнаяНакладная.Товар;
    |ВидТовара = Справочник.Номенклатура.ВидТовара;
    |СуммаСНДС = Документ.РасходнаяНакладная.СуммаСНДС;
    |Функция Сум = Сумма(СуммаСНДС);
    |Группировка Товар Без Групп;
    |Условие (ВидТовара = ВидТовараУм);";
    ЗапросСуммы.Выполнить(ТекстЗапроса);
    Пока ЗапросСуммы.Группировка() = 1 Цикл
        СуммаУслуг = ЗапросСуммы.Сум;
        
    КонецЦикла;
Сообщить("Сумма:"+СуммаУслуг);

КонецПроцедуры


"Константа.ВидТовараУм" у меня в пользовательской программе выбран вид Услуга.

Но в результате я получаю не сумму услуг по всем накладным, а сумму цен всех товаров вместе с услугами по всем расходным накладным. Получается, что условие написано неправильно, и при каждом прохождении цикла условие видит ВидТовара = Услуга.
Подскажите, пожалуйста, что я делаю неправильно и где ошибка? Спасибо!
Просмотров: 157, последний комментарий от ZUBR   
Что написать в расшифровке ячейки отчета, чтобы из отчета открыть документ 1с 7.7 конф 7.7.00 [раздел Программирование в 1С Предприятие 7.7]
Автор ZUBR — 08.09.19, 0:26 — 2 комментариев
Здравствуйте. Есть таблица отчета, в которой собраны данные из двух документов. Мне из этого отчета нужно открыть документ АктПриема. У меня есть ячейка Заказ, значение которой в отчет заносится из АктаПриема. Что нужно написать в поле "Расшифровка" этой ячейки, чтобы при клике на нее открывался соответствующий АктПриема? Режим ТолькоПросмотр поставил. Привожу упрощенный код отчета.

Процедура Сформировать()
    Апр = СоздатьОбъект("Документ.АктПриема");
    Расх = СоздатьОбъект("Документ.РасходнаяНакладная");
    ТЗ = СоздатьОбъект ("ТаблицаЗначений");

ТЗ.НоваяКолонка("ДатаПр");
ТЗ.НоваяКолонка("ЗАКАЗ");
.............................................................................................
Апр.ВыбратьДокументы(НачДата,КонДата);
     Пока Апр.ПолучитьДокумент()=1 Цикл  
         ТЗ.НоваяСтрока();
        ТЗ.ДатаПр = Апр.ДатаДок;
         ТЗ.ЗАКАЗ = Апр.НомерЗаказа;
..................................................................
КонецЦикла;

Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("БАЗА комп");
    
    Таб.ВывестиСекцию("Шапка");
    Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
Таб.ВывестиСекцию("НеНачат");
................................................................

и т.д.
В общем, как это сделать попроще? В интернете есть разные примеры, но они очень сложные с кучей условий и непонятные. Подскажите, пожалуйста, последовательность действий, и я сделаю. Спасибо!
Просмотров: 107, последний комментарий от ZUBR   
Пометка на удаление документов при пометке на удаление основного документа [раздел Программирование в 1С Предприятие 8.3]
Автор Constantus — 07.09.19, 14:54 — 2 комментариев
Приветствую, Форумчане!
1с8.3.12, БСП, УФ, самопис

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

На какое событие этого документа поставить код пометок на удаление из этого документа?

Как грамотно это вообще сделать?

Просмотров: 120, последний комментарий от fly   
Импорт из Аваль Банка [раздел Программирование в 1С Предприятие 7.7]
Автор bezzil — 05.09.19, 14:48 — 16 комментариев
Собственно проблема после перехода на Ibon (29 значные счета) выписка банка перестала грузится в 1с 7.70,027
вот код как это было

Тыц
//*******************************************
Перем ДБФ,Плат,Врем, тВрем, тДБФ, тПлат, Вал, тАрхПлат,зн;
Перем ПутьБД;

Процедура ЗаполнитьБВ() далее
Процедура ОткрытьБД() далее
Процедура ВыбратьПлатежки() далее
Процедура СоздПуть() далее[hide="Тыц"]//*******************************************
Перем ДБФ,Плат,Врем, тВрем, тДБФ, тПлат, Вал, тАрхПлат,зн;
Перем ПутьБД;

Процедура ЗаполнитьБВ() далее
Процедура ОткрытьБД() далее
Процедура ВыбратьПлатежки() далее
Процедура СоздПуть() далее

Процедура ПриОткрытии()
    Режим=2;
    Дата1=РабочаяДата();
    Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=0 Тогда
        СоздПуть();
    КонецЕсли;
    ВыбратьПлатежки();
    //ОткрытьБД("ArhivPLT.dbf");
КонецПроцедуры

Функция Остаток(Контрагент,Сумма)
    тЗаказы = СоздатьОбъект("ТаблицаЗначений");
    ИтЗапр = СоздатьОбъект("БухгалтерскиеИтоги");
    ИтЗапр.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Контрагент,2);
    ИтЗапр.ИспользоватьСубконто(ВидыСубконто.Заказы,,1);
    ИтЗапр.ВыполнитьЗапрос(НачМесяца(Дата1),Дата1,"361",,,,,1);
    Ост = 0;
        ИтЗапр.ВыбратьСубконто(1);
        Если ИтЗапр.ПолучитьСубконто(1,,Контрагент) = 1 Тогда
            ИтЗапр.ВыбратьСубконто(2);
            Пока ИтЗапр.ПолучитьСубконто(2,,) = 1 Цикл
                Ост = (ИтЗапр.СКД() - ИтЗапр.СКК());
                Если (Цел(Ост) = Цел(Число(Сумма))) И (Цел(ИтЗапр.Субконто(2).Итог("СуммаСНДС"))=Цел(Ост)) Тогда
                    Возврат ИтЗапр.Субконто(2);
                КонецЕсли;    
            КонецЦикла;
        КонецЕсли;
    Возврат 0;
    //Возврат СокрЛ(Формат(Ост,"Ч14.2.'"));
КонецФункции

Процедура Помощь()      
Перем Подсказка;
    Если  Режим=1 Тогда          
        Подсказка="Программа может работать в двух режимах:
        |-формировать банковскую выписку за дату, выбранную на форме
        |-переносить оформленные платежные поручения за дату, выбранную на форме, в клиент-банк"+РазделительСтрок+"
        |Удалите из таблицы платежи (строки), которые НЕ желаете включать в будущую банковскую выписку, с помощью кнопки 'Х'
        |Если нужно, используйте кнопку '!' чтобы обновить данные в таблице
        |Кнопка 'ХХ' удаляет все строки из таблицы"+РазделительСтрок+"
        |Затем нажмите кнопку 'Формировать выписку', и в открывшемся документе Вам останется только выбрать заказы";
    Иначе
        Подсказка="Программа может работать в двух режимах:
        |-формировать банковскую выписку за дату, выбранную на форме
        |-переносить оформленные платежные поручения за дату, выбранную на форме, в клиент-банк"+РазделительСтрок+"
        |Удалите из таблицы выписки (строки), которые НЕ желаете переносить в клиент-банк, с помощью кнопки 'Х'
        |Если нужно, используйте кнопку '!' чтобы обновить данные в таблице
        |Успешно выгруженые платежки не отображаются больше в таблице, и выгрузить их повторно в клиент-банк нельзя.
        |Кнопка 'ХХ' удаляет все строки из таблицы"+РазделительСтрок+"
        |Затем нажмите кнопку 'Выгрузить платежки ', запустите клиент-банк и проверьте, правильно ли заполнены Ваши платежки";
    КонецЕсли;
    Предупреждение(Подсказка);
КонецПроцедуры

Процедура ОткрФайл(табл,файл)
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок;
ТекстДок=СоздатьОбъект("Текст");
тВрем.Очистить();
тТест.Очистить();              
    Если файл="" Тогда
        ИмяФайла="";
        ИмяПути ="";
        ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,,,);
        ПутьБД=ИмяПути+ИмяФайла;
    ИначеЕсли ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
        ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
        ПутьБД = СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\"+файл);
        //ПутьБД=файл;
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;

    //Сообщить(ПутьБД);
    Врем.ОткрытьФайл(ПутьБД);
    Если (Врем.Открыта()=0) Тогда
        Предупреждение("Не могу открыть файл "+ПутьБД+"!");
        возврат;
    КонецЕсли;
    //Сообщить("БД:"+Врем.КоличествоПолей());
    Для п=1 по Врем.КоличествоПолей() Цикл
        Врем.ОписаниеПоля(п,ОписПоля,т,д,т1);
        тВрем.НоваяКолонка(ОписПоля,,,,ОписПоля,,,);
    КонецЦикла;
    //Сообщить("Табл:"+тВрем.КоличествоКолонок());
    п=0;
    Врем.Первая();
    Для з=1 по Врем.КоличествоЗаписей() Цикл
        Врем.Перейти(з);
            тВрем.НоваяСтрока(з);
            Для п=1 по Врем.КоличествоПолей() Цикл
                тВрем.УстановитьЗначение(з,п,Врем.ПолучитьЗначениеПоля(п));
            КонецЦикла;
    КонецЦикла;              
    Врем.ЗакрытьФайл();
    тВрем.Выгрузить(Табл);
КонецПроцедуры

Функция ПроверитьДокумент(НомерДок)
Перем тПлат, тАрхПлат;
ОткрФайл(тПлат,"plat.dbf");
ОткрФайл(тАрхПлат,"Detail_Y.dbf");
//тАрхПлат.Выгрузить();
Если тПлат.НайтиЗначение(НомерДок,,"NOMDOK")=1 Тогда
    //тАрхПлат.Выгрузить(тТест);
    Возврат 1;
КонецЕсли;
Если тАрхПлат.НайтиЗначение(НомерДок,,"NOMPLATDOK")=1 Тогда
    Возврат 1;
КонецЕсли;
    Возврат 0;
КонецФункции    


Процедура ВыбратьПлатежки()
    Перем Стр;
    тТест.УдалитьСтроки();
    тТест.НоваяКолонка("NOMDOK",,,, "Номер",,,);
    тТест.НоваяКолонка("DATDOK",,,, "Дата",,,);
    тТест.НоваяКолонка("NAMEPRED",,,, "Плательщик",,,);
    тТест.НоваяКолонка("MFOPRED",,,, "МФО плательщика",,,);
    тТест.НоваяКолонка("NAMEKONTR",,,, "Получатель",,,);
    тТест.НоваяКолонка("MFOKONTR",,,, "МФО получателя",,,);
    тТест.НоваяКолонка("CHETPRED",,,, "Счет плательщика",,,);
    тТест.НоваяКолонка("CHETKONTR",,,, "Счет получателя",,,);
    тТест.НоваяКолонка("OKPOPRED",,,, "ОКПО плательщика",,,);
    тТест.НоваяКолонка("NAZNACH",,,, "Содержание",,,);
    тТест.НоваяКолонка("OKPOKONTR",,,, "ОКПО получателя",,,);
    тТест.НоваяКолонка("SUMMDOK",,,, "Сумма",,,);
    тТест.НоваяКолонка("DATOKUSL",,,, "Дата валютирования",,,);
    стр=0;  

    Док = СоздатьОбъект("Документ.ПлатежноеПоручение");
    Док.ВыбратьДокументы(Дата1,Дата1);
    Пока Док.ПолучитьДокумент()=1 Цикл
        Если (ПроверитьДокумент(Док.НомерДок)=0) И (Док.ПометкаУдаления()=0) Тогда
            стр=стр+1;                                      
            тТест.НоваяСтрока(стр);
            тТест.УстановитьЗначение(стр,"NOMDOK",Док.НомерДок);
            тТест.УстановитьЗначение(стр,"DATDOK",Формат(Док.ДатаДок,"ДГГГГММДД"));
            тТест.УстановитьЗначение(стр,"NAMEPRED",Константа.ОснФирма.Полное_Назв);
            тТест.УстановитьЗначение(стр,"MFOPRED",Число(ВыбСчет.Банк.Код));
            //Если Док.Заказ.Выбран()=1 Тогда
            //    Попытка
                    тТест.УстановитьЗначение(стр,"NAMEKONTR",Док.Контрагент.ПолнНаименование);
                    тТест.УстановитьЗначение(стр,"MFOKONTR",СокрЛП(Док.РСчетКонтрагента.Банк.Код));
                    тТест.УстановитьЗначение(стр,"CHETKONTR",СокрЛП(Док.РСчетКонтрагента.НомерСчета));
                    тТест.УстановитьЗначение(стр,"OKPOKONTR",СокрЛП(Док.Контрагент.ЕДРПОУ));
            //    Исключение
            //    КонецПопытки;    
            //КонецЕсли;
            тТест.УстановитьЗначение(стр,"CHETPRED",Число(ВыбСчет.НомерСчета));
            тТест.УстановитьЗначение(стр,"OKPOPRED",СокрЛП(Константа.ОснФирма.КодОКПО));
            тТест.УстановитьЗначение(стр,"NAZNACH",Док.НазначениеПлатежа.ПолнНаименование);
            тТест.УстановитьЗначение(стр,"SUMMDOK",Формат(Док.СуммаСНДС,"Ч12.2"));
            тТест.УстановитьЗначение(стр,"DATOKUSL","ПРЕДОПЛАТА");
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры    

Процедура СоздПуть()
    ТекстДок=СоздатьОбъект("Текст");
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьКаталог(ИмяПути,"Выберите каталог с базой данных КБ Аваль",)=0 Тогда
        //ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,)=0
            Возврат;
        КонецЕсли;
        //ПутьБД=ИмяПути+ИмяФайла;
        //Сообщить(КаталогПрограммы()+"klbank.ini",);
        Попытка
            ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");     
        Исключение
        КонецПопытки;
        ТекстДок.ВставитьСтроку(1,ИмяПути);
        //Сообщить("Путь "+ИмяПути);
        ТекстДок.Записать(КаталогПрограммы()+"klbank.ini");
КонецПроцедуры    


Процедура СформироватьДБФ()
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок, тПлат;
тПлат = СоздатьОбъект("ТаблицаЗначений");
ТекстДок=СоздатьОбъект("Текст");
    Если ВыбСчет.Выбран()=0 Тогда
        Предупреждение("Расчетный счет не выбран!");
        Возврат;
    КонецЕсли;
    Если тТест.КоличествоСтрок()=0 Тогда
        Предупреждение("Нет платежек!");
        Возврат;
    КонецЕсли;

    Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
        ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
        ПутьБД = СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\plat.dbf");
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,"plat.dbf",,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;
    Если ПустаяСтрока(ПутьБД)=0 Тогда
        Плат.ОткрытьФайл(ПутьБД);
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,"plat.dbf",,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;
    //Сообщить("ПутьБД"+ПутьБД);
    Если (Плат.Открыта()=0) Тогда
        Предупреждение("Не могу открыть файл "+ПутьБД+"!");
        возврат;
    КонецЕсли;
    //********************Сверка с текущим архивом
    //Сообщить(ИмяПути+"\Detail_Y.dbf");
    //АрхПлат.ОткрытьФайл(СокрЛП(ТекстДок.ПолучитьСтроку(1))+"\Detail_Y.dbf");
    //Если (АрхПлат.Открыта()=0) Тогда
    //    Предупреждение("Не могу открыть файл "+ИмяПути+"\Detail_Y.dbf"+"!");
    //    возврат;
    //КонецЕсли;
    //Для п=1 по АрхПлат.КоличествоПолей() Цикл
    //    АрхПлат.ОписаниеПоля(п,ОписПоля,т,д,т1);
    //    тВрем.НоваяКолонка(ОписПоля,,,,ОписПоля,,,);
    //КонецЦикла;                                    
    //АрхПлат.Первая();
    //Для з=1 по АрхПлат.КоличествоЗаписей() Цикл
    //    АрхПлат.Перейти(з);
    //        тВрем.НоваяСтрока(з);
    //        Для п=1 по АрхПлат.КоличествоПолей() Цикл
    //            тВрем.УстановитьЗначение(з,п,АрхПлат.ПолучитьЗначениеПоля(п));
    //        КонецЦикла;
    //КонецЦикла;              
    //АрхПлат.ЗакрытьФайл();
    //Для н=1 по тТест.КоличествоСтрок() Цикл
    //    Если тВрем.НайтиЗначение(тТест.ПолучитьЗначение(н,"NOMDOK"),,"NOMPLATDOK")=0 Тогда
    //        тТест.ТекущаяСтрока(н);
    //        тПлат.ДобавитьСтроку(тТест.ТекущаяСтрока());    
    //    КонецЕсли;
    //КонецЦикла;
    //тПлат.Выгрузить(тТест);
    //возврат;
    //********************Сверка с текущим архивом
    Плат.Последняя();
    Для п=1 по тТест.КоличествоСтрок() Цикл
        Плат.Добавить();
        Плат.NOMDOK=тТест.ПолучитьЗначение(п,"NOMDOK");
        Плат.DATDOK=тТест.ПолучитьЗначение(п,"DATDOK");        
        Плат.NAMEPRED=тТест.ПолучитьЗначение(п,"NAMEPRED");    
        Плат.MFOPRED=тТест.ПолучитьЗначение(п,"MFOPRED");        
        Плат.NAMEKONTR=тТест.ПолучитьЗначение(п,"NAMEKONTR");    
        Плат.MFOKONTR=тТест.ПолучитьЗначение(п,"MFOKONTR");      
        Плат.CHETPRED=тТест.ПолучитьЗначение(п,"CHETPRED");      
        Плат.CHETKONTR=тТест.ПолучитьЗначение(п,"CHETKONTR");    
        Плат.OKPOPRED=тТест.ПолучитьЗначение(п,"OKPOPRED");
        Плат.NAZNACH=тТест.ПолучитьЗначение(п,"NAZNACH");
        Плат.OKPOKONTR=тТест.ПолучитьЗначение(п,"OKPOKONTR");
        Плат.SUMMDOK=тТест.ПолучитьЗначение(п,"SUMMDOK");
        Плат.DATOKUSL=тТест.ПолучитьЗначение(п,"DATOKUSL");
    Плат.Записать();
    КонецЦикла;
    Плат.ЗакрытьФайл();
    тТест.Очистить();
    тПлат.Выгрузить(тТест);
    Предупреждение("Документы успешно выгружены!");
КонецПроцедуры
//***********************************************
Процедура Обраб()  
            Если ВвестиЗначение(зн,"Вибір значення ","Счет.Основной") = 1 Тогда
                  тТест.УстановитьЗначение(тТест.ТекущаяСтрока(),"КоррСчет",зн);
            КонецЕсли;
КонецПроцедуры  
//***********************************************,
Процедура СменаРежима()
    //Сообщить(Режим);
    тТест.Очистить();  
    тДБФ.Очистить();
    Если  Режим=1 Тогда          
        Форма.кнФормироватьВыписки.Видимость(1);
        Форма.кнВыгрузитьПлатежки.Видимость(0);
        ОткрытьБД();
    Иначе
        Форма.кнФормироватьВыписки.Видимость(0);
        Форма.кнВыгрузитьПлатежки.Видимость(1);
        ВыбратьПлатежки();
    КонецЕсли;
КонецПроцедуры
                                      
Процедура Выполнить()
    ЗаполнитьБВ();
КонецПроцедуры

Процедура УдалениеСтроки()
    Если тТест.КоличествоСтрок()>0 Тогда
        тТест.УдалитьСтроку();
    КонецЕсли;
КонецПроцедуры //УдалениеПД
                                
Процедура ОткрытьБД()
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок;
ТекстДок=СоздатьОбъект("Текст");
тТест.Очистить();
    ИмяФайла="";
    ИмяПути ="";
ФайлТекст = СоздатьОбъект("Текст");
файл = "v"+Прав(Формат(Дата1,"ДГГГГММДД"),6)+".zzz";
Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
    ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
//    ПутьБД= СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\"+файл);  
    Путь= СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\");
    ФС.ВыбратьФайл(0,ИмяФайла, Путь, ,файл,,);
    ПутьБД=Путь+ИмяФайла;
Иначе
    ИмяФайла="";
    ИмяПути ="";
    ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,);
    ПутьБД=ИмяПути+ИмяФайла;
КонецЕсли;
    ФайлТекст.КодоваяСтраница(0);
    ФайлТекст.Открыть(ПутьБД);
    Если ФайлТекст.КоличествоСтрок() = 0 Тогда
        Предупреждение("Выписки банка не найдены");
    Возврат;
    КонецЕсли;
    
    тДБФ.НоваяКолонка("NOMDOK",,,, "NOMDOK",,,);
    тДБФ.НоваяКолонка("DATKVOPL",,,, "DATKVOPL",,,);
    тДБФ.НоваяКолонка("CHETPRED","Число",14,, "CHETPRED",,,);
    тДБФ.НоваяКолонка("OKPOKONTR","Строка",10,, "OKPOKONTR",,,);
    тДБФ.НоваяКолонка("NAMEKONTR",,,, "NAMEKONTR",,,);
    тДБФ.НоваяКолонка("SUMMDOK","Число",15,2, "SUMMDOK",,,);
    тДБФ.НоваяКолонка("DEB_KRED","Число",1,, "DEB_KRED",,,);
    тДБФ.НоваяКолонка("NAZNACH",,,, "NAZNACH",,,);
    тДБФ.НоваяКолонка("КоррСчет","Счет.Основной");  
    ррр = 0;
    Для ном=1 по ФайлТекст.КоличествоСтрок() Цикл
        стр = OemToAnsi(ФайлТекст.ПолучитьСтроку(ном));  
    Если Лев(стр,1) = "0" Тогда
        Если (Число(Сред(стр,2,14)) <> Число(ВыбСчет.Номер)) или (Сред(стр,16,8) <> Формат(Дата1,"ДГГГГММДД")) Тогда
//            Сообщить("Ошибка! Проверьте сохранение выписки");
//            Возврат;
    ррр = 0;
        Продолжить;
    КонецЕсли;
    ррр = 1;
        СчетОсн = Число(Сред(стр,2,14));
        ДатаВ = Сред(стр,16,8);
    ИначеЕсли (ррр = 1 ) и (Лев(стр,1) = "1") Тогда    
        Если (Число(Сред(стр,12,14)) <> Число(ВыбСчет.Номер)) и (Число(Сред(стр,89,14)) <> Число(ВыбСчет.Номер)) Тогда  
//            Сообщить("Ошибка! Проверьте сохранение выписки");
//            Возврат;
        Продолжить;
        КонецЕсли;  
        тДБФ.НоваяСтрока(тДБФ.КоличествоСтрок()+1);
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NOMDOK",Сред(стр,159,10));  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DATKVOPL",ДатаВ);  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"CHETPRED",СчетОсн);
        Если Сред(стр,2,1) = "+" Тогда
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"OKPOKONTR",СокрЛ(Сред(стр,26,14)));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NAMEKONTR",Сред(стр,40,40));  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DEB_KRED",1);
        Иначе
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"OKPOKONTR",СокрЛ(Сред(стр,103,14)));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NAMEKONTR",Сред(стр,117,40));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DEB_KRED",0);
        КонецЕсли;
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"SUMMDOK",Число(Сред(стр,169,19))/100);  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NAZNACH",Сред(стр,212,255));  
//        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",Сред(стр,159,10));
        
//        Для з=1 по ДБФ.КоличествоЗаписей() Цикл
//        ДБФ.Перейти(з);    
//       Если ДБФ.ПолучитьЗначениеПоля("CHETPRED") <> Число(ВыбСчет.Номер) Тогда
//        Продолжить;
//        КонецЕсли;
//        Если СокрЛП(ДБФ.ПолучитьЗначениеПоля("DATKVOPL"))=(Формат(Дата1,"ДГГГГММДД")) Тогда
            Назначение=Сред(стр,212,255);  
            Если (Найти(Назначение,"овердрафт")<> 0) Тогда  
                 Продолжить;
            КонецЕсли;
//            тДБФ.НоваяСтрока(тДБФ.КоличествоСтрок()+1);
//            Для п=1 по ДБФ.КоличествоПолей() Цикл
//                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),п,ДБФ.ПолучитьЗначениеПоля(п));
//            КонецЦикла;  
//            Назначение=ДБФ.ПолучитьЗначениеПоля("NAZNACH");
            ДенКасса= Сред(стр,40,40);
        Если (Сред(стр,2,1) = "-") Тогда
              Если (Найти(Назначение,"товар")<> 0) или (Найти(Назначение,"ХАРЧ")<> 0) или (Найти(Назначение,"харч")<> 0)
                  или (Найти(Назначение,"ПРОД")<> 0) или (Найти(Назначение,"прод")<> 0) или (Найти(Назначение,"вироб")<> 0)
                  или (Найти(Назначение,"ТОВАР")<> 0) или (Найти(Назначение,"алког")<> 0) или (Найти(Назначение,"ВИРОБ")<> 0)
                  или (Найти(Назначение,"АЛКОГ")<> 0) или (Найти(Назначение,"тютюн")<> 0) Тогда
                  тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("63.1"));
              КонецЕсли;  
              Если (Найти(Назначение,"ТЮТЮН")<> 0) или (Найти(Назначение,"горіл")<> 0)
                   или (Найти(Назначение,"ГОРІЛ")<> 0) или (Найти(Назначение,"таба")<> 0)
                   или (Найти(Назначение,"ТАБА")<> 0) или (Найти(Назначение,"СИГАР")<> 0)
              или (Найти(Назначение,"ЦИГАР")<> 0) или (Найти(Назначение,"цигар")<> 0)
                   или (Найти(Назначение,"вино")<> 0) или (Найти(Назначение,"пиво")<> 0)
                   или (Найти(Назначение,"сигар")<> 0)Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("63.1"));
              КонецЕсли;
            Если (Найти(Назначение,"Перерахунок кошт")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("31.1"));
            КонецЕсли;
            Если (Найти(Назначение,"Плата за инк")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("95.2"));
            КонецЕсли;
        Иначе
            Если (Найти(Назначение,"товар")<> 0) или (Найти(Назначение,"ХАРЧ")<> 0) или (Найти(Назначение,"харч")<> 0)
              или (Найти(Назначение,"ПРОД")<> 0) или (Найти(Назначение,"прод")<> 0) или (Найти(Назначение,"вироб")<> 0)
              или (Найти(Назначение,"ТОВАР")<> 0) или (Найти(Назначение,"АЛКОГ")<> 0) или (Найти(Назначение,"ВИРОБ")<> 0)
              или (Найти(Назначение,"ТЮТЮН")<> 0) или (Найти(Назначение,"ГОРІЛ")<> 0) или (Найти(Назначение,"ПИВО")<> 0) Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("36.1"));
            КонецЕсли;
            Если (Найти(Назначение,"алког")<> 0) или (Найти(Назначение,"тютюн")<> 0)
              или (Найти(Назначение,"горіл")<> 0) или (Найти(Назначение,"таба")<> 0)
              или (Найти(Назначение,"ТАБА")<> 0) или (Найти(Назначение,"СИГАР")<> 0)  
              или (Найти(Назначение,"ЦИГАР")<> 0) или (Найти(Назначение,"цигар")<> 0)
              или (Найти(Назначение,"сигар")<> 0) или (Найти(Назначение,"вино")<> 0) или (Найти(Назначение,"пиво")<> 0) Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("36.1"));
            КонецЕсли;
            Если ((Найти(Назначение,"вируч")<> 0) или (Найти(Назначение,"ВИРУЧ")<> 0)  или (Найти(Назначение,"Вируч")<> 0)) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("33.3"));
            КонецЕсли;
            Если (Найти(Назначение,"Перерахунок кошт")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("31.1"));
            КонецЕсли;
            Если (Найти(Назначение,"повор")<> 0) или (Найти(Назначение,"ПОВОР")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("30.1"));
            КонецЕсли;
            Если (((Найти(Назначение,"вируч")<> 0) или (Найти(Назначение,"ВИРУЧ")<> 0)  или (Найти(Назначение,"Вируч")<> 0)) и (Найти(ДенКасса,"Центр.")<> 0)) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("30.1"));
            КонецЕсли;
        КонецЕсли;
        КонецЕсли;
    КонецЦикла;              
    
//    ДБФ.ЗакрытьФайл();
    тДБФ.Выгрузить(тТест);
    тТест.Сортировать("DEB_KRED,SUMMDOK");
    Для п=1 по тТест.КоличествоКолонок() Цикл
        тТест.ПолучитьПараметрыКолонки(п,,,,ОписПоля,,,);  
        Если (ОписПоля="КоррСчет") Тогда  
            тТест.УстановитьПараметрыКолонки(п,"Счет.Основной",,,"КоррСчет",6,,);
        ИначеЕсли (ОписПоля="NAMEKONTR") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"Контрагент",16,,);
        ИначеЕсли (ОписПоля="OKPOKONTR") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"ОКПО",8,,);
        ИначеЕсли (ОписПоля="SUMMDOK") Тогда
            тТест.УстановитьПараметрыКолонки(п,"Число",,2,"Сумма",8,"Ч012.2",2);
        ИначеЕсли (ОписПоля="NAZNACH") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"Содержание",30,,);
        Иначе
            тТест.ВидимостьКолонки(Строка(п),0);
        КонецЕсли;
    КонецЦикла;
    
//    КонецЦикла;
КонецПроцедуры    

Процедура ЗаполнитьБВ()
    Перем Контра;
    Если ВыбСчет.Выбран()=0 Тогда
        Предупреждение("Расчетный счет не выбран!");
        Возврат;
    КонецЕсли;
    Если тТест.КоличествоСтрок()=0 Тогда
        Предупреждение("Нет платежей!");
        Возврат;
    КонецЕсли;
    тДБФ.Загрузить(тТест);
    Док = СоздатьОбъект("Документ.ВыпискаБанка");
    спрКонтр = СоздатьОбъект("Справочник.Клиенты");
    тДБФ.Сортировать("DEB_KRED,SUMMDOK");
    Док.Новый();
//    Фирма = глВосстановитьЗначение(,"БазФирма");
    //глУстановитьНомерДокумента(Контекст);
//    глУстановитьНомерДокумента(Док);
//    РСчет = Фирма.РС;
    Док.БанковскийСчет = ВыбСчет;  
    Док.ДатаДок = Дата1;
    Док.Автор=Пользователь;
    Док.Идентификатор="ВыпискаБанка";
    Док.Фирма=Константа.ОснФирма;
    Док.Фирма.ИспользоватьДату(Дата1);
    Док.СчетУчета = ВыбСчет.БухгалтерскийСчет;
//    Док.Субконто.Доступность(1);
Для з=1 по тДБФ.КоличествоСтрок() Цикл  
    Если тДБФ.ПолучитьЗначение(з,"CHETPRED") <> Число(ВыбСчет.Номер) Тогда
        Продолжить;
    КонецЕсли;
    Док.НоваяСтрока();                            
        //Сообщить(тДБФ.ПолучитьЗначение(з,"DEB_KRED"));
        Если (тДБФ.ПолучитьЗначение(з,"DEB_KRED")=1) Тогда
            Док.ПриходРасход = Перечисление.ПлюсМинус.Плюс;            
        Иначе
            Док.ПриходРасход = Перечисление.ПлюсМинус.Минус;            
        КонецЕсли;      
            Док.НазначениеПлатежа = тДБФ.ПолучитьЗначение(з,"NAZNACH");
    // проставляем реквизиты "по умолчанию"
                   Если Док.ПриходРасход = Перечисление.ПлюсМинус.Минус Тогда
                    Док.КоррСчет = тДБФ.ПолучитьЗначение(з,"КоррСчет");
                    Док.ВидДвижения = Перечисление.ВидыДвиженийПоРасчетномуСчету.Списание;
                    Док.Расход = тДБФ.ПолучитьЗначение(з,"SUMMDOK");
                    Док.ВидОплаты = Перечисление.ВидыОплаты.Оплата;
                    Если Док.КоррСчет = СчетПоКоду("36.1") Тогда
                         Док.ВидОплаты = Перечисление.ВидыОплаты.Возврат;
                    КонецЕсли;
                    Если Док.КоррСчет = СчетПоКоду("63.1") Тогда
                         Док.РежимОплатыПоАгенту = Перечисление.РежимыОплатыПоАгентам.АвтораспределениеБезАгента;
                    КонецЕсли;
                Иначе  
                    Док.КоррСчет = тДБФ.ПолучитьЗначение(з,"КоррСчет");
                    Док.ВидДвижения = Перечисление.ВидыДвиженийПоРасчетномуСчету.Поступление;
                    Док.Приход = тДБФ.ПолучитьЗначение(з,"SUMMDOK");  
                    Док.ВидОплаты = Перечисление.ВидыОплаты.Оплата;
                    Если Док.КоррСчет = СчетПоКоду("63.1") Тогда
                         Док.ВидОплаты = Перечисление.ВидыОплаты.Возврат;
                    КонецЕсли;
                    Если Док.КоррСчет = СчетПоКоду("36.1") Тогда
                         Док.РежимОплатыПоАгенту = Перечисление.РежимыОплатыПоАгентам.АвтораспределениеБезАгента;
                         Док.НДС = Док.Приход/6;
                    КонецЕсли;
                КонецЕсли;
        Док.НазначитьТип("Субконто1", Док.КоррСчет.ВидСубконто(1));
        Док.НазначитьТип("Субконто2", Док.КоррСчет.ВидСубконто(2));
        Док.НазначитьТип("Субконто3", Док.КоррСчет.ВидСубконто(3));

        Контра=тДБФ.ПолучитьЗначение(з,"NAMEKONTR");
        КонтраКод=тДБФ.ПолучитьЗначение(з,"OKPOKONTR");
        Док.НомерПлатДок=тДБФ.ПолучитьЗначение(з,"NOMDOK");
        Если Док.КоррСчет.ВидСубконто(1) = ВидыСубконто.Фирмы Тогда  
            Док.Субконто1 = Константа.ОснФирма;
        КонецЕсли;
        Если Док.КоррСчет.ВидСубконто(1) = ВидыСубконто.Контрагенты Тогда
        спрКонтр.ИспользоватьДату(ТекущаяДата());
        Если спрКонтр.НайтиПоРеквизиту("КодОКПО",КонтраКод,1)=1 Тогда
             Если спрКонтр.ПометкаУдаления() = 1 Тогда
            Вар = Вопрос("Контрагент "+СокрЛП(Контра)+(КонтраКод)+Док.НазначениеПлатежа+" Помечен на удаление. Выбрать его из справочника вручную?",3);
            Если Вар=6 Тогда  
                спрКонтр.Выбрать("","ФормаСписка");
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;  
            ИначеЕсли Вар=2 Тогда
                прервать;
            КонецЕсли;                                        
            Иначе    
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;
            КонецЕсли;
        ИначеЕсли ПустаяСтрока(Контра)=0 Тогда
            Вар = Вопрос("Контрагент "+СокрЛП(Контра)+(КонтраКод)+Док.НазначениеПлатежа+" не найден. Выбрать его из справочника вручную?",3);
            Если Вар=6 Тогда  
                спрКонтр.Выбрать("","ФормаСписка");
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;
            ИначеЕсли Вар=2 Тогда
                прервать;
            КонецЕсли;                                        
        Иначе
КонецЕсли;
КонецЕсли;  
КонецЦикла;    
//       Форма.Закрыть();  
        НачатьТранзакцию();
           Док.Записать();
        ЗафиксироватьТранзакцию();
       ОткрытьФорму(Док.ТекущийДокумент(),0);
КонецПроцедуры

ДБФ = СоздатьОбъект("XBase");
Плат = СоздатьОбъект("XBase");
Врем = СоздатьОбъект("XBase");
АрхПлат = СоздатьОбъект("XBase");
тДБФ = СоздатьОбъект("ТаблицаЗначений");  
тВрем = СоздатьОбъект("ТаблицаЗначений");
тПлат = СоздатьОбъект("ТаблицаЗначений");
тАрхПлат = СоздатьОбъект("ТаблицаЗначений"); [/hide]

Процедура ПриОткрытии()
    Режим=2;
    Дата1=РабочаяДата();
    Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=0 Тогда
        СоздПуть();
    КонецЕсли;
    ВыбратьПлатежки();
    //ОткрытьБД("ArhivPLT.dbf");
КонецПроцедуры

Функция Остаток(Контрагент,Сумма)
    тЗаказы = СоздатьОбъект("ТаблицаЗначений");
    ИтЗапр = СоздатьОбъект("БухгалтерскиеИтоги");
    ИтЗапр.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Контрагент,2);
    ИтЗапр.ИспользоватьСубконто(ВидыСубконто.Заказы,,1);
    ИтЗапр.ВыполнитьЗапрос(НачМесяца(Дата1),Дата1,"361",,,,,1);
    Ост = 0;
        ИтЗапр.ВыбратьСубконто(1);
        Если ИтЗапр.ПолучитьСубконто(1,,Контрагент) = 1 Тогда
            ИтЗапр.ВыбратьСубконто(2);
            Пока ИтЗапр.ПолучитьСубконто(2,,) = 1 Цикл
                Ост = (ИтЗапр.СКД() - ИтЗапр.СКК());
                Если (Цел(Ост) = Цел(Число(Сумма))) И (Цел(ИтЗапр.Субконто(2).Итог("СуммаСНДС"))=Цел(Ост)) Тогда
                    Возврат ИтЗапр.Субконто(2);
                КонецЕсли;    
            КонецЦикла;
        КонецЕсли;
    Возврат 0;
    //Возврат СокрЛ(Формат(Ост,"Ч14.2.'"));
КонецФункции

Процедура Помощь()      
Перем Подсказка;
    Если  Режим=1 Тогда          
        Подсказка="Программа может работать в двух режимах:
        |-формировать банковскую выписку за дату, выбранную на форме
        |-переносить оформленные платежные поручения за дату, выбранную на форме, в клиент-банк"+РазделительСтрок+"
        |Удалите из таблицы платежи (строки), которые НЕ желаете включать в будущую банковскую выписку, с помощью кнопки 'Х'
        |Если нужно, используйте кнопку '!' чтобы обновить данные в таблице
        |Кнопка 'ХХ' удаляет все строки из таблицы"+РазделительСтрок+"
        |Затем нажмите кнопку 'Формировать выписку', и в открывшемся документе Вам останется только выбрать заказы";
    Иначе
        Подсказка="Программа может работать в двух режимах:
        |-формировать банковскую выписку за дату, выбранную на форме
        |-переносить оформленные платежные поручения за дату, выбранную на форме, в клиент-банк"+РазделительСтрок+"
        |Удалите из таблицы выписки (строки), которые НЕ желаете переносить в клиент-банк, с помощью кнопки 'Х'
        |Если нужно, используйте кнопку '!' чтобы обновить данные в таблице
        |Успешно выгруженые платежки не отображаются больше в таблице, и выгрузить их повторно в клиент-банк нельзя.
        |Кнопка 'ХХ' удаляет все строки из таблицы"+РазделительСтрок+"
        |Затем нажмите кнопку 'Выгрузить платежки ', запустите клиент-банк и проверьте, правильно ли заполнены Ваши платежки";
    КонецЕсли;
    Предупреждение(Подсказка);
КонецПроцедуры

Процедура ОткрФайл(табл,файл)
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок;
ТекстДок=СоздатьОбъект("Текст");
тВрем.Очистить();
тТест.Очистить();              
    Если файл="" Тогда
        ИмяФайла="";
        ИмяПути ="";
        ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,,,);
        ПутьБД=ИмяПути+ИмяФайла;
    ИначеЕсли ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
        ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
        ПутьБД = СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\"+файл);
        //ПутьБД=файл;
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;

    //Сообщить(ПутьБД);
    Врем.ОткрытьФайл(ПутьБД);
    Если (Врем.Открыта()=0) Тогда
        Предупреждение("Не могу открыть файл "+ПутьБД+"!");
        возврат;
    КонецЕсли;
    //Сообщить("БД:"+Врем.КоличествоПолей());
    Для п=1 по Врем.КоличествоПолей() Цикл
        Врем.ОписаниеПоля(п,ОписПоля,т,д,т1);
        тВрем.НоваяКолонка(ОписПоля,,,,ОписПоля,,,);
    КонецЦикла;
    //Сообщить("Табл:"+тВрем.КоличествоКолонок());
    п=0;
    Врем.Первая();
    Для з=1 по Врем.КоличествоЗаписей() Цикл
        Врем.Перейти(з);
            тВрем.НоваяСтрока(з);
            Для п=1 по Врем.КоличествоПолей() Цикл
                тВрем.УстановитьЗначение(з,п,Врем.ПолучитьЗначениеПоля(п));
            КонецЦикла;
    КонецЦикла;              
    Врем.ЗакрытьФайл();
    тВрем.Выгрузить(Табл);
КонецПроцедуры

Функция ПроверитьДокумент(НомерДок)
Перем тПлат, тАрхПлат;
ОткрФайл(тПлат,"plat.dbf");
ОткрФайл(тАрхПлат,"Detail_Y.dbf");
//тАрхПлат.Выгрузить();
Если тПлат.НайтиЗначение(НомерДок,,"NOMDOK")=1 Тогда
    //тАрхПлат.Выгрузить(тТест);
    Возврат 1;
КонецЕсли;
Если тАрхПлат.НайтиЗначение(НомерДок,,"NOMPLATDOK")=1 Тогда
    Возврат 1;
КонецЕсли;
    Возврат 0;
КонецФункции    


Процедура ВыбратьПлатежки()
    Перем Стр;
    тТест.УдалитьСтроки();
    тТест.НоваяКолонка("NOMDOK",,,, "Номер",,,);
    тТест.НоваяКолонка("DATDOK",,,, "Дата",,,);
    тТест.НоваяКолонка("NAMEPRED",,,, "Плательщик",,,);
    тТест.НоваяКолонка("MFOPRED",,,, "МФО плательщика",,,);
    тТест.НоваяКолонка("NAMEKONTR",,,, "Получатель",,,);
    тТест.НоваяКолонка("MFOKONTR",,,, "МФО получателя",,,);
    тТест.НоваяКолонка("CHETPRED",,,, "Счет плательщика",,,);
    тТест.НоваяКолонка("CHETKONTR",,,, "Счет получателя",,,);
    тТест.НоваяКолонка("OKPOPRED",,,, "ОКПО плательщика",,,);
    тТест.НоваяКолонка("NAZNACH",,,, "Содержание",,,);
    тТест.НоваяКолонка("OKPOKONTR",,,, "ОКПО получателя",,,);
    тТест.НоваяКолонка("SUMMDOK",,,, "Сумма",,,);
    тТест.НоваяКолонка("DATOKUSL",,,, "Дата валютирования",,,);
    стр=0;  

    Док = СоздатьОбъект("Документ.ПлатежноеПоручение");
    Док.ВыбратьДокументы(Дата1,Дата1);
    Пока Док.ПолучитьДокумент()=1 Цикл
        Если (ПроверитьДокумент(Док.НомерДок)=0) И (Док.ПометкаУдаления()=0) Тогда
            стр=стр+1;                                      
            тТест.НоваяСтрока(стр);
            тТест.УстановитьЗначение(стр,"NOMDOK",Док.НомерДок);
            тТест.УстановитьЗначение(стр,"DATDOK",Формат(Док.ДатаДок,"ДГГГГММДД"));
            тТест.УстановитьЗначение(стр,"NAMEPRED",Константа.ОснФирма.Полное_Назв);
            тТест.УстановитьЗначение(стр,"MFOPRED",Число(ВыбСчет.Банк.Код));
            //Если Док.Заказ.Выбран()=1 Тогда
            //    Попытка
                    тТест.УстановитьЗначение(стр,"NAMEKONTR",Док.Контрагент.ПолнНаименование);
                    тТест.УстановитьЗначение(стр,"MFOKONTR",СокрЛП(Док.РСчетКонтрагента.Банк.Код));
                    тТест.УстановитьЗначение(стр,"CHETKONTR",СокрЛП(Док.РСчетКонтрагента.НомерСчета));
                    тТест.УстановитьЗначение(стр,"OKPOKONTR",СокрЛП(Док.Контрагент.ЕДРПОУ));
            //    Исключение
            //    КонецПопытки;    
            //КонецЕсли;
            тТест.УстановитьЗначение(стр,"CHETPRED",Число(ВыбСчет.НомерСчета));
            тТест.УстановитьЗначение(стр,"OKPOPRED",СокрЛП(Константа.ОснФирма.КодОКПО));
            тТест.УстановитьЗначение(стр,"NAZNACH",Док.НазначениеПлатежа.ПолнНаименование);
            тТест.УстановитьЗначение(стр,"SUMMDOK",Формат(Док.СуммаСНДС,"Ч12.2"));
            тТест.УстановитьЗначение(стр,"DATOKUSL","ПРЕДОПЛАТА");
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры    

Процедура СоздПуть()
    ТекстДок=СоздатьОбъект("Текст");
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьКаталог(ИмяПути,"Выберите каталог с базой данных КБ Аваль",)=0 Тогда
        //ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,)=0
            Возврат;
        КонецЕсли;
        //ПутьБД=ИмяПути+ИмяФайла;
        //Сообщить(КаталогПрограммы()+"klbank.ini",);
        Попытка
            ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");     
        Исключение
        КонецПопытки;
        ТекстДок.ВставитьСтроку(1,ИмяПути);
        //Сообщить("Путь "+ИмяПути);
        ТекстДок.Записать(КаталогПрограммы()+"klbank.ini");
КонецПроцедуры    


Процедура СформироватьДБФ()
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок, тПлат;
тПлат = СоздатьОбъект("ТаблицаЗначений");
ТекстДок=СоздатьОбъект("Текст");
    Если ВыбСчет.Выбран()=0 Тогда
        Предупреждение("Расчетный счет не выбран!");
        Возврат;
    КонецЕсли;
    Если тТест.КоличествоСтрок()=0 Тогда
        Предупреждение("Нет платежек!");
        Возврат;
    КонецЕсли;

    Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
        ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
        ПутьБД = СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\plat.dbf");
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,"plat.dbf",,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;
    Если ПустаяСтрока(ПутьБД)=0 Тогда
        Плат.ОткрытьФайл(ПутьБД);
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,"plat.dbf",,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;
    //Сообщить("ПутьБД"+ПутьБД);
    Если (Плат.Открыта()=0) Тогда
        Предупреждение("Не могу открыть файл "+ПутьБД+"!");
        возврат;
    КонецЕсли;
    //********************Сверка с текущим архивом
    //Сообщить(ИмяПути+"\Detail_Y.dbf");
    //АрхПлат.ОткрытьФайл(СокрЛП(ТекстДок.ПолучитьСтроку(1))+"\Detail_Y.dbf");
    //Если (АрхПлат.Открыта()=0) Тогда
    //    Предупреждение("Не могу открыть файл "+ИмяПути+"\Detail_Y.dbf"+"!");
    //    возврат;
    //КонецЕсли;
    //Для п=1 по АрхПлат.КоличествоПолей() Цикл
    //    АрхПлат.ОписаниеПоля(п,ОписПоля,т,д,т1);
    //    тВрем.НоваяКолонка(ОписПоля,,,,ОписПоля,,,);
    //КонецЦикла;                                    
    //АрхПлат.Первая();
    //Для з=1 по АрхПлат.КоличествоЗаписей() Цикл
    //    АрхПлат.Перейти(з);
    //        тВрем.НоваяСтрока(з);
    //        Для п=1 по АрхПлат.КоличествоПолей() Цикл
    //            тВрем.УстановитьЗначение(з,п,АрхПлат.ПолучитьЗначениеПоля(п));
    //        КонецЦикла;
    //КонецЦикла;              
    //АрхПлат.ЗакрытьФайл();
    //Для н=1 по тТест.КоличествоСтрок() Цикл
    //    Если тВрем.НайтиЗначение(тТест.ПолучитьЗначение(н,"NOMDOK"),,"NOMPLATDOK")=0 Тогда
    //        тТест.ТекущаяСтрока(н);
    //        тПлат.ДобавитьСтроку(тТест.ТекущаяСтрока());    
    //    КонецЕсли;
    //КонецЦикла;
    //тПлат.Выгрузить(тТест);
    //возврат;
    //********************Сверка с текущим архивом
    Плат.Последняя();
    Для п=1 по тТест.КоличествоСтрок() Цикл
        Плат.Добавить();
        Плат.NOMDOK=тТест.ПолучитьЗначение(п,"NOMDOK");
        Плат.DATDOK=тТест.ПолучитьЗначение(п,"DATDOK");        
        Плат.NAMEPRED=тТест.ПолучитьЗначение(п,"NAMEPRED");    
        Плат.MFOPRED=тТест.ПолучитьЗначение(п,"MFOPRED");        
        Плат.NAMEKONTR=тТест.ПолучитьЗначение(п,"NAMEKONTR");    
        Плат.MFOKONTR=тТест.ПолучитьЗначение(п,"MFOKONTR");      
        Плат.CHETPRED=тТест.ПолучитьЗначение(п,"CHETPRED");      
        Плат.CHETKONTR=тТест.ПолучитьЗначение(п,"CHETKONTR");    
        Плат.OKPOPRED=тТест.ПолучитьЗначение(п,"OKPOPRED");
        Плат.NAZNACH=тТест.ПолучитьЗначение(п,"NAZNACH");
        Плат.OKPOKONTR=тТест.ПолучитьЗначение(п,"OKPOKONTR");
        Плат.SUMMDOK=тТест.ПолучитьЗначение(п,"SUMMDOK");
        Плат.DATOKUSL=тТест.ПолучитьЗначение(п,"DATOKUSL");
    Плат.Записать();
    КонецЦикла;
    Плат.ЗакрытьФайл();
    тТест.Очистить();
    тПлат.Выгрузить(тТест);
    Предупреждение("Документы успешно выгружены!");
КонецПроцедуры
//***********************************************
Процедура Обраб()  
            Если ВвестиЗначение(зн,"Вибір значення ","Счет.Основной") = 1 Тогда
                  тТест.УстановитьЗначение(тТест.ТекущаяСтрока(),"КоррСчет",зн);
            КонецЕсли;
КонецПроцедуры  
//***********************************************,
Процедура СменаРежима()
    //Сообщить(Режим);
    тТест.Очистить();  
    тДБФ.Очистить();
    Если  Режим=1 Тогда          
        Форма.кнФормироватьВыписки.Видимость(1);
        Форма.кнВыгрузитьПлатежки.Видимость(0);
        ОткрытьБД();
    Иначе
        Форма.кнФормироватьВыписки.Видимость(0);
        Форма.кнВыгрузитьПлатежки.Видимость(1);
        ВыбратьПлатежки();
    КонецЕсли;
КонецПроцедуры
                                      
Процедура Выполнить()
    ЗаполнитьБВ();
КонецПроцедуры

Процедура УдалениеСтроки()
    Если тТест.КоличествоСтрок()>0 Тогда
        тТест.УдалитьСтроку();
    КонецЕсли;
КонецПроцедуры //УдалениеПД
                                
Процедура ОткрытьБД()
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок;
ТекстДок=СоздатьОбъект("Текст");
тТест.Очистить();
    ИмяФайла="";
    ИмяПути ="";
ФайлТекст = СоздатьОбъект("Текст");
файл = "v"+Прав(Формат(Дата1,"ДГГГГММДД"),6)+".zzz";
Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
    ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
//    ПутьБД= СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\"+файл);  
    Путь= СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\");
    ФС.ВыбратьФайл(0,ИмяФайла, Путь, ,файл,,);
    ПутьБД=Путь+ИмяФайла;
Иначе
    ИмяФайла="";
    ИмяПути ="";
    ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,);
    ПутьБД=ИмяПути+ИмяФайла;
КонецЕсли;
    ФайлТекст.КодоваяСтраница(0);
    ФайлТекст.Открыть(ПутьБД);
    Если ФайлТекст.КоличествоСтрок() = 0 Тогда
        Предупреждение("Выписки банка не найдены");
    Возврат;
    КонецЕсли;
    
    тДБФ.НоваяКолонка("NOMDOK",,,, "NOMDOK",,,);
    тДБФ.НоваяКолонка("DATKVOPL",,,, "DATKVOPL",,,);
    тДБФ.НоваяКолонка("CHETPRED","Число",14,, "CHETPRED",,,);
    тДБФ.НоваяКолонка("OKPOKONTR","Строка",10,, "OKPOKONTR",,,);
    тДБФ.НоваяКолонка("NAMEKONTR",,,, "NAMEKONTR",,,);
    тДБФ.НоваяКолонка("SUMMDOK","Число",15,2, "SUMMDOK",,,);
    тДБФ.НоваяКолонка("DEB_KRED","Число",1,, "DEB_KRED",,,);
    тДБФ.НоваяКолонка("NAZNACH",,,, "NAZNACH",,,);
    тДБФ.НоваяКолонка("КоррСчет","Счет.Основной");  
    ррр = 0;
    Для ном=1 по ФайлТекст.КоличествоСтрок() Цикл
        стр = OemToAnsi(ФайлТекст.ПолучитьСтроку(ном));  
    Если Лев(стр,1) = "0" Тогда
        Если (Число(Сред(стр,2,14)) <> Число(ВыбСчет.Номер)) или (Сред(стр,16,8) <> Формат(Дата1,"ДГГГГММДД")) Тогда
//            Сообщить("Ошибка! Проверьте сохранение выписки");
//            Возврат;
    ррр = 0;
        Продолжить;
    КонецЕсли;
    ррр = 1;
        СчетОсн = Число(Сред(стр,2,14));
        ДатаВ = Сред(стр,16,8);
    ИначеЕсли (ррр = 1 ) и (Лев(стр,1) = "1") Тогда    
        Если (Число(Сред(стр,12,14)) <> Число(ВыбСчет.Номер)) и (Число(Сред(стр,89,14)) <> Число(ВыбСчет.Номер)) Тогда  
//            Сообщить("Ошибка! Проверьте сохранение выписки");
//            Возврат;
        Продолжить;
        КонецЕсли;  
        тДБФ.НоваяСтрока(тДБФ.КоличествоСтрок()+1);
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NOMDOK",Сред(стр,159,10));  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DATKVOPL",ДатаВ);  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"CHETPRED",СчетОсн);
        Если Сред(стр,2,1) = "+" Тогда
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"OKPOKONTR",СокрЛ(Сред(стр,26,14)));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NAMEKONTR",Сред(стр,40,40));  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DEB_KRED",1);
        Иначе
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"OKPOKONTR",СокрЛ(Сред(стр,103,14)));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NAMEKONTR",Сред(стр,117,40));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DEB_KRED",0);
        КонецЕсли;
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"SUMMDOK",Число(Сред(стр,169,19))/100);  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NAZNACH",Сред(стр,212,255));  
//        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",Сред(стр,159,10));
        
//        Для з=1 по ДБФ.КоличествоЗаписей() Цикл
//        ДБФ.Перейти(з);    
//       Если ДБФ.ПолучитьЗначениеПоля("CHETPRED") <> Число(ВыбСчет.Номер) Тогда
//        Продолжить;
//        КонецЕсли;
//        Если СокрЛП(ДБФ.ПолучитьЗначениеПоля("DATKVOPL"))=(Формат(Дата1,"ДГГГГММДД")) Тогда
            Назначение=Сред(стр,212,255);  
            Если (Найти(Назначение,"овердрафт")<> 0) Тогда  
                 Продолжить;
            КонецЕсли;
//            тДБФ.НоваяСтрока(тДБФ.КоличествоСтрок()+1);
//            Для п=1 по ДБФ.КоличествоПолей() Цикл
//                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),п,ДБФ.ПолучитьЗначениеПоля(п));
//            КонецЦикла;  
//            Назначение=ДБФ.ПолучитьЗначениеПоля("NAZNACH");
            ДенКасса= Сред(стр,40,40);
        Если (Сред(стр,2,1) = "-") Тогда
              Если (Найти(Назначение,"товар")<> 0) или (Найти(Назначение,"ХАРЧ")<> 0) или (Найти(Назначение,"харч")<> 0)
                  или (Найти(Назначение,"ПРОД")<> 0) или (Найти(Назначение,"прод")<> 0) или (Найти(Назначение,"вироб")<> 0)
                  или (Найти(Назначение,"ТОВАР")<> 0) или (Найти(Назначение,"алког")<> 0) или (Найти(Назначение,"ВИРОБ")<> 0)
                  или (Найти(Назначение,"АЛКОГ")<> 0) или (Найти(Назначение,"тютюн")<> 0) Тогда
                  тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("63.1"));
              КонецЕсли;  
              Если (Найти(Назначение,"ТЮТЮН")<> 0) или (Найти(Назначение,"горіл")<> 0)
                   или (Найти(Назначение,"ГОРІЛ")<> 0) или (Найти(Назначение,"таба")<> 0)
                   или (Найти(Назначение,"ТАБА")<> 0) или (Найти(Назначение,"СИГАР")<> 0)
              или (Найти(Назначение,"ЦИГАР")<> 0) или (Найти(Назначение,"цигар")<> 0)
                   или (Найти(Назначение,"вино")<> 0) или (Найти(Назначение,"пиво")<> 0)
                   или (Найти(Назначение,"сигар")<> 0)Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("63.1"));
              КонецЕсли;
            Если (Найти(Назначение,"Перерахунок кошт")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("31.1"));
            КонецЕсли;
            Если (Найти(Назначение,"Плата за инк")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("95.2"));
            КонецЕсли;
        Иначе
            Если (Найти(Назначение,"товар")<> 0) или (Найти(Назначение,"ХАРЧ")<> 0) или (Найти(Назначение,"харч")<> 0)
              или (Найти(Назначение,"ПРОД")<> 0) или (Найти(Назначение,"прод")<> 0) или (Найти(Назначение,"вироб")<> 0)
              или (Найти(Назначение,"ТОВАР")<> 0) или (Найти(Назначение,"АЛКОГ")<> 0) или (Найти(Назначение,"ВИРОБ")<> 0)
              или (Найти(Назначение,"ТЮТЮН")<> 0) или (Найти(Назначение,"ГОРІЛ")<> 0) или (Найти(Назначение,"ПИВО")<> 0) Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("36.1"));
            КонецЕсли;
            Если (Найти(Назначение,"алког")<> 0) или (Найти(Назначение,"тютюн")<> 0)
              или (Найти(Назначение,"горіл")<> 0) или (Найти(Назначение,"таба")<> 0)
              или (Найти(Назначение,"ТАБА")<> 0) или (Найти(Назначение,"СИГАР")<> 0)  
              или (Найти(Назначение,"ЦИГАР")<> 0) или (Найти(Назначение,"цигар")<> 0)
              или (Найти(Назначение,"сигар")<> 0) или (Найти(Назначение,"вино")<> 0) или (Найти(Назначение,"пиво")<> 0) Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("36.1"));
            КонецЕсли;
            Если ((Найти(Назначение,"вируч")<> 0) или (Найти(Назначение,"ВИРУЧ")<> 0)  или (Найти(Назначение,"Вируч")<> 0)) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("33.3"));
            КонецЕсли;
            Если (Найти(Назначение,"Перерахунок кошт")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("31.1"));
            КонецЕсли;
            Если (Найти(Назначение,"повор")<> 0) или (Найти(Назначение,"ПОВОР")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("30.1"));
            КонецЕсли;
            Если (((Найти(Назначение,"вируч")<> 0) или (Найти(Назначение,"ВИРУЧ")<> 0)  или (Найти(Назначение,"Вируч")<> 0)) и (Найти(ДенКасса,"Центр.")<> 0)) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("30.1"));
            КонецЕсли;
        КонецЕсли;
        КонецЕсли;
    КонецЦикла;              
    
//    ДБФ.ЗакрытьФайл();
    тДБФ.Выгрузить(тТест);
    тТест.Сортировать("DEB_KRED,SUMMDOK");
    Для п=1 по тТест.КоличествоКолонок() Цикл
        тТест.ПолучитьПараметрыКолонки(п,,,,ОписПоля,,,);  
        Если (ОписПоля="КоррСчет") Тогда  
            тТест.УстановитьПараметрыКолонки(п,"Счет.Основной",,,"КоррСчет",6,,);
        ИначеЕсли (ОписПоля="NAMEKONTR") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"Контрагент",16,,);
        ИначеЕсли (ОписПоля="OKPOKONTR") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"ОКПО",8,,);
        ИначеЕсли (ОписПоля="SUMMDOK") Тогда
            тТест.УстановитьПараметрыКолонки(п,"Число",,2,"Сумма",8,"Ч012.2",2);
        ИначеЕсли (ОписПоля="NAZNACH") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"Содержание",30,,);
        Иначе
            тТест.ВидимостьКолонки(Строка(п),0);
        КонецЕсли;
    КонецЦикла;
    
//    КонецЦикла;
КонецПроцедуры    

Процедура ЗаполнитьБВ()
    Перем Контра;
    Если ВыбСчет.Выбран()=0 Тогда
        Предупреждение("Расчетный счет не выбран!");
        Возврат;
    КонецЕсли;
    Если тТест.КоличествоСтрок()=0 Тогда
        Предупреждение("Нет платежей!");
        Возврат;
    КонецЕсли;
    тДБФ.Загрузить(тТест);
    Док = СоздатьОбъект("Документ.ВыпискаБанка");
    спрКонтр = СоздатьОбъект("Справочник.Клиенты");
    тДБФ.Сортировать("DEB_KRED,SUMMDOK");
    Док.Новый();
//    Фирма = глВосстановитьЗначение(,"БазФирма");
    //глУстановитьНомерДокумента(Контекст);
//    глУстановитьНомерДокумента(Док);
//    РСчет = Фирма.РС;
    Док.БанковскийСчет = ВыбСчет;  
    Док.ДатаДок = Дата1;
    Док.Автор=Пользователь;
    Док.Идентификатор="ВыпискаБанка";
    Док.Фирма=Константа.ОснФирма;
    Док.Фирма.ИспользоватьДату(Дата1);
    Док.СчетУчета = ВыбСчет.БухгалтерскийСчет;
//    Док.Субконто.Доступность(1);
Для з=1 по тДБФ.КоличествоСтрок() Цикл  
    Если тДБФ.ПолучитьЗначение(з,"CHETPRED") <> Число(ВыбСчет.Номер) Тогда
        Продолжить;
    КонецЕсли;
    Док.НоваяСтрока();                            
        //Сообщить(тДБФ.ПолучитьЗначение(з,"DEB_KRED"));
        Если (тДБФ.ПолучитьЗначение(з,"DEB_KRED")=1) Тогда
            Док.ПриходРасход = Перечисление.ПлюсМинус.Плюс;            
        Иначе
            Док.ПриходРасход = Перечисление.ПлюсМинус.Минус;            
        КонецЕсли;      
            Док.НазначениеПлатежа = тДБФ.ПолучитьЗначение(з,"NAZNACH");
    // проставляем реквизиты "по умолчанию"
                   Если Док.ПриходРасход = Перечисление.ПлюсМинус.Минус Тогда
                    Док.КоррСчет = тДБФ.ПолучитьЗначение(з,"КоррСчет");
                    Док.ВидДвижения = Перечисление.ВидыДвиженийПоРасчетномуСчету.Списание;
                    Док.Расход = тДБФ.ПолучитьЗначение(з,"SUMMDOK");
                    Док.ВидОплаты = Перечисление.ВидыОплаты.Оплата;
                    Если Док.КоррСчет = СчетПоКоду("36.1") Тогда
                         Док.ВидОплаты = Перечисление.ВидыОплаты.Возврат;
                    КонецЕсли;
                    Если Док.КоррСчет = СчетПоКоду("63.1") Тогда
                         Док.РежимОплатыПоАгенту = Перечисление.РежимыОплатыПоАгентам.АвтораспределениеБезАгента;
                    КонецЕсли;
                Иначе  
                    Док.КоррСчет = тДБФ.ПолучитьЗначение(з,"КоррСчет");
                    Док.ВидДвижения = Перечисление.ВидыДвиженийПоРасчетномуСчету.Поступление;
                    Док.Приход = тДБФ.ПолучитьЗначение(з,"SUMMDOK");  
                    Док.ВидОплаты = Перечисление.ВидыОплаты.Оплата;
                    Если Док.КоррСчет = СчетПоКоду("63.1") Тогда
                         Док.ВидОплаты = Перечисление.ВидыОплаты.Возврат;
                    КонецЕсли;
                    Если Док.КоррСчет = СчетПоКоду("36.1") Тогда
                         Док.РежимОплатыПоАгенту = Перечисление.РежимыОплатыПоАгентам.АвтораспределениеБезАгента;
                         Док.НДС = Док.Приход/6;
                    КонецЕсли;
                КонецЕсли;
        Док.НазначитьТип("Субконто1", Док.КоррСчет.ВидСубконто(1));
        Док.НазначитьТип("Субконто2", Док.КоррСчет.ВидСубконто(2));
        Док.НазначитьТип("Субконто3", Док.КоррСчет.ВидСубконто(3));

        Контра=тДБФ.ПолучитьЗначение(з,"NAMEKONTR");
        КонтраКод=тДБФ.ПолучитьЗначение(з,"OKPOKONTR");
        Док.НомерПлатДок=тДБФ.ПолучитьЗначение(з,"NOMDOK");
        Если Док.КоррСчет.ВидСубконто(1) = ВидыСубконто.Фирмы Тогда  
            Док.Субконто1 = Константа.ОснФирма;
        КонецЕсли;
        Если Док.КоррСчет.ВидСубконто(1) = ВидыСубконто.Контрагенты Тогда
        спрКонтр.ИспользоватьДату(ТекущаяДата());
        Если спрКонтр.НайтиПоРеквизиту("КодОКПО",КонтраКод,1)=1 Тогда
             Если спрКонтр.ПометкаУдаления() = 1 Тогда
            Вар = Вопрос("Контрагент "+СокрЛП(Контра)+(КонтраКод)+Док.НазначениеПлатежа+" Помечен на удаление. Выбрать его из справочника вручную?",3);
            Если Вар=6 Тогда  
                спрКонтр.Выбрать("","ФормаСписка");
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;  
            ИначеЕсли Вар=2 Тогда
                прервать;
            КонецЕсли;                                        
            Иначе    
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;
            КонецЕсли;
        ИначеЕсли ПустаяСтрока(Контра)=0 Тогда
            Вар = Вопрос("Контрагент "+СокрЛП(Контра)+(КонтраКод)+Док.НазначениеПлатежа+" не найден. Выбрать его из справочника вручную?",3);
            Если Вар=6 Тогда  
                спрКонтр.Выбрать("","ФормаСписка");
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;
            ИначеЕсли Вар=2 Тогда
                прервать;
            КонецЕсли;                                        
        Иначе
КонецЕсли;
КонецЕсли;  
КонецЦикла;    
//       Форма.Закрыть();  
        НачатьТранзакцию();
           Док.Записать();
        ЗафиксироватьТранзакцию();
       ОткрытьФорму(Док.ТекущийДокумент(),0);
КонецПроцедуры

ДБФ = СоздатьОбъект("XBase");
Плат = СоздатьОбъект("XBase");
Врем = СоздатьОбъект("XBase");
АрхПлат = СоздатьОбъект("XBase");
тДБФ = СоздатьОбъект("ТаблицаЗначений");  
тВрем = СоздатьОбъект("ТаблицаЗначений");
тПлат = СоздатьОбъект("ТаблицаЗначений");
тАрхПлат = СоздатьОбъект("ТаблицаЗначений");


как стало
Тыц
//*******************************************
Перем ДБФ,Плат,Врем, тВрем, тДБФ, тПлат, Вал, тАрхПлат,зн;
Перем ПутьБД;

Процедура ЗаполнитьБВ() далее
Процедура ОткрытьБД() далее
Процедура ВыбратьПлатежки() далее
Процедура СоздПуть() далее

Процедура ПриОткрытии()
    Режим=2;
    Дата1=РабочаяДата();
    Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=0 Тогда
        СоздПуть();
    КонецЕсли;
    ВыбратьПлатежки();
    //ОткрытьБД("ArhivPLT.dbf");
КонецПроцедуры

Функция Остаток(Контрагент,Сумма)
    тЗаказы = СоздатьОбъект("ТаблицаЗначений");
    ИтЗапр = СоздатьОбъект("БухгалтерскиеИтоги");
    ИтЗапр.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Контрагент,2);
    ИтЗапр.ИспользоватьСубконто(ВидыСубконто.Заказы,,1);
    ИтЗапр.ВыполнитьЗапрос(НачМесяца(Дата1),Дата1,"361",,,,,1);
    Ост = 0;
        ИтЗапр.ВыбратьСубконто(1);
        Если ИтЗапр.ПолучитьСубконто(1,,Контрагент) = 1 Тогда
            ИтЗапр.ВыбратьСубконто(2);
            Пока ИтЗапр.ПолучитьСубконто(2,,) = 1 Цикл
                Ост = (ИтЗапр.СКД() - ИтЗапр.СКК());
                Если (Цел(Ост) = Цел(Число(Сумма))) И (Цел(ИтЗапр.Субконто(2).Итог("СуммаСНДС"))=Цел(Ост)) Тогда
                    Возврат ИтЗапр.Субконто(2);
                КонецЕсли;    
            КонецЦикла;
        КонецЕсли;
    Возврат 0;
    //Возврат СокрЛ(Формат(Ост,"Ч14.2.'"));
КонецФункции

Процедура Помощь()      
Перем Подсказка;
    Если  Режим=1 Тогда          
        Подсказка="Программа может работать в двух режимах:
        |-формировать банковскую выписку за дату, выбранную на форме
        |-переносить оформленные платежные поручения за дату, выбранную на форме, в клиент-банк"+РазделительСтрок+"
        |Удалите из таблицы платежи (строки), которые НЕ желаете включать в будущую банковскую выписку, с помощью кнопки 'Х'
        |Если нужно, используйте кнопку '!' чтобы обновить данные в таблице
        |Кнопка 'ХХ' удаляет все строки из таблицы"+РазделительСтрок+"
        |Затем нажмите кнопку 'Формировать выписку', и в открывшемся документе Вам останется только выбрать заказы";
    Иначе
        Подсказка="Программа может работать в двух режимах:
        |-формировать банковскую выписку за дату, выбранную на форме
        |-переносить оформленные платежные поручения за дату, выбранную на форме, в клиент-банк"+РазделительСтрок+"
        |Удалите из таблицы выписки (строки), которые НЕ желаете переносить в клиент-банк, с помощью кнопки 'Х'
        |Если нужно, используйте кнопку '!' чтобы обновить данные в таблице
        |Успешно выгруженые платежки не отображаются больше в таблице, и выгрузить их повторно в клиент-банк нельзя.
        |Кнопка 'ХХ' удаляет все строки из таблицы"+РазделительСтрок+"
        |Затем нажмите кнопку 'Выгрузить платежки ', запустите клиент-банк и проверьте, правильно ли заполнены Ваши платежки";
    КонецЕсли;
    Предупреждение(Подсказка);
КонецПроцедуры

Процедура ОткрФайл(табл,файл)
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок;
ТекстДок=СоздатьОбъект("Текст");
тВрем.Очистить();
тТест.Очистить();              
    Если файл="" Тогда
        ИмяФайла="";
        ИмяПути ="";
        ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,,,);
        ПутьБД=ИмяПути+ИмяФайла;
    ИначеЕсли ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
        ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
        ПутьБД = СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\"+файл);
        //ПутьБД=файл;
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;

    //Сообщить(ПутьБД);
    Врем.ОткрытьФайл(ПутьБД);
    Если (Врем.Открыта()=0) Тогда
        Предупреждение("Не могу открыть файл "+ПутьБД+"!");
        возврат;
    КонецЕсли;
    //Сообщить("БД:"+Врем.КоличествоПолей());
    Для п=1 по Врем.КоличествоПолей() Цикл
        Врем.ОписаниеПоля(п,ОписПоля,т,д,т1);
        тВрем.НоваяКолонка(ОписПоля,,,,ОписПоля,,,);
    КонецЦикла;
    //Сообщить("Табл:"+тВрем.КоличествоКолонок());
    п=0;
    Врем.Первая();
    Для з=1 по Врем.КоличествоЗаписей() Цикл
        Врем.Перейти(з);
            тВрем.НоваяСтрока(з);
            Для п=1 по Врем.КоличествоПолей() Цикл
                тВрем.УстановитьЗначение(з,п,Врем.ПолучитьЗначениеПоля(п));
            КонецЦикла;
    КонецЦикла;              
    Врем.ЗакрытьФайл();
    тВрем.Выгрузить(Табл);
КонецПроцедуры

Функция ПроверитьДокумент(НомерДок)
Перем тПлат, тАрхПлат;
ОткрФайл(тПлат,"plat.dbf");
ОткрФайл(тАрхПлат,"Detail_Y.dbf");
//тАрхПлат.Выгрузить();
Если тПлат.НайтиЗначение(НомерДок,,"NUM_DOC")=1 Тогда
    //тАрхПлат.Выгрузить(тТест);
    Возврат 1;
КонецЕсли;
Если тАрхПлат.НайтиЗначение(НомерДок,,"NOMPLATDOK")=1 Тогда
    Возврат 1;
КонецЕсли;
    Возврат 0;
КонецФункции    


Процедура ВыбратьПлатежки()
    Перем Стр;
    тТест.УдалитьСтроки();
    тТест.НоваяКолонка("NUM_DOC",,,, "Номер",,,);
    тТест.НоваяКолонка("DATE_DOC",,,, "Дата",,,);
    тТест.НоваяКолонка("CLN_NAME",,,, "Плательщик",,,);
    тТест.НоваяКолонка("CLN_BANK_MFO",,,, "МФО плательщика",,,);
    тТест.НоваяКолонка("RCPT_NAME",,,, "Получатель",,,);
    тТест.НоваяКолонка("RCPT_OKPO",,,, "МФО получателя",,,);
    тТест.НоваяКолонка("CLN_ACCOUNT",,,, "Счет плательщика",,,);
    тТест.НоваяКолонка("RCPT_ACCOUNT",,,, "Счет получателя",,,);
    тТест.НоваяКолонка("CLN_OKPO",,,, "ОКПО плательщика",,,);
    тТест.НоваяКолонка("PAYMENT_DETAILS",,,, "Содержание",,,);
    тТест.НоваяКолонка("RCPT_OKPO",,,, "ОКПО получателя",,,);
    тТест.НоваяКолонка("AMOUNT",,,, "Сумма",,,);
    тТест.НоваяКолонка("DATOKUSL",,,, "Дата валютирования",,,);
    стр=0;  

    Док = СоздатьОбъект("Документ.ПлатежноеПоручение");
    Док.ВыбратьДокументы(Дата1,Дата1);
    Пока Док.ПолучитьДокумент()=1 Цикл
        Если (ПроверитьДокумент(Док.НомерДок)=0) И (Док.ПометкаУдаления()=0) Тогда
            стр=стр+1;                                      
            тТест.НоваяСтрока(стр);
            тТест.УстановитьЗначение(стр,"NUM_DOC",Док.НомерДок);
            тТест.УстановитьЗначение(стр,"DATE_DOC",Формат(Док.ДатаДок,"ДГГГГММДД"));
            тТест.УстановитьЗначение(стр,"CLN_NAME",Константа.ОснФирма.Полное_Назв);
            тТест.УстановитьЗначение(стр,"CLN_BANK_MFO",Число(ВыбСчет.Банк.Код));
            //Если Док.Заказ.Выбран()=1 Тогда
            //    Попытка
                    тТест.УстановитьЗначение(стр,"RCPT_NAME",Док.Контрагент.ПолнНаименование);
                    тТест.УстановитьЗначение(стр,"RCPT_OKPO",СокрЛП(Док.РСчетКонтрагента.Банк.Код));
                    тТест.УстановитьЗначение(стр,"RCPT_ACCOUNT",СокрЛП(Док.РСчетКонтрагента.НомерСчета));
                    тТест.УстановитьЗначение(стр,"RCPT_OKPO",СокрЛП(Док.Контрагент.ЕДРПОУ));
            //    Исключение
            //    КонецПопытки;    
            //КонецЕсли;
            тТест.УстановитьЗначение(стр,"CLN_ACCOUNT",Число(ВыбСчет.НомерСчета));
            тТест.УстановитьЗначение(стр,"CLN_OKPO",СокрЛП(Константа.ОснФирма.КодОКПО));
            тТест.УстановитьЗначение(стр,"PAYMENT_DETAILS",Док.НазначениеПлатежа.ПолнНаименование);
            тТест.УстановитьЗначение(стр,"AMOUNT",Формат(Док.СуммаСНДС,"Ч12.2"));
            тТест.УстановитьЗначение(стр,"DATOKUSL","ПРЕДОПЛАТА");
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры    

Процедура СоздПуть()
    ТекстДок=СоздатьОбъект("Текст");
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьКаталог(ИмяПути,"Выберите каталог с базой данных КБ Аваль",)=0 Тогда
        //ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,)=0
            Возврат;
        КонецЕсли;
        //ПутьБД=ИмяПути+ИмяФайла;
        //Сообщить(КаталогПрограммы()+"klbank.ini",);
        Попытка
            ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");     
        Исключение
        КонецПопытки;
        ТекстДок.ВставитьСтроку(1,ИмяПути);
        //Сообщить("Путь "+ИмяПути);
        ТекстДок.Записать(КаталогПрограммы()+"klbank.ini");
КонецПроцедуры    


Процедура СформироватьДБФ()
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок, тПлат;
тПлат = СоздатьОбъект("ТаблицаЗначений");
ТекстДок=СоздатьОбъект("Текст");
    Если ВыбСчет.Выбран()=0 Тогда
        Предупреждение("Расчетный счет не выбран!");
        Возврат;
    КонецЕсли;
    Если тТест.КоличествоСтрок()=0 Тогда
        Предупреждение("Нет платежек!");
        Возврат;
    КонецЕсли;

    Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
        ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
        ПутьБД = СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\plat.dbf");
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,"plat.dbf",,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;
    Если ПустаяСтрока(ПутьБД)=0 Тогда
        Плат.ОткрытьФайл(ПутьБД);
    Иначе
        ИмяФайла="";
        ИмяПути ="";
        Если ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,"plat.dbf",,)=0 Тогда
            Возврат;
        КонецЕсли;
        ПутьБД=ИмяПути+ИмяФайла;
    КонецЕсли;
    //Сообщить("ПутьБД"+ПутьБД);
    Если (Плат.Открыта()=0) Тогда
        Предупреждение("Не могу открыть файл "+ПутьБД+"!");
        возврат;
    КонецЕсли;
    //********************Сверка с текущим архивом
    //Сообщить(ИмяПути+"\Detail_Y.dbf");
    //АрхПлат.ОткрытьФайл(СокрЛП(ТекстДок.ПолучитьСтроку(1))+"\Detail_Y.dbf");
    //Если (АрхПлат.Открыта()=0) Тогда
    //    Предупреждение("Не могу открыть файл "+ИмяПути+"\Detail_Y.dbf"+"!");
    //    возврат;
    //КонецЕсли;
    //Для п=1 по АрхПлат.КоличествоПолей() Цикл
    //    АрхПлат.ОписаниеПоля(п,ОписПоля,т,д,т1);
    //    тВрем.НоваяКолонка(ОписПоля,,,,ОписПоля,,,);
    //КонецЦикла;                                    
    //АрхПлат.Первая();
    //Для з=1 по АрхПлат.КоличествоЗаписей() Цикл
    //    АрхПлат.Перейти(з);
    //        тВрем.НоваяСтрока(з);
    //        Для п=1 по АрхПлат.КоличествоПолей() Цикл
    //            тВрем.УстановитьЗначение(з,п,АрхПлат.ПолучитьЗначениеПоля(п));
    //        КонецЦикла;
    //КонецЦикла;              
    //АрхПлат.ЗакрытьФайл();
    //Для н=1 по тТест.КоличествоСтрок() Цикл
    //    Если тВрем.НайтиЗначение(тТест.ПолучитьЗначение(н,"NUM_DOC"),,"NOMPLATDOK")=0 Тогда
    //        тТест.ТекущаяСтрока(н);
    //        тПлат.ДобавитьСтроку(тТест.ТекущаяСтрока());    
    //    КонецЕсли;
    //КонецЦикла;
    //тПлат.Выгрузить(тТест);
    //возврат;
    //********************Сверка с текущим архивом
    Плат.Последняя();
    Для п=1 по тТест.КоличествоСтрок() Цикл
        Плат.Добавить();
        Плат.NUM_DOC=тТест.ПолучитьЗначение(п,"NUM_DOC");
        Плат.DATE_DOC=тТест.ПолучитьЗначение(п,"DATE_DOC");        
        Плат.CLN_NAME=тТест.ПолучитьЗначение(п,"CLN_NAME");    
        Плат.CLN_BANK_MFO=тТест.ПолучитьЗначение(п,"CLN_BANK_MFO");        
        Плат.RCPT_NAME=тТест.ПолучитьЗначение(п,"RCPT_NAME");    
        Плат.RCPT_OKPO=тТест.ПолучитьЗначение(п,"RCPT_OKPO");      
        Плат.CLN_ACCOUNT=тТест.ПолучитьЗначение(п,"CLN_ACCOUNT");      
        Плат.RCPT_ACCOUNT=тТест.ПолучитьЗначение(п,"RCPT_ACCOUNT");    
        Плат.CLN_OKPO=тТест.ПолучитьЗначение(п,"CLN_OKPO");
        Плат.PAYMENT_DETAILS=тТест.ПолучитьЗначение(п,"PAYMENT_DETAILS");
        Плат.RCPT_OKPO=тТест.ПолучитьЗначение(п,"RCPT_OKPO");
        Плат.AMOUNT=тТест.ПолучитьЗначение(п,"AMOUNT");
        Плат.DATOKUSL=тТест.ПолучитьЗначение(п,"DATOKUSL");
    Плат.Записать();
    КонецЦикла;
    Плат.ЗакрытьФайл();
    тТест.Очистить();
    тПлат.Выгрузить(тТест);
    Предупреждение("Документы успешно выгружены!");
КонецПроцедуры
//***********************************************
Процедура Обраб()  
            Если ВвестиЗначение(зн,"Вибір значення ","Счет.Основной") = 1 Тогда
                  тТест.УстановитьЗначение(тТест.ТекущаяСтрока(),"КоррСчет",зн);
            КонецЕсли;
КонецПроцедуры  
//***********************************************,
Процедура СменаРежима()
    //Сообщить(Режим);
    тТест.Очистить();  
    тДБФ.Очистить();
    Если  Режим=1 Тогда          
        Форма.кнФормироватьВыписки.Видимость(1);
        Форма.кнВыгрузитьПлатежки.Видимость(0);
        ОткрытьБД();
    Иначе
        Форма.кнФормироватьВыписки.Видимость(0);
        Форма.кнВыгрузитьПлатежки.Видимость(1);
        ВыбратьПлатежки();
    КонецЕсли;
КонецПроцедуры
                                      
Процедура Выполнить()
    ЗаполнитьБВ();
КонецПроцедуры

Процедура УдалениеСтроки()
    Если тТест.КоличествоСтрок()>0 Тогда
        тТест.УдалитьСтроку();
    КонецЕсли;
КонецПроцедуры //УдалениеПД
                                
Процедура ОткрытьБД()
Перем ОписПоля,Заголовок,т,д,т1, ТекстДок;
ТекстДок=СоздатьОбъект("Текст");
тТест.Очистить();
    ИмяФайла="";
    ИмяПути ="";
ФайлТекст = СоздатьОбъект("Текст");
файл = "v"+Прав(Формат(Дата1,"ДГГГГММДД"),6)+".zzz";
Если ФС.СуществуетФайл(КаталогПрограммы()+"klbank.ini")=1 Тогда
    ТекстДок.Открыть(КаталогПрограммы()+"klbank.ini");
//    ПутьБД= СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\"+файл);  
    Путь= СокрЛП(ТекстДок.ПолучитьСтроку(1)+"\");
    ФС.ВыбратьФайл(0,ИмяФайла, Путь, ,файл,,);
    ПутьБД=Путь+ИмяФайла;
Иначе
    ИмяФайла="";
    ИмяПути ="";
    ФС.ВыбратьФайл(0,ИмяФайла, ИмяПути, ,файл,,);
    ПутьБД=ИмяПути+ИмяФайла;
КонецЕсли;
    ФайлТекст.КодоваяСтраница(0);
    ФайлТекст.Открыть(ПутьБД);
    Если ФайлТекст.КоличествоСтрок() = 0 Тогда
        Предупреждение("Выписки банка не найдены");
    Возврат;
    КонецЕсли;
    
    тДБФ.НоваяКолонка("NUM_DOC",,,, "NUM_DOC",,,);
    тДБФ.НоваяКолонка("DATKVOPL",,,, "DATKVOPL",,,);
    тДБФ.НоваяКолонка("CLN_ACCOUNT","Число",14,, "CLN_ACCOUNT",,,);
    тДБФ.НоваяКолонка("RCPT_OKPO","Строка",10,, "RCPT_OKPO",,,);
    тДБФ.НоваяКолонка("RCPT_NAME",,,, "RCPT_NAME",,,);
    тДБФ.НоваяКолонка("AMOUNT","Число",15,2, "AMOUNT",,,);
    тДБФ.НоваяКолонка("DEB_KRED","Число",1,, "DEB_KRED",,,);
    тДБФ.НоваяКолонка("PAYMENT_DETAILS",,,, "PAYMENT_DETAILS",,,);
    тДБФ.НоваяКолонка("КоррСчет","Счет.Основной");  
    ррр = 0;
    Для ном=1 по ФайлТекст.КоличествоСтрок() Цикл
        стр = OemToAnsi(ФайлТекст.ПолучитьСтроку(ном));  
    Если Лев(стр,1) = "0" Тогда
        Если (Число(Сред(стр,2,14)) <> Число(ВыбСчет.Номер)) или (Сред(стр,16,8) <> Формат(Дата1,"ДГГГГММДД")) Тогда
//            Сообщить("Ошибка! Проверьте сохранение выписки");
//            Возврат;
    ррр = 0;
        Продолжить;
    КонецЕсли;
    ррр = 1;
        СчетОсн = Число(Сред(стр,2,14));
        ДатаВ = Сред(стр,16,8);
    ИначеЕсли (ррр = 1 ) и (Лев(стр,1) = "1") Тогда    
        Если (Число(Сред(стр,12,14)) <> Число(ВыбСчет.Номер)) и (Число(Сред(стр,89,14)) <> Число(ВыбСчет.Номер)) Тогда  
//            Сообщить("Ошибка! Проверьте сохранение выписки");
//            Возврат;
        Продолжить;
        КонецЕсли;  
        тДБФ.НоваяСтрока(тДБФ.КоличествоСтрок()+1);
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"NUM_DOC",Сред(стр,159,10));  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DATKVOPL",ДатаВ);  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"CLN_ACCOUNT",СчетОсн);
        Если Сред(стр,2,1) = "+" Тогда
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"RCPT_OKPO",СокрЛ(Сред(стр,26,14)));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"RCPT_NAME",Сред(стр,40,40));  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DEB_KRED",1);
        Иначе
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"RCPT_OKPO",СокрЛ(Сред(стр,103,14)));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"RCPT_NAME",Сред(стр,117,40));
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"DEB_KRED",0);
        КонецЕсли;
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"AMOUNT",Число(Сред(стр,169,19))/100);  
        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"PAYMENT_DETAILS",Сред(стр,212,255));  
//        тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",Сред(стр,159,10));
        
//        Для з=1 по ДБФ.КоличествоЗаписей() Цикл
//        ДБФ.Перейти(з);    
//       Если ДБФ.ПолучитьЗначениеПоля("CLN_ACCOUNT") <> Число(ВыбСчет.Номер) Тогда
//        Продолжить;
//        КонецЕсли;
//        Если СокрЛП(ДБФ.ПолучитьЗначениеПоля("DATKVOPL"))=(Формат(Дата1,"ДГГГГММДД")) Тогда
            Назначение=Сред(стр,212,255);  
            Если (Найти(Назначение,"овердрафт")<> 0) Тогда  
                 Продолжить;
            КонецЕсли;
//            тДБФ.НоваяСтрока(тДБФ.КоличествоСтрок()+1);
//            Для п=1 по ДБФ.КоличествоПолей() Цикл
//                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),п,ДБФ.ПолучитьЗначениеПоля(п));
//            КонецЦикла;  
//            Назначение=ДБФ.ПолучитьЗначениеПоля("PAYMENT_DETAILS");
            ДенКасса= Сред(стр,40,40);
        Если (Сред(стр,2,1) = "-") Тогда
              Если (Найти(Назначение,"товар")<> 0) или (Найти(Назначение,"ХАРЧ")<> 0) или (Найти(Назначение,"харч")<> 0)
                  или (Найти(Назначение,"ПРОД")<> 0) или (Найти(Назначение,"прод")<> 0) или (Найти(Назначение,"вироб")<> 0)
                  или (Найти(Назначение,"ТОВАР")<> 0) или (Найти(Назначение,"алког")<> 0) или (Найти(Назначение,"ВИРОБ")<> 0)
                  или (Найти(Назначение,"АЛКОГ")<> 0) или (Найти(Назначение,"тютюн")<> 0) Тогда
                  тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("63.1"));
              КонецЕсли;  
              Если (Найти(Назначение,"ТЮТЮН")<> 0) или (Найти(Назначение,"горіл")<> 0)
                   или (Найти(Назначение,"ГОРІЛ")<> 0) или (Найти(Назначение,"таба")<> 0)
                   или (Найти(Назначение,"ТАБА")<> 0) или (Найти(Назначение,"СИГАР")<> 0)
              или (Найти(Назначение,"ЦИГАР")<> 0) или (Найти(Назначение,"цигар")<> 0)
                   или (Найти(Назначение,"вино")<> 0) или (Найти(Назначение,"пиво")<> 0)
                   или (Найти(Назначение,"сигар")<> 0)Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("63.1"));
              КонецЕсли;
            Если (Найти(Назначение,"Перерахунок кошт")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("31.1"));
            КонецЕсли;
            Если (Найти(Назначение,"Плата за инк")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("95.2"));
            КонецЕсли;
        Иначе
            Если (Найти(Назначение,"товар")<> 0) или (Найти(Назначение,"ХАРЧ")<> 0) или (Найти(Назначение,"харч")<> 0)
              или (Найти(Назначение,"ПРОД")<> 0) или (Найти(Назначение,"прод")<> 0) или (Найти(Назначение,"вироб")<> 0)
              или (Найти(Назначение,"ТОВАР")<> 0) или (Найти(Назначение,"АЛКОГ")<> 0) или (Найти(Назначение,"ВИРОБ")<> 0)
              или (Найти(Назначение,"ТЮТЮН")<> 0) или (Найти(Назначение,"ГОРІЛ")<> 0) или (Найти(Назначение,"ПИВО")<> 0) Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("36.1"));
            КонецЕсли;
            Если (Найти(Назначение,"алког")<> 0) или (Найти(Назначение,"тютюн")<> 0)
              или (Найти(Назначение,"горіл")<> 0) или (Найти(Назначение,"таба")<> 0)
              или (Найти(Назначение,"ТАБА")<> 0) или (Найти(Назначение,"СИГАР")<> 0)  
              или (Найти(Назначение,"ЦИГАР")<> 0) или (Найти(Назначение,"цигар")<> 0)
              или (Найти(Назначение,"сигар")<> 0) или (Найти(Назначение,"вино")<> 0) или (Найти(Назначение,"пиво")<> 0) Тогда
              тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("36.1"));
            КонецЕсли;
            Если ((Найти(Назначение,"вируч")<> 0) или (Найти(Назначение,"ВИРУЧ")<> 0)  или (Найти(Назначение,"Вируч")<> 0)) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("33.3"));
            КонецЕсли;
            Если (Найти(Назначение,"Перерахунок кошт")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("31.1"));
            КонецЕсли;
            Если (Найти(Назначение,"повор")<> 0) или (Найти(Назначение,"ПОВОР")<> 0) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("30.1"));
            КонецЕсли;
            Если (((Найти(Назначение,"вируч")<> 0) или (Найти(Назначение,"ВИРУЧ")<> 0)  или (Найти(Назначение,"Вируч")<> 0)) и (Найти(ДенКасса,"Центр.")<> 0)) Тогда
                тДБФ.УстановитьЗначение(тДБФ.КоличествоСтрок(),"КоррСчет",СчетПоКоду("30.1"));
            КонецЕсли;
        КонецЕсли;
        КонецЕсли;
    КонецЦикла;              
    
//    ДБФ.ЗакрытьФайл();
    тДБФ.Выгрузить(тТест);
    тТест.Сортировать("DEB_KRED,AMOUNT");
    Для п=1 по тТест.КоличествоКолонок() Цикл
        тТест.ПолучитьПараметрыКолонки(п,,,,ОписПоля,,,);  
        Если (ОписПоля="КоррСчет") Тогда  
            тТест.УстановитьПараметрыКолонки(п,"Счет.Основной",,,"КоррСчет",6,,);
        ИначеЕсли (ОписПоля="RCPT_NAME") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"Контрагент",16,,);
        ИначеЕсли (ОписПоля="RCPT_OKPO") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"ОКПО",8,,);
        ИначеЕсли (ОписПоля="AMOUNT") Тогда
            тТест.УстановитьПараметрыКолонки(п,"Число",,2,"Сумма",8,"Ч012.2",2);
        ИначеЕсли (ОписПоля="PAYMENT_DETAILS") Тогда
            тТест.УстановитьПараметрыКолонки(п,,,,"Содержание",30,,);
        Иначе
            тТест.ВидимостьКолонки(Строка(п),0);
        КонецЕсли;
    КонецЦикла;
    
//    КонецЦикла;
КонецПроцедуры    

Процедура ЗаполнитьБВ()
    Перем Контра;
    Если ВыбСчет.Выбран()=0 Тогда
        Предупреждение("Расчетный счет не выбран!");
        Возврат;
    КонецЕсли;
    Если тТест.КоличествоСтрок()=0 Тогда
        Предупреждение("Нет платежей!");
        Возврат;
    КонецЕсли;
    тДБФ.Загрузить(тТест);
    Док = СоздатьОбъект("Документ.ВыпискаБанка");
    спрКонтр = СоздатьОбъект("Справочник.Клиенты");
    тДБФ.Сортировать("DEB_KRED,AMOUNT");
    Док.Новый();
//    Фирма = глВосстановитьЗначение(,"БазФирма");
    //глУстановитьНомерДокумента(Контекст);
//    глУстановитьНомерДокумента(Док);
//    РСчет = Фирма.РС;
    Док.БанковскийСчет = ВыбСчет;  
    Док.ДатаДок = Дата1;
    Док.Автор=Пользователь;
    Док.Идентификатор="ВыпискаБанка";
    Док.Фирма=Константа.ОснФирма;
    Док.Фирма.ИспользоватьДату(Дата1);
    Док.СчетУчета = ВыбСчет.БухгалтерскийСчет;
//    Док.Субконто.Доступность(1);
Для з=1 по тДБФ.КоличествоСтрок() Цикл  
    Если тДБФ.ПолучитьЗначение(з,"CLN_ACCOUNT") <> Число(ВыбСчет.Номер) Тогда
        Продолжить;
    КонецЕсли;
    Док.НоваяСтрока();                            
        //Сообщить(тДБФ.ПолучитьЗначение(з,"DEB_KRED"));
        Если (тДБФ.ПолучитьЗначение(з,"DEB_KRED")=1) Тогда
            Док.ПриходРасход = Перечисление.ПлюсМинус.Плюс;            
        Иначе
            Док.ПриходРасход = Перечисление.ПлюсМинус.Минус;            
        КонецЕсли;      
            Док.НазначениеПлатежа = тДБФ.ПолучитьЗначение(з,"PAYMENT_DETAILS");
    // проставляем реквизиты "по умолчанию"
                   Если Док.ПриходРасход = Перечисление.ПлюсМинус.Минус Тогда
                    Док.КоррСчет = тДБФ.ПолучитьЗначение(з,"КоррСчет");
                    Док.ВидДвижения = Перечисление.ВидыДвиженийПоРасчетномуСчету.Списание;
                    Док.Расход = тДБФ.ПолучитьЗначение(з,"AMOUNT");
                    Док.ВидОплаты = Перечисление.ВидыОплаты.Оплата;
                    Если Док.КоррСчет = СчетПоКоду("36.1") Тогда
                         Док.ВидОплаты = Перечисление.ВидыОплаты.Возврат;
                    КонецЕсли;
                    Если Док.КоррСчет = СчетПоКоду("63.1") Тогда
                         Док.РежимОплатыПоАгенту = Перечисление.РежимыОплатыПоАгентам.АвтораспределениеБезАгента;
                    КонецЕсли;
                Иначе  
                    Док.КоррСчет = тДБФ.ПолучитьЗначение(з,"КоррСчет");
                    Док.ВидДвижения = Перечисление.ВидыДвиженийПоРасчетномуСчету.Поступление;
                    Док.Приход = тДБФ.ПолучитьЗначение(з,"AMOUNT");  
                    Док.ВидОплаты = Перечисление.ВидыОплаты.Оплата;
                    Если Док.КоррСчет = СчетПоКоду("63.1") Тогда
                         Док.ВидОплаты = Перечисление.ВидыОплаты.Возврат;
                    КонецЕсли;
                    Если Док.КоррСчет = СчетПоКоду("36.1") Тогда
                         Док.РежимОплатыПоАгенту = Перечисление.РежимыОплатыПоАгентам.АвтораспределениеБезАгента;
                         Док.НДС = Док.Приход/6;
                    КонецЕсли;
                КонецЕсли;
        Док.НазначитьТип("Субконто1", Док.КоррСчет.ВидСубконто(1));
        Док.НазначитьТип("Субконто2", Док.КоррСчет.ВидСубконто(2));
        Док.НазначитьТип("Субконто3", Док.КоррСчет.ВидСубконто(3));

        Контра=тДБФ.ПолучитьЗначение(з,"RCPT_NAME");
        КонтраКод=тДБФ.ПолучитьЗначение(з,"RCPT_OKPO");
        Док.НомерПлатДок=тДБФ.ПолучитьЗначение(з,"NUM_DOC");
        Если Док.КоррСчет.ВидСубконто(1) = ВидыСубконто.Фирмы Тогда  
            Док.Субконто1 = Константа.ОснФирма;
        КонецЕсли;
        Если Док.КоррСчет.ВидСубконто(1) = ВидыСубконто.Контрагенты Тогда
        спрКонтр.ИспользоватьДату(ТекущаяДата());
        Если спрКонтр.НайтиПоРеквизиту("КодОКПО",КонтраКод,1)=1 Тогда
             Если спрКонтр.ПометкаУдаления() = 1 Тогда
            Вар = Вопрос("Контрагент "+СокрЛП(Контра)+(КонтраКод)+Док.НазначениеПлатежа+" Помечен на удаление. Выбрать его из справочника вручную?",3);
            Если Вар=6 Тогда  
                спрКонтр.Выбрать("","ФормаСписка");
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;  
            ИначеЕсли Вар=2 Тогда
                прервать;
            КонецЕсли;                                        
            Иначе    
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;
            КонецЕсли;
        ИначеЕсли ПустаяСтрока(Контра)=0 Тогда
            Вар = Вопрос("Контрагент "+СокрЛП(Контра)+(КонтраКод)+Док.НазначениеПлатежа+" не найден. Выбрать его из справочника вручную?",3);
            Если Вар=6 Тогда  
                спрКонтр.Выбрать("","ФормаСписка");
                Док.Субконто1 = спрКонтр.ТекущийЭлемент();
                Док.Агент = спрКонтр.ОсновнойАгент;
            ИначеЕсли Вар=2 Тогда
                прервать;
            КонецЕсли;                                        
        Иначе
КонецЕсли;
КонецЕсли;  
КонецЦикла;    
//       Форма.Закрыть();  
        НачатьТранзакцию();
           Док.Записать();
        ЗафиксироватьТранзакцию();
       ОткрытьФорму(Док.ТекущийДокумент(),0);
КонецПроцедуры

ДБФ = СоздатьОбъект("XBase");
Плат = СоздатьОбъект("XBase");
Врем = СоздатьОбъект("XBase");
АрхПлат = СоздатьОбъект("XBase");
тДБФ = СоздатьОбъект("ТаблицаЗначений");  
тВрем = СоздатьОбъект("ТаблицаЗначений");
тПлат = СоздатьОбъект("ТаблицаЗначений");
тАрхПлат = СоздатьОбъект("ТаблицаЗначений");



Но оно собака не подтягивает выписку
Просмотров: 311, последний комментарий от awp   
как работать с адресами в БСП [раздел Программирование в 1С Предприятие 8.3]
Автор lolmatrix — 05.09.19, 14:47 — 4 комментариев
Здравствуйте уважаемые форумчане, сделал первое внедрение БСП в свою конфигурацию,
в моей конфигурации есть справочник физические лица,
у этих людей есть адрес,
адрес я физическим лицам хочу вводить используя адресный классификатор из БСП,
подскажите пожалуйста как мне открыть форму подбора адреса из своего справочника физические лица
Просмотров: 119, последний комментарий от awp   
Как зафиксировать шапку таблицы отчета 1с 7.7 конф 7.7.00 [раздел Программирование в 1С Предприятие 7.7]
Автор ZUBR — 05.09.19, 0:26 — 2 комментариев
Есть отчет в виде таблицы. Как зафиксировать шапку таблицы, чтобы при прокручивании шапка с названиями колонок оставалась?
Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("БАЗА комп");
    Таб.ВывестиСекцию("Шапка");
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
        
        Если (ТЗ.Статус = Перечисление.Статусы.НеНачат)и(ТЗ.Срочно=0)и(ТЗ.ОченьСрочно=0)и(ТЗ.Позвонить=0)и(ТЗ.Проблема=0)  Тогда
        Таб.ВывестиСекцию("НеНачат");    
    
        ИначеЕсли  (ТЗ.Статус = Перечисление.Статусы.НеНачат)и(ТЗ.Срочно=1)и(ТЗ.ОченьСрочно=0)и(ТЗ.Позвонить=0)и(ТЗ.Проблема=0)  Тогда
        Таб.ВывестиСекцию("НеНачатСрочно");
        
        И т.д...........................................................................................................................................
        
    КонецЕсли;
    
            
КонецЦикла;  

    //Таб.ВывестиСекцию("Подвал");
    Таб.ТолькоПросмотр(0);
    Таб.Показать();



Смотрел готовые отчеты. Не понял, как это делается. Спасибо.
Просмотров: 109, последний комментарий от Sharzem   
Печать чека без предосмотра [раздел Программирование в 1С Предприятие 8.3]
Автор alexnevski — 04.09.19, 12:22 — 0 комментариев
Добрый день. Конфигурация Розница Украина 1.0

В режиме РМК нужно печатать торговый чек без предосмотра.
Сейчас же нужно нажимать "Торговый чек" - "Оплата" - "Предосмотр" - "Форма выбора принтера".
А нужно чтобы после окна "Оплата" сразу печатался чек.
Как такое можно реализовать? В настройках пользователя уже стоит флаг "Печать документов без предосмотра", но он не работает.
Спасибо.
Просмотров: 69, оставить комментарий   
RSS Текстовая версия Сейчас: 17.09.19, 23:29
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!