HELP

Новая тема
Показывать по 10 20 40 сообщений
А в какой момент нужно чтобы устанавливалась единица?
при считывания штрих сканером в Чек ККМ в колонке количество автоматически подставляется "0" а нужно "1"
Ищите в форме документа "Чек ККМ", а в ней процедуру "ОбработкаВнешнегоСобытия".
а дальше если можно распишите по подробней что и как делать очень нужно!!!!
заранее благадарю.
Текст процедуры выложите сюда, попробую помочь.
"///////////////////////////////////////////////////////////­/////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ
//
Перем СписокДействий;         // для механизма кнопки "Действия"

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

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

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

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

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

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

Форма.СуммаСкидки.Видимость(Скидка.Выбран());

КонецПроцедуры // УправлениеВидимостью()

//******************************************************************************
// ОбновитьНадписи()
//
// Описание:
// Обновляет текст информационных надписей в форме документа
Процедура ОбновитьНадписи()    

Форма.ТекстФирмы .Заголовок(глСтрокаФирмы (Контекст));
Форма.ТекстСклада .Заголовок(глСтрокаСклада (Склад));

КонецПроцедуры //ОбновитьНадписи()  

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

Перем Заголовок, Название;

   Заголовок = глНазваниеДОкументаВЖурнале(Контекст);
Название = Заголовок+" №";                          

Если Выбран() = 1 Тогда  
Если Проведен() = 1 Тогда
Заголовок = Заголовок + ". Проведен";
Иначе
Заголовок = Заголовок + ". Не проведен";
КонецЕсли;
Иначе
Заголовок = Заголовок + ". Новый";
КонецЕсли;
Форма.Заголовок(Заголовок);              
Возврат Название;

КонецФункции // ЗаголовокФормы        

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

Процедура ПоКнопкеПодбор()

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

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

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

Параметры.ДобавитьЗначение("Подбор номенклатуры в документ " + ПредставлениеВида() + " № " + НомерДок, "Заголовок");
глПодбор(Контекст, Параметры);

КонецПроцедуры // ПоКнопкеПодбор()

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

ПечТаблица = СоздатьОбъект("Таблица");

// выводим шапку документа
ПечТаблица.ВывестиСекцию("Шапка");
// шапку повторяем на каждой странице
ВысотаШапки = ПечТаблица.ВысотаСекции("Шапка");
ПечТаблица.ПовторятьПриПечатиСтроки(1, ВысотаШапки);

// выводим товары
ВыбратьСтроки();

Пока ПолучитьСтроку() = 1 Цикл
ПечТаблица.ВывестиСекцию("Строка");
КонецЦикла;

// выводим подвал
ПечТаблица.ВывестиСекцию("Подвал");

Если СразуНаПринтер = 0 Тогда
// покажем результирующую таблицу
ПечТаблица.Опции(0, 0, ВысотаШапки, 0, "ПараметрыПечатиЧека", "ПараметрыПечатиЧека");

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

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

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

//******************************************************************************
// ПоКнопкеПечать()
//
// Параметры:
// Нет
//
// Описание:
// Вызывается по кнопке "Печать"  
//
Процедура ПоКнопкеПечать(СразуНаПринтер = 0,КолЭкз = 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);
КонецЕсли;

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

СписокДействий.ДобавитьЗначение("Ввести на основании");
СписокДействий.ДобавитьЗначение("Перейти в журнал");

// кнопка по умолчанию
Если (Форма.ТолькоПросмотр() = 1) ИЛИ ((ДатаДок < Макс(РабочаяДата(), ПолучитьДатуТА()) ) И (Выбран() = 1)) Тогда
   Форма.КнопкаПоУмолчанию("кнЗакрыть");
Иначе
   Форма.КнопкаПоУмолчанию("кнОК");
КонецЕсли;

ОбновитьНадписи();    
УправлениеВидимостью();

глДПВключитьРежимВыводаСтрок();

//Если документ еще не проведен, тогда
//проведение делаем только в потоке
Если ( Проведен() = 0 ) Тогда
ПроводитьПослеТА(1,1);
КонецЕсли;  

КонецПроцедуры // ПриОткрытии()      

//******************************************************************************
// Предопределенная процедура
//
Процедура ПриНачалеРедактированияСтроки()
   
Форма.Номенклатура.Доступность(1);
Форма.Количество.Доступность(1);

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

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

ИначеЕсли (Форма.ТекущаяКолонка() = "Сумма"   )
или       (Форма.ТекущаяКолонка() = "СуммаНП" )
или       (Форма.ТекущаяКолонка() = "СуммаНДС")
Тогда
Если (Форма.ПолучитьАтрибут(Форма.ТекущаяКолонка()).Доступность()   = 0)
И    (глПолучитьПолномочие("РазрешитьРедактированиеЦенВдокументах") = 0)
Тогда
Предупреждение("Редактирование цен запрещено в соответствии
|с установленными полномочиями пользователя!", 60);
КонецЕсли;
КонецЕсли;

КонецПроцедуры //ПриНачалеРедактированияСтроки()
   
//******************************************************************************
// Предопределенная процедура.
//
Процедура ПриНачалеВыбораЗначения(ИдентЭлемДиалога, ФлагСтандОбр)

Если ИдентЭлемДиалога = "Цена" Тогда
Если (Склад.РозничныйСклад = 1)
  и (Номенклатура.ВидНоменклатуры <> Перечисление.ВидыНоменклатуры.Услуга)
  и (Номенклатура.ВидНоменклатуры <> Перечисление.ВидыНоменклатуры.Работа) Тогда
ФлагСтандОбр = 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;

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

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

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

СтараяСумма = -1; СтараяПолучено = -1;"
Зря ты это сказал. :)
"Зачем весь модуль то было выкладывать? Вполне достаточно только текст процедуры "ОбработкаВнешнегоСобытия"...

Замените в этой процедуре строку:

"ТаблицаПодбора.Количество   = ВремКоличество;"

на

"ТаблицаПодбора.Количество   = ?(ВремКоличество=0, 1, ВремКоличество);""
"ден что то не как не подходит подставляю
"ТаблицаПодбора.Количество   = ?(ВремКоличество=0, 1, ВремКоличество);"
а оно всеровно делает как
"ТаблицаПодбора.Количество   = ВремКоличество;"
что ещё можно сделать????"
Что значит "все равно делает как"? Текст в программном коде не меняется чтоли?
Читают тему
(гостей: 1)

Быстрый переход