Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 дек 2024, 13:27

Неверное автозаполнение суммы в приходном кассовом ордере после реализации товаров

Автор MegaMozg, 04 окт 2014, 22:05

0 Пользователей и 1 гость просматривают эту тему.

MegaMozg

Помогите пожалуйста! Устал искать в чем подвох.
Заполняю "Реализация товаров и услуг" делаю "на основании" "приходный кассовый ордер" и сумма автозаполняется неверно (больше чем в реализации (но не всегда)).
в чем проблема может быть?
скриншоты прикрепил.

Besart


MegaMozg

Цитата: Besart от 04 окт 2014, 23:19
без препарирования кода 1с не обойтись
Эт я  то понял) вот пишу сюда, вдруг кто уже сталкивался и знает где что поменять

дфтын

дЫк менять то это в последнюю очередь, нужно отладчиком пройтись процедуру - ОбработкаЗаполнения в ПКО. Не удивлюсь если какие - то условия включены, а вы про них забыли

cska-fanat-kz

Сумма скорее всего это не тупо сумма документа реализации, а скорее всего с регистра (какого точно - не берусь сказать)...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

дфтын

У меня тоже подозрение, что оно берет и туда всю задолженность пишет. Я вот так на память сказать не могу, а смотреть лень :)

MegaMozg

Цитата: дфтын от 06 окт 2014, 13:07
У меня тоже подозрение, что оно берет и туда всю задолженность пишет. Я вот так на память сказать не могу, а смотреть лень :)
Перем мУдалятьДвижения;

// Текущие курс и кратность валюты документа для расчетов
Перем КурсДокумента Экспорт;
Перем КратностьДокумента Экспорт;

Перем мВалютаРегламентированногоУчета Экспорт;

// Хранят группировочные признаки вида операции
Перем ЕстьРасчетыСКонтрагентами Экспорт;
Перем ЕстьРасчетыПоКредитам Экспорт;

Перем ТаблицаПлатежейУпр;

Перем мСтруктураПараметровДенежныхСредств;

////////////////////////////////////////////////////////////////////////////////
// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ДОКУМЕНТА

#Если Клиент Тогда

// Определяет коды счетов дебета и кредита для вывода в печатную форму.
//
Функция ОпределитьКодыСчетСубсчет()

КодыСчетов = Новый Структура("Дебет,Кредит");

Возврат КодыСчетов;

КонецФункции // ОпределитьКодыСчетСубсчет()

// Функция формирует табличный документ с печатной формой накладной,
// разработанной методистами
//
// Возвращаемое значение:
//  Табличный документ - печатная форма накладной
//
Функция ПечатьПКО()

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);

Запрос.Текст =
"ВЫБРАТЬ
| Номер,
| Дата  КАК ДатаДокумента,
| Организация КАК Орган,
| Организация,
| Организация КАК Руководители,
| Подразделение.Представление КАК ПредставлениеПодразделения,
| Подразделение               КАК Подразделение,
| Контрагент,
| Контрагент.Представление КАК Контрагент,
| ПринятоОт      КАК ПринятоОт,
| Основание      КАК Основание,
| Приложение     КАК Приложение,
| СуммаДокумента КАК Сумма,
| ВалютаДокумента,
| ВалютаДокумента.Представление КАК ВалютаПредставление,
| СтавкаНДС
|ИЗ
| Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
|
|ГДЕ
| ПриходныйКассовыйОрдер.Ссылка = &ТекущийДокумент";

Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();

ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПриходныйКассовыйОрдер_КО1";
Макет       = ПолучитьОбщийМакет("КО1");

ЕстьРасчетыСКонтрагентами = УправлениеДенежнымиСредствами.ЕстьРасчетыСКонтрагентами(ВидОперации);
ЕстьРасчетыПоКредитам     = УправлениеДенежнымиСредствами.ЕстьРасчетыПоКредитам(ВидОперации);

// Выводим шапку ПКО

СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Орган, Шапка.ДатаДокумента);

ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ОбластьМакета.Параметры.Заполнить(Шапка);
ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации, "ПолноеНаименование,");
ОбластьМакета.Параметры.СуммаРубКоп       = ?(НЕ Касса.ВалютаДенежныхСредств = мВалютаРегламентированногоУчета,
Формат(Шапка.Сумма, "ЧЦ=15; ЧДЦ=2") + " " + СокрЛП(Шапка.ВалютаДокумента), РубКоп(Шапка.Сумма));
ОбластьМакета.Параметры.Сумма       = Формат(Шапка.Сумма, "ЧЦ=15; ЧДЦ=2")
+ ?(НЕ Касса.ВалютаДенежныхСредств = мВалютаРегламентированногоУчета, " " + СокрЛП(Шапка.ВалютаДокумента), "");
ОбластьМакета.Параметры.СуммаПрописью     = ?(НЕ Касса.ВалютаДенежныхСредств = мВалютаРегламентированногоУчета,
ОбщегоНазначения.СформироватьСуммуПрописью(Шапка.Сумма, Шапка.ВалютаДокумента), РубКопПрописью(Шапка.Сумма));
ОбластьМакета.Параметры.ОрганизацияПоОКПО = СведенияОбОрганизации.КодПоОКПО;
ОбластьМакета.Параметры.ДатаДокумента     = Шапка.ДатаДокумента;
ОбластьМакета.Параметры.НомерДокумента    = ОбщегоНазначения.ПолучитьНомерНаПечать(Шапка);

КодыСчетСубсчет = ОпределитьКодыСчетСубсчет();

ОбластьМакета.Параметры.КодДебета = КодыСчетСубсчет.Дебет;
ОбластьМакета.Параметры.СубСчет   = КодыСчетСубсчет.Кредит;

ТабНДС=РасшифровкаПлатежа.Выгрузить();

ТабНДС.Свернуть("СтавкаНДС","СуммаНДС");

ТекстСуммаНДС = "";

Для Каждого СтрокаНДС ИЗ ТабНДС цикл

ТекстСуммаНДС = ТекстСуммаНДС + Символы.ПС + "НДС (" + ?(НЕ ЗначениеЗаполнено(СтрокаНДС.СтавкаНДС), "без налога", СтрокаНДС.СтавкаНДС) + ") " + Формат(СтрокаНДС.СуммаНДС, "ЧЦ=15;ЧДЦ=2;ЧРД=-;ЧН=0-00")+" "+Шапка.ВалютаПредставление;

КонецЦикла;

ТекстСуммаНДС = Сред(ТекстСуммаНДС, 2);

ОбластьМакета.Параметры.ВТомЧисле = ТекстСуммаНДС;

Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизации(Шапка.Руководители, КонецДня(Шапка.ДатаДокумента),);

Бухгалтер    = Руководители.ГлавныйБухгалтер;
Кассир       = Руководители.Кассир;

ОбластьМакета.Параметры.ФИОГлавногоБухгалтера = Бухгалтер;
ОбластьМакета.Параметры.ФИОКассира            = Кассир;

ОбластьМакета.Параметры.ПринятоОт  = Шапка.ПринятоОт;
ОбластьМакета.Параметры.Основание  = Основание;
ОбластьМакета.Параметры.Приложение = Приложение;

