"Неверный реквизит платежного документа КодНазПлатежа". Исправляем обработку КлиентБанк

Публикация № 1244253

Разработка - Системная интеграция - Обмен с интернет-банком

Неверный реквизит платежного документа КодНазПлатежа

C 01.06.2020 банки требуют указывать реквизит КодНазПлатежа (код вида дохода) в выписках. При этом его заполнение необязательно. Соответственно в старых версиях обработок "Клиент банк" не загружаются файлы с плат.поручениями.

Данная ошибка исправляется очень просто:

1. Открываем конфигуратор и находим нашу обработку "КлиентБанк" в списке объектов конфигурации.

2. Открываем модуль объекта.

3. Находим фрагмент кода:

РеквизитыПлДок_НазначениеНеОбязательные = "НазначениеПлатежа1,НазначениеПлатежа2,НазначениеПлатежа3,НазначениеПлатежа4,НазначениеПлатежа5,НазначениеПлатежа6";
	

и заменяем на:

РеквизитыПлДок_НазначениеНеОбязательные = "НазначениеПлатежа1,НазначениеПлатежа2,НазначениеПлатежа3,НазначениеПлатежа4,НазначениеПлатежа5,НазначениеПлатежа6,КодВыплат,КодНазПлатежа";

 

4. Находим фрагмент кода:

	СоздатьКолонкуВТаблице(Таб, ТабПоле, "НазначениеПлатежа6",   Т_Строка,    "Назначение платежа, стр. 6", НеВидимая);

и добавляем ниже две строки:

	СоздатьКолонкуВТаблице(Таб, ТабПоле, "КодВыплат",  			 Т_Строка,    "КодВыплат",					НеВидимая);
	СоздатьКолонкуВТаблице(Таб, ТабПоле, "КодНазПлатежа",   	 Т_Строка,    "КодНазПлатежа",				НеВидимая);	

 

5. Обновляем конфигурацию.

6. Готово.

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Nikola23 589 01.06.20 14:25 Сейчас в теме
(8) К ERP инструкция не подходит.
Либо, я разучился пользоваться поиском.

1С:ERP Управление предприятием 2 (2.4.11.98) (http://v8.1c.ru/erp/)
Copyright © ООО "1С-Софт", 2004-2019. Все права защищены
(http://www.1c.ru)
2. Darklight 27 01.06.20 15:01 Сейчас в теме
Судя по всему - в 1С Бухгалтерии 3.0 (про 2.0 не знаю) эти свойства тоже не загружаются. Разница лишь в том, что в бухгалтерии эти свойства игнорируются (с молчаливым занесением в протокол-лог), а в УПП - вот выдаётся ошибка!
А раз проблема есть в 1С: Бухгалтерии 3.0 то она скорее всего есть и в ERP 2.4 - но код загрузки ERP 2.4 ближе к Бухгалтерии 3.0 - а значит и инструкция должна быть от неё (ибо от УПП отличий там в алгоритмах очень много), как и для 1С: КА т.е. ошибки не будет, но и данные свойства не загрузятся в базу.

Другое дело - а так уж ли нужны или эти свойства в базе уже после поступления документа из банка? Думаю - что не особо то и нужны (и их просто можно было бы игнорировать как в Бухгалтерии 3.0, ну и ждать когда 1С сама внесёт правки в очередном обновлении) - ну а кому не в терпёж - то, да - могут и загрузку вручную поправить....

Единственное замечание к статье - это так как вносятся исправления - типовой код лучше трогать как можно меньше (особенно там, где ожидается появление типовых обновлений) - и не изменять те, строки кода, которые можно не изменять, например строку
"РеквизитыПлДок_НазначениеНеОбязательные = "НазначениеПлатежа1,НазначениеПлатежа2,НазначениеПлатежа3,НазначениеПлатежа4,НазначениеПлатежа5,НазначениеПлатежа6";"
лучше отступить одну пустую строку вниз от неё и написать так
РеквизитыПлДок_НазначениеНеОбязательные = "НазначениеПлатежа1,НазначениеПлатежа2,НазначениеПлатежа3,НазначениеПлатежа4,НазначениеПлатежа5,НазначениеПлатежа6";

РеквизитыПлДок_НазначениеНеОбязательные = РеквизитыПлДок_НазначениеНеОбязательные + ",КодВыплат,КодНазПлатежа"; //код изменён - исправление типовой ошибки (релиз 1.3.140.2)
4. Darklight 27 01.06.20 15:46 Сейчас в теме
(2)Подумал подумал - точно - а зачем эти свойства вообще обрабатывать? - расходные банковские выписки в УПП загружаются в Платёжные ордера на списание денежных средств - а там таких реквизитов нет в принципе - значит и обрабатывать их нет смысла - вот в бухгалтерии 3.0 они и просто игнорируются (а УПП - вот да - просто тоже надо игнорировать - поэтому, я вообще сделал бы как в бухгалтерии - ВСЕ не распознанные тэги я бы игнорировал:

Тогда в модуле обработки КлиентБанк надо найти вот этот текст:

"Сообщить("Неверный реквизит платежного документа, строка " + (Импорт_ТекущаяСтрока - 1) + " : " + СтрокаРазбора);"

и заменить там код (а вернее просто вставить перед ним, чтобы не трогать типовой):

				// неправиьный реквизит заголовка
				Сообщить("Неверный реквизит платежного документа, строка " + (Импорт_ТекущаяСтрока - 1) + " : " + СтрокаРазбора);
				Возврат Ложь;



на код


				продолжить; //код изменён - игнорировать в загрузке неиспользуемые тэги

				// неправиьный реквизит заголовка
				Сообщить("Неверный реквизит платежного документа, строка " + (Импорт_ТекущаяСтрока - 1) + " : " + СтрокаРазбора);
				Возврат Ложь;

Показать



Будут пропускаться ВСЕТЭГИ, не используемые в алгоритме загрузки!

Ну а в Бухгалтерии 3.0 и ЕРП 2.4 ничего трогать не надо - там и так все такие тэги игнорируются с занесением в протокол-лог (в УПП такого лога нет), который потом даже не отображается пользователю! И загрузка этих тэгов НЕ НУЖНА!

P.S. Кстати, исправления алгоритма из статьи эти тэги тоже не загружает (ибо некуда из загружать) ! И нигде их не показывает пользователю!
saddy; parshin; eddoptimist; Ks_83; maxpower; COMPER; Student1C; zqzq; farsesoft; spynett; +10 Ответить
9. farsesoft 19 01.06.20 23:13 Сейчас в теме
(4)
продолжить; //код изменён - игнорировать в загрузке неиспользуемые тэги


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

СтрокаРазбора = ПолучитьСтрокуИмпорта();
Продолжить; //код изменён - игнорировать в загрузке неиспользуемые тэги
saddy; powar; Barmolei; parshin; eddoptimist; Ks_83; maxpower; COMPER; SashaSashaSashka; zqzq; Lusha_28; Shrike; +12 Ответить
11. &rew 29 02.06.20 06:13 Сейчас в теме
(9Можно "запилить" Прервать по тегу "КодНазПлатежа". Но это не панацея. Загрузим входящие, а в исходящих, то надо указывать все-равно этот код, при расчетах с физлицами.
shuvalov_m; +1 Ответить
16. Darklight 27 02.06.20 12:24 Сейчас в теме
(11)Что Вы там указывать собрались? Загружаются - платёжные ордера (там ни во входящих ни в исходящих этих реквизитов нет). А при выгрузке - 1С всё сделала - там эти свойства заполняются!
17. &rew 29 02.06.20 12:38 Сейчас в теме
(16)То же что и Вы - 1,2,3. 1С сделала в обновлении. В старых переписанных в "копро" конфах этого нет. Под это дело и доки допилины и общие модули и сама обработка. Можно еще прямо в тестовик руками забивать.
shuvalov_m; +1 Ответить
5. digorec88 01.06.20 16:12 Сейчас в теме
(2) А еще лучше выгрузить как внешнюю и вносить в нее изменения. За статью спасибо!!!!!
3. rusakov1969 01.06.20 15:34 Сейчас в теме
Спасибо тебе, добрый человек
maksa2005; +1 Ответить
6. vano-ekt 848 01.06.20 17:07 Сейчас в теме
из последнего обновления возьмите клиент-банк, в УПП он ссылается на одну функцию общего модуля, можете поставить заглушку или обновить тот же общий модуль
в 1.139.2 - точно есть уже поддержка формата 1.03
7. Brawler 480 01.06.20 17:28 Сейчас в теме
(6) да оно и в 1.3.140.2 типа есть да и ошибка есть
13. vano-ekt 848 02.06.20 08:07 Сейчас в теме
(7) и в правду, ошибка в типовой :) с обновлением интернет-банка приехала ошибка
8. Skif1989 01.06.20 19:51 Сейчас в теме
12. &rew 29 02.06.20 06:13 Сейчас в теме
14. revned 6 02.06.20 08:30 Сейчас в теме
(8) Обновить, оно конечно правильно будет.
Но вот у меня такая же проблема появилась. Обновлять сейчас не вариант, УНФ сильно переписанная.
Пока сделал такой костыль:
Если ИмпортЗагружаемые[Тег] = Истина Тогда
				СтрокаДокумента[Тег] = Значение;
			Иначе
				//++
				СтрокаПоиска = СтрЗаменить(СтрокаРазбора, "=", "");
				Если СтрНайти("НазначениеПлатежа1,НазначениеПлатежа2,НазначениеПлатежа3,НазначениеПлатежа4,НазначениеПлатежа5,НазначениеПлатежа6,КодВыплат,КодНазПлатежа", СтрокаПоиска) Тогда 
					Сообщить("Не поддерживаемый реквизит "+СтрокаПоиска + ". Реквизит не загружен.");
				Иначе
					//--
					// Неправиьный реквизит заголовка.
					ТекстСообщения = НСтр(
					"ru = 'Неверный реквизит платежного документа, строка %Импорт%: %СтрокаРазбора%'"
					);
					ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Импорт%", (ИмпортТекущаяСтрока - 1));
					ТекстСообщения = СтрЗаменить(ТекстСообщения, "%СтрокаРазбора%", СтрокаРазбора);
					УправлениеНебольшойФирмойСервер.СообщитьОбОшибке(ЭтаФорма, ТекстСообщения);
					Возврат Ложь;
					//++	
				КонецЕсли;
				//--
			КонецЕсли;
Показать


УНФ 1.6.16.219
Irveen; 1СРамиль; +2 Ответить
41. user1222071 05.06.20 11:01 Сейчас в теме
(14) Подскажите, пожалуйста, куда этот код добавить.
44. revned 6 08.06.20 07:59 Сейчас в теме
(41) Это я добавлял в обработку КлинетБанк в форму ФормаЗагрузка в функцию:
Функция ЗагрузитьСекциюДокумента(СтрокаДокумента, ИмпортТекущаяСтрока, ИмпортКоличествоСтрок, ИмпортТекстДляРазбора, ИмпортЗагружаемые)
45. user1222071 08.06.20 08:44 Сейчас в теме
55. Irveen 30.07.20 11:08 Сейчас в теме
(14) Добавил этот код в функцию ЗагрузитьСекциюДокумента и сработало. Выдало предупреждения о том, что реквизит не поддерживаемый и что он не загружен - все как положено.
На следующий день загружаю выписку, но уже на другое ЮрЛицо и тут снова та же ошибка:

Неверный реквизит платежного документа, строка 79: КодНазПлатежа=1


Где еще может быть проблема?
(Вдруг важно - Это загружалась платежка, в которой наша оплата контрагенту (перечисление зарплаты))
56. Irveen 30.07.20 11:12 Сейчас в теме
(14) Добавил этот код в функцию ЗагрузитьСекциюДокумента и сработало. Выдало предупреждения о том, что реквизит не поддерживаемый и что он не загружен - все как положено.
На следующий день загружаю выписку, но уже на другое ЮрЛицо и тут снова та же ошибка:

Неверный реквизит платежного документа, строка 79: КодНазПлатежа=1


Где еще может быть проблема?
(Вдруг важно - Это загружалась платежка, в которой наша оплата контрагенту (перечисление зарплаты))
10. Shrike 6 02.06.20 04:40 Сейчас в теме
Спасибо за информацию по исправлению.
15. marat.coolls 02.06.20 09:17 Сейчас в теме
18. FLYYY1986 02.06.20 14:35 Сейчас в теме
19. user1193102 02.06.20 14:48 Сейчас в теме
20. rago 02.06.20 16:39 Сейчас в теме
Спасибо! УТ10.3 перестала ругаться! Плюсую!
21. evrakylon 02.06.20 16:57 Сейчас в теме
Спасибо за быстрый способ!
22. fzt 03.06.20 03:45 Сейчас в теме
Ошибку ищу свою, голову пеплом посыпаю, а оказывается ошибся не я. Спасибо.
23. user1418065 03.06.20 08:24 Сейчас в теме
Ребята помогите!У меня вот такая ошибка:
{Обработка.КлиентБанк.МодульОбъекта(50,46)}: Ожидается символ ';'
Перем РеквизитыПлДок_НазначениеНеОбязательные<<?>> = "НазначениеПлатежа1,НазначениеПлатежа2,НазначениеПлатежа3,НазначениеПлатежа4,НазначениеПлатежа5,НазначениеПлатежа6,КодВыплат,КодНазПлатежа"; (Проверка: Толстый клиент (обычное приложение))
{Обработка.КлиентБанк.МодульОбъекта(50,47)}: Неопознанный оператор
Перем РеквизитыПлДок_НазначениеНеОбязательные <<?>>= "НазначениеПлатежа1,НазначениеПлатежа2,НазначениеПлатежа3,НазначениеПлатежа4,НазначениеПлатежа5,НазначениеПлатежа6,КодВыплат,КодНазПлатежа"; (Проверка: Толстый клиент (обычное приложение))
24. andreyR3 1 03.06.20 08:39 Сейчас в теме
Перем РеквизитыПлДок_НазначениеНеОбязательные;

а потом

РеквизитыПлДок_НазначениеНеОбязательные = "НазначениеПлатежа1,НазначениеПлатежа2,НазначениеПлатежа3,НазначениеПлатежа4,НазначениеПлатежа5,НазначениеПлатежа6,КодВыплат,КодНазПлатежа";

или просто убрать Перем
25. user1418065 03.06.20 08:46 Сейчас в теме
andreyR3
Напиши,для особо тупых,как это должно выглядить.Я не понял просто)
Спасибо
27. andreyR3 1 03.06.20 09:10 Сейчас в теме
28. user1418065 03.06.20 09:15 Сейчас в теме
(27) {Обработка.КлиентБанк.МодульОбъекта(51,1)}: Объявления переменных должны быть расположены в начале модуля, процедуры или функции
<<?>>Перем РеквизитыПлДок_Аккредитив; (Проверка: Толстый клиент (обычное приложение))
{Обработка.КлиентБанк.МодульОбъекта(52,1)}: Объявления переменных должны быть расположены в начале модуля, процедуры или функции
<<?>>Перем РеквизитыПлДок_УсловияОпл; (Проверка: Толстый клиент (обычное приложение))
{Обработка.КлиентБанк.МодульОбъекта(53,1)}: Объявления переменных должны быть расположены в начале модуля, процедуры или функции
<<?>>Перем РеквизитыПлДок_Дополнительные; (Проверка: Толстый клиент (обычное приложение))
{Обработка.КлиентБанк.МодульОбъекта(55,1)}: Объявления переменных должны быть расположены в начале модуля, процедуры или функции
<<?>>Перем РеквизитыПлДокЭкс_Основные; (Проверка: Толстый клиент (обычное приложение))
{Обработка.КлиентБанк.МодульОбъекта(56,1)}: Объявления переменных должны быть расположены в начале модуля, процедуры или функции
<<?>>Перем РеквизитыПлДокЭкс_ВидПлатежаОплаты; (Проверка: Толстый клиент (обычное приложение))
{Обработка.КлиентБанк.МодульОбъекта(57,1)}: Объявления переменных должны быть расположены в начале модуля, процедуры или функции
<<?>>Перем РеквизитыПлДокЭкс_Плательщик; (Проверка: Толстый клиент (обычное приложение))
{Обработка.КлиентБанк.МодульОбъекта(58,1)}: Объявления переменных должны быть расположены в начале модуля, процедуры или функции
<<?>>Перем РеквизитыПлДокЭкс_ПлательщикНПР; (Проверка: Толстый клиент (обычное приложение))
{Обработка.КлиентБанк.МодульОбъекта(59,1)}: Объявления переменных должны быть расположены в начале модуля, процедуры или функции
<<?>>Перем РеквизитыПлДокЭкс_Получатель; (Проверка: Толстый клиент (обычное приложение))
{Обработка.КлиентБанк.МодульОбъекта(60,1)}: Объявления переменных должны быть расположены в начале модуля, процедуры или функции
<<?>>Перем РеквизитыПлДокЭкс_ПолучательНПР; (Проверка: Толстый клиент (обычное приложение))
{Обработка.КлиентБанк.МодульОбъекта(61,1)}: Объявления переменных должны быть расположены в начале модуля, процедуры или функции
<<?>>Перем РеквизитыПлДокЭкс_БюджетПлатеж; (Проверка: Толстый клиент (обычное приложение))
{Обработка.КлиентБанк.МодульОбъекта(63,1)}: Объявления переменных должны быть расположены в начале модуля, процедуры или функции
<<?>>Перем мТекущаяВалютаВзаиморасчетов; (Проверка: Толстый клиент (обычное приложение))
{Обработка.КлиентБанк.МодульОбъекта(67,1)}: Определения процедур и функций должны размещаться перед операторами тела модуля
<<?>>Функция ПолучитьВыборкуОрганизаций() Экспорт (Проверка: Толстый клиент (обычное приложение))
29. user1418065 03.06.20 09:16 Сейчас в теме
(27) У тебя нет случайно этой обработки с исправленной ошибкой? Плиз.Бухи над душёй стоят уже второй день
31. andreyR3 1 03.06.20 09:25 Сейчас в теме
(29) Обработки нет.

Служебное слово(описатель) 'Перем' не может использоваться одновременно с оператором присваивания (=).

поэтому код должен выглядеть:
Перем РеквизитыПлДок_НазначениеНеОбязательные;
РеквизитыПлДок_НазначениеНеОбязательные = "НазначениеПлатежа1,НазначениеПлатежа2,НазначениеПлатежа3,НазначениеПлатежа4,НазначениеПлатежа5,НазначениеПлатежа6,КодВыплат,КодНазПлатежа";


или, поскольку 'Перем' не обязательный описатель его можно просто удалить. Т.е. можно и так:
РеквизитыПлДок_НазначениеНеОбязательные = "НазначениеПлатежа1,НазначениеПлатежа2,НазначениеПлатежа3,НазначениеПлатежа4,НазначениеПлатежа5,НазначениеПлатежа6,КодВыплат,КодНазПлатежа";
32. user1418065 03.06.20 09:39 Сейчас в теме
(31) в ошибку вываливается,я пробывал оба варианта
42. demon75 05.06.20 11:06 Сейчас в теме
(29) Могу подкинуть исправленную с УПП 1.3 (8.2) как внешняя обработка. Способ указанный автором работает.
Прикрепленные файлы:
Клиент банкМод3.epf
26. user1418065 03.06.20 08:58 Сейчас в теме
перем
Прикрепленные файлы:
30. Fanat31 03.06.20 09:20 Сейчас в теме
Спасибо огромное. УТ 10.3 работает
33. user1418065 03.06.20 09:40 Сейчас в теме
(30) Скинь крин пож.У меня ничего не получатся
35. Fanat31 03.06.20 13:34 Сейчас в теме
34. кольщик 03.06.20 13:24 Сейчас в теме
Подскажите, в КА 2.4 что то нужно менять или так всё будет работать?
36. hjvf434 04.06.20 10:15 Сейчас в теме
37. nik_rzn 04.06.20 12:58 Сейчас в теме
Здравствуйте, не подскажите вот выгрузка хмл файл обмена с банком

<?xml version="1.0" encoding="windows-1251" ?>
<СчетаПК xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://v8.1c.ru/edi/edi_stnd/109" xsi:type="СчетПК" ДатаФормирования="2020-06-04" НомерДоговора="7831142" ДатаДоговора="2020-01-01" НаименованиеОрганизации="Общество с ограниченной ответственностью 'Феррум'" ИНН="5072712165" РасчетныйСчетОрганизации="40702810240230100427" БИК="044525225" ИдПервичногоДокумента="f9a1ba2b-a638-11ea-b9ec-005056c00008">
	<ЗачислениеЗарплаты>
		<Сотрудник Нпп="1">
			<Фамилия>Пупки</Фамилия>
			<Имя>Николай</Имя>
			<Отчество>Евгеньевич</Отчество>
			<ОтделениеБанка>01</ОтделениеБанка>
			<ЛицевойСчет>8888888888888888</ЛицевойСчет>
			<Сумма>7777777</Сумма>
		</Сотрудник>
	</ЗачислениеЗарплаты>
	<КонтрольныеСуммы>
		<КоличествоЗаписей>1</КоличествоЗаписей>
		<СуммаИтого>7777777</СуммаИтого>
	</КонтрольныеСуммы>
</СчетаПК>
Показать



Куда мне секцию нужно вставить КодНазПлатежа ???
39. nik_rzn 04.06.20 17:42 Сейчас в теме
(37) спасибо за внимание ) нашел ответ т.е схему xsd тут если кого заинтересует https://v8.1c.ru/tekhnologii/obmen-dannymi-i-integratsiya/standarty-i-formaty/standart-obmena-dannymi-po-zarplatnym-proektam/
38. user917250 04.06.20 14:49 Сейчас в теме
Большое человеческое спасибо. В Бухгалтерии 2.0 работает.
40. ssergey5135 05.06.20 09:37 Сейчас в теме
Спасибо за подсказку, у самого руки не дошли. Конфигурация УТ 10.3.58.2
43. andy3626603 06.06.20 13:36 Сейчас в теме
Спасибо большое за инструкцию. Вы сэкономили кучу времени мне и денег клиентам)
46. eddoptimist 08.06.20 12:46 Сейчас в теме
47. Homs 09.06.20 05:31 Сейчас в теме
Спасибо. Быстро исправил.
48. nikifan 09.06.20 08:38 Сейчас в теме
Спасибо огромное! УПП 1.3.130.1
49. user934971 09.06.20 20:49 Сейчас в теме
Спасибо!!!!!!!!!!! УТ10.3 заработало!
50. Sokar 10.06.20 09:07 Сейчас в теме
51. SerShl 16.06.20 10:58 Сейчас в теме
Спасибо!!!
Софт-Портал: "Управление сбытом тепловой энергии" (5.0.31.1) заработало.
52. marshalbratsk 16.06.20 16:05 Сейчас в теме
Круто! спасибо автор!
Для Бух 2.0 КОРП прокатило
53. user591448 24.06.20 15:01 Сейчас в теме
Добрый день! А не подскажите как исправить данную ошибку в УТ 11.1?
54. user970589 4 16.07.20 15:28 Сейчас в теме
57. user819028 03.08.20 12:06 Сейчас в теме
58. maksa2005 347 10.08.20 08:17 Сейчас в теме
59. Elvina 5 11.08.20 07:03 Сейчас в теме
60. buba 11.08.20 13:04 Сейчас в теме
61. ValeriyZ 18 28.08.20 07:48 Сейчас в теме
Благодарю! На УТ 10.3 получилось, самому отлаживаться не пришлось.
62. user1459085 04.09.20 14:09 Сейчас в теме
У меня модуль объекта открываю и не внести исправления, потому что "Только для чтения". Куда зайти, убрать "только для чтения", подскажите пожалуйста. Проверила свои права, стоят все галки-администратора!
63. user1386419 13.10.20 10:15 Сейчас в теме
Подскажите пожалуйста, на УНФ работает? Не могу найти где править, HELP!!!!


