Контроль остатков на складе перед началом операции Оплата по карте.

1. Валера . (cmotosl) 30.10.16 07:10 Сейчас в теме
Доброе утро,

Нужна ваша помощь

Необходимо следующее, после нажатия кнопки Оплатить Картой в открытой форме ЧекККМ, сделать проверку остатков на складе, что бы сотрудники не могли провести операцию по Карте, в том случае если хотя бы одного товара который добавлен в документ ЧекККМ не окажется на складе.

вот код самой кнопки


Процедура КоманднаяПанельТоварыОплатитьКартой(Кнопка)
	
		ОплатитьКартой(СуммаОплаты);
		
КонецПроцедуры // КоманднаяПанельТоварыОплатитьКартой()

Показать


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

Пожалуйста помогите, буду очень признателен =)

"1с 8.2" "Управление торговлей", редакция 10.3 (10.3.34.1)
Ответы
2. Валера . (cmotosl) 31.10.16 01:54 Сейчас в теме
Временное решение

В модуле ЧекККМ пока что сделал так...


Функция ПровестиДляПроверкиОстатков(Ответ, Отказ, ФормаДокумента) Экспорт

	Результат = Истина;
	Ответ     = "";

	Попытка
		ФормаДокумента.ЗаписатьВФорме(РежимЗаписиДокумента.Проведение);
	Исключение
		Ответ     = "Ошибка при попытке проведения документа!";
		Отказ     = Истина;
		Результат = Ложь;
	КонецПопытки;
	
	Возврат Результат;
	
КонецФункции // ПровестиИРаспечататьЧек()

Показать


Код кнопки изменил на

Процедура КоманднаяПанельТоварыОплатитьКартой(Кнопка)

	Перем Ответ;
	Перем Отказ;

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

КонецПроцедуры // КоманднаяПанельТоварыОплатитьКартой()

Показать


Теперь если я добавляю товар и нажимаю кнопку Оплатить картой то идёт проверка на остатки, если нет товара на складе тогда мне пишет ошибку, если товар на складе есть, тогда проводится документ и продолжается операция оплаты по карте, но вся суть в том что мне не нужно что бы документ проводился по кнопке Оплатить картой, так как если у клиента не окажется денег на карте то тогда нужно делать возврат по 1С в обход ККМ.

Люди ну помогите решить проблему, что бы был контроль остатков без проводки документа.....
3. Alx Alx (alxarz) 29 31.10.16 02:04 Сейчас в теме
нужно просто открыть процедуру ОбработкаПроведения и найти в ней вызов функции которая как раз и проверяет наличие необходимых остатков на складе.
4. Валера . (cmotosl) 31.10.16 02:13 Сейчас в теме
Можно Вас попросить если Вам не сложно, напишите готовый код, который будет работать и проверять остатки, честно уже несколько дней ломаю голову и никак не могу решить эту задачу, смог пока найти только один выход который описал выше..
5. Alx Alx (alxarz) 29 31.10.16 02:30 Сейчас в теме
вот пробежался по коду, нашел процедуру

// Процедура контролирует остаток по данному регистру по переданному документу
// и его табличной части. В случае недостатка товаров выставляется флаг отказа и 
// выдается сообщение.
//
// Параметры:
//  ДокументОбъект     - объект проводимого документа, 
//  ИмяТабЧасти        - строка, имя табличной части, которая проводится по регистру, 
//  СтруктураШапки     - структура, содержащая значения "через точку" ссылочных реквизитов по шапке документа,
//  ОтказПроведения    - флаг отказа в проведении,
//  ЗаголовокСообщения - строка, заголовок сообщения об ошибке проведения.
//
Процедура КонтрольОстатков(ДокументОбъект, ИмяТабЧасти, СтруктураШапки, ОтказПроведения, ЗаголовокСообщения) Экспорт

Показать


УТ у меня правда старенькая 10.3.18.3 но думаю что в новой это тоже осталось. Тут весь код уже написан по сути.