ТабДокумент.Вывести(ОбластьМакета);

Возврат ТабДокумент;

КонецФункции // ПечатьПКО()

// Процедура осуществляет печать документа. Можно направить печать на
// экран или принтер, а также распечатать необходмое количество копий.
//
//  Название макета печати передается в качестве параметра,
// по переданному названию находим имя макета в соответствии.
//
// Параметры:
//  НазваниеМакета - строка, название макета.
//
Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт

Если ЭтоНовый() Тогда
Предупреждение("Документ можно распечатать только после его записи");
Возврат;
ИначеЕсли Не УправлениеДопПравамиПользователей.РазрешитьПечатьНепроведенныхДокументов(Проведен) Тогда
Предупреждение("Недостаточно полномочий для печати непроведенного документа!");
Возврат;
КонецЕсли;

Если Не РаботаСДиалогами.ПроверитьМодифицированность(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;

Если ИмяМакета = "ПКО" Тогда
// Получить экземпляр документа на печать
ТабДокумент = ПечатьПКО();

ИначеЕсли ТипЗнч(ИмяМакета) = Тип("ДвоичныеДанные") Тогда

ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Ссылка, ИмяМакета);

Если ТабДокумент = Неопределено Тогда
Возврат
КонецЕсли;

КонецЕсли;

УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект, Строка(ВидОперации)), Ссылка);

КонецПроцедуры // Печать()

// Возвращает доступные варианты печати документа
//
// Вовращаемое значение:
//  Струткура, каждая строка которой соответствует одному из вариантов печати
// 
Функция ПолучитьСтруктуруПечатныхФорм() Экспорт

Возврат Новый Структура("ПКО", "Приходный кассовый ордер");

КонецФункции // ПолучитьСтруктуруПечатныхФорм()

#КонецЕсли

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ДОКУМЕНТА

// Проверяет установленные курсы валют документа перед пересчетом сумм
// Нулевые курсы устанавливаются в 1
//
Процедура ПроверкаКурсовВалют(СтрокаПлатеж) Экспорт

КурсДокумента=?(КурсДокумента=0,1, КурсДокумента);
КратностьДокумента=?(КратностьДокумента=0,1, КратностьДокумента);

Если Не СтрокаПлатеж=Неопределено Тогда
СтрокаПлатеж.КурсВзаиморасчетов=?(СтрокаПлатеж.КурсВзаиморасчетов=0,1,СтрокаПлатеж.КурсВзаиморасчетов);
СтрокаПлатеж.КратностьВзаиморасчетов=?(СтрокаПлатеж.КратностьВзаиморасчетов=0,1,СтрокаПлатеж.КратностьВзаиморасчетов);
КонецЕсли;

КонецПроцедуры // ПроверкаКурсовВалют()

Функция РубКоп(Сумма)

Руб = Цел(Сумма);
Коп = ОКР(100*(Сумма-Руб),0,1);
СуммаРубКоп = ""+Руб+" руб. "+Цел(Коп/10)+(Коп-10*Цел(Коп/10))+" коп.";
Возврат СуммаРубКоп;

КонецФункции

Функция РубКопПрописью(Сумма)

СуммаРубКоп = ЧислоПрописью(Сумма, , "руб.,руб.,руб.,м,коп.,коп.,коп.,ж");
Возврат СуммаРубКоп;

КонецФункции

// Процедура выполняет заполнение суммы документа,
// суммы взаиморасчетов по регистру "ВзаиморасчетыСПодотчетнымиЛицами".
//
Процедура ЗаполнитьПоВзаиморасчетамСПодотчетнымЛицомУпр(СтрокаПлатеж) Экспорт

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ПодОтчетник",          Контрагент);
Запрос.УстановитьПараметр("РасчетныйДокумент",    РасчетныйДокумент);
Запрос.УстановитьПараметр("ВалютаВзаиморасчетов", ВалютаВзаиморасчетовРаботника);

Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВзаиморасчетыСПодотчетнымиЛицамиОстатки.СуммаВзаиморасчетовОстаток КАК СуммаДолга
|ИЗ
| РегистрНакопления.ВзаиморасчетыСПодотчетнымиЛицами.Остатки(
| ,
| ФизЛицо = &ПодОтчетник
| И РасчетныйДокумент = &РасчетныйДокумент
| И Валюта = &ВалютаВзаиморасчетов) КАК ВзаиморасчетыСПодотчетнымиЛицамиОстатки
|ГДЕ
| ВзаиморасчетыСПодотчетнымиЛицамиОстатки.СуммаВзаиморасчетовОстаток > 0";
РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
СтрокаПлатеж.СуммаВзаиморасчетов = Выборка.СуммаДолга;
СуммаДокумента = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаПлатеж.СуммаВзаиморасчетов,
ВалютаВзаиморасчетовРаботника, ВалютаДокумента,
СтрокаПлатеж.КурсВзаиморасчетов, КурсДокумента,
СтрокаПлатеж.КратностьВзаиморасчетов, КратностьДокумента);

СтрокаПлатеж.СуммаПлатежа = СуммаДокумента;

КонецЕсли;

КонецПроцедуры // ЗаполнитьПоВзаиморасчетамСПодотчетнымЛицомУпр()

// Процедура выполняет заполнение суммы документа по регистру "РозничнаяВыручкаКомпании".
//
// Параметры:
//  КассаККМ - ссылка на справочник "Кассы ККМ".
//
Процедура ЗаполнитьПоРозничнойВыручкеУпр(СтрокаПлатеж)

Запрос = Новый Запрос;
//Если ДокументОснование.ВидОперации = Перечисления.ВидыОперацийОтчетОРозничныхПродажах.ОтчетККМОПродажах Тогда
// Запрос.УстановитьПараметр("РозничнаяТочка", ДокументОснование.КассаККМ);
//Иначе
// Запрос.УстановитьПараметр("РозничнаяТочка", ДокументОснование.Склад);
//КонецЕсли;
Запрос.УстановитьПараметр("РозничнаяТочка", Контрагент);

Запрос.Текст =
"ВЫБРАТЬ
| СуммаОстаток
|ИЗ
| РегистрНакопления.РозничнаяВыручка.Остатки(, РозничнаяТочка = &РозничнаяТочка)
|ГДЕ
| СуммаОстаток > 0 
|";

РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
СуммаДокумента = Мин(МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(Выборка.СуммаОстаток,
                                мВалютаРегламентированногоУчета, ВалютаДокумента,
                                1, КурсДокумента, 1, КратностьДокумента),
                                МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(ДокументОснование.СуммаДокумента,  мВалютаРегламентированногоУчета, ВалютаДокумента,
                                1, КурсДокумента, 1, КратностьДокумента));
СтрокаПлатеж.СуммаПлатежа=СуммаДокумента;
КонецЕсли;

КонецПроцедуры // ЗаполнитьПоРозничнойВыручкеУпр()

Процедура ЗаполнитьПоСуммеДокументаУпр(СтрокаПлатеж)