// ПРОЦЕДУРЫ И ФУНКЦИИ ЗАГРУЗКИ

// Функция проверяет документ для загрузки.
//
Функция ПроверитьДокументДляЗагрузки(СтруктураДокумента)
	
	Результат = "";
	
	Если СтруктураДокумента.Готовность > 3 Тогда
		Результат = СтруктураДокумента.ОписаниеОшибок;
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции // ПроверитьДокументДляЗагрузки()

// Процедура устанавливает свойство.
//
Процедура УстановитьСвойство(Объект, ИмяСвойства, ЗначениеСвойства, ОбязательнаяЗаменаСтарогоЗначения = Ложь, ЭтоНовыйДокумент)
	
	Если ЗначениеСвойства <> Неопределено
	   И Объект[ИмяСвойства] <> ЗначениеСвойства Тогда
		Если ЭтоНовыйДокумент
		 ИЛИ (НЕ ЗначениеЗаполнено(Объект[ИмяСвойства])
		 ИЛИ ОбязательнаяЗаменаСтарогоЗначения)
		 ИЛИ ТипЗнч(Объект[ИмяСвойства]) = Тип("Булево")
		 ИЛИ ТипЗнч(Объект[ИмяСвойства]) = Тип("Дата") Тогда
			Объект[ИмяСвойства] = ЗначениеСвойства;
		КонецЕсли
	КонецЕсли;
	
КонецПроцедуры // УстановитьСвойство()

