Подскажите пожалуйста, на УНФ работает? Не могу найти где править, 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 Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции // ЕстьНеЦифры()
Показать