P.S.: несколько дней ломаете голову над этой задачей бесплатно ради интереса?
14. Евгений Кальянов (GeRon) 31.10.16 08:28 Сейчас в теме
Вам ответили в (5) посте, достаточно вставить в вашу кнопку вызов процедуры и подхватывать результат ее работы с соответствующей обработкой.

Вы не хотите сами внести изменения в код, а хотите чтобы это сделал кто-то НО бесплатно, так не бывает. Труд должен быть оплачен. Не можете сами кодить - вызовите специалиста, котрый за умеренную плату вам это сделает.
15. Валера . (cmotosl) 31.10.16 13:09 Сейчас в теме
(14)
Спасибо вам вы очень любезны, спасибо что сказали про 5 пункт.

Вы не хотите сами внести изменения в код, а хотите чтобы это сделал кто-то НО бесплатно, так не бывает..

Бывает вы прочитайте мои посты выше, просто меня попросили, я ищу решение, если Вы Желаете помочь, буду только рад.

Труд должен быть оплачен. Кто же спорит, просто я обратился на бесплатный форум за помощью, для этого он существует ))
6. Валера . (cmotosl) 31.10.16 02:40 Сейчас в теме
Да Вы правы, можно и так сказать бесплатно ради интереса.

Не сочтите за наглость, есть у вас время ?, написать готовое решение, только без проведения.
7. Alx Alx (alxarz) 29 31.10.16 02:53 Сейчас в теме
(6) а чем временное решение не устраивает? добавить одну строчку...

Функция ПровестиДляПроверкиОстатков(Ответ, Отказ, ФормаДокумента) Экспорт

    Результат = Истина;
    Ответ     = "";

    Попытка
        ФормаДокумента.ЗаписатьВФорме(РежимЗаписиДокумента.Проведение);
       ФормаДокумента.ЗаписатьВФорме(РежимЗаписиДокумента.ОтменаПроведения);     ////////////<<<<<<<<<<<
    Исключение
        Ответ     = "Ошибка при попытке проведения документа!";
        Отказ     = Истина;
        Результат = Ложь;
    КонецПопытки;
    
    Возврат Результат;
    
КонецФункции // ПровестиИРаспечататьЧек()
Показать
9. Валера . (cmotosl) 31.10.16 02:58 Сейчас в теме
(7)
Тоже думал, но если уполномочить кассира такими правами, то боюсь может это плохо закончится, т.к. если кассир задумает отменить чек который проведён на ККМ то всё поедет и будут не нужные расхождения по 1С и по ККМ
8. Валера . (cmotosl) 31.10.16 02:55 Сейчас в теме
// Процедура контролирует остаток по данному регистру по переданному документу
// и его табличной части. В случае недостатка товаров выставляется флаг отказа и 
// выдается сообщение.
//
// Параметры:
//  ДокументОбъект     - объект проводимого документа, 
//  ИмяТабЧасти        - строка, имя табличной части, которая проводится по регистру, 
//  СтруктураШапки     - структура, содержащая значения "через точку" ссылочных реквизитов по шапке документа,
//  ОтказПроведения    - флаг отказа в проведении,
//  ЗаголовокСообщения - строка, заголовок сообщения об ошибке проведения.
Процедура КонтрольОстатков(ДокументОбъект, ИмяТабЧасти, СтруктураШапки, ОтказПроведения, ЗаголовокСообщения) Экспорт
Показать


Тут я уже был, просто не могу понять как сослаться на эту процедуру что бы от контролировать остатки без проведения документа, т.к. по кнопке Оплатить картой проводиться документ не должен, а только контроль и если всё нормально то тогда вызывать уже - ОплатитьКартой(СуммаОплаты);
10. Валера . (cmotosl) 31.10.16 03:00 Сейчас в теме
Вот поэтому и хочу решить данный вопрос без проводки.
11. Валера . (cmotosl) 31.10.16 03:05 Сейчас в теме
Может можно отменить проводку документа не наделяя правами Роль Кассира, например в процедуре сделать некое исключение из правил и после проведения, отменить проводку, но что бы сам кассир этого сделать не смог.