// Процедура рассчитывает курс и сумму документа.
//
Процедура РассчитатьКурсИСуммуРасчетов(СтрокаПлатеж, ВалютаРасчетов, ДатаКурса, ОбъектДокумента, ЭтоНовыйДокумент)
	
	СтруктураКурсаРасчетов = ПолучитьКурсВалюты(ВалютаРасчетов, ДатаКурса);
	СтруктураКурсаРасчетов.Курс = ?(СтруктураКурсаРасчетов.Курс = 0, 1, СтруктураКурсаРасчетов.Курс);
	СтруктураКурсаРасчетов.Кратность = ?(СтруктураКурсаРасчетов.Кратность = 0, 1, СтруктураКурсаРасчетов.Кратность);
	
	УстановитьСвойство(
		СтрокаПлатеж,
		"Курс",
		СтруктураКурсаРасчетов.Курс,
		,
		ЭтоНовыйДокумент
	);
	УстановитьСвойство(
		СтрокаПлатеж,
		"Кратность",
		СтруктураКурсаРасчетов.Кратность,
		,
		ЭтоНовыйДокумент
	);
	СтруктураКурсаДокумента = ПолучитьКурсВалюты(ОбъектДокумента.ВалютаДенежныхСредств, ДатаКурса);
	
	СуммаРасчетов = ПересчитатьИзВалютыВВалюту(
		СтрокаПлатеж.СуммаПлатежа,
		СтруктураКурсаДокумента.Курс,
		СтруктураКурсаРасчетов.Курс,
		СтруктураКурсаДокумента.Кратность,
		СтруктураКурсаРасчетов.Кратность
	);
	
	УстановитьСвойство(
		СтрокаПлатеж,
		"СуммаРасчетов",
		СуммаРасчетов,
		Истина,
		ЭтоНовыйДокумент
	);
	
КонецПроцедуры // РассчитатьКурсИСуммуРасчетов()

// Функция получает представление объекта.
//
Функция ПолучитьПредставлениеОбъекта(Объект)
	
	Если ТипЗнч(Объект) = Тип("ДокументОбъект.ПоступлениеНаСчет") Тогда
		НазваниеОбъекта = НСтр(
			"ru = 'документ ""Поступление на счет"" № %Номер% от %Дата%'"
		);
		НазваниеОбъекта = СтрЗаменить(НазваниеОбъекта, "%Номер%", Строка(СокрЛП(Объект.Номер)));
		НазваниеОбъекта = СтрЗаменить(НазваниеОбъекта, "%Дата%", Строка(Объект.Дата));
	ИначеЕсли ТипЗнч(Объект) = Тип("ДокументОбъект.РасходСоСчета") Тогда
		НазваниеОбъекта = НСтр(
			"ru = 'документ ""Расход со счета"" № %Номер% от %Дата%'"
		);
		НазваниеОбъекта = СтрЗаменить(НазваниеОбъекта, "%Номер%", Строка(СокрЛП(Объект.Номер)));
		НазваниеОбъекта = СтрЗаменить(НазваниеОбъекта, "%Дата%", Строка(Объект.Дата));
	Иначе
		НазваниеОбъекта = НСтр("ru = 'объект'");
	КонецЕсли;
	
	Возврат НазваниеОбъекта;
	
КонецФункции // ПолучитьПредставлениеОбъекта()

// Процедура заполняет реквизиты документа РасходСоСчета.
//
Процедура ЗаполнитьРеквизитыРасходСоСчета(ОбъектДокумента, ИсходныеДанные, ЭтоНовыйДокумент)
	
	// Заполнение шапки документа.
	УстановитьСвойство(
		ОбъектДокумента,
		"Дата",
		ИсходныеДанные.ДатаДок,
		,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"ВидОперации",
		ИсходныеДанные.ВидОперации,
		Истина,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"Организация",
		Организация,
		,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"БанковскийСчет",
		ИсходныеДанные.БанковскийСчет,
		Истина,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"ВалютаДенежныхСредств",
		ИсходныеДанные.БанковскийСчет.ВалютаДенежныхСредств,
		Истина,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"Статья",
		ИсходныеДанные.СтатьяДДС,
		Истина,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"СуммаДокумента",
		ИсходныеДанные.СуммаДокумента,
		Истина,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"НомерВходящегоДокумента",
		ИсходныеДанные.НомерДок,
		,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"ДатаВходящегоДокумента",
		ИсходныеДанные.ДатаДок,
		,
		ЭтоНовыйДокумент
	);
	
	Если ЭтоНовыйДокумент Тогда
		ОбъектДокумента.УстановитьНовыйНомер();
		Если ИсходныеДанные.ВидОперации = Перечисления.ВидыОперацийРасходСоСчета.Покупателю Тогда
			ОбъектДокумента.НалогообложениеНДС = УправлениеНебольшойФирмойСервер.НалогообложениеНДС(Организация, , ИсходныеДанные.ДатаДок);
		Иначе
			ОбъектДокумента.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ОблагаетсяНДС;
		КонецЕсли;
	КонецЕсли;
	
	// Заполнение табличной части документа.
	Если ИсходныеДанные.ВидОперации = Перечисления.ВидыОперацийРасходСоСчета.Поставщику
	 ИЛИ ИсходныеДанные.ВидОперации = Перечисления.ВидыОперацийРасходСоСчета.Покупателю Тогда
		
		Если ТипЗнч(ИсходныеДанные.СчетКонтрагента) <> Тип("Строка") Тогда
			УстановитьСвойство(
				ОбъектДокумента,
				"СчетКонтрагента",
				ИсходныеДанные.СчетКонтрагента,
				,
				ЭтоНовыйДокумент
			);
		КонецЕсли;
			
		УстановитьСвойство(
			ОбъектДокумента,
			"Контрагент",
			ИсходныеДанные.Контрагент,
			,
			ЭтоНовыйДокумент
		);
		
		Если ОбъектДокумента.РасшифровкаПлатежа.Количество() = 0 Тогда
			СтрокаРасшифровки = ОбъектДокумента.РасшифровкаПлатежа.Добавить();
		Иначе
			СтрокаРасшифровки = ОбъектДокумента.РасшифровкаПлатежа[0];
		КонецЕсли;
		
		ОднаСтрокаВРасшифровкеПлатежа = ОбъектДокумента.РасшифровкаПлатежа.Количество() = 1;
		
		УстановитьСвойство(
			СтрокаРасшифровки,
			"Договор",
			?(ИсходныеДанные.Договор = "Не найден", Неопределено, ИсходныеДанные.Договор),
			,
			ЭтоНовыйДокумент
		);
		
		УстановитьСвойство(
			СтрокаРасшифровки,
			"ПризнакАванса",
			ИсходныеДанные.ПризнакАванса,
			Истина,
			ЭтоНовыйДокумент
		);
	
		Если ЭтоНовыйДокумент
		 ИЛИ ОднаСтрокаВРасшифровкеПлатежа
		   И СтрокаРасшифровки.СуммаПлатежа <> ОбъектДокумента.СуммаДокумента Тогда
		
			СтрокаРасшифровки.СуммаПлатежа = ОбъектДокумента.СуммаДокумента;
			ДатаЗаполнения = ОбъектДокумента.Дата;
			ВалютаРасчетов = СтрокаРасшифровки.Договор.ВалютаРасчетов;
			
			РассчитатьКурсИСуммуРасчетов(
				СтрокаРасшифровки,
				ВалютаРасчетов,
				ДатаЗаполнения,
				ОбъектДокумента,
				ЭтоНовыйДокумент
			);
			
			Если СтрокаРасшифровки.Курс = 0 Тогда
				
				УстановитьСвойство(
					СтрокаРасшифровки,
					"Курс",
					1,
					,
					ЭтоНовыйДокумент
				);
				
				УстановитьСвойство(
					СтрокаРасшифровки,
					"Кратность",
					1,
					,
					ЭтоНовыйДокумент
				);
				
				УстановитьСвойство(
					СтрокаРасшифровки,
					"СуммаРасчетов",
					СтрокаРасшифровки.СуммаПлатежа,
					,
					ЭтоНовыйДокумент
				);
				
			КонецЕсли;
			
			Если ОбъектДокумента.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ОблагаетсяНДС Тогда
				
				СтавкаНДСПоУмолчанию = ОбъектДокумента.Организация.СтавкаНДСПоУмолчанию;
				ЗначениеСтавкиНДС = УправлениеНебольшойФирмойПовтИсп.ПолучитьЗначениеСтавкиНДС(СтавкаНДСПоУмолчанию);
				
				СтрокаРасшифровки.СтавкаНДС = СтавкаНДСПоУмолчанию;
				СтрокаРасшифровки.СуммаНДС = СтрокаРасшифровки.СуммаПлатежа
					- (СтрокаРасшифровки.СуммаПлатежа)
					/ ((ЗначениеСтавкиНДС + 100) / 100);
				
			Иначе
				
				Если ОбъектДокумента.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.НеОблагаетсяНДС Тогда
					СтавкаНДСПоУмолчанию = УправлениеНебольшойФирмойПовтИсп.ПолучитьСтавкуНДСБезНДС();
				Иначе
					СтавкаНДСПоУмолчанию = УправлениеНебольшойФирмойПовтИсп.ПолучитьСтавкуНДСНоль();
				КонецЕсли;
				
				СтрокаРасшифровки.СтавкаНДС = СтавкаНДСПоУмолчанию;
				СтрокаРасшифровки.СуммаНДС = 0;
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры // ЗаполнитьРеквизитыРасходСоСчета()

// Процедура заполняет реквизиты документа ПоступлениеНаСчет.
//
Процедура ЗаполнитьРеквизитыПоступлениеНаСчет(ОбъектДокумента, ИсходныеДанные, ЭтоНовыйДокумент)
	
	УстановитьСвойство(
		ОбъектДокумента,
		"Дата",
		ИсходныеДанные.ДатаДок,
		,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"ВидОперации",
		ИсходныеДанные.ВидОперации,
		Истина,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"Организация",
		Организация,
		,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"БанковскийСчет",
		ИсходныеДанные.БанковскийСчет,
		Истина,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"ВалютаДенежныхСредств",
		ИсходныеДанные.БанковскийСчет.ВалютаДенежныхСредств,
		Истина,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"Статья",
		ИсходныеДанные.СтатьяДДС,
		Истина,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"СуммаДокумента",
		ИсходныеДанные.СуммаДокумента,
		Истина,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"НомерВходящегоДокумента",
		ИсходныеДанные.НомерДок,
		,
		ЭтоНовыйДокумент
	);
	
	УстановитьСвойство(
		ОбъектДокумента,
		"ДатаВходящегоДокумента",
		ИсходныеДанные.ДатаДок,
		,
		ЭтоНовыйДокумент
	);
	
	Если ЭтоНовыйДокумент Тогда
		ОбъектДокумента.УстановитьНовыйНомер();
		Если ОбъектДокумента.ВидОперации = Перечисления.ВидыОперацийПоступлениеНаСчет.ОтПокупателя Тогда
			ОбъектДокумента.НалогообложениеНДС = УправлениеНебольшойФирмойСервер.НалогообложениеНДС(Организация, , ИсходныеДанные.ДатаДок);
		Иначе
			ОбъектДокумента.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ОблагаетсяНДС;
		КонецЕсли;
	КонецЕсли;
	
	// Заполнение табличной части документа.
	Если ИсходныеДанные.ВидОперации = Перечисления.ВидыОперацийПоступлениеНаСчет.ОтПокупателя
	 ИЛИ ИсходныеДанные.ВидОперации = Перечисления.ВидыОперацийПоступлениеНаСчет.ОтПоставщика Тогда
	 
		Если ТипЗнч(ИсходныеДанные.СчетКонтрагента) <> Тип("Строка") Тогда
			УстановитьСвойство(
				ОбъектДокумента,
				"СчетКонтрагента",
				ИсходныеДанные.СчетКонтрагента,
				,
				ЭтоНовыйДокумент
			);
		КонецЕсли;
		
		УстановитьСвойство(
			ОбъектДокумента,
			"Контрагент",
			ИсходныеДанные.Контрагент,
			,
			ЭтоНовыйДокумент
		);
		
		Если ОбъектДокумента.РасшифровкаПлатежа.Количество() = 0 Тогда
			СтрокаРасшифровки = ОбъектДокумента.РасшифровкаПлатежа.Добавить();
		Иначе
			СтрокаРасшифровки = ОбъектДокумента.РасшифровкаПлатежа[0];
		КонецЕсли;
		
		ОднаСтрокаВРасшифровкеПлатежа = ОбъектДокумента.РасшифровкаПлатежа.Количество() = 1;
		
		УстановитьСвойство(
			СтрокаРасшифровки,
			"Договор",
			?(ИсходныеДанные.Договор = "Не найден", Неопределено, ИсходныеДанные.Договор),
			,
			ЭтоНовыйДокумент
		);
		
		УстановитьСвойство(
			СтрокаРасшифровки,
			"ПризнакАванса",
			ИсходныеДанные.ПризнакАванса,
			Истина,
			ЭтоНовыйДокумент
		);
		
		// Заполнение табличной части документа.
		Если ЭтоНовыйДокумент
		 ИЛИ ОднаСтрокаВРасшифровкеПлатежа
		   И СтрокаРасшифровки.СуммаПлатежа <> ОбъектДокумента.СуммаДокумента Тогда
			
			СтрокаРасшифровки.СуммаПлатежа = ОбъектДокумента.СуммаДокумента;
			ДатаЗаполнения = ОбъектДокумента.Дата;
			ВалютаРасчетов = СтрокаРасшифровки.Договор.ВалютаРасчетов;
			
			РассчитатьКурсИСуммуРасчетов(
				СтрокаРасшифровки,
				ВалютаРасчетов,
				ДатаЗаполнения,
				ОбъектДокумента,
				ЭтоНовыйДокумент
			);
			
			Если СтрокаРасшифровки.Курс = 0 Тогда
				
				УстановитьСвойство(
					СтрокаРасшифровки,
					"Курс",
					1,
					,
					ЭтоНовыйДокумент
				);
				
				УстановитьСвойство(
					СтрокаРасшифровки,
					"Кратность",
					1,
					,
					ЭтоНовыйДокумент
				);
				
				УстановитьСвойство(
					СтрокаРасшифровки,
					"СуммаРасчетов",
					СтрокаРасшифровки.СуммаПлатежа,
					,
					ЭтоНовыйДокумент
				);
				
			КонецЕсли;
			
			Если ОбъектДокумента.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ОблагаетсяНДС Тогда
				
				СтавкаНДСПоУмолчанию = ОбъектДокумента.Организация.СтавкаНДСПоУмолчанию;
				ЗначениеСтавкиНДС = УправлениеНебольшойФирмойПовтИсп.ПолучитьЗначениеСтавкиНДС(СтавкаНДСПоУмолчанию);
				
				СтрокаРасшифровки.СтавкаНДС = СтавкаНДСПоУмолчанию;
				СтрокаРасшифровки.СуммаНДС = СтрокаРасшифровки.СуммаПлатежа
					- (СтрокаРасшифровки.СуммаПлатежа)
					/ ((ЗначениеСтавкиНДС + 100) / 100);
				
			Иначе
				
				Если ОбъектДокумента.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.НеОблагаетсяНДС Тогда
					СтавкаНДСПоУмолчанию = УправлениеНебольшойФирмойПовтИсп.ПолучитьСтавкуНДСБезНДС();
				Иначе
					СтавкаНДСПоУмолчанию = УправлениеНебольшойФирмойПовтИсп.ПолучитьСтавкуНДСНоль();
				КонецЕсли;
				
				СтрокаРасшифровки.СтавкаНДС = СтавкаНДСПоУмолчанию;
				СтрокаРасшифровки.СуммаНДС = 0;
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры // ЗаполнитьРеквизитыПоступлениеНаСчет()