СтруктураКурсаОснования = МодульВалютногоУчета.ПолучитьКурсВалюты(ДокументОснование.ВалютаДокумента, ДокументОснование.Дата);
КурсОснования=СтруктураКурсаОснования.Курс;
КратностьОснования=СтруктураКурсаОснования.Кратность;

ОснованиеСуммаДокумента  = ДокументОснование.СуммаДокумента;
Если ТипЗнч(ДокументОснование) = Тип("ДокументСсылка.ОтчетКомиссионераОПродажах") Тогда
ОснованиеСуммаДокумента = ОснованиеСуммаДокумента - ДокументОснование.СуммаВознаграждения;
КонецЕсли;

СтрокаПлатеж.СуммаВзаиморасчетов = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(ОснованиеСуммаДокумента, ДокументОснование.ВалютаДокумента, ДокументОснование.ДоговорКонтрагента.ВалютаВзаиморасчетов,
КурсОснования, ДокументОснование.КурсВзаиморасчетов, КратностьОснования, ДокументОснование.КратностьВзаиморасчетов);
СуммаДокумента      = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаПлатеж.СуммаВзаиморасчетов, СтрокаПлатеж.ДоговорКонтрагента.ВалютаВзаиморасчетов, ВалютаДокумента, СтрокаПлатеж.КурсВзаиморасчетов,
КурсДокумента, СтрокаПлатеж.КратностьВзаиморасчетов,КратностьДокумента);
СтрокаПлатеж.СуммаПлатежа=СуммаДокумента;

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

//Заполняет документ на основании расходного кассового ордера
//
Процедура ЗаполнитьПоРКОУпр()

Если ДокументОснование.ВидОперации = Перечисления.ВидыОперацийРКО.ОплатаПоставщику Тогда

СтруктураКурсаОснования = МодульВалютногоУчета.ПолучитьКурсВалюты(ДокументОснование.ВалютаДокумента, ДокументОснование.Дата);
КурсОснования=СтруктураКурсаОснования.Курс;
КратностьОснования=СтруктураКурсаОснования.Кратность;
ВидОперации = Перечисления.ВидыОперацийПКО.ВозвратДенежныхСредствПоставщиком;

Контрагент = ДокументОснование.Контрагент;

Для Каждого СтрокаОснование ИЗ ДокументОснование.РасшифровкаПлатежа Цикл

СтрокаПлатеж      = РасшифровкаПлатежа.Добавить();

СтрокаПлатеж.ДоговорКонтрагента  = СтрокаОснование.ДоговорКонтрагента;
СтруктураКурсаВзаиморасчетов         = МодульВалютногоУчета.ПолучитьКурсВалюты(СтрокаПлатеж.ДоговорКонтрагента.ВалютаВзаиморасчетов, Дата);
СтрокаПлатеж.КурсВзаиморасчетов      = СтруктураКурсаВзаиморасчетов.Курс;
СтрокаПлатеж.КратностьВзаиморасчетов = СтруктураКурсаВзаиморасчетов.Кратность;

СтрокаПлатеж.СуммаПлатежа=СтрокаОснование.СуммаПлатежа;

СтрокаПлатеж.Сделка = СтрокаОснование.Сделка;
Если СтрокаОснование.ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом Тогда
СтрокаПлатеж.ДокументРасчетовСКонтрагентом = ДокументОснование;
КонецЕсли;

СтрокаПлатеж.СтавкаНДС=СтрокаОснование.СтавкаНДС;

КонецЦикла;

#Если Клиент Тогда
УправлениеДенежнымиСредствами.ЗаполнитьРеквизитыРасчетногоДокумента(ЭтотОбъект, глЗначениеПеременной("глТекущийПользователь"), мВалютаРегламентированногоУчета,РасшифровкаПлатежа);
#КонецЕсли

Для Индекс=0 По ДокументОснование.РасшифровкаПлатежа.Количество()-1 Цикл

СтрокаПлатеж=РасшифровкаПлатежа[Индекс];
СтрокаОснование=ДокументОснование.РасшифровкаПлатежа[Индекс];

Если (ЗначениеЗаполнено(СтрокаПлатеж.ДоговорКонтрагента))
И СтрокаПлатеж.ДоговорКонтрагента=СтрокаОснование.ДоговорКонтрагента Тогда // Остался договор из основания

СтрокаПлатеж.СуммаВзаиморасчетов = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаОснование.СуммаПлатежа,
ДокументОснование.ВалютаДокумента,
СтрокаОснование.ДоговорКонтрагента.ВалютаВзаиморасчетов,
КурсОснования, СтрокаОснование.КурсВзаиморасчетов,
КратностьОснования, СтрокаОснование.КратностьВзаиморасчетов);

СтрокаПлатеж.СуммаПлатежа     = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаПлатеж.СуммаВзаиморасчетов,
СтрокаПлатеж.ДоговорКонтрагента.ВалютаВзаиморасчетов,
ВалютаДокумента,
СтрокаПлатеж.КурсВзаиморасчетов, КурсДокумента,
СтрокаПлатеж.КратностьВзаиморасчетов,КратностьДокумента);

Иначе

Если НЕ ЗначениеЗаполнено(СтрокаПлатеж.ДоговорКонтрагента.ВалютаВзаиморасчетов) Тогда

СтрокаПлатеж.СуммаВзаиморасчетов=СтрокаПлатеж.СуммаПлатежа;
СтрокаПлатеж.КурсВзаиморасчетов=1;
СтрокаПлатеж.КратностьВзаиморасчетов=1;

Иначе

СтрокаПлатеж.СуммаВзаиморасчетов = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаПлатеж.СуммаПлатежа,
ВалютаДокумента,
СтрокаПлатеж.ДоговорКонтрагента.ВалютаВзаиморасчетов,
КурсДокумента, СтрокаПлатеж.КурсВзаиморасчетов,
КратностьДокумента, СтрокаПлатеж.КратностьВзаиморасчетов);

КонецЕсли;

КонецЕсли;

УправлениеДенежнымиСредствами.ПересчитатьСуммуНДС(СтрокаПлатеж);

КонецЦикла;

СуммаДокумента=РасшифровкаПлатежа.Итог("СуммаПлатежа");


ИначеЕсли ДокументОснование.ВидОперации = Перечисления.ВидыОперацийРКО.ВозвратДенежныхСредствПокупателю Тогда

// Отказываем
Возврат;

ИначеЕсли ДокументОснование.ВидОперации = Перечисления.ВидыОперацийРКО.ВыдачаДенежныхСредствПодотчетнику Тогда

СтрокаПлатеж      = РасшифровкаПлатежа.Добавить();

ВидОперации = Перечисления.ВидыОперацийПКО.ВозвратДенежныхСредствПодотчетником;

Контрагент                    = ДокументОснование.Контрагент;
РасчетныйДокумент           = ДокументОснование;
ВалютаВзаиморасчетовРаботника = ДокументОснование.ВалютаВзаиморасчетовРаботника;
СтруктураКурса                       = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаВзаиморасчетовРаботника, ТекущаяДата());
СтрокаПлатеж.КурсВзаиморасчетов      = СтруктураКурса.Курс;
СтрокаПлатеж.КратностьВзаиморасчетов = СтруктураКурса.Кратность;

