Имя: Пароль:
1C
1C 7.7
v7: При печати ПКО выдает такую ошибку, что может быть?
0 zloy
 
21.03.12
08:13
Если глФРПечататьЧек(Список, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека,0,""<<?>>) = 1 Тогда
{Документ.ПКО.Форма.Модуль(897)}: Недостаточно фактических параметров
1 povar
 
21.03.12
08:16
Эта ошибка означает, что при вызове функции ты передал ей Недостаточно фактических параметров
2 zloy
 
21.03.12
08:19
Как исправить это?
3 Капитан О
 
21.03.12
08:22
(2) передать ей нужное число параметров
4 povar
 
21.03.12
08:23
(2) привести кол-во параметров в вызове, с описанием функции
5 zloy
 
21.03.12
08:24
можно подробнее?
6 povar
 
21.03.12
08:26
(5) куда уж подробнее ? В описании функции 5 параметров, ты ей передаешь 4, вот и ошибка
7 Капитан О
 
21.03.12
08:26
(5) найди эту функцию и посмотри в заголовок
8 thezos
 
21.03.12
08:26
воспользуйтесь услугами специалиста
9 Капитан О
 
21.03.12
08:26
(6) девять
10 povar
 
21.03.12
08:28
(9) да ты просто капитан О
11 zloy
 
21.03.12
08:32
Процедура ОбработкаПроведенияПоКассе()
                                                               
   Регистр.Касса.Фирма        = Фирма;
   Регистр.Касса.Касса    = Касса;
   Регистр.Касса.Валюта    = Валюта;
       
   Регистр.Касса.СуммаВал    = Сумма;
   Регистр.Касса.СуммаУпр    = глПересчет(Сумма,Валюта,Курс,глДоллары,ДатаДок,Кратность);
   Регистр.Касса.СуммаРуб    = глПересчет(Сумма,Валюта,Курс,глРубли,ДатаДок,Кратность);
       
   Регистр.Касса.КодОперации = РабочийКО;
   Регистр.Касса.ДвижениеДенежныхСредств = ДвижениеДенежныхСредств;
       
   Регистр.Касса.ДвижениеПриходВыполнить();    
   
КонецПроцедуры // ОбработкаПроведенияПоКассе()
12 zloy
 
21.03.12
08:32
это?
13 Капитан О
 
21.03.12
08:33
(11) таак, правильно. а теперь глФРПечататьЧек
14 povar
 
21.03.12
08:33
(12) )) интересно, какой был ход твоих мыслей, чтобы скопипастить именно этот кусок кода ?
15 zloy
 
21.03.12
08:35
Если глФРПечататьЧек(Список, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека,0,"") = 1 Тогда
       НомерЧекаККМ = ?(НомерЧека = 0, -1, НомерЧека);
       ПриЗаписиПерепроводить(0);
       Записать();
       ПриЗаписиПерепроводить(1);
   КонецЕсли;
   
КонецПроцедуры
16 zloy
 
21.03.12
08:36
вот)
17 povar
 
21.03.12
08:37
бу гага
18 Капитан О
 
21.03.12
08:38
(15) уже лучше. может быть, есть где-то сама функция?
19 Гефест
 
21.03.12
08:38
(15) Уже теплее, пробуй еще
20 zloy
 
21.03.12
08:40
Процедура ПечатьЧека()      
   
   Если КодОперации <> Перечисление.КодыОпераций.ОплатаОтПокупателя Тогда
       Сообщить("Чек может быть напечатан только при получении оплаты от покупателя!");
       Возврат;
   КонецЕсли;
   
   Если глФРДляПриемаНаличныхОтЮрЛиц <> 1 Тогда
       Сообщить("Фискальный регистратор не предназначен для отражения наличных денежных расчетов.");
       Возврат;
   КонецЕсли;
   
   Если НомерЧекаККМ <> 0 Тогда
       Предупреждение("Чек уже пробит на фискальном регистраторе!",60);
       Возврат;
   ИначеЕсли глФРВкл=0 Тогда
       Предупреждение("Фискальный регистратор не подключен!",60);
       Возврат;
   ИначеЕсли (ОблагаетсяНП=1) и (СтавкаНП.Ставка<>0) Тогда
       Предупреждение("Чтобы распечатать чек на фискальном регистраторе" + РазделительСтрок +
                      "необходимо, чтобы ставка НП была равна 0!",60);
       Возврат;
   ИначеЕсли ПометкаУдаления()=1 Тогда
       Предупреждение("Документ помечен на удаление, поэтому" + РазделительСтрок +
                      "нельзя пробить чек на фискальном регистраторе!",60);
       Возврат;
   ИначеЕсли Проведен()=0 Тогда
       Если Вопрос("Провести документ и пробить чек на фискальном регистраторе?","Да+Нет")="Нет" Тогда
           Возврат;
       КонецЕсли;
       Попытка
           Записать();
           Провести();
       Исключение
           Возврат;
       КонецПопытки;
   ИначеЕсли Модифицированность()=1 Тогда
       Если Вопрос("Сохранить документ и пробить чек на фискальном регистраторе?","Да+Нет")="Нет" Тогда
           Возврат;
       КонецЕсли;
       Попытка
           Записать();
       Исключение
           Возврат;
       КонецПопытки;
   КонецЕсли;
   
   Список = СоздатьОбъект("ТаблицаЗначений");
   Список.НоваяКолонка("ТовНаим"   , "Строка");
   Список.НоваяКолонка("Цена"      , "Число");
   Список.НоваяКолонка("Количество", "Число");
   Список.НоваяКолонка("НДС"       , "Число");
   
   Список.НоваяСтрока();
   Список.ТовНаим    = ?(ПустаяСтрока(ПринятоОт)=0,"Принято от ","")+СокрЛП(СокрЛП(ПринятоОт)+" "+СокрЛП(Основание));
   Список.Цена       = Сумма;
   Список.Количество = 1;
   Список.НДС        = глНачисляемыйНДС(?(СтавкаНДС.Выбран() = 1, СтавкаНДС, глЗначениеПоУмолчанию("ОсновнаяСтавкаНДС")))*100;
   
   СуммаЧека         = Сумма;
   Получено          = Сумма;
   Скидка            = 0;
   ПризнВозврата     = 0;
   НомерСекции       = 1;
   НомерЧека         = 0;
   
   Если глФРПечататьЧек(Список, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека,0,"") = 1 Тогда
       НомерЧекаККМ = ?(НомерЧека = 0, -1, НомерЧека);
       ПриЗаписиПерепроводить(0);
       Записать();
       ПриЗаписиПерепроводить(1);
   КонецЕсли;
   