// Процедура задает пометку на удаление.
//
Процедура ЗадатьПометкуНаУдаление(ОбъектДляПометки, Пометка)
	
	НазваниеОбъекта = ПолучитьПредставлениеОбъекта(ОбъектДляПометки);
	НазваниеДействия = ?(Пометка, НСтр("ru = ' помечен на удаление'"), НСтр("ru = ' отменена пометка на удаление'"));
	Попытка
		ОбъектДляПометки.Записать(РежимЗаписиДокумента.Запись);
		ОбъектДляПометки.УстановитьПометкуУдаления(Пометка);
		ТекстСообщения = НСтр("ru = '%НазваниеОбъектаЛев% %НазваниеОбъектаСред%: %НазваниеДействия%.'");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%НазваниеОбъектаЛев%", ВРег(Лев(НазваниеОбъекта, 1)));
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%НазваниеОбъектаСред%", Сред(НазваниеОбъекта, 2));
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%НазваниеДействия%", НазваниеДействия);		
		УправлениеНебольшойФирмойСервер.СообщитьОбОшибке(ЭтотОбъект, ТекстСообщения);		
	Исключение
		ТекстСообщения = НСтр("ru = '%НазваниеОбъектаЛев% %НазваниеОбъектаСред%: не %НазваниеДействия%! Произошли ошибки при записи!'");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%НазваниеОбъектаЛев%", ВРег(Лев(НазваниеОбъекта, 1)));
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%НазваниеОбъектаСред%", Сред(НазваниеОбъекта, 2));
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%НазваниеДействия%", НазваниеДействия);
		УправлениеНебольшойФирмойСервер.СообщитьОбОшибке(ЭтотОбъект, ТекстСообщения);
	КонецПопытки
	
КонецПроцедуры // ЗадатьПометкуНаУдаление()

// Процедура записывает объект.
//
Процедура ЗаписатьОбъект(ОбъектДляЗаписи, СтрокаСекции, ЭтоНовыйДокумент)
	
	ТипДокумента = ОбъектДляЗаписи.Метаданные().Имя;
	Если ТипДокумента = "РасходСоСчета" Тогда
		ИмяДокумента = "Расход со счета";
		Если ЗаполнятьДолгиАвтоматически И СтрокаСекции.ВидОперации = Перечисления.ВидыОперацийРасходСоСчета.Поставщику Тогда
			УправлениеНебольшойФирмойСервер.ЗаполнитьРасшифровкуПлатежаРасход(ОбъектДляЗаписи,,,,, СтрокаСекции.Договор);
		КонецЕсли;
	ИначеЕсли ТипДокумента = "ПоступлениеНаСчет" Тогда
		ИмяДокумента = "Поступление на счет";
		Если ЗаполнятьДолгиАвтоматически И СтрокаСекции.ВидОперации = Перечисления.ВидыОперацийПоступлениеНаСчет.ОтПокупателя Тогда
			УправлениеНебольшойФирмойСервер.ЗаполнитьРасшифровкуПлатежаПриход(ОбъектДляЗаписи,,,,, СтрокаСекции.Договор);
		КонецЕсли;
	КонецЕсли;
	УстановитьСвойство(
		ОбъектДляЗаписи,
		"НазначениеПлатежа",
		СтрокаСекции.НазначениеПлатежа,
		,
		ЭтоНовыйДокумент
	);
	УстановитьСвойство(
		ОбъектДляЗаписи,
		"Автор",
		Пользователи.ТекущийПользователь(),
		Истина,
		ЭтоНовыйДокумент
	);
	ОбъектМодифицирован = ОбъектДляЗаписи.Модифицированность();
	ОбъектПроведен = ОбъектДляЗаписи.Проведен;
	НазваниеОбъекта = ПолучитьПредставлениеОбъекта(ОбъектДляЗаписи);
	
	Если ОбъектМодифицирован Тогда
		Попытка
			Если ОбъектПроведен Тогда
				ОбъектДляЗаписи.Записать(РежимЗаписиДокумента.ОтменаПроведения);
				СтрокаСекции.Проведен = ОбъектДляЗаписи.Проведен;
			Иначе
				ОбъектДляЗаписи.Записать(РежимЗаписиДокумента.Запись);
			КонецЕсли;
			ТекстСообщения = НСтр("ru = '%Статус% %НазваниеОбъекта%.'");
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Статус%" , ?(ЭтоНовыйДокумент, НСтр("ru = 'Создан '"), НСтр("ru = 'Перезаписан '")));
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%НазваниеОбъекта%", НазваниеОбъекта);
			УправлениеНебольшойФирмойСервер.СообщитьОбОшибке(ЭтотОбъект, ТекстСообщения);
		Исключение
			ТекстСообщения = НСтр("ru = '%НазваниеОбъектаЛев% %НазваниеОбъектаСред% %Статус%! Произошли ошибки при записи!'");
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%НазваниеОбъектаЛев%", ВРег(Лев(НазваниеОбъекта, 1)));
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%НазваниеОбъектаСред%", Сред(НазваниеОбъекта, 2));
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Статус%", ?(ОбъектДляЗаписи.ЭтоНовый(), НСтр("ru = ' не создан'"), НСтр("ru = ' не записан'")));
			УправлениеНебольшойФирмойСервер.СообщитьОбОшибке(ЭтотОбъект, ТекстСообщения);
			Возврат;
		КонецПопытки;
	Иначе
		ТекстСообщения = НСтр("ru = 'Уже существует %НазваниеОбъекта%. Возможно загрузка производилась ранее.'");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%НазваниеОбъекта%", НазваниеОбъекта);
		УправлениеНебольшойФирмойСервер.СообщитьОбОшибке(ЭтотОбъект, ТекстСообщения);
	КонецЕсли;
	
	Если ПроводитьЗагружаемые И (ОбъектМодифицирован ИЛИ НЕ ОбъектПроведен) Тогда
		Попытка
			ОбъектДляЗаписи.Записать(РежимЗаписиДокумента.Проведение);
			ТекстСообщения = НСтр("ru = '%Статус% %НазваниеОбъекта% %Статус%'");
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Статус%", ?(ОбъектПроведен, НСтр("ru = 'Перепроведен '"), НСтр("ru = 'Проведен '")));
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%НазваниеОбъекта%", НазваниеОбъекта);
			УправлениеНебольшойФирмойСервер.СообщитьОбОшибке(ЭтотОбъект, ТекстСообщения);
			СтрокаСекции.Проведен = ОбъектДляЗаписи.Проведен;
		Исключение
			ТекстСообщения = НСтр("ru = '%НазваниеОбъектаЛев% %НазваниеОбъектаСред% не проведен! Произошли ошибки при проведении!'");
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%НазваниеОбъектаЛев%", ВРег(Лев(НазваниеОбъекта, 1)));
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%НазваниеОбъектаСред%", Сред(НазваниеОбъекта, 2));
			УправлениеНебольшойФирмойСервер.СообщитьОбОшибке(ЭтотОбъект, ТекстСообщения);
		КонецПопытки
	КонецЕсли;
	
КонецПроцедуры // ЗаписатьОбъект()