СтрокаПлатеж.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.ВозвратДенежныхСредствПодотчетником;

ЗаполнитьПоВзаиморасчетамСПодотчетнымЛицомУпр(СтрокаПлатеж);

ИначеЕсли ДокументОснование.ВидОперации = Перечисления.ВидыОперацийРКО.РасходДенежныхСредствПрочее Тогда

ВидОперации=Перечисления.ВидыОперацийПКО.ПриходДенежныхСредствПрочее;

// Дальше заполняем по умолчанию
Возврат;

ИначеЕсли  ДокументОснование.ВидОперации = Перечисления.ВидыОперацийРКО.ВзносНаличнымиВБанк Тогда

ВидОперации=Перечисления.ВидыОперацийПКО.ПолучениеНаличныхДенежныхСредствВБанке;
// Дальше заполняем по умолчанию
Возврат;

ИначеЕсли  ДокументОснование.ВидОперации = Перечисления.ВидыОперацийРКО.ВыдачаДенежныхСредствКассеККМ Тогда

ВидОперации=Перечисления.ВидыОперацийПКО.ПриходДенежныхСредствРозничнаяВыручка;
// Дальше заполняем по умолчанию
Возврат;

Иначе

ВидОперации=Перечисления.ВидыОперацийПКО.ПриходДенежныхСредствПрочее;
// Дальше заполняем по умолчанию
Возврат;

КонецЕсли;

КонецПроцедуры // ЗаполнитьПоРКОУпр()

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ ОБЕСПЕЧЕНИЯ ПРОВЕДЕНИЯ ДОКУМЕНТА

// Формирует структуру полей, обязательных для заполнения при отражении фактического
// движения средств по банку.
//
// Возвращаемое значение:
//   СтруктураОбязательныхПолей   – структура для проверки
//
Функция СтруктураОбязательныхПолейОплатаУпр()

СтруктураПолей=Новый Структура;
СтруктураПолей.Вставить("Организация");
СтруктураПолей.Вставить("Касса");
СтруктураПолей.Вставить("СуммаДокумента");

Если Не (ВидОперации=Перечисления.ВидыОперацийПКО.ПолучениеНаличныхДенежныхСредствВБанке ИЛИ ВидОперации=Перечисления.ВидыОперацийПКО.ПриходДенежныхСредствПрочее) Тогда
СтруктураПолей.Вставить("Контрагент");
КонецЕсли;

Если ВидОперации=Перечисления.ВидыОперацийПКО.ПолучениеНаличныхДенежныхСредствВБанке Тогда
СтруктураПолей.Вставить("СчетОрганизации","Не указан счет организации");
КонецЕсли;

Возврат СтруктураПолей;

КонецФункции // СтруктураОбязательныхПолейОплатаУпр()

// Формирует структуру полей, обязательных для заполнения при отражении операции во
// взаиморасчетах
// Возвращаемое значение:
//   СтруктурахПолей   – структура для проверки
//
Функция СтруктураОбязательныхПолейРасчеты()

Если ВидОперации=Перечисления.ВидыОперацийПКО.ВозвратДенежныхСредствПоставщиком ИЛИ
ВидОперации=Перечисления.ВидыОперацийПКО.ОплатаПокупателя Тогда