КонецПроцедуры
21 zloy
 
21.03.12
08:40
оно?)
22 povar
 
21.03.12
08:40
(20) холодно
23 Гефест
 
21.03.12
08:41
(20) Холодно
24 zloy
 
21.03.12
08:41
там же искать?
25 povar
 
21.03.12
08:42
(24) в компьютере ищи
26 mishaPH
 
21.03.12
08:42
глФРПечататьЧек функцию найди. в глобальнике
27 zloy
 
21.03.12
08:42
Модуль документа

Перем РабочийКО; // рабочий код операции, (по которому будет проведена операция)

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

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

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

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

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

           ВремКнигаПродаж.УстановитьЗначениеФильтра("КредДокумент",Рег.КредДокумент,1);
           ВремКнигаПродаж.УстановитьЗначениеФильтра("ВидДолга",    Рег.ВидДолга,    1);
           
           // при необходимости делаем временный расчет итогов
           Если ИтогиАктуальны() = 0 Тогда
               ВремКнигаПродаж.ВременныйРасчет();
               ВремРегистры.Актуальность(1);
               ВремРегистры.РассчитатьРегистрыНа(ТекущийДокумент());
           КонецЕсли;    

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

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


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

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

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

////////////////////////////////////////////////////////////////////////////////
// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
28 zloy
 
21.03.12
08:42
форма
29 zloy
 
21.03.12
08:42
////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ
//
Перем СписокДействий; // для механизма кнопки "Действия"
Перем НачальнаяДатаДокумента; // для механизма контроля уникальности номеров
Перем ВидСчетаФактуры;

Перем ТаблицаПечФорм;  // список печатных форм документа
Перем НомерТекущейФормы;
                 
// Для контроля необходимости пересчетов
Перем СтараяДата, СтараяФирма, СтараяВалюта, СтарыйКурс, СтараяКратность, СтароеФизЛицо, СтарыйАвансовыйОтчет;
Перем СтарыйДоговор, СтарыйКонтрагент;

// для контроля изменений при записи
Перем НачВалюта, НачКурс, НачКратность, НачКонтрагент, НачДоговор, НачФирма, НачСумма;

Перем ТекущийДолг;

Перем Парам;

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ
//
//******************************************************************************
// ТекстВалюты(Вал)
//
// Параметры:
//  Вал - элемент справочника Валюты
//
// Возвращаемое значение:
//  Краткое наименование валюты,
//  <нет>, если передано пустое значение
//
// Описание:
//  Формирует текстовую строку о переданной валюте
//
Функция ТекстВалюты(Вал)
   Возврат ?(ПустоеЗначение(Вал)=0,Вал.Наименование,"<нет>");
КонецФункции  // ТекстВалюты()                                                                  
           
//*****************************************************************************
// ЗаголовокФормы()
//
// Возвращаемое значение:
//    Строка - Название документа
//
//Описание:
// Формирует название документа и заголовок формы диалога
//
Функция ЗаголовокФормы()
   Перем Заголовок, Название;
                     
   Заголовок    = "Приходный кассовый ордер";
   Название    = "ПКО №";
   
   Если Выбран() = 1 Тогда  
       Если Проведен() = 1 Тогда
           Заголовок = Заголовок + ". Проведен";
       Иначе
           Заголовок = Заголовок + ". Не проведен";
       КонецЕсли;
   Иначе
       Заголовок = Заголовок + ". Новый";
   КонецЕсли;
   Форма.Заголовок(Заголовок);              
   Возврат Название;
   
КонецФункции //ЗаголовокФормы()  