// Процедура синхронизирует документы по счетам.
//
Процедура СинхронизироватьДокументыПоСчетам(ДокументыКИмпорту, ВидДокументовИсходящих, ВидДокументовВходящих, НачалоИнтервалаЗагрузки, КонецИнтервалаЗагрузки, ИмпортРасчетныеСчета)
	
	// Составляем список счетов.
	СписокСчетов = Новый СписокЗначений;
	Для каждого СтрокаСчета Из ИмпортРасчетныеСчета Цикл
		СписокСчетов.Добавить(СокрЛП(СтрокаСчета.РасчСчет));
	КонецЦикла;
	
	ДокументыНаУдаление = Новый Запрос(
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	" + ВидДокументовИсходящих + ".Ссылка,
	|	" + ВидДокументовИсходящих + ".Дата,
	|	" + ВидДокументовИсходящих + ".БанковскийСчет.НомерСчета
	|ИЗ
	|	Документ." + ВидДокументовИсходящих + " КАК " + ВидДокументовИсходящих + "
	|ГДЕ
	|	" + ВидДокументовИсходящих + ".Дата >= &ДатаНач
	| И " + ВидДокументовИсходящих + ".Дата <= &ДатаКон
	| И " + ВидДокументовИсходящих + ".БанковскийСчет.НомерСчета В(&НомераСчетов)");
	
	ДокументыНаУдаление.УстановитьПараметр("ДатаНач", НачалоИнтервалаЗагрузки);
	ДокументыНаУдаление.УстановитьПараметр("ДатаКон", КонецИнтервалаЗагрузки);
	ДокументыНаУдаление.УстановитьПараметр("НомераСчетов", СписокСчетов);
	ВыборкаДокументов = ДокументыНаУдаление.Выполнить().Выбрать();
	
	Пока ВыборкаДокументов.Следующий() Цикл
		СтрокаВТаблицеИмпорта = ДокументыКИмпорту.Найти(ВыборкаДокументов.Ссылка, "Документ"); 		
		Если СтрокаВТаблицеИмпорта = Неопределено Тогда
			ОбъектДокументаКУдаление = ВыборкаДокументов.Ссылка.ПолучитьОбъект();
			Если ИспользоватьГраницуОбработки Тогда
				Если ЗначениеЗаполнено(ДатаГраницыОбработки) Тогда
					Если НачалоДня(ОбъектДокументаКУдаление.Дата) <= НачалоДня(ДатаГраницыОбработки) Тогда
						ТекстСообщения = НСтр("ru = 'Платежный документ ""%ОбъектДокументаКУдаление%"" не помечен на удаление, так как имеет дату равной или меньшей границы обработки!'");
						ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ОбъектДокументаКУдаление%", ОбъектДокументаКУдаление);
						УправлениеНебольшойФирмойСервер.СообщитьОбОшибке(ЭтотОбъект, ТекстСообщения);
						Продолжить;
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
			ЗадатьПометкуНаУдаление(ОбъектДокументаКУдаление, Истина);
		КонецЕсли;
	КонецЦикла;
	
	// Поступления на счет, отсутствующие в списке загруженным помечаем
	// на удаление.
	ДокументыНаУдаление = Новый Запрос(
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	" + ВидДокументовВходящих + ".Ссылка,
	|	" + ВидДокументовВходящих + ".ДатаВходящегоДокумента,
	|	" + ВидДокументовВходящих + ".БанковскийСчет.НомерСчета
	|ИЗ
	|	Документ." + ВидДокументовВходящих + " КАК " + ВидДокументовВходящих + "
	|ГДЕ
	|	" + ВидДокументовВходящих + ".ДатаВходящегоДокумента >= &ДатаНач
	| И " + ВидДокументовВходящих + ".ДатаВходящегоДокумента <= &ДатаКон
	| И " + ВидДокументовВходящих + ".БанковскийСчет.НомерСчета В(&НомераСчетов)");
	
	ДокументыНаУдаление.УстановитьПараметр("ДатаНач", НачалоИнтервалаЗагрузки);
	ДокументыНаУдаление.УстановитьПараметр("ДатаКон", КонецИнтервалаЗагрузки);
	ДокументыНаУдаление.УстановитьПараметр("НомераСчетов", СписокСчетов);
	ВыборкаДокументов = ДокументыНаУдаление.Выполнить().Выбрать();
	
	Пока ВыборкаДокументов.Следующий() Цикл
		СтрокаВТаблицеИмпорта = ДокументыКИмпорту.Найти(ВыборкаДокументов.Ссылка, "Документ");
		Если СтрокаВТаблицеИмпорта = Неопределено Тогда
			ОбъектДокументаКУдаление = ВыборкаДокументов.Ссылка.ПолучитьОбъект();
			Если ИспользоватьГраницуОбработки Тогда
				Если ЗначениеЗаполнено(ДатаГраницыОбработки) Тогда
					Если НачалоДня(ОбъектДокументаКУдаление.Дата) <= НачалоДня(ДатаГраницыОбработки) Тогда
						ТекстСообщения = НСтр("ru = 'Платежный документ ""%ОбъектДокументаКУдаление%"" не помечен на удаление, так как имеет дату равной или меньшей границы обработки!'");
						ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ОбъектДокументаКУдаление%", ОбъектДокументаКУдаление);
						УправлениеНебольшойФирмойСервер.СообщитьОбОшибке(ЭтотОбъект, ТекстСообщения);
						Продолжить;
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
			ЗадатьПометкуНаУдаление(ОбъектДокументаКУдаление, Истина);
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры // СинхронизироватьДокументыПоСчетам()

// Функция возвращает найденный элемент дерева.
//
Функция НайтиЭлементДерева(ЭлементыДерева, ИмяКолонки, ИскомоеЗначение)
	
	Для Ном = 0 По ЭлементыДерева.Количество() - 1 Цикл
		
		ЭлементДерева = ЭлементыДерева.Получить(Ном);
		
		Если ЭлементДерева[ИмяКолонки] = ИскомоеЗначение Тогда
			Возврат ЭлементДерева;
		КонецЕсли;
		
		Если ЭлементДерева.ПолучитьЭлементы().Количество() > 0 Тогда
			
			РезультатПоиска = НайтиЭлементДерева(ЭлементДерева.ПолучитьЭлементы(), ИмяКолонки, ИскомоеЗначение);
			
			Если НЕ РезультатПоиска = Неопределено Тогда
				Возврат РезультатПоиска;
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат Неопределено;
	
КонецФункции // НайтиЭлементДерева()

// Функция ищет банк по БИК или корр. счету и возвращает найденное значение.
//
Функция НайтиБанкПоБикИКоррСчету(БИК, КоррСчет)
	
	НайденныйБанк = Справочники.Банки.ПустаяСсылка();
	
	Если НЕ ПустаяСтрока(БИК) Тогда
		НайденныйБанк = Справочники.Банки.НайтиПоКоду(БИК);
	КонецЕсли;
	
	Если НайденныйБанк = Справочники.Банки.ПустаяСсылка() Тогда
		НайденныйБанк = Справочники.Банки.НайтиПоРеквизиту("КоррСчет", КоррСчет);
	КонецЕсли;

	Возврат НайденныйБанк;

КонецФункции // НайтиБанкПоБикИКоррСчету()

// Функция создает контрагента.
//
Функция СоздатьКонтрагента(СтрокаКонтрагент = Неопределено) Экспорт
	
	СообщатьОСозданномКонтрагенте	  = Ложь;
	СообщатьОСозданномБанковскомСчете = Ложь;
	
	// Эти элементы есть у всех справочников.
	Если НЕ ТипЗнч(СтрокаКонтрагент.Реквизит) = Тип("СправочникСсылка.Контрагенты") Тогда
		
		НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент();
		
		НовыйЭлемент.Наименование = СтрокаКонтрагент.Представление;
		НовыйЭлемент.НаименованиеПолное = СтрокаКонтрагент.Представление;
		НовыйЭлемент.ИНН = СтрокаКонтрагент.ПолучитьЭлементы()[1].Значение;
		НовыйЭлемент.КПП = СтрокаКонтрагент.ПолучитьЭлементы()[2].Значение;
		
		Если СтрДлина(НовыйЭлемент.ИНН) = 12 Тогда
			НовыйЭлемент.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо;
		Иначе
			НовыйЭлемент.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо;
		КонецЕсли;
		
		НовыйЭлемент.СчетУчетаРасчетовСПокупателем = ПланыСчетов.Управленческий.РасчетыСПокупателями;
		НовыйЭлемент.СчетУчетаАвансовПокупателя = ПланыСчетов.Управленческий.РасчетыПоАвансамПолученным;
		НовыйЭлемент.СчетУчетаРасчетовСПоставщиком = ПланыСчетов.Управленческий.РасчетыСПоставщиками;
		НовыйЭлемент.СчетУчетаАвансовПоставщику = ПланыСчетов.Управленческий.РасчетыПоАвансамВыданным;
		НовыйЭлемент.ВестиРасчетыПоДоговорам = Истина;
		НовыйЭлемент.ВестиРасчетыПоДокументам = Истина;
		НовыйЭлемент.ВестиРасчетыПоЗаказам = Истина;
		НовыйЭлемент.ВестиУчетОплатыПоСчетам = Истина;
		
		НовыйЭлемент.Записать();
		
		СообщатьОСозданномКонтрагенте = Истина;
		
	Иначе
		
		НовыйЭлемент = СтрокаКонтрагент.Реквизит.ПолучитьОбъект();
		
	КонецЕсли;
	
	Если СообщатьОСозданномКонтрагенте Тогда
		
		Сообщение = Новый СообщениеПользователю;
		
		Сообщение.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Контрагент (%1) создан.'"), СтрокаКонтрагент.Представление);
		
		Сообщение.Сообщить();
		
		ПредставлениеКонтрагента = "" + Символы.Таб + "- ";
		
	Иначе
		
		ПредставлениеКонтрагента = "Контрагенту (" + СтрокаКонтрагент.Представление + ")";
		
	КонецЕсли;

	Для каждого Строка Из СтрокаКонтрагент.ПолучитьЭлементы() Цикл
		
		СообщатьОСозданномБанковскомСчете = Ложь;
		
		Если Строка.Представление = "Р/счет" Тогда
			
			Попытка
				
				НомерСчета = Строка.Значение;
				
				НовыйСчет = Справочники.БанковскиеСчета.СоздатьЭлемент();
				
				НовыйСчет.НомерСчета = НомерСчета;
				НовыйСчет.Владелец   = НовыйЭлемент.Ссылка;
				
				РССчет = Строка.ПолучитьЭлементы();
				
				Если НЕ НайтиЭлементДерева(РССчет, "Представление", "РЦ банка") = Неопределено Тогда
					
					// Банк контрагента.
					Если НЕ ПустаяСтрока(РССчет[0].Значение) Тогда
						
						НовыйБанк = НайтиБанкПоБикИКоррСчету("", РССчет[2].Значение);
						
						Если НовыйБанк = Справочники.Банки.ПустаяСсылка() Тогда
							
							НовыйБанк = Справочники.Банки.СоздатьЭлемент();
							
							НовыйБанк.Наименование = РССчет[0].Значение;
							НовыйБанк.Город        = РССчет[1].Значение;
							НовыйБанк.КоррСчет     = РССчет[2].Значение;
							
							НовыйБанк.Записать();
							
						КонецЕсли;
						
						НовыйСчет.Банк = НовыйБанк.Ссылка;
						
					КонецЕсли;
					
					// РЦ банка контрагента.
					Если НЕ ПустаяСтрока(РССчет[3].Значение) Тогда
						
						НовыйБанкКорр = НайтиБанкПоБикИКоррСчету(РССчет[5].Значение, РССчет[6].Значение);
						
						Если НовыйБанкКорр = Справочники.Банки.ПустаяСсылка() Тогда
							
							НовыйБанкКорр = Справочники.Банки.СоздатьЭлемент();
							
							НовыйБанкКорр.Наименование = РССчет[3].Значение;
							НовыйБанкКорр.Город        = РССчет[4].Значение;
							НовыйБанкКорр.Код          = РССчет[5].Значение;
							НовыйБанкКорр.КоррСчет     = РССчет[6].Значение;
							
							НовыйБанкКорр.Записать();
							
						КонецЕсли;
						
						НовыйСчет.БанкРасчетов = НовыйБанкКорр.Ссылка;
						
					КонецЕсли;
					
				Иначе
					
					// Банк контрагента.
					НовыйБанк = НайтиБанкПоБикИКоррСчету(РССчет[2].Значение, РССчет[3].Значение);
					
					Если НовыйБанк = Справочники.Банки.ПустаяСсылка() Тогда
						
						НовыйБанк = Справочники.Банки.СоздатьЭлемент();
						
						НовыйБанк.Наименование = РССчет[0].Значение;
						НовыйБанк.Город        = РССчет[1].Значение;
						НовыйБанк.Код          = РССчет[2].Значение;
						НовыйБанк.КоррСчет     = РССчет[3].Значение;
						
						НовыйБанк.Записать();
						
					КонецЕсли;
					
					НовыйСчет.Банк = НовыйБанк.Ссылка;
					
				КонецЕсли;
				
				НовыйСчет.ВариантУказанияКПП = Перечисления.ВариантыУказанияКПП.ВоВсехПлатежныхПоручениях;
				НовыйСчет.ВидСчета = "Расчетный";
				НовыйСчет.ВалютаДенежныхСредств = БанковскийСчет.ВалютаДенежныхСредств;
				СтрокаНаименования = СокрЛП(НовыйСчет.НомерСчета) + ?(ЗначениеЗаполнено(НовыйСчет.Банк), ", в " + Строка(НовыйСчет.Банк), "");
				СтрокаНаименования = Лев(СтрокаНаименования, 100);
				НовыйСчет.Наименование = СтрокаНаименования;
				
				НовыйСчет.Записать();
				
				СообщатьОСозданномБанковскомСчете = Истина;
				
				НовыйЭлемент.БанковскийСчетПоУмолчанию = НовыйСчет.Ссылка;
				НовыйЭлемент.Записать();
				
			Исключение
				
				Сообщение = Новый СообщениеПользователю;
				
				Сообщение.Текст = НСтр("ru='Не удалось создать банковский счет контрагента!'");
				
				Сообщение.Сообщить();
				
			КонецПопытки;
			
		КонецЕсли;
		
		Если СообщатьОСозданномБанковскомСчете Тогда
			
			Сообщение = Новый СообщениеПользователю;
			
			Сообщение.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 добавлен банковский счет (%2).'"), ПредставлениеКонтрагента, НомерСчета);
			
			Сообщение.Сообщить();
			
		КонецЕсли;
		
	КонецЦикла;
	
	НовыйЭлемент.Записать();
	
	Возврат НовыйЭлемент.Ссылка;
	
КонецФункции // СоздатьКонтрагента()

// Процедура загружает банковские выписки.
//
Процедура Загрузить(ИмпортЗаголовок) Экспорт
	
	ДокументыКИмпорту = Загрузка.Выгрузить();
	НачалоИнтервалаЗагрузки = Дата("00010101");
	КонецИнтервалаЗагрузки  = Дата("00010101");
	ДокументыКИмпорту.Индексы.Добавить("Документ");
	Результат = ПолучитьДатуИзСтроки(НачалоИнтервалаЗагрузки, ИмпортЗаголовок.ДатаНачала);
	Если НЕ ЗначениеЗаполнено(Результат) Тогда
		ТекстСообщения  = НСтр("ru = 'В заголовке файла загрузки неверно указана дата начала интервала! Файл не может быть загружен!'");
		УправлениеНебольшойФирмойСервер.СообщитьОбОшибке(ЭтотОбъект, ТекстСообщения);
		Возврат;
	КонецЕсли;
	Результат = ПолучитьДатуИзСтроки(КонецИнтервалаЗагрузки, ИмпортЗаголовок.ДатаКонца);
	Если НЕ ЗначениеЗаполнено(Результат) Тогда
		ТекстСообщения = НСтр("ru = 'В заголовке файла импорта неверно указана дата окончания интервала!'");
		УправлениеНебольшойФирмойСервер.СообщитьОбОшибке(ЭтотОбъект, ТекстСообщения);
	КонецЕсли;
	
	// Загружаем отмеченные секции документов.
	Для каждого СтрокаСекции Из ДокументыКИмпорту Цикл
		Если СтрокаСекции.Загружать Тогда
			РезультатПроверки = ПроверитьДокументДляЗагрузки(СтрокаСекции);
			Если ПустаяСтрока(РезультатПроверки) Тогда
				Если НЕ ЗначениеЗаполнено(СтрокаСекции.Документ) Тогда
					
					// В ИБ не найден документ, необходимо создать новый.
					ОбъектДокумента = Документы[СтрокаСекции.ВидДокумента].СоздатьДокумент();
					ЭтоНовыйДокумент = Истина;
					
				Иначе
					
					// В ИБ найден документ, необходимо получить его объект.
					ОбъектДокумента = СтрокаСекции.Документ.ПолучитьОбъект();
					ЭтоНовыйДокумент = Ложь;
					
				КонецЕсли;
				
				// Заполняем все реквизиты документа.
				ТипДокумента = ОбъектДокумента.Метаданные().Имя;
				Если ТипДокумента = "РасходСоСчета" Тогда
					ЗаполнитьРеквизитыРасходСоСчета(ОбъектДокумента, СтрокаСекции, ЭтоНовыйДокумент);
				ИначеЕсли ТипДокумента = "ПоступлениеНаСчет" Тогда
					ЗаполнитьРеквизитыПоступлениеНаСчет(ОбъектДокумента, СтрокаСекции, ЭтоНовыйДокумент);
				КонецЕсли;
				
				Если ОбъектДокумента.ПометкаУдаления Тогда
					ЗадатьПометкуНаУдаление(ОбъектДокумента, Ложь);
				КонецЕсли;
				
				ЗаписатьОбъект(ОбъектДокумента, СтрокаСекции, ЭтоНовыйДокумент);
				
				Если НЕ ОбъектДокумента.ЭтоНовый() Тогда
					Если НЕ ЗначениеЗаполнено(СтрокаСекции.Документ) Тогда
						СтрокаСекции.Документ = ОбъектДокумента.Ссылка;
						Если СтрокаСекции.ВидДокумента = "РасходСоСчета" Тогда
							РеквизитДаты = "ДатаОплаты";
							РеквизитНомера = "Номер";
						Иначе
							РеквизитДаты = "ДатаВходящегоДокумента";
							РеквизитНомера = "НомерВходящегоДокумента";
						КонецЕсли;
						СтрокаСекции.НомерДок = ОбъектДокумента[РеквизитНомера];
					КонецЕсли;
				КонецЕсли; 
			Иначе
				ТекстСообщения = НСтр(
					"ru = 'Платежный документ ""%Операция%"" №%Номер% от %Дата% не может быть загружен:
					|%РезультатПроверки%!'"
				);
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Операция%", СтрокаСекции.Операция);
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Номер%", СтрокаСекции.Номер);
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Дата%", СтрокаСекции.Дата);
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%РезультатПроверки%", РезультатПроверки);
				УправлениеНебольшойФирмойСервер.СообщитьОбОшибке(ЭтотОбъект, ТекстСообщения);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	// Платежные поручения исходящие, отсутствующие в списке загруженным помечаем
	// на удаление.
	СинхронизироватьДокументыПоСчетам(
		ДокументыКИмпорту,
		"РасходСоСчета",
		"ПоступлениеНаСчет",
		НачалоИнтервалаЗагрузки,
		КонецИнтервалаЗагрузки,
		ИмпортРасчетныеСчета
	);
	
КонецПроцедуры // Загрузить()

// ПРОЦЕДУРЫ И ФУНКЦИИ ВЫГРУЗКИ

// Процедура заполняет значения таблицы для экспорта.
//
Процедура ЗаполнитьЗначениеЭкспорта(СтрокаЭкспорта, ВыборкаДляЭкспорта)
	
	Плательщик = "Организация";
	Получатель = "Контрагент";
	
	Если ВыборкаДляЭкспорта.Дата < Дата('20110101') Тогда
		СтрокаЭкспорта.Номер = УправлениеНебольшойФирмойСервер.ПолучитьНомерНаПечать(ВыборкаДляЭкспорта.Номер, Организация.Префикс);
	Иначе
		СтрокаЭкспорта.Номер = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(ВыборкаДляЭкспорта.Номер, Истина, Истина);
	КонецЕсли;
	
	СтрокаЭкспорта.Дата = ВыборкаДляЭкспорта.Дата;
	СтрокаЭкспорта.Сумма = Формат(ВыборкаДляЭкспорта.СуммаДокумента, "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧРГ=' '; ЧГ=0");
	СтрокаЭкспорта.ПлательщикСчет = ВыборкаДляЭкспорта[Плательщик + "НомерСчета"];
	СтрокаЭкспорта.ПолучательСчет = ВыборкаДляЭкспорта[Получатель + "НомерСчета"];
	СтрокаЭкспорта.ВидПлатежа = ВыборкаДляЭкспорта.ВидПлатежа;
	НепрямыеРасчетыУПлательщика = ЗначениеЗаполнено(ВыборкаДляЭкспорта[Плательщик + "БанкДляРасчетов"]);
	НепрямыеРасчетыУПолучателя  = ЗначениеЗаполнено(ВыборкаДляЭкспорта[Получатель + "БанкДляРасчетов"]);
	
	// ВидОплаты.
	СтрокаЭкспорта.ВидОплаты = "01";
	
	// Плательщик1.
	ТекстПлательщика = "";
	Если НепрямыеРасчетыУПлательщика Тогда
		ПозицияРС = Найти(ВыборкаДляЭкспорта["ТекстПлательщика"], "р/с"); 
		Если ПозицияРС = 0 Тогда
			ТекстПлательщика = ВыборкаДляЭкспорта["ТекстПлательщика"];
		Иначе
			ТекстПлательщика = СокрЛП((Лев(ВыборкаДляЭкспорта["ТекстПлательщика"], ПозицияРС - 1)));
		КонецЕсли;
	Иначе
		ТекстПлательщика = ВыборкаДляЭкспорта["ТекстПлательщика"];
	КонецЕсли;
	СтрокаЭкспорта.Плательщик1 = ТекстПлательщика;
	
	// Плательщик, ПлательщикИНН.
	Значение = ВыборкаДляЭкспорта.ИННПлательщика;
	Если ПустаяСтрока(Значение) Тогда
		Значение = ВыборкаДляЭкспорта[Плательщик + "ИНН"];
	КонецЕсли;
	СтрокаЭкспорта.ПлательщикИНН = Значение;
	СтрокаЭкспорта.Плательщик = "ИНН " + Значение + " " + СтрокаЭкспорта.Плательщик1;
	
	// ПлательщикРасчСчет, ПлательщикБанк1, ПлательщикБанк2, ПлательщикБИК,
	// ПлательщикКорсчет, Плательщик2, Плательщик3, Плательщик4.
	Если НепрямыеРасчетыУПлательщика Тогда
		СтрокаЭкспорта.Плательщик2 		  = ВыборкаДляЭкспорта[Плательщик + "НомерСчета"];
		СтрокаЭкспорта.Плательщик3 		  = ВыборкаДляЭкспорта[Плательщик + "Банк"];
		СтрокаЭкспорта.Плательщик4 		  = ВыборкаДляЭкспорта[Плательщик + "ГородБанка"];
		СтрокаЭкспорта.Плательщик 		  = СтрокаЭкспорта.Плательщик + " р/с " + СтрокаЭкспорта.Плательщик2 + " в " + СтрокаЭкспорта.Плательщик3 + " " + СтрокаЭкспорта.Плательщик4;
		СтрокаЭкспорта.ПлательщикРасчСчет = ВыборкаДляЭкспорта[Плательщик + "РасчСчет"];
		СтрокаЭкспорта.ПлательщикБанк1    = ВыборкаДляЭкспорта[Плательщик + "БанкДляРасчетов"];
		СтрокаЭкспорта.ПлательщикБанк2    = ВыборкаДляЭкспорта[Плательщик + "ГородРЦБанка"];
		СтрокаЭкспорта.ПлательщикБИК      = ВыборкаДляЭкспорта[Плательщик + "БИКРЦБанка"];
		СтрокаЭкспорта.ПлательщикКорсчет  = ВыборкаДляЭкспорта[Плательщик + "КоррСчетРЦБанка"];
	Иначе
		СтрокаЭкспорта.ПлательщикРасчСчет = ВыборкаДляЭкспорта[Плательщик + "НомерСчета"];
		СтрокаЭкспорта.ПлательщикБанк1    = ВыборкаДляЭкспорта[Плательщик + "Банк"];
		СтрокаЭкспорта.ПлательщикБанк2    = ВыборкаДляЭкспорта[Плательщик + "ГородБанка"];
		СтрокаЭкспорта.ПлательщикБИК      = ВыборкаДляЭкспорта[Плательщик + "БИКБанка"];
		СтрокаЭкспорта.ПлательщикКорсчет  = ВыборкаДляЭкспорта[Плательщик + "РасчСчет"];
	КонецЕсли;
	
	// Получатель1.
	ТекстПолучателя = "";
	Если НепрямыеРасчетыУПолучателя Тогда
		ПозицияРС = найти(ВыборкаДляЭкспорта["ТекстПолучателя"], "р/с");
		Если ПозицияРС = 0 Тогда
			ТекстПолучателя = ВыборкаДляЭкспорта["ТекстПолучателя"];
		Иначе
			ТекстПолучателя = СокрЛП((Лев(ВыборкаДляЭкспорта["ТекстПолучателя"], ПозицияРС-1)));
		КонецЕсли;
	Иначе
		ТекстПолучателя = ВыборкаДляЭкспорта["ТекстПолучателя"];
	КонецЕсли;
	СтрокаЭкспорта.Получатель1 = ТекстПолучателя;
	
	// Получатель, ПолучательИНН.
	Значение = ВыборкаДляЭкспорта.ИННПолучателя;
	Если ПустаяСтрока(Значение) Тогда
		Значение = ВыборкаДляЭкспорта[Получатель + "ИНН"];
	КонецЕсли;
	СтрокаЭкспорта.ПолучательИНН = Значение;
	СтрокаЭкспорта.Получатель = "ИНН " + Значение + " " + СтрокаЭкспорта.Получатель1;
	
	// ПолучательРасчСчет, ПолучательБанк1, ПолучательБанк2, ПолучательБИК,
	// ПолучательКорсчет, Получатель2, Получатель3, Получатель4.
	Если НепрямыеРасчетыУПолучателя Тогда
		СтрокаЭкспорта.Получатель2 		  = ВыборкаДляЭкспорта[Получатель + "НомерСчета"];
		СтрокаЭкспорта.Получатель3 		  = ВыборкаДляЭкспорта[Получатель + "Банк"];
		СтрокаЭкспорта.Получатель4 		  = ВыборкаДляЭкспорта[Получатель + "ГородБанка"];
		СтрокаЭкспорта.Получатель 		  = СтрокаЭкспорта.Получатель	  + " р/с " + СтрокаЭкспорта.Получатель2 + " в " + СтрокаЭкспорта.Получатель3 + " " + СтрокаЭкспорта.Получатель4;
		СтрокаЭкспорта.ПолучательРасчСчет = ВыборкаДляЭкспорта[Получатель + "РасчСчет"];
		СтрокаЭкспорта.ПолучательБанк1    = ВыборкаДляЭкспорта[Получатель + "БанкДляРасчетов"];
		СтрокаЭкспорта.ПолучательБанк2    = ВыборкаДляЭкспорта[Получатель + "ГородРЦБанка"];
		СтрокаЭкспорта.ПолучательБИК      = ВыборкаДляЭкспорта[Получатель + "БИКРЦБанка"];
		СтрокаЭкспорта.ПолучательКорсчет  = ВыборкаДляЭкспорта[Получатель + "КоррСчетРЦБанка"];
	Иначе
		СтрокаЭкспорта.ПолучательРасчСчет = ВыборкаДляЭкспорта[Получатель + "НомерСчета"];
		СтрокаЭкспорта.ПолучательБанк1    = ВыборкаДляЭкспорта[Получатель + "Банк"];
		СтрокаЭкспорта.ПолучательБанк2    = ВыборкаДляЭкспорта[Получатель + "ГородБанка"];
		СтрокаЭкспорта.ПолучательБИК      = ВыборкаДляЭкспорта[Получатель + "БИКБанка"];
		СтрокаЭкспорта.ПолучательКорсчет  = ВыборкаДляЭкспорта[Получатель + "РасчСчет"];
	КонецЕсли;
	
	// ПлательщикКПП.
	Если НЕ ЗначениеЗаполнено(СтрокаЭкспорта.ПлательщикКПП) Тогда
		СтрокаЭкспорта.ПлательщикКПП = ВыборкаДляЭкспорта.КПППлательщика;
	КонецЕсли;
	
	// ПолучательКПП.
	Если НЕ ЗначениеЗаполнено(СтрокаЭкспорта.ПолучательКПП) Тогда
		СтрокаЭкспорта.ПолучательКПП = ВыборкаДляЭкспорта.КПППолучателя;
	КонецЕсли;
	
	// СтатусСоставителя, ПлательщикКПП, ПолучательКПП, ПоказательКБК, ОКАТО
	// ПоказательОснования, ПоказательПериода, ПоказательНомера, ПоказательДаты,
	// ПоказательТипа.
	Если ВыборкаДляЭкспорта.ВидОперации = Перечисления.ВидыОперацийПлатежноеПоручение.ПеречислениеНалога Тогда
		СтрокаЭкспорта.СтатусСоставителя = ВыборкаДляЭкспорта.СтатусСоставителя;
		Если ПустаяСтрока(СтрокаЭкспорта.СтатусСоставителя) Тогда
			СтрокаЭкспорта.СтатусСоставителя = "0";
		КонецЕсли;
		Если НЕ ЗначениеЗаполнено(СтрокаЭкспорта.ПлательщикКПП) Тогда
			СтрокаЭкспорта.ПлательщикКПП = ВыборкаДляЭкспорта.КПППлательщика;
		КонецЕсли;
		Если НЕ ЗначениеЗаполнено(СтрокаЭкспорта.ПлательщикКПП) Тогда
			СтрокаЭкспорта.ПлательщикКПП = "0";
		КонецЕсли;
		Если НЕ ЗначениеЗаполнено(СтрокаЭкспорта.ПолучательКПП) Тогда
			СтрокаЭкспорта.ПолучательКПП = ВыборкаДляЭкспорта.КПППолучателя;
		КонецЕсли;
		Если НЕ ЗначениеЗаполнено(СтрокаЭкспорта.ПолучательКПП) Тогда
			СтрокаЭкспорта.ПолучательКПП = "0";
		КонецЕсли;
		СтрокаЭкспорта.ПоказательКБК = ВыборкаДляЭкспорта.КодБК;
		СтрокаЭкспорта.ОКАТО         = ВыборкаДляЭкспорта.КодОКАТО;
		Если ПустаяСтрока(ВыборкаДляЭкспорта.ПоказательОснования) Тогда
			СтрокаЭкспорта.ПоказательОснования = "0";
		Иначе
			СтрокаЭкспорта.ПоказательОснования = ВыборкаДляЭкспорта.ПоказательОснования;
		КонецЕсли;
		Если ПустаяСтрока(ВыборкаДляЭкспорта.ПоказательПериода) ИЛИ (ВыборкаДляЭкспорта.ПоказательПериода = "  .  .    ") Тогда
			СтрокаЭкспорта.ПоказательПериода = "0";
		Иначе
			СтрокаЭкспорта.ПоказательПериода = ВыборкаДляЭкспорта.ПоказательПериода;
		КонецЕсли;
		Если ПустаяСтрока(ВыборкаДляЭкспорта.ПоказательНомера) Тогда
			СтрокаЭкспорта.ПоказательНомера = "0";
		Иначе
			СтрокаЭкспорта.ПоказательНомера = ВыборкаДляЭкспорта.ПоказательНомера;
		КонецЕсли;
		Если НЕ ЗначениеЗаполнено(ВыборкаДляЭкспорта.ПоказательДаты) Тогда
			СтрокаЭкспорта.ПоказательДаты = "0";
		Иначе
			СтрокаЭкспорта.ПоказательДаты = Формат(ВыборкаДляЭкспорта.ПоказательДаты,"ДЛФ=Д");
		КонецЕсли;
		ПоказательТипаПредусмотренСтандартамиОбмена = СтрокаЭкспорта.Свойство("ПоказательТипа");
		ПоказательТипаНеВыгружается = ВыборкаДляЭкспорта.Дата >= '20150101'; // Приказ Минфина №126н от 30.10.2014.
		Если ПоказательТипаПредусмотренСтандартамиОбмена Тогда
			Если ПоказательТипаНеВыгружается ИЛИ ПустаяСтрока(ВыборкаДляЭкспорта.ПоказательТипа) Тогда
				СтрокаЭкспорта.ПоказательТипа = "0";
			Иначе
				СтрокаЭкспорта.ПоказательТипа = ВыборкаДляЭкспорта.ПоказательТипа;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	КодПредусмотренСтандартамиОбмена = СтрокаЭкспорта.Свойство("Код");
	КодВыгружаетсяВОтдельномПоле = (ВыборкаДляЭкспорта.Дата >= '20140331');
	Если КодВыгружаетсяВОтдельномПоле И КодПредусмотренСтандартамиОбмена Тогда
		
		Если ВыборкаДляЭкспорта.ВидОперации = Перечисления.ВидыОперацийПлатежноеПоручение.ПеречислениеНалога
			И ПустаяСтрока(ВыборкаДляЭкспорта.ИдентификаторПлатежа) Тогда
			СтрокаЭкспорта.Код = "0"; // требования 107н
		Иначе
			СтрокаЭкспорта.Код = ВыборкаДляЭкспорта.ИдентификаторПлатежа; // только требования 383-П
		КонецЕсли;
		
	КонецЕсли;
	
	// Очередность.
	СтрокаЭкспорта.Очередность = "" + ВыборкаДляЭкспорта.ОчередностьПлатежа;
	
	// НазначениеПлатежа, НазначениеПлатежа1, НазначениеПлатежа2, НазначениеПлатежа3,
	// НазначениеПлатежа4, НазначениеПлатежа5, НазначениеПлатежа6.
	СтрокаЭкспорта.НазначениеПлатежа = СтрЗаменить(
		СтрЗаменить(
			СтрЗаменить(
				ВыборкаДляЭкспорта.НазначениеПлатежа,
				Символы.ПС,
				" "),
			Символы.ВК,
			""),
		Символы.ПФ,
		""
	);
	КоличествоСтрокНП = СтрЧислоСтрок(ВыборкаДляЭкспорта.НазначениеПлатежа);
	Если КоличествоСтрокНП > 6 Тогда
		КоличествоСтрокНП = 6;
	КонецЕсли;
	Для Сч = 1 По КоличествоСтрокНП Цикл
		СтрокаЭкспорта["НазначениеПлатежа" + Сч] = СтрПолучитьСтроку(ВыборкаДляЭкспорта.НазначениеПлатежа, Сч);
	КонецЦикла;
	Для Сч = (КоличествоСтрокНП + 1) По 6 Цикл
		СтрокаЭкспорта["НазначениеПлатежа" + Сч] = "";
	КонецЦикла;
	
КонецПроцедуры // ЗаполнитьЗначениеЭкспорта()

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

// Процедура выгружает платежные поручения.
//
Функция Выгрузить(РасширениеРаботыСФайламиПодключено, КлючУникальности) Экспорт
	
	ДокументыНаЭкспорт = Выгрузка.Выгрузить();
	ПотокВыгрузки = Новый ТекстовыйДокумент();
	
	Если Кодировка = "DOS" Тогда
		ПотокВыгрузки.УстановитьТипФайла(КодировкаТекста.OEM);
	Иначе
		ПотокВыгрузки.УстановитьТипФайла(КодировкаТекста.ANSI);
	КонецЕсли;
	
	// Формируем заголовок.
	ПотокВыгрузки.ДобавитьСтроку("1CClientBankExchange");
	ПотокВыгрузки.ДобавитьСтроку("ВерсияФормата=" + ВерсияФормата); // Поддерживаются версии "1.01" и "1.02"
	ПотокВыгрузки.ДобавитьСтроку("Кодировка=" + Кодировка);
	ПотокВыгрузки.ДобавитьСтроку("Отправитель=" + Метаданные.Синоним);
	ПотокВыгрузки.ДобавитьСтроку("Получатель=" + Программа);
	ПотокВыгрузки.ДобавитьСтроку("ДатаСоздания=" + Формат(ТекущаяДата(), "ДЛФ=Д"));
	ПотокВыгрузки.ДобавитьСтроку("ВремяСоздания=" + Формат(ТекущаяДата(), "ДЛФ=В"));
	ПотокВыгрузки.ДобавитьСтроку("ДатаНачала=" + Формат(НачПериода, "ДЛФ=Д"));
	ПотокВыгрузки.ДобавитьСтроку("ДатаКонца=" + Формат(КонПериода, "ДЛФ=Д"));
	ПотокВыгрузки.ДобавитьСтроку("РасчСчет=" + БанковскийСчет.НомерСчета);
	ПотокВыгрузки.ДобавитьСтроку("Документ=Платежное поручение");
	
	// Выводим отмеченные секции документов.
	Для каждого СтрокаСекции Из ДокументыНаЭкспорт Цикл
		Если НЕ(СтрокаСекции.Выгружать)Тогда
			Продолжить;
		КонецЕсли;
		Буфер = ПолучитьСекциюДокумент(СтрокаСекции, ДокументыНаЭкспорт.Колонки);
		КоличествоСрокСекции = СтрЧислоСтрок(Буфер);
		Для Сч = 1 По КоличествоСрокСекции Цикл
			ПотокВыгрузки.ДобавитьСтроку(СтрПолучитьСтроку(Буфер, Сч));
		КонецЦикла;
		СтрокаСекции.Готовность = - 2;
	КонецЦикла;
	
	ПотокВыгрузки.ДобавитьСтроку("КонецФайла");
	
	//Если РасширениеРаботыСФайламиПодключено Тогда
	//	Возврат ПотокВыгрузки;
	//Иначе
		ИмяВременногоФайла = ПолучитьИмяВременногоФайла("txt");
		Если Кодировка = "DOS" Тогда
			ПотокВыгрузки.Записать(ИмяВременногоФайла, КодировкаТекста.OEM);
		Иначе
			ПотокВыгрузки.Записать(ИмяВременногоФайла, КодировкаТекста.ANSI);
		КонецЕсли;
		Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла), КлючУникальности);
		Возврат Адрес;
	//КонецЕсли;
	
