Имя: Пароль:
1C
1C 7.7
v7: Помогите с печатью (отступы от краев)
,
0 Паштет
 
17.07.13
17:01
Мужики, помогите решить проблему, в предыдущем топике решил вопрос с автоматической печатью при нажатии на кнопку "Печать" (ТиС, чекККМ).
Теперь другой вопрос, выводится чек совсем не в том масштабе что мне нужно, и даже если я устанавливаю так как мне нужно в ручную, то в следующий раз когда распечатываю чек настройки параметров печати опять сбиваются. можно ли как-то программно указать для печатной формы чека отспуты слева, справа, сверху, снизу - 0, а масштаб - по ширине листа?
1 Джордж1
 
17.07.13
17:02
ПараметрыСтраницы смотри
2 Chum
 
17.07.13
17:02
ПараметрыСтраницы()
3 Chum
 
17.07.13
17:03
масштаб 100 и отключи автомасштаб. Поля там же настраиваются
4 Паштет
 
17.07.13
17:06
ПечТаблица.ПараметрыСтраницы(,,,,,,,,,1,,);

это единственное что там есть по этому поводу... я сам не разберусь как добавить
5 Chum
 
17.07.13
17:07
с СП открой, там каждый параметр описан.

первый параметр - альбомная/книжная ориентация
потом колонтитулы
потом отступы: слева, справа, сверху, снизу.

твоя 1 это скорее всего автомасштаб
6 Chum
 
17.07.13
17:08
ПараметрыСтраницы(<?>,,,,,,,,,,,);
Синтаксис:
ПараметрыСтраницы(<Ориентация>,<Масштаб>,<РежимПечатиКопий>,<ПолеСлева>,<ПолеСправа>,<ПолеСверху>,<ПолеСнизу>,<КолонтитулСверху>,<КолонтитулСнизу>,<Автомасштаб>,<ФлагЧБПечати>,<ИмяПринтера>)
Назначение:
Установить параметры страницы.
Возвращаемого значения нет.
Параметры:
<Ориентация> - необязательный параметр. Ориентация вывода на печать: число:  1 -  портрет; 2 - ландшафт.
<Масштаб> - необязательный параметр. Числовое выражение - масштаб (в процентах) вывода на печать.
<РежимПечатиКопий> - необязательный параметр. Числовое выражение - режим вывода нескольких копий на печать: 0 -  (collate) выводить сначала первые страницы всех копий,  затем вторые и т.д.; 1 - (разобрать) выводить страницы копий по порядку.
<ПолеСлева> - необязательный параметр. Числовое выражение - расстояние (в миллиметрах) от левого края страницы.
<ПолеСправа> - необязательный параметр. Числовое выражение - расстояние (в миллиметрах) от правого края страницы.
<ПолеСверху> - необязательный параметр. Числовое выражение - расстояние (в миллиметрах) от верхнего края страницы.
<ПолеСнизу> - необязательный параметр. Числовое выражение - расстояние (в миллиметрах) от нижнего края страницы.
<КолонтитулСверху> - необязательный параметр. Числовое выражение - размер (в миллиметрах) верхнего колонтитула.
<КолонтитулСнизу> - необязательный параметр. Числовое выражение - размер (в миллиметрах) нижнего колонтитула.
<Автомасштаб> - необязательный параметр. Режим автоматического подбора масштаба для размещения документа при печати на листе по ширине. 1 - включить; 0 - выключить; по умолчанию - 0.
<ФлагЧБПечати> - необязательный параметр. Число: 1 - черно-белая печать; 0 - обычный режим печати. Значение по умолчанию - 0.
<ИмяПринтера> - необязательный параметр. Строка имени принтера, как в стандартном диалоге печати Windows.
Замечание:
Метод может использоваться при работе с таблицей в режиме ввода данных.
7 Chum
 
17.07.13
17:10
В твоем случае примерно так:

ПечТаблица.ПараметрыСтраницы(1,100,,10,10,10,10,,,0,,);
8 Паштет
 
17.07.13
17:11
(6) откуда же вы все это берете????? это учебник есть какой-то универсальный?
9 Паштет
 