Вообще данную процедуру я взял из

// Функция осуществляет проведение документа и печать чека на ФР.
//
// Параметры:
//  Ответ    - <Строка>
//           - Выходной параметр; описание произошедшей ошибки.
//
//  Отказ    - <Булево>
//           - Выходной параметр; признак отказа от выполнения операции.
//
// Возвращаемое значение:
//  <Булево> - Истина в случае успешного завершения операции.
//
Функция ПровестиИРаспечататьЧек(Ответ, Отказ, ФормаДокумента, РучнойРежимПечати = Ложь) Экспорт

	Результат = Истина;
	Ответ     = "";

	Попытка
		ФормаДокумента.ЗаписатьВФорме(РежимЗаписиДокумента.Проведение);
	Исключение
		Ответ     = "Ошибка при попытке проведения документа!";
		Отказ     = Истина;
		Результат = Ложь;
		Возврат Результат;
	КонецПопытки;
Показать
12. Валера . (cmotosl) 31.10.16 03:28 Сейчас в теме
Alx Alx (alxarz), Вы сможете мне помочь ?

Лучше готовый код который будет проверять остатки без проведения, т.к. не хотелось бы наделять правами Роль Кассира.

Вся надежда на Вас )))
13. Валера . (cmotosl) 31.10.16 07:39 Сейчас в теме
Тема актуальна, пожалуйста помогите решить задачу.
16. Alx Alx (alxarz) 29 31.10.16 13:14 Сейчас в теме
1) правильно
2) быстро
3) бесплатно

выбираете 2 критерия, которые Вам важны в написании кода, хотя по постам я полагаю 1-й и 3-й, поэтому бесплатно и правильный код придется подождать))
17. Валера . (cmotosl) 31.10.16 19:34 Сейчас в теме
Не ужели все так серьезно, понятно что за все надо платить, не ужели так сложно написать код, если все на столько просто, и Вы знаете куда копать
18. Евгений Кальянов (GeRon) 01.11.16 13:24 Сейчас в теме
(17) как вы правильно заметили форум создан для помощи обмена информацией, но не для бесплатных внедрений и доработок. Решение вам предоставили, причем полностью бесплатно.
19. Валера . (cmotosl) 01.11.16 20:25 Сейчас в теме
Да я вижу что я уже где-то близко, просто не могу понять как мне правильно описать данную процедуру в 1С, что бы она звучала примерно так...

Код самой кнопки

Процедура ОсновныеДействияФормыОплатаКартой(Кнопка)

	Перем Отказ;
      Перем Ответ;

	Если ПроверяемОстаткиПередОплатой(Ответ, Отказ, ЭтаФорма) Тогда
		ОплатитьКартой(СуммаОплаты);
	Иначе                                                             
		Предупреждение(?(Отказ, "Возможны расхождения ИБ и ленты ФР! ", "") + Ответ);
	КонецЕсли;


КонецПроцедуры 
Показать


И Модуль

Функция ПроверяемОстаткиПередОплатой(Ответ, Отказ, ФормаДокумента, РучнойРежимПечати = Ложь) Экспорт

	Результат = Истина;
	Ответ     = "";

	Попытка
		КонтрольОстатков(ЭтотОбъект, "Товары", Отказ, Ответ);

	Исключение
		Ответ     = "Ошибка при попытке оплатить картой!";
		Отказ     = Истина;
		Результат = Ложь;
		Возврат Результат;
	КонецПопытки;

Показать

Ну помогите, правда ну очень нужно, пожалуйста не пинайте я пока ещё зелёный в этом вопросе =(((
20. Валера . (cmotosl) 02.11.16 19:51 Сейчас в теме
21. Валера . (cmotosl) 03.11.16 16:16 Сейчас в теме
помогите решить проблему )
22. Валера . (cmotosl) 05.11.16 21:20 Сейчас в теме
Ну что так и никто не напишет решение, или никто не знает как написать это условие для 1С, помогите делом пжл.
Оставьте свое сообщение