КонецФункции // Выгрузить()

// ОБЩИЕ ПРОЦЕДУРЫ И ФУНКЦИИ

// Функция пересчитывает сумму из одной валюты в другую
//
// Параметры:      
//	Сумма         - Число - сумма, которую следует пересчитать.
// 	КурсНач       - Число - курс из которого надо пересчитать.
// 	КурсКон       - Число - курс в который надо пересчитать.
// 	КратностьНач  - Число - кратность из которого надо пересчитать 
//                  (по умолчанию = 1).
// 	КратностьКон  - Число - кратность в который надо пересчитать 
//                  (по умолчанию = 1).
//
// Возвращаемое значение: 
//  Число - сумма, пересчитанная в другую валюту.
//
Функция ПересчитатьИзВалютыВВалюту(Сумма, КурсНач, КурсКон,	КратностьНач = 1, КратностьКон = 1) Экспорт
	
	Если (КурсНач = КурсКон) И (КратностьНач = КратностьКон) Тогда
		Возврат Сумма;
	КонецЕсли;
	
	Если КурсНач = 0
	 ИЛИ КурсКон = 0
	 ИЛИ КратностьНач = 0
	 ИЛИ КратностьКон = 0 Тогда
		ТекстСообщения = НСтр("ru = 'Обнаружен нулевой курс валюты. Пересчет не выполнен.'");
		УправлениеНебольшойФирмойСервер.СообщитьОбОшибке(ЭтотОбъект, ТекстСообщения);
		Возврат Сумма;
	КонецЕсли;
	
	СуммаПересчитанная = Окр((Сумма * КурсНач * КратностьКон) / (КурсКон * КратностьНач), 2);
	
	Возврат СуммаПересчитанная;
	