17.07.13
17:11
как это все можно знать...
10 Джордж1
 
17.07.13
17:12
Кнопку с дядькой в шляпе нажми
11 Масянька
 
17.07.13
17:13
Да подарите ему уже СП (Синтаксис-помощник) :)))))))))))
12 Паштет
 
17.07.13
17:14
(10) ага, я даже этого не знал...
13 Chum
 
17.07.13
17:14
(8) ты серьезно? Синтакс-помощник не знаешь?

набери в окне модуля параметрыСтраницы воткни в середину курсор и нажми Ctrl+F1 - удивишься.
14 Паштет
 
17.07.13
17:15
(13) ух ты млин))) не знал, честно!
15 Паштет
 
17.07.13
17:16
(13) спасибо, хоть может быть не буду вас задалбывать такими вопросами...
16 Паштет
 
17.07.13
17:16
ну уж простите, я же чайник еще вообще)))
17 Паштет
 
17.07.13
17:17
но я научусь!
18 Паштет
 
17.07.13
17:17
спасибо огромное вам за помощь
19 Chum
 
17.07.13
17:18
(16) как бы 7 месяцев тут уже... клюшки изучить месяц-два обычно уходит

(17) обязательно, только вот зачем? 8-ку учи
20 Паштет
 
17.07.13
17:19
(19) если бы мог каждый день хоть по часику выделять - выучил бы, а так дочка маленькая))))
21 Chum
 
17.07.13
17:20
(8) в коробке с 1С идет две желто-красные книжки (ЖКК) под названием "Описание встроенного языка часть 1" и "... часть 2". Рекомендую к прочтению. Необязательно все учить, просто ознакомься с методами объектов, для чего они и что могут, потом гораздо проще будет искать что-то нужное.
22 Паштет
 
17.07.13
17:21
(21) все жкк в наличии, пробовал читать - подумал что надо мне начинать с чего-то попроще, взял учебник Волшебника...
23 Chum
 
17.07.13
17:21
Вот сюда еще загляни: http://www.mista.ru/tutor_1c/
24 Паштет
 
17.07.13
17:22
(23) вот-вот, это у меня и есть!
25 Паштет
 
17.07.13
17:24
а не подскажете как научится отладчиком пользоваться?
26 Паштет
 
17.07.13
17:24
как бы даже не понимаю его сути
27 Паштет
 
17.07.13
17:26
стыдно сказать
28 Mikeware
 
17.07.13
17:51
суть его - отлаживать программы. т.е. избавлять программы от лажи...
29 Mikeware
 
17.07.13
17:53
запусти его одновременно с предприятием, открой нужную обработку (или модуль), поставь там точку останова. а в предприятии запусти. как только исполнение дойдет до  точки останова - выполнение приостановится, и ты сможешь просмотреть переменные, например. или выполнять программу пошагово и смотреть на ветвления...
30 Паштет
 
20.07.13
20:40
Всем добра, мужики, а подскажите пожалуйста такую фишку, хоть где рыть))) Все тот же ЧекККМ, пытаюсь я сделать такую фишку:

Если Получено < > 0 Тогда
//Хочу чтобы если получено больше или меньше нуля, то вывести документ на печать, но никак гадость этакая не выводится...        
КонецЕсли;
31 Паштет
 
20.07.13
20:40
Если Получено < > 0 Тогда
        Парам.Получить("Команда") = "Печать";
        КонецЕсли;

так попробовал - не получается
32 Voronve
 
20.07.13
20:44
(31) Перефразируй хотелку. Ничонипанятна
33 Паштет
 
20.07.13
20:47
(32) на форме ЧекККМ есть поле "Получено", после ввода полученной суммы выбивает сдачу покупателю. Хочу чтобы после того, как продавец ввел "Получено" и нажал "Ентер", чтобы сразу открылась печатная форма чека...
34 Паштет
 
20.07.13
20:49
Но так как она у меня впринципе не откроется, потому что с вашей помощью мне удалось чтобы при нажатии на кнопку "Печать" чек сразу распечатывался на принтер, в общем чтобы распечатался чек при вводе "Получено"
35 Voronve
 