//******************************************************************************
Процедура УправлениеВидимостью()
                                   
   // Закладка "Общее".
   Форма.Закладки.Установить("Общее",          "Общий1, Общий2, Операция, Прочее");
   // Закладка "Печать".
   Форма.Закладки.Установить("Печать",         "Общий1, Общий2, Печать");
   
   // Удаление лишних закладок.
   КоличествоЗакладок = 2;
   Пока КоличествоЗакладок < Форма.Закладки.РазмерСписка() Цикл
       Форма.Закладки.УдалитьЗначение(Форма.Закладки.РазмерСписка());
   КонецЦикла;

   // Установка текущей закладки - при открытии формы.
   Если Форма.Закладки.ТекущаяСтрока() = 0 Тогда
       Форма.Закладки.ТекущаяСтрока(1);
   КонецЕсли;

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

   Форма.ИспользоватьСлой(Форма.Закладки.ПолучитьЗначение(Форма.Закладки.ТекущаяСтрока()), 2);
   
КонецПроцедуры
             
//******************************************************************************
// УправлениеДоступностью()
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//
// Вызывается из формул элементов диалога:
//
// Описание:
//  Здесь описывается процедура.
//
Процедура УправлениеДоступностью()
   
   Если Форма.ТолькоПросмотр() = 0 Тогда
       Если Договор.ВалютаВзаиморасчетов = Валюта Тогда
           Форма.кнСуммаВзаиморасчетов.Доступность(0);
       Иначе
           Форма.кнСуммаВзаиморасчетов.Доступность(1);
       КонецЕсли;
       
       Если Валюта = глРубли Тогда
           Форма.Курс.Доступность(0);
       Иначе
           Форма.Курс.Доступность(1);
       КонецЕсли;
   КонецЕсли;
   
   Если КодОперации = глКО.РозничнаяВыручкаЕНВД Тогда    
       Если ОблагаетсяНП <> 0 Тогда
           ОблагаетсяНП = 0;
       КонецЕсли;
       СписокСтавокНДС.ТекущаяСтрока(1);
       СписокСтавокНП.ТекущаяСтрока(1);
       Форма.СписокСтавокНДС.Доступность(0);
       Форма.СписокСтавокНП.Доступность(0);
       Форма.ОблагаетсяНП.Доступность(0);
   Иначе
       Форма.СписокСтавокНДС.Доступность(1);
       Форма.СписокСтавокНП.Доступность(1);
       Форма.ОблагаетсяНП.Доступность(1);
   КонецЕсли;
   
КонецПроцедуры // УправлениеДоступностью()

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

//******************************************************************************
Процедура ЗаполнитьСписокСтавокНДС()
                   
   пНДС = Перечисление.СтавкиНДС;
   
   СписокСтавокНДС.ДобавитьЗначение(ПолучитьПустоеЗначение("Перечисление.СтавкиНДС"),"<авто>");
   Для Сч=1 По пНДС.КоличествоЗначений() Цикл
       СписокСтавокНДС.ДобавитьЗначение(пНДС.ЗначениеПоНомеру(Сч),Строка(пНДС.ЗначениеПоНомеру(Сч)));
   КонецЦикла;
   
КонецПроцедуры
   
//******************************************************************************
Процедура ЗаполнитьСписокВидовОплаты()
   
   СписокВидовОплаты.ДобавитьЗначение(глКО.ОплатаОтПокупателя);
   СписокВидовОплаты.ДобавитьЗначение(глКО.ВозвратОплатыОтПоставщика);
   СписокВидовОплаты.ДобавитьЗначение(глКО.ВозвратПодотчетныхСумм);
   СписокВидовОплаты.ДобавитьЗначение(глКО.РозничнаяВыручка);
   СписокВидовОплаты.ДобавитьЗначение(глКО.РозничнаяВыручкаЕНВД);
   СписокВидовОплаты.ДобавитьЗначение(глКО.Прочее);
   
КонецПроцедуры

//******************************************************************************
Процедура ВыборСтавкиНП()
   Перем Позиция;
   
   Позиция = СписокСтавокНП.ТекущаяСтрока();
   Если Позиция > 0 Тогда
       СтавкаНП = СписокСтавокНП.ПолучитьЗначение(Позиция);
   КонецЕсли;    
КонецПроцедуры

//******************************************************************************
Процедура ВыборСтавкиНДС()
   Перем Позиция;
   
   Позиция = СписокСтавокНДС.ТекущаяСтрока();
   Если Позиция > 0 Тогда
       СтавкаНДС = СписокСтавокНДС.ПолучитьЗначение(Позиция);
   КонецЕсли;    
КонецПроцедуры

//******************************************************************************        
Функция ТекстВалютыВзаим()  
   
   Форма.ТекстСуммаВзаиморасчетов.Заголовок(глФРМ(СуммаВзаиморасчетов,Договор.ВалютаВзаиморасчетов));

   Возврат ТекстВалюты(Договор.ВалютаВзаиморасчетов);
                     
КонецФункции

//******************************************************************************        
// ПересчетСуммыВзаиморасчетов()
//
// Возвращаемое значение: НЕТ
//
// Описание:
//    Пересчитывает сумму в валюте взаиморасчетов.

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