КонецФункции // ПересчитатьИзВалютыВВалюту()

// Возвращает курс валюты на дату.
//
Функция ПолучитьКурсВалюты(Валюта, ДатаКурса)
	
	Структура = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ДатаКурса, Новый Структура("Валюта", Валюта));
	
	Возврат Структура;
	
КонецФункции // ПолучитьКурсВалюты()

// Функция формирует структуру экспорта.
//
Функция СформироватьСтруктуруЭкспорта()
	
	СтруктураЭкспорта = Новый структура;
	СтруктураЭкспорта.Вставить( "Выгружать",             ""); // "_",
	СтруктураЭкспорта.Вставить( "Готовность",            ""); // "Готовность",
	СтруктураЭкспорта.Вставить( "НомерДок",              ""); // "№ Документа",
	СтруктураЭкспорта.Вставить( "Номер",                 ""); // "Номер",
	СтруктураЭкспорта.Вставить( "Дата",                  ""); // "Дата",
	СтруктураЭкспорта.Вставить( "Операция",              ""); // "Операция",
	СтруктураЭкспорта.Вставить( "БанковскийСчет",        ""); // "Эл. Р/с организации",
	СтруктураЭкспорта.Вставить( "НомерСчетаОрганизации", ""); // "Р/с организации",
	СтруктураЭкспорта.Вставить( "Сумма",                 ""); // "Сумма",
	СтруктураЭкспорта.Вставить( "Контрагент",            ""); // "Контрагент",
	СтруктураЭкспорта.Вставить( "СчетКонтрагента",       ""); // "Р/с контрагента",
	СтруктураЭкспорта.Вставить( "НомерСчетаКонтрагента", ""); // "Эл. Р/с контрагента",
	СтруктураЭкспорта.Вставить( "КвитанцияДата",         ""); // "Дата форм. квитанции",
	СтруктураЭкспорта.Вставить( "КвитанцияВремя",        ""); // "Время форм. квитанции",
	СтруктураЭкспорта.Вставить( "КвитанцияСодержание",   ""); // "Содержание квитанции",
	СтруктураЭкспорта.Вставить( "ПлательщикСчет",        ""); // "Расчетный счет плательщика",
	СтруктураЭкспорта.Вставить( "Плательщик",            ""); // "Плательщик",
	СтруктураЭкспорта.Вставить( "ПлательщикИНН",         ""); // "ИНН плательщика",
	СтруктураЭкспорта.Вставить( "Плательщик1",           ""); // "Наименование плательщика",
	СтруктураЭкспорта.Вставить( "Плательщик2",           ""); // "Расчетный счет плательщика",
	СтруктураЭкспорта.Вставить( "Плательщик3",           ""); // "Банк плательщика",
	СтруктураЭкспорта.Вставить( "Плательщик4",           ""); // "Город банка плательщика",
	СтруктураЭкспорта.Вставить( "ПлательщикРасчСчет",    ""); // "Корсчет банка плательщика",
	СтруктураЭкспорта.Вставить( "ПлательщикБанк1",       ""); // "РЦ банка плательщика",
	СтруктураЭкспорта.Вставить( "ПлательщикБанк2",       ""); // "Город РЦ банка плательщика",
	СтруктураЭкспорта.Вставить( "ПлательщикБИК",         ""); // "БИК РЦ банка плательщика",
	СтруктураЭкспорта.Вставить( "ПлательщикКорсчет",     ""); // "Корсчет РЦ банка плат.",
	СтруктураЭкспорта.Вставить( "ПолучательСчет",        ""); // "Расчетный счет получателя",
	СтруктураЭкспорта.Вставить( "Получатель",            ""); // "Получатель",
	СтруктураЭкспорта.Вставить( "ПолучательИНН",         ""); // "ИНН получателя",
	СтруктураЭкспорта.Вставить( "Получатель1",           ""); // "Наименование получателя",
	СтруктураЭкспорта.Вставить( "Получатель2",           ""); // "Расчетный счет получателя",
	СтруктураЭкспорта.Вставить( "Получатель3",           ""); // "Банк получателя",
	СтруктураЭкспорта.Вставить( "Получатель4",           ""); // "Город банка получателя",
	СтруктураЭкспорта.Вставить( "ПолучательРасчСчет",    ""); // "Корсчет банка получателя",
	СтруктураЭкспорта.Вставить( "ПолучательБанк1",       ""); // "РЦ банка получателя",
	СтруктураЭкспорта.Вставить( "ПолучательБанк2",       ""); // "Город РЦ банка получателя",
	СтруктураЭкспорта.Вставить( "ПолучательБИК",         ""); // "БИК РЦ банка получателя",
	СтруктураЭкспорта.Вставить( "ПолучательКорсчет",     ""); // "Корсчет РЦ банка пол.",
	СтруктураЭкспорта.Вставить( "ВидПлатежа",            ""); // "Вид платежа",
	СтруктураЭкспорта.Вставить( "ВидОплаты",             ""); // "Вид оплаты",
	СтруктураЭкспорта.Вставить( "СтатусСоставителя",     ""); // "Статус составителя",
	СтруктураЭкспорта.Вставить( "ПлательщикКПП",         ""); // "КПП плательщика",
	СтруктураЭкспорта.Вставить( "ПолучательКПП",         ""); // "КПП получателя",
	СтруктураЭкспорта.Вставить( "ПоказательКБК",         ""); // "Показатель КБК",
	СтруктураЭкспорта.Вставить( "ОКАТО",                 ""); // "ОКАТО",
	СтруктураЭкспорта.Вставить( "ПоказательОснования",   ""); // "Показатель основания",
	СтруктураЭкспорта.Вставить( "ПоказательПериода",     ""); // "Показатель нал. периода",
	СтруктураЭкспорта.Вставить( "ПоказательНомера",      ""); // "Показатель номера док.",
	СтруктураЭкспорта.Вставить( "ПоказательДаты",        ""); // "Показатель даты док.",
	
	Если ВерсияФормата < "1.03" Тогда // С 01.01.2015 не используется
		СтруктураЭкспорта.Вставить("ПоказательТипа",     ""); // "Пок. типа платежа"
	КонецЕсли;
	
	СтруктураЭкспорта.Вставить( "Очередность",           ""); // "Очередность платежа",
	СтруктураЭкспорта.Вставить( "НазначениеПлатежа",     ""); // "Назначение платежа",
	СтруктураЭкспорта.Вставить( "НазначениеПлатежа1",    ""); // "Назначение платежа, стр. 1",
	СтруктураЭкспорта.Вставить( "НазначениеПлатежа2",    ""); // "Назначение платежа, стр. 2",
	СтруктураЭкспорта.Вставить( "НазначениеПлатежа3",    ""); // "Назначение платежа, стр. 3",
	СтруктураЭкспорта.Вставить( "НазначениеПлатежа4",    ""); // "Назначение платежа, стр. 4",
	СтруктураЭкспорта.Вставить( "НазначениеПлатежа5",    ""); // "Назначение платежа, стр. 5",
	СтруктураЭкспорта.Вставить( "НазначениеПлатежа6",    ""); // "Назначение платежа, стр. 6",
	СтруктураЭкспорта.Вставить( "Документ",              ""); // "Источник",
	СтруктураЭкспорта.Вставить( "СекцияДокумент",        ""); // "Выгрузка",
	СтруктураЭкспорта.Вставить( "ОписаниеОшибок",        ""); // "Замечания",
	СтруктураЭкспорта.Вставить( "ТипДокумента",          ""); // "Тип пл. документа"
	
	Если ВерсияФормата = "1.02" Тогда
		СтруктураЭкспорта.Вставить("Код", ""); // "Уникальный идентификатор платежа"
	КонецЕсли;
	
	Возврат СтруктураЭкспорта;
	