20.07.13
20:57
1. В СП посмотри КнопкаПоУмолчанию()
2. В свойствах поля "Получено" прикрути вызов процедуры печати
36 Voronve
 
20.07.13
20:57
(35) 1 или 2
37 Паштет
 
20.07.13
21:00
(36) вот, я как-то понимаю что нужно прикрутить вызов процедуры печати, но как не знаю...
38 Voronve
 
20.07.13
21:03
Свойства поля "получено" вкладка "дополнительно" поле "формула" - ПриВводеОплаты()

В модуле формы документа

Процедура ПриВводеОплаты()
Если Получено <> 0 Тогда
<Наименование твоей процедуры печати>;
КонецЕсли;
КонецПроцелуры
39 Паштет
 
20.07.13
21:09
Процедура ПриВводеОплаты()
Если Получено <> 0 Тогда
<Процедура Печать>;
КонецЕсли;
КонецПроцедуры

отак чтоли..
40 Паштет
 
20.07.13
21:10
не выходит, пишет ошибку мол "Процедура или функция с указанным именем уже определена в текущем модуле (Печать)"
41 Voronve
 
20.07.13
21:11
Процедура ПриВводеОплаты()
Если Получено <> 0 Тогда
Печать();
КонецЕсли;
КонецПроцедуры
42 Паштет
 
20.07.13
21:15
от зараза... не получается все равно, пишет теперь такую вещь:

глФРМ(ПечСебест<<?>>)
Переменная не определена (ПечСебест)
глФРМ(ПечНДС<<?>>)
Переменная не определена (ПечНДС)
ПечТаблица.ВывестиСекцию("Строка");
{Документ.ЧекККМ.Форма.Модуль(180)}: Секция не найдена Строка

Но если сразу нажимаю на кнопку "Печать" то все нормально
43 Паштет
 
20.07.13
21:15
(41) сегодня со мной должны расплатится, я отблагодарю, даю слово!
44 Паштет
 
20.07.13
21:16
так подумать, кому оно надо со мной возится)))
45 Voronve
 
20.07.13
21:17
(44) не скули
46 Паштет
 
20.07.13
21:17
может это процедуру надо в самый конец закинуть...
47 Паштет
 
20.07.13
21:18
оно выходит еще не видит этих переменных
48 Паштет
 
20.07.13
21:19
(46) а не... не выходит))) что же у меня все сикось-накось идет
49 Voronve
 
20.07.13
21:20
Дайка сюда весь код модуля дока "Чек ККМ". Посмотрим чо ты там наворочал
50 Паштет
 
20.07.13
21:20
(45) это я от понимания что я ничего не понимаю
51 Паштет
 
20.07.13
21:23
////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ
//
Перем СписокДействий;         // для механизма кнопки "Действия"

Перем ТаблицаПечФорм;         // список печатных форм документа
Перем НомерТекущейФормы;

Перем НачальнаяДатаДокумента; // для механизма контроля уникальности номеров
Перем СтараяСкидка;

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

Перем ОбщРег, ОстаткиТМЦ, СписокПараметров;
                             // для выбора розничных цен, по которым есть остатки

Перем СтараяСумма, СтараяПолучено;

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






//******************************************************************************
// ОбновитьНадписи()
//
// Описание:
//    Обновляет текст информационных надписей в форме документа
Процедура ОбновитьНадписи()    
   
   Форма.ТекстФирмы    .Заголовок(глСтрокаФирмы        (Контекст));
   Форма.ТекстСклада    .Заголовок(глСтрокаСклада        (Склад));
   
КонецПроцедуры //ОбновитьНадписи()  

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

//******************************************************************************
// ПоКнопкеПодбор()
//
// Параметры:
//  нет.
// Возвращаемое значение:
//  нет.
// Описание:

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

   Если Выбран() = 0 Тогда
       Параметры.ДобавитьЗначение("Дата",  "ТипГраницы");
       Параметры.ДобавитьЗначение(ДатаДок, "ЗначениеГраницы");
   Иначе
       Параметры.ДобавитьЗначение("Позиция",         "ТипГраницы");
       Параметры.ДобавитьЗначение(ПолучитьПозицию(), "ЗначениеГраницы");
   КонецЕсли;
   
   Параметры.ДобавитьЗначение("Подбор номенклатуры в документ " + ПредставлениеВида() + " № " + НомерДок, "Заголовок");
   глПодбор(Контекст, Параметры);
   
