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. alxarz 29 31.10.16 02:04 Сейчас в теме
нужно просто открыть процедуру ОбработкаПроведения и найти в ней вызов функции которая как раз и проверяет наличие необходимых остатков на складе.
4. cmotosl 31.10.16 02:13 Сейчас в теме
Можно Вас попросить если Вам не сложно, напишите готовый код, который будет работать и проверять остатки, честно уже несколько дней ломаю голову и никак не могу решить эту задачу, смог пока найти только один выход который описал выше..
5. 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. 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. 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С, помогите делом пжл.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 110 000 руб. до 120 000 руб.
Полный день

Аналитик 1С
Санкт-Петербург
зарплата от 80 000 руб.
Полный день

Программист 1С
Самара
зарплата от 50 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата до 120 000 руб.
Полный день

Программист 1С
Волгоград
зарплата от 45 000 руб. до 90 000 руб.
Полный день