КонецФункции // СформироватьСтруктуруЭкспорта()

// Процедура добавляет строку в строку.
//
Процедура ДобавитьВСтроку(Буфер, НоваяСтрока)
	
	Если ПустаяСтрока(Буфер) Тогда
		Буфер = НоваяСтрока;
	Иначе
		Буфер = Буфер + Символы.ПС + НоваяСтрока;
	КонецЕсли;
	
КонецПроцедуры // ДобавитьВСтроку()

// Функция приводит значения.
//
Функция ПривестиЗначение(Значение)
	
	Если ТипЗнч(Значение) = Тип("Строка") Тогда
		Возврат СокрЛП(Значение);		
	ИначеЕсли ТипЗнч(Значение) = Тип("Число") Тогда
		Возврат Формат(Значение, "ЧРД=.; ЧРГ=' '; ЧГ=0");
	ИначеЕсли ТипЗнч(Значение) = Тип("Дата") Тогда
		Возврат Формат(Значение, "ДФ=dd.MM.yyyy");
	Иначе
		Возврат "";
	КонецЕсли;
	
КонецФункции // ПривестиЗначение()

// Функция получает дату из строки.
//
Функция ПолучитьДатуИзСтроки(Приемник, Источник)
	
	Буфер = Источник;
	ПозицияТочки = Найти(Буфер, ".");
	Если ПозицияТочки = 0 Тогда
		Возврат НСтр("ru = 'Неверный формат строки с датой'");
	КонецЕсли;
	ЧислоДаты = Лев(Буфер, ПозицияТочки - 1);
	Буфер = Сред(Буфер, ПозицияТочки + 1);
	ПозицияТочки = Найти(Буфер, ".");
	Если ПозицияТочки = 0 Тогда
		Возврат НСтр("ru = 'Неверный формат строки с датой'");
	КонецЕсли;
	МесяцДаты = Лев(Буфер, ПозицияТочки - 1);
	ГодДаты = Сред(Буфер, ПозицияТочки + 1);
	Если СтрДлина(ГодДаты) = 2 Тогда
		Если Число(ГодДаты) < 50 Тогда
			ГодДаты = "20" + ГодДаты;
		Иначе
			ГодДаты = "19" + ГодДаты ;
		КонецЕсли;
	КонецЕсли;
	Попытка
		Приемник = Дата(Число(ГодДаты), Число(МесяцДаты), Число(ЧислоДаты));
	Исключение
		Возврат НСтр("ru = 'Не удалось преобразовать строку в дату'");
	КонецПопытки;
	
	Возврат Приемник;
	
КонецФункции // ПолучитьДатуИзСтроки()

// Функция определяет наличие не цифр в строке.
//
Функция ЕстьНеЦифры(Знач СтрокаПроверки) Экспорт
	
	Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда
		Возврат Истина;
	КонецЕсли;
	СтрокаПроверки = СокрЛП(СтрокаПроверки);
	Длина = СтрДлина(СтрокаПроверки);
	Для Сч = 1 По Длина Цикл
		Если Найти("0123456789", Сред(СтрокаПроверки, Сч, 1)) = 0 Тогда
			Возврат Истина;
		КонецЕсли; 
	КонецЦикла;
	
	Возврат Ложь;
	
КонецФункции // ЕстьНеЦифры()
Показать
64. sasha-asn 06.11.20 16:31 Сейчас в теме
65. user1491988 12.11.20 10:46 Сейчас в теме
Добрый день, Денис! Столкнулись с этой проблемой буквально вчера, возможно от вас получить помощь? т.к. все вышеприведенный текст для меня "темный лес" )))
Прикрепленные файлы:
66. kasper076 77 25.12.20 19:10 Сейчас в теме
Приогромное. Все работает.
67. introl 27.02.21 18:51 Сейчас в теме
Спасибо огромное! Много лет приходилось вручную чистить Код=. Все сработало, только в моем случае вместо "КодНазПлатежа" указала "Код".
Оставьте свое сообщение

См. также

Загрузка платежей из Сбербанк Онлайн по картам физических лиц

Банковские операции Обмен с банком Банковские операции v8 1cv8.cf Россия Бесплатно (free)

Код для загрузки выписки по карте из Сбербанк.Онлайн НЕ Сбербанк Бизнес Онлайн.

27.09.2018    6955    compguru    0    

Многофакторная авторизация. Шаблон проектирования для «1С:Предприятие 8». На примере API «Приватбанка» для юр. лиц

Информационная безопасность Обмен с банком v8 Бесплатно (free)

Многим из читателей знакомы понятия стандартов разработки и шаблонов проектирования. Для платформы «1С:Предприятие 8» на сайте its.1c.ru описаны базовые стандарты оформления кода и некоторые полезные примеры, но отсутствует информация об высокоуровневых абстракциях. Почти у каждого банка есть реализация обмена с конфигурациями «1С:Предприятие 8», но анализировать код, а тем более реализацию без слёз невозможно. Данная статья предлагает использовать некий шаблон оформления кода для многофакторной авторизации.

11.09.2017    13349    pbazeliuk    6    

Интеграция ДБО BS-Client (Белагропромбанк) и БП 1.6 (не используемая обработка "КлиентБанк")

Файловые протоколы обмена, FTP Обмен с банком Банковские операции Банковские операции v8 БП1.6 Беларусь Бесплатно (free)

Как можно сделать рабочую интеграцию с клиентом банка за два часа? Привожу пример из личного опыта.

26.11.2016    18812    c1nil    1    

Работа с 1С:ДиректБанк в системе ДБО iBank 2

Бухгалтерский учет Обмен с банком Банковские операции Банковские операции v8 КА1 БП2.0 ЗУП2.5 УТ10 УПП1 УНФ ERP2 Россия Бесплатно (free)

В современных типовых конфигурациях фирмы "1С" есть возможность работать с системой ДБО iBank 2 напрямую из 1С:Предприятия. Пользователям доступны такие функции, как подпись и отправка платежа в банк, подтверждение платежа по SMS и получение выписки. Промышленная система ДБО iBank 2 установлена в более чем трети российских банков, и многие из них уже начали предоставление сервиса прямого обмена. В статье вкратце описан порядок подключения услуги и настройки DirectBank с системой ДБО iBank 2.

26.05.2016    27745    ph_1984    33    

Загрузка выписки из Банк - клиента в 1С: Бухгалтерию - настройка

Обмен с банком Банковские операции Банковские операции v8 БП2.0 БУ Бесплатно (free)

Регулярно приходится объяснять бухгалтерам как формировать платежные поручения в банк-клиенте, а также еще раз заносить их в программы 1С. Чтобы избежать двойной нудной работы достаточно настроить простой перенос загрузку выписок из банк в программу. Сложность данной операции не велика для любого бухгалтера и он способен справиться с этим самостоятельно, разобраемся.

23.03.2016    38059    Bylka    2    

Клиент банк из 1С

Обмен с банком Банковские операции Банковские операции v8 КА1 БП2.0 УТ10 УНФ ERP2 БУ УУ Бесплатно (free)

Хочу рассказать про отличную возможность 1с Бухгалтерии 3.0 (и некоторых других конфигураций) использования клиент банка прямо из 1С. Теперь не надо делать выгрузку в файлик и загружать выписки из файлика. Достаточно нажать кнопку Обмен с банком в 1С и получить необходимые документы. А для платежек нажать кнопку Создать и отправить электронные документы.

12.02.2016    54047    ameli-130412    65    

Экспорт платежных поручений в казначейство г. Москвы

Обработка документов Обмен с банком Обмен через XML Банковские операции Банковские операции v8 БГУ Государственные, бюджетные структуры Россия Госбюджет Бесплатно (free)

Устанавливая конфигурацию "1С: Бухгалтерия государственного учреждения" (1С:БГУ) в одном из детских садиков г. Москвы, столкнулся с проблемой - казначейство не принимает платежные поручения (платежки), выгруженные из 1С:БГУ стандартной обработкой обмена.

09.02.2012    16795    AVK_Alex    1