//******************************************************************************
// РасчетТекущегоДолга()
//
// Параметры:
//    Нет
//
// Возвращаемое значение:
//    Нет
//
// Описание:
//    Производит вызов глобальной функции расчета суммы текущего долга контрагента.
//  В зависимости от характера задолженности устанавливает
//  цвет элемента диалога "Сумма долга". (Если долг >= 0 - синий, иначе - красный)  
//
Процедура РасчетТекущегоДолга()
                   
   Если (КодОперации = глКО.ОплатаОтПокупателя)  
          или (КодОперации = глКО.РозничнаяВыручка)
        или (КодОперации = глКО.РозничнаяВыручкаЕНВД)  Тогда
       ТекущийДолг = глТекущийДолг(Фирма, Договор, "Покупатель");
       
   ИначеЕсли (КодОперации = глКО.ВозвратОплатыОтПоставщика) Тогда
       ТекущийДолг = глТекущийДолг(Фирма, Договор, "Поставщик");
       
   Иначе    
       ТекущийДолг = 0;
   КонецЕсли;
                           
   Форма.ТекстТекущийДолг.Заголовок(глФРМ(ТекущийДолг,Договор.ВалютаВзаиморасчетов));
       
   Если ТекущийДолг < 0 Тогда
       Форма.ТекстТекущийДолг.Цвет(255);
   Иначе
       Форма.ТекстТекущийДолг.Цвет(0,0,128);
   КонецЕсли;

КонецПроцедуры //РасчетТекущегоДолга()
     
//******************************************************************************
// ЗаполнениеПоДокументуОснованию()
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//
// Вызывается из формул элементов диалога:
//
// Описание:
//  Производит заполнение документа по документу  - основанию.
//
Функция ЗаполнениеПоДокументуОснованию()
   
   Если ДокОснование.Выбран()=0 Тогда
       Возврат "Не выбран документ - основание";
   КонецЕсли;
   
   ВидОсн = ДокОснование.Вид();
   
   Если (ВидОсн <> "ЗаявкаПокупателя") и
        (ВидОсн <> "ВозвратПоставщику") и
        (ВидОсн <> "ОтчетКомиссионера") и
        (ВидОсн <> "РеализацияПрочее") и
        (ВидОсн <> "Реализация") и
        (ВидОсн <> "РеализацияРозница") и
        (ВидОсн <> "РКО") Тогда
       Возврат "Неверный вид документа - основания!";
   КонецЕсли;
       
   Валюта                = ДокОснование.Валюта;
   Контрагент            = ДокОснование.Контрагент;
   Договор                = ДокОснование.Договор;
   СуммаВзаиморасчетов    = ДокОснование.СуммаВзаиморасчетов;

       
   Если (ВидОсн = "ВозвратПоставщику") или
        (ВидОсн = "РКО")Тогда
           
       КодОперации = глКО.ВозвратОплатыОтПоставщика;
       Курс        = ДокОснование.Курс;
       Кратность    = ДокОснование.Кратность;

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

//******************************************************************************
// ПодготовитьСумму(ИспСумма, ИспВалюта)
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  0 -
// Описание:
//
Функция ПодготовитьСумму(ИспСумма)
   
   ИспСумма = Окр(ИспСумма, 2, 1);
   ЦелСумма = Цел(ИспСумма);
   КопСумма = 100 * (Окр(ИспСумма - ЦелСумма, 2, 1));
   
   Возврат "" + ЦелСумма + " руб. " + Формат(КопСумма , "Ч(0)2") + " коп.";
   
КонецФункции // ПодготовитьСумму()

//******************************************************************************
// ПредставлениеСтавкиНДС(Ставка)
//
// Параметры:
//  Ставка
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция ПредставлениеСтавкиНДС(Сумма, Ставка)
   
   Рез = "" + Перечисление.СтавкиНДС.БезНДС;
   Если ПустоеЗначение(Ставка) = 0 Тогда
       Если Ставка <> Перечисление.СтавкиНДС.БезНДС Тогда
           Рез = " НДС(" + Ставка + ") " + ПодготовитьСумму(Сумма);
       КонецЕсли;
   КонецЕсли;
   
   Возврат Рез;
   
КонецФункции // ПредставлениеСтавкиНДС()

//******************************************************************************
// ПредставлениеСтавкиНП(Ставка, Сумма)
//
// Параметры:
//  Ставка, Сумма
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция ПредставлениеСтавкиНП(Сумма, Ставка)
   
   Рез = "";
           
   Если Ставка > 0 Тогда
       Рез = " НП(" + Ставка + "%) " + ПодготовитьСумму(Сумма);
   КонецЕсли;
   
   Возврат Рез;
   
КонецФункции // ПредставлениеСтавкиНП()

//******************************************************************************
// ПолнаяСуммаОсн()
//
// Параметры:
//  
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция РасчетКоэффициента(СуммаДок)
   
   // вычислим сумму документа основания со всеми налогами
   Рез = глПересчет(ДокОснование.Итог("Сумма"), ДокОснование.Валюта, ДокОснование.Курс, глРубли, 1, ДокОснование.Кратность);
   
   Если ДокОснование.Вид() <> "ОтчетКомиссионера" Тогда
       Если ДокОснование.УчитыватьНП = 1 Тогда
           Если ДокОснование.СуммаВклНП = 0 Тогда
               Рез = Рез + глПересчет(ДокОснование.Итог("СуммаНП"), ДокОснование.Валюта, ДокОснование.Курс, глРубли, 1, ДокОснование.Кратность);
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   
   Если ДокОснование.УчитыватьНДС = 1 Тогда
       Если ДокОснование.СуммаВклНДС = 0 Тогда
           Рез = Рез + глПересчет(ДокОснование.Итог("СуммаНДС"), ДокОснование.Валюта, ДокОснование.Курс, глРубли, 1, ДокОснование.Кратность);
       КонецЕсли;
   КонецЕсли;
   
   Если Рез = 0 Тогда
       Рез = 1;
   Иначе
       Рез = СуммаДок / Рез;
   КонецЕсли;
   
   Возврат Рез;
   
КонецФункции // ПолнаяСуммаОсн()

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

   СубкВлад = ПолучитьАтрибут(ИдРеквизита+НомерРеквизита);

   Если ТипЗначенияСтр(СубкВлад) = "Справочник" Тогда
       Для т = НомерРеквизита + 1 По 3 Цикл
           СубкПодч = ПолучитьАтрибут(ИдРеквизита+т);
           Если ТипЗначенияСтр(СубкПодч) = "Справочник" Тогда
               Если (СубкПодч.Выбран() = 1)
                  и (ТипЗначенияСтр(СубкПодч.Владелец) = "Справочник") Тогда
                   Если СубкПодч.Владелец.Вид() = СубкВлад.Вид() Тогда
                       Если (СубкПодч.Владелец.Выбран() = 0)
                        или (СубкПодч.Владелец <> СубкВлад) Тогда
                           УстановитьАтрибут(ИдРеквизита+т, "");
                           
                       КонецЕсли;

                   КонецЕсли;

               КонецЕсли;

           КонецЕсли;
       КонецЦикла;
   КонецЕсли;
   
КонецПроцедуры // ПриВыбореСубконто()

//******************************************************************************
// Печать(СразуНаПринтер, КолЭкз)
//
// Параметры:
//  СразуНаПринтер - (1) если печать на принтер, (0) - с предварительным просмотром
//  КолЭкз - количество экземпляров печати
//
// Возвращаемое значение:
//  нет.
//
// Описание:
//
Процедура Печать(СразуНаПринтер = 0,КолЭкз = 1)
   Перем ЗначенияПоНП, ЗначенияПоНДС;
   
   Наименование        = Фирма.ЮрЛицо.ПолнНаименование;
   ИНН                    = Фирма.ЮрЛицо.ИНН;
   
   Руководитель        = глФамилияИмяОтчество(Фирма.ЮрЛицо.Руководитель.Получить(ДатаДок));
   Глбухгалтер            = глФамилияИмяОтчество(Фирма.ЮрЛицо.Глбухгалтер.Получить(ДатаДок));
   Кассир                = глФамилияИмяОтчество(Фирма.ЮрЛицо.Кассир.Получить(ДатаДок));
   
   СтрСумма = "";
   
   Коэфф          = 1;
   КоэффРассчитан = 0;
   
   СуммаРуб        = глПересчет(Сумма, Валюта, Курс, глРубли, 1, Кратность);
   СуммаНПРубВсего = 0;

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

       Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда
           Таб.Защита(1);
       Иначе
           Таб.Защита(0);
       КонецЕсли;
       Таб.ТолькоПросмотр(1);

       Таб.Показать(глНазваниеДокументаВжурнале(Контекст),"");  
   Иначе    
       Таб.ПараметрыСтраницы(,,,,,,,,,1,,);
       Таб.КоличествоЭкземпляров(КолЭкз);
       Таб.Напечатать(0);
   КонецЕсли;
   
КонецПроцедуры

//******************************************************************************
// ПризнакПробитияЧека()
//
// Параметры:
//    Нет
//
// Возвращаемое значение:
//  Строка - информация о чеке
//
// Описание:
//  Возвращает информацию о пробитом чеке или пустую строку, если чек не пробит.
//
Функция ПризнакПробитияЧека()
   
   Если НомерЧекаККМ <> 0 Тогда
         Если НомерЧекаККМ > 0  Тогда
           Возврат "№ чека: "+СокрЛП(НомерЧекаККМ);
       Иначе
           Возврат "Чек пробит";
       КонецЕсли;
   Иначе
       Возврат "";
   КонецЕсли;
   
КонецФункции

//******************************************************************************
// ПечатьЧека()
//
// Параметры:
//    Нет
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//    Печатает чек на фискальном регистраторе
//
Процедура ПечатьЧека()      
   
   Если КодОперации <> Перечисление.КодыОпераций.ОплатаОтПокупателя Тогда
       Сообщить("Чек может быть напечатан только при получении оплаты от покупателя!");
       Возврат;
   КонецЕсли;
   
   Если глФРДляПриемаНаличныхОтЮрЛиц <> 1 Тогда
       Сообщить("Фискальный регистратор не предназначен для отражения наличных денежных расчетов.");
       Возврат;
   КонецЕсли;
   
   Если НомерЧекаККМ <> 0 Тогда
       Предупреждение("Чек уже пробит на фискальном регистраторе!",60);
       Возврат;
   ИначеЕсли глФРВкл=0 Тогда
       Предупреждение("Фискальный регистратор не подключен!",60);
       Возврат;
   ИначеЕсли (ОблагаетсяНП=1) и (СтавкаНП.Ставка<>0) Тогда
       Предупреждение("Чтобы распечатать чек на фискальном регистраторе" + РазделительСтрок +
                      "необходимо, чтобы ставка НП была равна 0!",60);
       Возврат;
   ИначеЕсли ПометкаУдаления()=1 Тогда
       Предупреждение("Документ помечен на удаление, поэтому" + РазделительСтрок +
                      "нельзя пробить чек на фискальном регистраторе!",60);
       Возврат;
   ИначеЕсли Проведен()=0 Тогда
       Если Вопрос("Провести документ и пробить чек на фискальном регистраторе?","Да+Нет")="Нет" Тогда
           Возврат;
       КонецЕсли;
30 povar
 
21.03.12
08:43
действительно злой буратина
31 zloy
 
21.03.12
08:44
помогайте чё делать
32 Гефест
 
21.03.12
08:44
Интересно, а глобальник форум прожует?
33 povar
 
21.03.12
08:45
(32) сразу на год в бан
34 Капитан О
 
21.03.12
08:45
(31) копипасти ещё, когда-нибудь попадёшь
35 povar
 
21.03.12
08:45
(31) найди Функция глФРПечататьЧек(
36 mishaPH
 
21.03.12
08:46
(31) найди в глобальном модуле блеать глФРПечататьЧек . буть мужиком
37 zloy
 
21.03.12
08:48
нашел
38 zloy
 
21.03.12
08:48
//******************************************************************************
// глФРПечататьЧек(СписокТоваров, СуммаЧека, Получено, ПризнВозврата, НомерСекции, НомерЧека)
//
// Параметры:
//  СписокТоваров - таблица значений с информацией о проданных или возвращенных товарах
//  СуммаЧека     - итоговая сумма чека
//  Получено      - сумма, полученная от покупателя
//  ПризнВозврата - 1 - чек на возврат, 0 - чек на продажу
//  НомерСекции   - номер секции
//  НомерЧека     - выходной параметр. Номер чека, пробитого на фискальном регистраторе
//
// Возвращаемое значение:
//  1 - операция успешно завершена, 0 - нет.
//
// Описание:
//  печатает чек на фискальном регистраторе
//  
Функция глФРПечататьЧек(СписокТоваров, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека,БезНал,Продавец,СумБонуса)  Экспорт
   
   Рез = 0;
   
   Если глФРВкл = 1 Тогда
       Параметры = СоздатьОбъект("СписокЗначений");
       Параметры.Установить("Процесс"           , "печатать_чек");
       Параметры.Установить("Объект"            , глФР);
       Параметры.Установить("ПарольПользователя", глФРПарольПользователя);
       Параметры.Установить("СписокТоваров"     , СписокТоваров);
       Параметры.Установить("СуммаЧека"         , СуммаЧека);
       Параметры.Установить("Получено"          , Получено);
       Параметры.Установить("Скидка"            , Скидка);
       Параметры.Установить("Возврат"           , ПризнВозврата);
       Параметры.Установить("НомерСекции"       , НомерСекции);
       Параметры.Установить("ПриемНаличныхОтЮрЛиц", глФРДляПриемаНаличныхОтЮрЛиц);
               Параметры.Установить("БезНал", БезНал);
             Параметры.Установить("Продавец", Продавец);
                         Параметры.Установить("СумБонуса", СумБонуса);

       РезТекст = глОборудованиеКоманда("ФР", глФРОбработка, Параметры);
       Если ПустоеЗначение(РезТекст) = 0 Тогда
           Сообщить(РезТекст);
       Иначе
           Если Параметры.Получить("Результат") = 0 Тогда
               Сообщить("Фискальный регистратор: ошибка при печати чека");
               Сообщить(Параметры.Получить("ОписаниеРезультата"));
           Иначе
               НомерЧека = Параметры.Получить("НомерЧека");
               Рез = 1;
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   
   Возврат Рез;
   
КонецФункции // глФРПечататьЧек()
39 Капитан О
 
21.03.12
08:49
(37) поздравляю. сколько параметров?
40 Гефест
 
21.03.12
08:50
Молодец. Какие мысли появляются?
41 zloy
 
21.03.12
08:50
да хз
параметры же это вот?

Параметры = СоздатьОбъект("СписокЗначений");
       Параметры.Установить("Процесс"           , "печатать_чек");
       Параметры.Установить("Объект"            , глФР);
       Параметры.Установить("ПарольПользователя", глФРПарольПользователя);
       Параметры.Установить("СписокТоваров"     , СписокТоваров);
       Параметры.Установить("СуммаЧека"         , СуммаЧека);
       Параметры.Установить("Получено"          , Получено);
       Параметры.Установить("Скидка"            , Скидка);
       Параметры.Установить("Возврат"           , ПризнВозврата);
       Параметры.Установить("НомерСекции"       , НомерСекции);
       Параметры.Установить("ПриемНаличныхОтЮрЛиц", глФРДляПриемаНаличныхОтЮрЛиц);
               Параметры.Установить("БезНал", БезНал);
             Параметры.Установить("Продавец", Продавец);
                         Параметры.Установить("СумБонуса", СумБонуса);
42 Капитан О
 
21.03.12
08:51
(41) позови программиста
43 Гефест
 
21.03.12
08:51
Да что тебя по коду носит, брось якорь возле глФРПечататьЧек и там думай
44 zloy
 
21.03.12
08:52
вы мне скажите как это исправить, чтобы я смог напечатать ПКО
45 Капитан О
 
21.03.12
08:52
(44) пригласи специалиста, он тебе всё сделает за недорого и даже не испортит
46 zloy
 
21.03.12
08:53
объясняйте
47 povar
 
21.03.12
08:53
поднял настроение с утра, молодец
48 Капитан О
 
21.03.12
08:53
50 mishaPH
 
21.03.12
08:54
глФРПечататьЧек(СписокТоваров, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека,БезНал,Продавец,СумБонуса)

это глобальник

глФРПечататьЧек(Список, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека,0,""<<?>>)

это твой.

у тебя не хватает 1 параметра. сумма бонуса.

замени свой на

глФРПечататьЧек(Список, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека,0,"",0)
51 catena
 
21.03.12
08:54
(44)
Функция глФРПечататьЧек(РАЗ_СписокТоваров, ДВА_СуммаЧека, ТРИ_Получено, ЧЕТЫРЕ_Скидка, ПЯТЬ_ПризнВозврата, ШЕСТЬ_НомерСекции, СЕМЬ_НомерЧека,ВОСЕМЬ_БезНал,ДЕВЯТЬ_Продавец,ДЕСЯТЬ_СумБонуса)  Экспорт

Если глФРПечататьЧек(РАЗ_Список, ДВА_СуммаЧека, ТРИ_Получено, ЧЕТЫРЕ_Скидка, ПЯТЬ_ПризнВозврата, ШЕСТЬ_НомерСекции, СЕМЬ_НомерЧека,ВОСЕМЬ_0,ДЕВЯТЬ_"") = 1 Тогда

ДЕВЯТЬ меньше, чем ДЕСЯТЬ.
52 Mikeware
 
21.03.12
08:55
(30) что буратина - это точно... на редкость деревянный...
53 Ёпрст
 
21.03.12
08:55
+49 вниматочно читаем про формальные и фактические параметры, много думаем - смотрим на свой код
54 mishaPH
 
21.03.12
08:56
Автор понятно что надо сделать?
55 povar
 
21.03.12
08:56
(52) палисандровый
56 povar
 
21.03.12
08:57
(51) рано еще цифры учить, надо на палочках научиться считать
57 zloy
 
21.03.12
09:01
Функция глФРПечататьЧек(Список, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека,<<?>>0,"",0)  Экспорт
{Глобальный модуль(13478)}: Ожидается имя формального параметра
Параметры.Установить("СписокТоваров"     , СписокТоваров<<?>>);
{Глобальный модуль(13487)}: Переменная не определена (СписокТоваров)
Параметры.Установить("СуммаЧека"         , СуммаЧека<<?>>);
{Глобальный модуль(13488)}: Переменная не определена (СуммаЧека)
Параметры.Установить("Получено"          , Получено<<?>>);
{Глобальный модуль(13489)}: Переменная не определена (Получено)
Параметры.Установить("Скидка"            , Скидка<<?>>);
{Глобальный модуль(13490)}: Переменная не определена (Скидка)
Параметры.Установить("Возврат"           , ПризнВозврата<<?>>);
{Глобальный модуль(13491)}: Переменная не определена (ПризнВозврата)
Параметры.Установить("НомерСекции"       , НомерСекции<<?>>);
{Глобальный модуль(13492)}: Переменная не определена (НомерСекции)
Параметры.Установить("БезНал", БезНал<<?>>);
{Глобальный модуль(13494)}: Переменная не определена (БезНал)
Параметры.Установить("Продавец", Продавец<<?>>);
{Глобальный модуль(13495)}: Переменная не определена (Продавец)
Параметры.Установить("СумБонуса", СумБонуса<<?>>);
{Глобальный модуль(13496)}: Переменная не определена (СумБонуса)
Возврат <<?>>Рез;
{Глобальный модуль(13512)}: Оператор Return (Возврат) не может употребляться вне процедуры или функции
Возврат Рез;<<?>>
{Глобальный модуль(13512)}: Обнаружено логическое завершение исходного текста модуля
<<?>>КонецФункции // глФРПечататьЧек()
{Глобальный модуль(13514)}: Процедура или функция с указанным именем объявлена, но не определена в текущем модуле (глСоздатьТрассировку)
<<?>>КонецФункции // глФРПечататьЧек()
{Глобальный модуль(13514)}: Процедура или функция с указанным именем объявлена, но не определена в текущем модуле (глСообщениеТрассировки)
<<?>>КонецФункции // глФРПечататьЧек()
{Глобальный модуль(13514)}: Процедура или функция с указанным именем объявлена, но не определена в текущем модуле (глПоказатьТрассировку)
<<?>>КонецФункции // глФРПечататьЧек()
{Глобальный модуль(13514)}: Процедура или функция с указанным именем объявлена, но не определена в текущем модуле (глСообщениеПроведения)

поменял, вот что выдало
58 Ёпрст
 
21.03.12
09:04
(57) дятел, надо не в глобальнике менять, а в вызове функции добавить 1 параметр
59 zloy
 
21.03.12
09:05
объясни подробнее пжлст
60 Гефест
 
21.03.12
09:05
У тебя девушки надеюсь нет? Ты не туда суешь, совать надо при вызове процедуры, а не в описание процедуры
61 povar
 
21.03.12
09:05
даже Ёпрста довел, вот злодей
62 zloy
 
21.03.12
09:06
подробно расскажите где это поменять?
63 ТакВотЖе
 
21.03.12
09:06
никто человеку не сказал, что нужно архив базы сделать.
сейчас он наменяет.
64 Капитан О
 
21.03.12
09:06
(62) как вариант: вызывать с десятью параметрами, а не с девятью
65 zloy
 
21.03.12
09:07
а как это сделать? что где поменять?
66 Капитан О
 
21.03.12
09:07
(65) вот ты скажи, тебе это всё зачем?
67 povar
 
21.03.12
09:07
автору не дают покоя, лавры Светы Семененко
68 zloy
 
21.03.12
09:07
чтобы ПКО вывести
69 zloy
 
21.03.12
09:08
помогайте не трольте
70 mishaPH
 
21.03.12
09:08
(65) я тебе же написал... где поменять. накуя ты в глобальнике поменял пля.
71 Ёпрст
 
21.03.12
09:08
(65) замени вот это
 
   Если глФРПечататьЧек(Список, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека,0,"") = 1 Тогда


вот этим


 
   Если глФРПечататьЧек(Список, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека,0,"",0) = 1 Тогда


Хотя это и не правильно, ну да ладно
72 Капитан О
 
21.03.12
09:08
(68) зачем тебе ПКО вывести? зачем тебе вообще эта работа?
73 Aswed
 
21.03.12
09:09
Пятница???
74 zloy
 
21.03.12
09:09
для отчета в налоговую
75 zloy
 
21.03.12
09:09
ёпртс где это менять?
76 Капитан О
 
21.03.12
09:09
быстрый старт в профессию случаем не смотрел?
77 povar
 
21.03.12
09:10
франч ?
78 Ёпрст
 
21.03.12
09:10
Догадайся сам, найди знакомые буковки в коде
79 Капитан О
 
21.03.12
09:10
(78) ох, жесток ты
80 Гефест
 
21.03.12
09:11
(78) Там засада, в разных местах буквы одинаковые
81 Aswed
 
21.03.12
09:12
Я предлагаю начать с изучения алфавита.
82 Ёпрст
 
21.03.12
09:12
Вообще, тупой развод
83 zloy
 
21.03.12
09:13
ну где находится то эта функция? как открыть её чтобы поменять?
84 povar
 
21.03.12
09:14
суровый Свердловский 1Сник
85 Aswed
 
21.03.12
09:14
Милять ну нельзя же так же прям с утра то))))
Я кофе допить не могу, сижу ржу в голос)))))
86 mishaPH
 
21.03.12
09:14
{Документ.ПКО.Форма.Модуль(897)}:
87 Капитан О
 
21.03.12
09:15
(83) продолжай выкладывать код, может, быстрее угадаешь
//надеюсь на бан
88 catena
 
21.03.12
09:15
(83)У тя изначально ошибка где была? Документ.ПКО.Форма.Модуль(897) Найди и там и правь
89 Ёпрст
 
21.03.12
09:15
(83) используй силу, чтоб узнать где она , точнее где вызов этой функции.
90 Aswed
 
21.03.12
09:15
(88) Изначально ошибка в коде, только генетическом)))))
91 catena
 
21.03.12
09:16
(90)Ну не факт, может у него просто именно в этом таланту нет.
92 Капитан О
 
21.03.12
09:17
(91) вот такой вот генетический код попался, значит. ущербный только с одной стороны
93 Aprobator
 
21.03.12
09:17
сегодня попкорн с карамелью есть? А то тут шоу, чувствуется, еще надолго.
94 Mikeware
 
21.03.12
09:23
(84)он мечется между ебургом и челябинском... :-))
поэтому он вдвое суровеее....
95 Aswed
 
21.03.12
09:30
Ну вот. Обидели человека. Он ведь просто хотел здесь найти помощи, а вам лишь бы поржать. Животные!
96 Aswed
 
21.03.12
09:31
(0) Топик стартер, если ты здесь то пиши, я помогу. Я ни такой как они, я в самом деле хочу помочь.
97 Mikeware
 
21.03.12
09:36
(96) не поможешь...
98 Ёпрст
 
21.03.12
09:37
(96) врят ли, разве что у тебя есть знакомый нейрохирург
99 Aswed
 
21.03.12
09:41
(97) Тсссссс, он то об этом не знает;)
100 Капитан О
 
21.03.12
09:43
сто!
101 zloy
 
21.03.12
09:48
всё спасибо всем кто помогал, всё получилось!
102 Mikeware
 
21.03.12
09:53
побаяню:
идет мужик по нью-йорку, видит, стоит негр и пьет молоко прямо из пакета....
мужик постоял-постоял, посмотрел-посмотрел...
головой покачал, и говорит негру: -"Не, не поможет..."
©
103 catena
 
21.03.12
10:03
(101)Рано. Хороший был старт, мог и до 300 тянуть.
104 mishaPH
 
21.03.12
10:52
(101) аминь