КонецПроцедуры // ПоКнопкеПодбор()

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

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

       ПечТаблица.Показать(глНазваниеДокументаВжурнале(Контекст),"");  
   Иначе    
       ПечТаблица.ПараметрыСтраницы(2,1100,,0,0,22,12,,,0,,"Samsung ML-1860 Series");
       ПечТаблица.КоличествоЭкземпляров(КолЭкз);
       ПечТаблица.Напечатать(0);
   КонецЕсли;
   
КонецПроцедуры // Печать()

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

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

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

КонецПроцедуры // ПоКнопкеВыборПечатнойФормы()        

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


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

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

   // для услуг и работ цены можно редактировать, иначе нужно выбирать из остатков регистра
   Если (Номенклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга)
    или (Номенклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Работа)
    или (Склад.РозничныйСклад = 0) Тогда
       Форма.Цена.Редактирование(1);
   Иначе
       Форма.Цена.Редактирование(0);
   КонецЕсли;
   
КонецПроцедуры // ПриИзмененииНоменклатуры()

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



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

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

   Если ЧекПробитККМ = 1 Тогда
       ПриЗаписиПерепроводить(0);
       НомерЧекаККМ = НомерЧека;
       Записать();
       ПриЗаписиПерепроводить(1);
       
       // Откроем денежный ящик, если он подключен
       глДПОткрытьДенежныйЯщик();
   КонецЕсли;
   
   Возврат ЧекПробитККМ;
   
КонецФункции // ПробитьЧекНаККМ()

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

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

   КонецЕсли;
   
   Если ИмяКнопки="ОК" Тогда
       Форма.Закрыть(1);
   КонецЕсли;
   
КонецПроцедуры

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

//******************************************************************************
// предопределенная процедура  
//
Процедура ВводНаОсновании(ДокументОснование)
       
   Касса       = ДокументОснование.Касса;
   
   Если (Касса.РежимККМ = Перечисление.РежимыККМ.OffLine) ИЛИ (Касса.РежимККМ = Перечисление.РежимыККМ.OnLine) Тогда
       // Для режимов OffLine и OnLine выписка чека не имеет смысла, т.к. чек
       // пробивается в кассе
       Предупреждение("Для ККМ с режимом работы OffLine или OnLine
                      |Чек не может быть введен.",60);
       СтатусВозврата(0); Возврат;
   КонецЕсли;
   
   СинонимДокумента    = ПредставлениеВида();
   СинонимОснования    = ДокументОснование.ПредставлениеВида();
   
   Список    = глПолучитьСписокВводимыхНаОсновании(ДокументОснование);
   Поз        = Список.НайтиЗначение(Вид());
   
   // выполним проверку, можно ли вводить документ на основании ДокументОснование
   Если Поз = 0 Тогда
       // ДокументОснование не найден в списке разрешенных
       Предупреждение("Документ """ + СинонимДокумента +
                       """ нельзя вводить на основании """ + СинонимОснования + """", 60);
       СтатусВозврата(0);
       Возврат;
   КонецЕсли;
   
   // чек вводится только на основании другого чека,
   // поэтому он всегда является "чеком на возврат"
   ВидОперации = Перечисление.ВидыОперацийЧекККМ.ЧекНаВозврат;
   глЗаполнитьШапкуНаОсн(Контекст,ДокументОснование);
   
   Результат = ЗаполнениеПоДокументуОснованию();
   Если ПустоеЗначение(Результат) = 0 Тогда
       Сообщить(Результат);
       СтатусВозврата(0);
   КонецЕсли;
   
КонецПроцедуры // ВводНаОсновании()

//******************************************************************************
// предопределенная процедура
//
Процедура ПриОткрытии()
                           
   // Заполним таблицу для выбора печатной формы
   НомерТекущейФормы = глУстановкаКнопкиПечать(Контекст, "Документ." + Вид(),ТаблицаПечФорм);
   
   Парам = Форма.Параметр;
   Если ТипЗначенияСтр(Парам)="СписокЗначений" Тогда
       Если ПустоеЗначение(Парам.Получить("Команда"))=1 Тогда
           Сообщить("В форму документа "+Вид()+" передан неверный параметр!","I");
           СтатусВозврата(0);Возврат;
       КонецЕсли;
       Если Парам.Получить("Команда") = "ПечатьНаПринтер" Тогда
           КолЭкз = Макс(Число(Парам.Получить("КолЭкз")),1);
           ПоКнопкеПечать(1,КолЭкз);
           СтатусВозврата(0);Возврат;
       ИначеЕсли Парам.Получить("Команда") = "ПечатьНаЭкран" Тогда
           ПоКнопкеПечать(0);                
           СтатусВозврата(0);Возврат;
       Иначе
           Сообщить("В форму документа "+Вид()+" передана неверная команда "+Парам.Получить("Команда")+"!","I");
           СтатусВозврата(0);Возврат;
       КонецЕсли;
   КонецЕсли;
   
   // инициализация модульных переменных, контролирующих выполнение
   // пересчетов и обновление надписей в форме
   НачальнаяДатаДокумента    = ДатаДок;
   СтараяСкидка = Скидка;
   
   Форма.ШтрихКод        .ВыполнятьФормулуТолькоПриИзменении(1);
   Форма.Номенклатура    .ВыполнятьФормулуТолькоПриИзменении(1);
   Форма.Единица        .ВыполнятьФормулуТолькоПриИзменении(1);
   Форма.Количество    .ВыполнятьФормулуТолькоПриИзменении(1);
   Форма.Цена            .ВыполнятьФормулуТолькоПриИзменении(1);
   Форма.Сумма            .ВыполнятьФормулуТолькоПриИзменении(1);
   
   глПроверкаРазрешенияРедактирования(Контекст);
   
   Если Склад.РозничныйСклад = 1 Тогда
       // на розн.складе всем разрашаем выбирать цену из списка
       Форма.Цена.Доступность(1);
       Форма.Цена.Редактирование(0);
   КонецЕсли;
   
   // если дата проведенного документа больше ТА, то открываем только на просмотр,
   // так как его все равно не удастся сохранить после редактирования.
   Если (Проведен() = 1) И (ДатаДок > ПолучитьДатуТА()) Тогда
       Форма.ТолькоПросмотр(1);
   КонецЕсли;
   
   //Инициализирум список действий по кнопке "Действия"
   СписокДействий = СоздатьОбъект("СписокЗначений");
   СписокДействий.ДобавитьЗначение("Отчет о движениях документа");
   СписокДействий.ДобавитьЗначение("Структура подчиненности");
             
   // Если открыли только на просмотр, то надо кнопки сделать недос
52 Паштет
 
20.07.13
21:25
ФлагСтандОбр = 0;
               
           // регистры рассчитываем, только если хочется редактировать цены вручную
           Если глПересчетРегистров(Контекст, СписокПараметров) = 0 Тогда
               Возврат;
           КонецЕсли;
           ТовЦена = "";
           глПолучитьРозничныйОстатокЦену(Номенклатура, Единица, ОстаткиТМЦ, , ТовЦена);
           СписокЦен = ЗначениеИзСтроки(ТовЦена);
           СписокЦен.ВыбратьЗначение(Цена, , , 60,2);
           глПересчетТаблЧасти(Контекст,"Цена");
       КонецЕсли;
   КонецЕсли;
   
КонецПроцедуры // ПриНачалеВыбораЗначения()
   
//******************************************************************************
//Предопределенная процедура
//
Процедура ПриРедактированииНовойСтроки()
   
   Форма.Номенклатура.Доступность(1);
   Форма.Количество.Доступность(1);
   
КонецПроцедуры  // ПриРедактированииНовойСтроки()

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

//******************************************************************************
//Предопределенная процедура
//
Процедура ПриЗакрытии()
   глДПВключитьРежимВыводаБегСтроки();
КонецПроцедуры // ПриЗаписи()

//******************************************************************************
// Предопределенная процедура
//
Процедура ОбработкаПодбора(ВыбЗнач, КонтФормыПодбора)
   
   // нет ставок налогов, есть скидка
   глОбработкаПодбора(Контекст, ВыбЗнач, 0, 0, 1);
   
   ВыбратьСтроки();
   Пока ПолучитьСтроку() = 1 Цикл
       ШтрихКод = Единица.ШтрихКод; // прописываем штрих - код
   КонецЦикла;
   
КонецПроцедуры // ОбработкаПодбора()

//******************************************************************************
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
   // Процедура разбирает штрих-код, считанный сканером
   // и заполняет строки накладной
   Перем Упаковка,ТекКоличество, Спецификация;
   Перем ВремТовар, ВремЕдиница, ВремКоличество, ВремЦена;
   
   Перем СтрокаВозврЦена;

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

КонецПроцедуры // ОбработкаВнешнегоСобытия()  

Процедура ПриВводеОплаты()
Если Получено <> 0 Тогда
ПоКнопкеПечать();
КонецЕсли;
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// ТЕЛО МОДУЛЯ ФОРМЫ
//
НомерТекущейФормы    = 0;

ТаблицаПечФорм        = СоздатьОбъект("ТаблицаЗначений");
ТаблицаПечФорм.НоваяКолонка("Название","Строка",,,,30);
ТаблицаПечФорм.НоваяКолонка("Файл","Строка",,,"Файл",10);
ТаблицаПечФорм.НоваяКолонка("Кнопка","Строка",,,,10);
ТаблицаПечФорм.НоваяКолонка("ФайлОписания","Строка");
   
// добавим информацию о встроенной форме
ТаблицаПечФорм.НоваяСтрока();
ТаблицаПечФорм.Название     = "Печатная форма товарного чека";
ТаблицаПечФорм.Кнопка       = "Чек";

// Для выбора цен
ОбщРег           = СоздатьОбъект("Регистры");
ОстаткиТМЦ       = ОбщРег.ОстаткиТМЦ;
СписокПараметров = СоздатьОбъект("СписокЗначений");
СписокПараметров.Установить("ОбщРег"              , ОбщРег);
СписокПараметров.Установить("ОстаткиТМЦ"          , ОстаткиТМЦ);
СписокПараметров.Установить("ФильтрПоСкладу"      , ПолучитьПустоеЗначение("Справочник.Склады"));
СписокПараметров.Установить("ФильтрПоФирме"       , ПолучитьПустоеЗначение("Справочник.Фирмы"));
СписокПараметров.Установить("ПозицияРегистра"     , 0);
   
СтараяСумма = -1; СтараяПолучено = -1;
53 Паштет
 
20.07.13
21:26
та ничего такого и не ворочал особо))))
54 Voronve
 
20.07.13
21:29
По0чему в ПриВводеОплаты() вызываешь ПоКнопкеПечать() а не Печать() ?
55 КапЛей
 
20.07.13
21:30
А чего сразу глобальник не выложил? Ошибка в нём, 146%!
56 Voronve
 
20.07.13
21:31
(55) Я попросил
57 Паштет
 
20.07.13
21:31
(54) я сразу Печать() попробовал, то же самое...
58 Паштет
 
20.07.13
21:31
(55) я вообще глобальник не трогал
59 Voronve
 
20.07.13
21:34
(57) Если пишешь вызов Печать() в ПриВводеОплаты() (42) соханяется ?
60 Паштет
 
20.07.13
21:36
(59) да, та же мутня
61 Паштет
 
20.07.13
21:37
Вообще не пойму при чем тут эта ошибка))) ведь если мышкой тыкаю на кнопку "печать" сразу выводит на печать и не ругается
62 Voronve
 
20.07.13
21:43
(60) Сколько печатных форма у дока "Чек ККМ" ?
63 Паштет
 
20.07.13
21:46
(62) две
64 Voronve
 
20.07.13
21:49
стуканись в аську
65 Паштет
 
20.07.13
22:03
(64) не достучусь к тебе чтоть
Основная теорема систематики: Новые системы плодят новые проблемы.