СтруктураПолей= Новый Структура("Организация,Касса,
                        |Контрагент, СуммаДокумента");

ИначеЕсли ВидОперации=Перечисления.ВидыОперацийПКО.ВозвратДенежныхСредствПодотчетником Тогда
СтруктураПолей = Новый Структура("Организация,Касса,Контрагент,
                        |ВалютаВзаиморасчетовРаботника, СуммаДокумента");
Иначе
СтруктураПолей= Новый Структура("Организация,Касса");
КонецЕсли;

Возврат СтруктураПолей;

КонецФункции // СтруктураОбязательныхПолейОплата()

// Проверяет значение, необходимое при проведении
Процедура ПроверитьЗначение(Значение, Отказ, Заголовок, ИмяРеквизита)

Если НЕ ЗначениеЗаполнено(Значение) Тогда

ОбщегоНазначения.СообщитьОбОшибке("Не заполнено значение реквизита """+ИмяРеквизита+"""",Отказ, Заголовок);

КонецЕсли;

КонецПроцедуры // ПроверитьЗначение()

// Проверяет заполнение табличной части документа
//
Процедура ПроверитьЗаполнениеТЧ(Отказ, Заголовок)

Для Каждого Платеж Из РасшифровкаПлатежа Цикл

ПроверитьЗначение(Платеж.ДоговорКонтрагента,Отказ, Заголовок,"Договор");
ПроверитьЗначение(Платеж.СуммаВзаиморасчетов,Отказ, Заголовок,"Сумма взаиморасчетов");

Если Не Отказ Тогда

// Сделка должна быть заполнена, если учет взаиморасчетов ведется по заказам.
Если Платеж.ДоговорКонтрагента.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоЗаказам Тогда

ТекстСделка=?(УправлениеДенежнымиСредствами.ОпределитьПараметрыВыбораСделки(ВидОперации).ТипЗаказа="ЗаказПокупателя","Заказ покупателя","Заказ поставщику");
ПроверитьЗначение(Платеж.Сделка,Отказ, Заголовок,ТекстСделка);

Если Отказ Тогда

Сообщить("По договору "+Строка(Платеж.ДоговорКонтрагента)+" установлен способ ведения взаиморасчетов ""по заказам""!
|Заполните поле """+ТекстСделка+"""!");

КонецЕсли;

ИначеЕсли Платеж.ДоговорКонтрагента.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоСчетам Тогда

ТекстСделка=?(УправлениеДенежнымиСредствами.ОпределитьПараметрыВыбораСделки(ВидОперации).ТипЗаказа="ЗаказПокупателя","Счет покупателя","Счет поставщику");
ПроверитьЗначение(Платеж.Сделка,Отказ, Заголовок,ТекстСделка);

Если Отказ Тогда
Сообщить("По договору "+Строка(Платеж.ДоговорКонтрагента)+" установлен способ ведения взаиморасчетов ""по счетам""!
|Заполните поле """+ТекстСделка+"""!");
КонецЕсли;

КонецЕсли;

Если ЗначениеЗаполнено(Организация)
И Организация <> Платеж.ДоговорКонтрагента.Организация Тогда
ОбщегоНазначения.СообщитьОбОшибке("Выбран договор контрагента, не соответствующий организации, указанной в документе!", Отказ, Заголовок);
КонецЕсли;

КонецЕсли;

КонецЦикла;

КонецПроцедуры // ПроверитьЗаполнениеТЧ

// Формирует движения по регистрам
//  Отказ                     - флаг отказа в проведении,
//  Заголовок                 - строка, заголовок сообщения об ошибке проведения.
//
Процедура ДвиженияПоРегистрам(Режим, Отказ, Заголовок, СтруктураШапкиДокумента)

ДвиженияПоРегистрамУпр(Режим, Отказ, Заголовок, СтруктураШапкиДокумента);

Если ЕстьРасчетыСКонтрагентами или ЕстьРасчетыПоКредитам Тогда
ДвиженияПоРегистрамОперативныхВзаиморасчетов(Режим, Отказ, Заголовок,СтруктураШапкиДокумента);
КонецЕсли;

//Движения по расчетам для ДНС
Если ЕстьРасчетыСКонтрагентами и ОтражатьВБухгалтерскомУчете и Оплачено Тогда
ДвиженияРегистровПодсистемыНДС(СтруктураШапкиДокумента, Заголовок);
КонецЕсли;

КонецПроцедуры // ДвиженияПоРегистрам()

Процедура ДвиженияРегистровПодсистемыНДС(СтруктураШапкиДокумента, Заголовок)

Если СтруктураШапкиДокумента.ОрганизацияНеЯвляетсяПлательщикомНДС тогда
// Движения по этому документу делать не нужно
Возврат;
КонецЕсли;

СтруктураПараметров = БухгалтерскийУчетРасчетовСКонтрагентами.ПодготовкаСтруктурыПараметровДляДвиженияДенег(Ссылка, мВалютаРегламентированногоУчета, Заголовок);

Если СтруктураПараметров = Ложь Тогда
    //Ошибка при подготовке табдлиц.
// Указанный вид операции не влияет на расчеты с контрагентами.
Возврат;
КонецЕсли;

БухгалтерскийУчетРасчетовСКонтрагентами.ДвижениеДенег(СтруктураПараметров, ЭтотОбъект);

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

Процедура ДвиженияПоРегистрамУпр(Режим, Отказ, Заголовок, СтруктураШапкиДокумента)

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

УправлениеДенежнымиСредствами.ПровестиПоступлениеДенежныхСредствУпр(
СтруктураШапкиДокумента, мСтруктураПараметровДенежныхСредств, ТаблицаПлатежейУпр, Движения, Отказ, Заголовок);

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

Процедура ДвиженияПоРегистрамОперативныхВзаиморасчетов(РежимПроведения, Отказ, Заголовок, СтруктураШапкиДокумента)

Если НЕ (Оплачено И ОтраженоВОперУчете) И ОтражатьВУправленческомУчете Тогда
Возврат;
КонецЕсли;

ВидДвижения = ВидДвиженияНакопления.Расход;
Если СтруктураШапкиДокумента.ВидОперации = Перечисления.ВидыОперацийПКО.ВозвратДенежныхСредствПоставщиком Тогда
ВидРасчетовПоОперации = Перечисления.ВидыРасчетовСКонтрагентами.ПоПриобретению;
ИначеЕсли СтруктураШапкиДокумента.ВидОперации = Перечисления.ВидыОперацийПКО.ОплатаПокупателя Тогда
ВидРасчетовПоОперации = Перечисления.ВидыРасчетовСКонтрагентами.ПоРеализации;
Иначе
ВидРасчетовПоОперации = Перечисления.ВидыРасчетовСКонтрагентами.Прочее;
КонецЕсли;
СтруктураШапкиДокумента.Вставить("РежимПроведения", РежимПроведения);

УправлениеВзаиморасчетами.ОтражениеОплатыВРегистреОперативныхРасчетовПоДокументам(СтруктураШапкиДокумента, Дата, "РасшифровкаПлатежа", ВидРасчетовПоОперации, ВидДвижения, Движения, Отказ, Заголовок);

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

Процедура ПроверитьЗаполнениеДокументаУпр(Отказ, Заголовок)

Если Оплачено Тогда
ЗаполнениеДокументов.ПроверитьЗаполнениеШапкиДокумента(ЭтотОбъект, СтруктураОбязательныхПолейОплатаУпр(), Отказ, Заголовок);
КонецЕсли;

Если (НЕ ОтраженоВОперУчете) И (НЕ Оплачено) И ОтражатьВУправленческомУчете Тогда

Сообщить(Заголовок+"
         |Не выбрано правило проведения (""Отражено в опер. учете"",""Оплачено"")");
Отказ = Истина;

КонецЕсли;

Если ВидОперации=Перечисления.ВидыОперацийПКО.ПолучениеНаличныхДенежныхСредствВБанке
И НЕ СчетОрганизации.ВалютаДенежныхСредств=Касса.ВалютаДенежныхСредств Тогда
Сообщить("Не совпадают валюты банковского счета и кассы");
Отказ=Истина;
КонецЕсли;

Если НЕ РасшифровкаПлатежа.Итог("СуммаПлатежа")= СуммаДокумента Тогда

Сообщить(Заголовок+"
         |не совпадают сумма документа и ее расшифровка.");
Отказ = Истина;

КонецЕсли;

Если ОтраженоВОперУчете Тогда

ЗаполнениеДокументов.ПроверитьЗаполнениеШапкиДокумента(ЭтотОбъект, СтруктураОбязательныхПолейРасчеты(), Отказ, Заголовок);

Если ЕстьРасчетыСКонтрагентами ИЛИ ЕстьРасчетыПоКредитам Тогда

ПроверитьЗаполнениеТЧ(Отказ, Заголовок);

Если Не Отказ Тогда
УправлениеДенежнымиСредствами.КонтрольОстатковПоТЧ(Дата, ТаблицаПлатежейУпр, Отказ, Заголовок,,Истина);
КонецЕсли;

ИначеЕсли ВидОперации=Перечисления.ВидыОперацийПКО.ВозвратДенежныхСредствПодотчетником
И РасшифровкаПлатежа[0].СуммаВзаиморасчетов=0 Тогда

ОбщегоНазначения.СообщитьОбОшибке("Не указана сумма взаиморасчетов с физическим лицом.",Отказ, Заголовок);

КонецЕсли;

КонецЕсли;

Если ВидОперации=Перечисления.ВидыОперацийПКО.ПриходДенежныхСредствРозничнаяВыручка
И НЕ Касса.ВалютаДенежныхСредств=мВалютаРегламентированногоУчета Тогда
Сообщить("Прием розничной выручки производится только в валюте регламентированного учета.");
Отказ=Истина;
КонецЕсли;

Если Организация.ОтражатьВРегламентированномУчете Тогда
Если ТипЗнч(Контрагент) = Тип("СправочникСсылка.Контрагенты") Тогда
Если Контрагент.НеЯвляетсяРезидентом Тогда
Сообщить("Проводить наличные расчеты с нерезидентами по данной Организации запрещено.");
Отказ=Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;

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

Процедура ЗаполнитьРеквизитыПоУмолчаниюУпр()

ОтраженоВОперУчете           = Истина;
ОтражатьВУправленческомУчете = Истина;

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

// Процедура формирует структуру шапки документа и дополнительных полей.
//
Процедура ПодготовитьСтруктуруШапкиДокумента(Заголовок, СтруктураШапкиДокумента, РежимПроведения = Неопределено) Экспорт

Если ВидОперации = Перечисления.ВидыОперацийПКО.ВозвратДенежныхСредствПодотчетником
ИЛИ ВидОперации = Перечисления.ВидыОперацийПКО.РасчетыПоКредитамИЗаймамСКонтрагентами
ИЛИ ВидОперации = Перечисления.ВидыОперацийПКО.ПрочиеРасчетыСКонтрагентами Тогда
КурсДокумента      = РасшифровкаПлатежа[0].КурсВзаиморасчетов;
КратностьДокумента = РасшифровкаПлатежа[0].КратностьВзаиморасчетов;

Иначе
СтруктураКурсаДокумента = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаДокумента,Дата);
КурсДокумента      = СтруктураКурсаДокумента.Курс;
КратностьДокумента = СтруктураКурсаДокумента.Кратность;
КонецЕсли;


ЕстьРасчетыСКонтрагентами = УправлениеДенежнымиСредствами.ЕстьРасчетыСКонтрагентами(ВидОперации);
ЕстьРасчетыПоКредитам     = УправлениеДенежнымиСредствами.ЕстьРасчетыПоКредитам(ВидОперации);

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

// Заполним по шапке документа дерево параметров, нужных при проведении.
ДеревоПолейЗапросаПоШапке = ОбщегоНазначения.СформироватьДеревоПолейЗапросаПоШапке();
ОбщегоНазначения.ДобавитьСтрокуВДеревоПолейЗапросаПоШапке(ДеревоПолейЗапросаПоШапке, "ДоговорыКонтрагентов", "ВедениеВзаиморасчетов"                         , "ВедениеВзаиморасчетов");
ОбщегоНазначения.ДобавитьСтрокуВДеревоПолейЗапросаПоШапке(ДеревоПолейЗапросаПоШапке, "ДоговорыКонтрагентов", "ВалютаВзаиморасчетов"                          , "ВалютаВзаиморасчетов");
ОбщегоНазначения.ДобавитьСтрокуВДеревоПолейЗапросаПоШапке(ДеревоПолейЗапросаПоШапке, "ДоговорыКонтрагентов", "Организация"                        , "ДоговорОрганизация");
ОбщегоНазначения.ДобавитьСтрокуВДеревоПолейЗапросаПоШапке(ДеревоПолейЗапросаПоШапке, "ДоговорыКонтрагентов", "ВидДоговора"                        , "ВидДоговора");
ОбщегоНазначения.ДобавитьСтрокуВДеревоПолейЗапросаПоШапке(ДеревоПолейЗапросаПоШапке, "ДоговорыКонтрагентов", "КонтролироватьДенежныеСредстваКомитента"       , "КонтролироватьДенежныеСредстваКомитента");
ОбщегоНазначения.ДобавитьСтрокуВДеревоПолейЗапросаПоШапке(ДеревоПолейЗапросаПоШапке, "УчетнаяПолитика"     , "ВедениеУчетаПоПроектам"                     , "ВедениеУчетаПоПроектам");
ОбщегоНазначения.ДобавитьСтрокуВДеревоПолейЗапросаПоШапке(ДеревоПолейЗапросаПоШапке, "Организации"         , "ОтражатьВРегламентированномУчете"              , "ОтражатьВРегламентированномУчете");

// Сформируем запрос на дополнительные параметры, нужные при проведении, по данным шапки документа
СтруктураШапкиДокумента = УправлениеЗапасами.СформироватьЗапросПоДеревуПолей(ЭтотОбъект, ДеревоПолейЗапросаПоШапке, СтруктураШапкиДокумента, мВалютаРегламентированногоУчета);

СтруктураШапкиДокумента.Вставить("КурсДокумента" , КурсДокумента);
СтруктураШапкиДокумента.Вставить("КратностьДокумента" , КратностьДокумента);

// Заголовок для сообщений об ошибках проведения.
Заголовок = ОбщегоНазначения.ПредставлениеДокументаПриПроведении(СтруктураШапкиДокумента);

КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ

// Процедура - обработчик события "ОбработкаЗаполнения".
//
Процедура ОбработкаЗаполнения(Основание)

Если Основание = Неопределено ИЛИ НЕ Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Основание)) Тогда
возврат;
КонецЕсли;

// Заполним реквизиты из стандартного набора по документу основанию.
ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(ЭтотОбъект, Основание);

Если НЕ ЗначениеЗаполнено(Касса) Тогда
оснКасса = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяКасса");

Если оснКасса.Владелец <> Организация Тогда
//ВвестиЗначение(оснКасса, "Укажите кассу поступления денежных средств", "СправочникСсылка.Кассы");
оснКасса = Справочники.Кассы.ПустаяСсылка();

#Если Клиент Тогда

формаВыбораКассы = ПолучитьФорму("ФормаВыбораКассы");
формаВыбораКассы.Организация = Организация;

Если формаВыбораКассы.ОткрытьМодально() = Истина Тогда
оснКасса = формаВыбораКассы.Касса;
КонецЕсли;

#КонецЕсли

КонецЕсли;

Касса = оснКасса;
КонецЕсли;

ВалютаДокумента         = ?(НЕ Касса.ВалютаДенежныхСредств.Пустая(),Касса.ВалютаДенежныхСредств,мВалютаРегламентированногоУчета);

СтруктураКурсаДокумента = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаДокумента, Дата);
КурсДокумента           = СтруктураКурсаДокумента.Курс;
КратностьДокумента      = СтруктураКурсаДокумента.Кратность;

ДокументОснование = Основание.Ссылка;
стрСпособЗаполнения  = "Не заполнять";

Если ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаказПокупателя")
ИЛИ ТипЗнч(Основание) = Тип("ДокументСсылка.СчетНаОплатуПокупателю") Тогда

        УправлениеДенежнымиСредствами.ЗаполнитьПриходПоОснованию(
ЭтотОбъект, Основание,
УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(
глЗначениеПеременной("глТекущийПользователь"), "ОсновнойОтветственный"));

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.РеализацияТоваровУслуг")
или ТипЗнч(Основание) = Тип("ДокументСсылка.ОтчетКомиссионераОПродажах") Тогда

СтрокаПлатеж = РасшифровкаПлатежа.Добавить();
ВидОперации  = Перечисления.ВидыОперацийПКО.ОплатаПокупателя;
Контрагент   = Основание.Контрагент;

СтрокаПлатеж.ДоговорКонтрагента      = Основание.ДоговорКонтрагента;
СтрокаПлатеж.СтатьяДвиженияДенежныхСредств = СтрокаПлатеж.ДоговорКонтрагента.ОсновнаяСтатьяДвиженияДенежныхСредств;
СтруктураКурсаВзаиморасчетов         = МодульВалютногоУчета.ПолучитьКурсВалюты(СтрокаПлатеж.ДоговорКонтрагента.ВалютаВзаиморасчетов, Дата);
СтрокаПлатеж.КурсВзаиморасчетов      = СтруктураКурсаВзаиморасчетов.Курс;
СтрокаПлатеж.КратностьВзаиморасчетов = СтруктураКурсаВзаиморасчетов.Кратность;
СтрокаПлатеж.Проект                  = Основание.Проект;

СтрокаПлатеж.Сделка = Основание.Сделка;

Если ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом Тогда
СтрокаПлатеж.ДокументРасчетовСКонтрагентом = Основание;
Если Основание.Проведен Тогда
стрСпособЗаполнения = "По взаиморасчетам";
Иначе
стрСпособЗаполнения = "По сумме документа";
КонецЕсли;
Иначе
Если Основание.Проведен Тогда
стрСпособЗаполнения = "По взаиморасчетам";
Иначе
стрСпособЗаполнения = "По сумме документа";
КонецЕсли;
КонецЕсли;

СтрокаПлатеж.СтавкаНДС = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнаяСтавкаНДС");

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ВозвратТоваровПоставщику") Тогда

СтрокаПлатеж = РасшифровкаПлатежа.Добавить();
ВидОперации  = Перечисления.ВидыОперацийПКО.ВозвратДенежныхСредствПоставщиком;
Контрагент   = Основание.Контрагент;

СтрокаПлатеж.ДоговорКонтрагента      = Основание.ДоговорКонтрагента;
СтрокаПлатеж.СтатьяДвиженияДенежныхСредств = СтрокаПлатеж.ДоговорКонтрагента.ОсновнаяСтатьяДвиженияДенежныхСредств;
СтруктураКурсаВзаиморасчетов         = МодульВалютногоУчета.ПолучитьКурсВалюты(СтрокаПлатеж.ДоговорКонтрагента.ВалютаВзаиморасчетов, Дата);
СтрокаПлатеж.КурсВзаиморасчетов      = СтруктураКурсаВзаиморасчетов.Курс;
СтрокаПлатеж.КратностьВзаиморасчетов = СтруктураКурсаВзаиморасчетов.Кратность;
СтрокаПлатеж.Проект                  = Основание.Проект;

СтрокаПлатеж.Сделка = Основание.Сделка;

Если ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом Тогда

СтрокаПлатеж.ДокументРасчетовСКонтрагентом = Основание;

Если Основание.Проведен Тогда
стрСпособЗаполнения = "По взаиморасчетам";
КонецЕсли;
Иначе
Если Основание.Проведен Тогда
стрСпособЗаполнения = "По сумме документа";
КонецЕсли;
КонецЕсли;

СтрокаПлатеж.СтавкаНДС = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнаяСтавкаНДС");

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.РасходныйКассовыйОрдер") Тогда

ЗаполнитьПоРКОУпр();

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах") Тогда

СтрокаПлатеж = РасшифровкаПлатежа.Добавить();
ВидОперации  = Перечисления.ВидыОперацийПКО.ПриходДенежныхСредствРозничнаяВыручка;

Если Основание.ВидОперации=Перечисления.ВидыОперацийОтчетОРозничныхПродажах.ОтчетККМОПродажах Тогда
ВидПриемаРозничнойВыручки=Перечисления.ВидПриемаРозничнойВыручки.ИзКассы;
Контрагент   = Основание.КассаККМ;
ИначеЕсли Основание.ВидОперации=Перечисления.ВидыОперацийОтчетОРозничныхПродажах.ОтчетНТТОПродажах Тогда
ВидПриемаРозничнойВыручки=Перечисления.ВидПриемаРозничнойВыручки.ИзНТТ;
Контрагент   = Основание.Склад;
КонецЕсли;

стрСпособЗаполнения = "По розничной выручке";

СтрокаПлатеж.СтавкаНДС = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнаяСтавкаНДС");

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ДенежныйЧек") Тогда

СтрокаПлатеж      = РасшифровкаПлатежа.Добавить();

ВалютаДокумента = Основание.ВалютаДокумента;
Касса           = Основание.Касса;
СчетОрганизации = Основание.СчетОрганизации;
Организация     = Основание.Организация;
СуммаДокумента  = Основание.СуммаДокумента;
ВидОперации     = Перечисления.ВидыОперацийПКО.ПолучениеНаличныхДенежныхСредствВБанке;

ДенежныйЧек=Основание.Ссылка;

СтрокаПлатеж.СуммаПлатежа=СуммаДокумента;
СтрокаПлатеж.СтатьяДвиженияДенежныхСредств=Основание.СтатьяДвиженияДенежныхСредств;

ИначеЕсли ТипЗнч(Основание)=Тип("ДокументСсылка.ПланируемоеПоступлениеДенежныхСредств") Тогда

Если Основание.ФормаОплаты=Перечисления.ВидыДенежныхСредств.Безналичные Тогда
Сообщить("Документом планировалось поступление безналичных денежных средств.");
Возврат;
КонецЕсли;

ВидОперацииПоступление = Основание.ВидОперации;

СтавкаНДС = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнаяСтавкаНДС");

УправлениеДенежнымиСредствами.ОпределитьОперациюПоОснованиюУпр(ВидОперации,ВидОперацииПоступление);

Организация = Основание.Организация;
ВалютаДокумента = Основание.ВалютаДокумента;

Если ЗначениеЗаполнено(Основание.БанковскийСчетКасса) Тогда
Касса = Основание.БанковскийСчетКасса;
КонецЕсли;

Если ВалютаДокумента.Пустая() Тогда
ВалютаДокумента = мВалютаРегламентированногоУчета;
КонецЕсли;

СтруктураКурсаДокумента = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаДокумента,);
КурсДокумента      = СтруктураКурсаДокумента.Курс;
КратностьДокумента = СтруктураКурсаДокумента.Кратность;

Если ВидОперации=Перечисления.ВидыОперацийПКО.ПриходДенежныхСредствРозничнаяВыручка Тогда

ВидПриемаРозничнойВыручки=Основание.ВидПриемаРозничнойВыручки;
Контрагент=Основание.КассаККМ;

КонецЕсли;

УправлениеДенежнымиСредствами.ЗаполнитьПоПланируемомуПоступлениюУпр(РасшифровкаПлатежа,
Основание,
СтавкаНДС,
ВалютаДокумента,
КурсДокумента,
КратностьДокумента,
ВидОперации);

СуммаДокумента=РасшифровкаПлатежа.Итог("СуммаПлатежа");

КонецЕсли;

ПроверкаКурсовВалют(СтрокаПлатеж);

Если стрСпособЗаполнения = "По взаиморасчетам" Тогда

УправлениеДенежнымиСредствами.ЗаполнитьПоВзаиморасчетамУпр(ВалютаДокумента,КурсДокумента,КратностьДокумента,СтрокаПлатеж,1);
СуммаДокумента=СтрокаПлатеж.СуммаПлатежа;
УправлениеДенежнымиСредствами.ПересчитатьСуммуНДС(СтрокаПлатеж);

ИначеЕсли стрСпособЗаполнения = "По взаиморасчетам с подотчетным лицом" Тогда
ЗаполнитьПоВзаиморасчетамСПодотчетнымЛицомУпр(СтрокаПлатеж);

ИначеЕсли стрСпособЗаполнения = "По розничной выручке" Тогда
ЗаполнитьПоРозничнойВыручкеУпр(СтрокаПлатеж);
УправлениеДенежнымиСредствами.ПересчитатьСуммуНДС(СтрокаПлатеж);

ИначеЕсли стрСпособЗаполнения = "По сумме документа" Тогда
ЗаполнитьПоСуммеДокументаУпр(СтрокаПлатеж);
УправлениеДенежнымиСредствами.ПересчитатьСуммуНДС(СтрокаПлатеж);

КонецЕсли;

ЕстьРасчетыСКонтрагентами=УправлениеДенежнымиСредствами.ЕстьРасчетыСКонтрагентами(ВидОперации);
ЕстьРасчетыПоКредитам=УправлениеДенежнымиСредствами.ЕстьРасчетыПоКредитам(ВидОперации);

ОтраженоВОперУчете=Истина;
Оплачено=Истина;
ОтражатьВУправленческомУчете=Истина;

Если (ВидОперации=Перечисления.ВидыОперацийПКО.ВозвратДенежныхСредствПодотчетником ) И
НЕ ВалютаВзаиморасчетовРаботника = ВалютаДокумента Тогда

ОтражатьВБухгалтерскомУчете=Ложь;
ОтражатьВНалоговомУчете=Ложь;

Иначе

ОтражатьВБухгалтерскомУчете=Истина;

КонецЕсли;

Если ПринятоОт="" И ЗначениеЗаполнено(Контрагент) Тогда

Если ЕстьРасчетыСКонтрагентами ИЛИ ЕстьРасчетыПоКредитам Тогда

ПринятоОт =?(Контрагент.НаименованиеПолное="",Контрагент.Наименование, Контрагент.НаименованиеПолное);

ИначеЕсли ВидОперации=Перечисления.ВидыОперацийПКО.ВозвратДенежныхСредствПодотчетником Тогда

Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ФИОФизЛицСрезПоследних.Фамилия КАК Фамилия,
| ФИОФизЛицСрезПоследних.Имя КАК Имя,
| ФИОФизЛицСрезПоследних.Отчество КАК Отчество
|ИЗ
| РегистрСведений.ФИОФизЛиц.СрезПоследних(&Дата, ФизЛицо=&ФизЛицо) КАК ФИОФизЛицСрезПоследних";
Запрос.УстановитьПараметр("Дата",Дата);
Запрос.УстановитьПараметр("ФизЛицо",Контрагент);

Результат=Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда

ПринятоОт = ?(НЕ ПустаяСтрока(Результат.Фамилия),
Результат.Фамилия + ?(НЕ ПустаяСтрока(Результат.Имя)," " + Результат.Имя + " " + ?(НЕ ПустаяСтрока(Результат.Отчество),Результат.Отчество, ""), ""),"");

КонецЕсли;

Если ЗначениеЗаполнено(РасчетныйДокумент) Тогда

ЭтотОбъект.Основание=Лев(Строка(РасчетныйДокумент),Найти(Строка(РасчетныйДокумент),Строка(РасчетныйДокумент.Дата))-1)+Формат(РасчетныйДокумент.Дата,"ДФ=dd.MM.yyyy");

КонецЕсли;

КонецЕсли;

КонецЕсли;

Ответственный = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойОтветственный");

ЗаполнитьРеквизитыПоУмолчаниюУпр();

КонецПроцедуры // ОбработкаЗаполнения()

Процедура ОбработкаПроведения(Отказ, Режим)

Перем Заголовок, СтруктураШапкиДокумента;

Если мУдалятьДвижения Тогда
ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ);
КонецЕсли;

ПодготовитьСтруктуруШапкиДокумента(Заголовок, СтруктураШапкиДокумента, Режим);

// Документ должен принадлежать хотя бы к одному виду учета (управленческий, бухгалтерский, налоговый)
ОбщегоНазначения.ПроверитьПринадлежностьКВидамУчета(СтруктураШапкиДокумента, Отказ, Заголовок);

ТаблицаПлатежейУпр = УправлениеДенежнымиСредствами.ПолучитьТаблицуПлатежейУпр(Дата,ВалютаДокумента,Ссылка, "ПриходныйКассовыйОрдер");

ПроверитьЗаполнениеДокументаУпр(Отказ, Заголовок);

//Проверим на возможность проведения в БУ и НУ
Если ОтражатьВБухгалтерскомУчете тогда
Для каждого СтрокаОплаты из ТаблицаПлатежейУпр Цикл

УправлениеВзаиморасчетами.ПроверкаВозможностиПроведенияВ_БУ_НУ(СтрокаОплаты.ДоговорКонтрагента, СтруктураШапкиДокумента.ВалютаДокумента,
СтруктураШапкиДокумента.ОтражатьВБухгалтерскомУчете,
СтруктураШапкиДокумента.ОтражатьВНалоговомУчете,
мВалютаРегламентированногоУчета, Истина, Отказ,
Заголовок, "Строка " + СтрокаОплаты.НомерСтроки + " - ",
СтрокаОплаты.ВалютаВзаиморасчетов, СтрокаОплаты.РасчетыВУсловныхЕдиницах);

КонецЦикла;
КонецЕсли;

Если Не Отказ Тогда
ДвиженияПоРегистрам(Режим, Отказ, Заголовок, СтруктураШапкиДокумента);
КонецЕсли;

КонецПроцедуры // ОбработкаПроведения

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

мУдалятьДвижения = НЕ ЭтоНовый();

Если ОбменДанными.Загрузка  Тогда
Возврат;
КонецЕсли;

СтруктураДействий = Новый Структура("УстановитьДоговор");
УправлениеДенежнымиСредствами.ВыполнитьДействияПередЗаписьюПлатежногоДокумента(ЭтотОбъект, СтруктураДействий, Отказ, РежимЗаписи, РежимПроведения);

КонецПроцедуры // ПередЗаписью

Процедура ОбработкаУдаленияПроведения(Отказ)

ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ);

КонецПроцедуры // ОбработкаУдаленияПроведения

Процедура ПриКопировании(ОбъектКопирования)

НомерЧекаККМ = 0;

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

мВалютаРегламентированногоУчета = глЗначениеПеременной("ВалютаРегламентированногоУчета");

мСтруктураПараметровДенежныхСредств = Новый Структура;
мСтруктураПараметровДенежныхСредств.Вставить("ВидДенежныхСредств", Перечисления.ВидыДенежныхСредств.Наличные);

дфтын

Ну.. посомтреть модуль я могу и сам.. или вы мне прелдлагаете пройтись в отладчике?

MegaMozg

Цитата: дфтын от 09 окт 2014, 22:23
Ну.. посомтреть модуль я могу и сам.. или вы мне прелдлагаете пройтись в отладчике?
в смысле пройтись в отладчике? я очень очень начинающий просто как вы поняли. т.е. есть легкий способ проследить что отвечает за тот или иной объект? если да, то как? обьясните пожалуйста своими словами без всяких ссылок на учебный материал.

дфтын

Так это как раз курсы  1С!
Вкратце:
КОгда вы вводите ПКО на основании РТУ, оно запускает в модуле документа ПКО процедуру - ОбработкаЗАполнения, и построчно её выполняет, один из режимов 1С предприятия - отладчик, он позволяет пошагово поглядеть чего оно делает собственно.  Я как - бы это и предлагаю, пошагово пройтись в отладчике и посмотреть что оно считает перед тем, как заполнить реквизит - сумма.
Вооот. КНиги точно не рекомендовать?:) тогда могу рекомендовать мои услуги:)

Теги:  8.2 Сумма 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск