Запись Чек

Внимание! Данный форум является модерируемым.
Для получения к нему доступа необходимо зарегистрироваться или авторизоваться на сайте.

Страницы: 1
RSS
Запись Чек
 
Здравствуйте! Такая проблема:
ААА 18
Ошиблись со складом в документе Чек. Теперь при записи документа постоянно пишет
При записи < Чек 0000003250 от 28.11.2010 19:26:57 > обнаружены ошибки :
[ЦБ019139] Товар "Масло моторное 5/30 (бочка 205л) 93165007 DEXOS 2". Остаток 0 л. Списывается 1 л. Превышение 1 л
Из-за возникших ошибок операция записи была отменена.

При чем это даже при попытке записи непроведенного документа, а не только при попытке проведения!
 
При этом если попробовать грубо (ДокументОбъект.ОбменДанными.Загрузка = Истина) вручную исправить склад на нужный, то документ после этого запишется и даже проведется.
 
Посмотрите чему равно право "Контролировать заполнение только при проведении". Если оно установлено в ложь то проверки проходят как при записи документа так и при проведении. Установка режима загрузки отменяет все проверки, поэтому документ у вас записывается и проводится.
 
Цитата
Сергей Большаков пишет:
При чем это даже при попытке записи непроведенного документа, а не только при попытке проведения!

Проверка остатков при записи документа "Чек" сделана для работы "Фронта кассира", т.к. сначала идет запись и проверка документа "Чек" без проведения, затем пробитие чека ФР, полученный номер чека передаем в документ "Чек" и проводим его. Если не сделать проверку, то получим пробитый чек, запись в фискальной памяти ФР и ошибку нехватки количества при проведении документа "Чек".
 
Цитата
Сергей Большаков пишет:
При этом если попробовать грубо (ДокументОбъект.ОбменДанными.Загрузка = Истина) вручную исправить склад на нужный, то документ после этого запишется и даже проведется.

А зачем отключать проверку если можно вручную изменить склад на нужный в табличной части "Товары"?
 
Цитата
Эдуард Иванов пишет:
Посмотрите чему равно право "Контролировать заполнение только при проведении". Если оно установлено в ложь то проверки проходят как при записи документа так и при проведении. Установка режима загрузки отменяет все проверки, поэтому документ у вас записывается и проводится.
Проводится-то у меня потом, без этого режима загрузки.

А зачем отключать проверку если можно вручную изменить склад на нужный в табличной части "Товары"?
Нет, не можно. У нас в документе стоит в шапке один склад, в табличной части - другой. Документ в таких условиях проводится. Но нам нужно в табличной части сделать тот же склад, что и в шапке. Вручную меняю склад в табличной части, после чего документ не то, что не проводится - даже просто не записывается, говорит, что превышение остатка (остаток естественно есть). Режимом загрузки меняю склад в табличной части. Затем отключаю режим загрузки и теперь документ можно провести (остаток, как я уже говорил выше, был).
Поэтому возможности исправить склад в табличной части нет.
Изменено: Сергей Большаков - 29.11.2010 23:14:09 (Дополнение)
 
1. Нужен скриншот Номенклатуры.
2. Нужен скриншот типа Номенклатуры.
3. Была ли эта номенклатура зарезервирована под контрагента?
 
Вот скриншоты. Резервов не было. Но думаю проблема не в этом. В отладчике видно, что проверки осуществляются в
Код
Функция ПроверитьКорректность(Ошибки="", ДопРеквизиты=Неопределено, Заполнение=Истина, Уникальность=Истина) Экспорт
, которая, во первых, вызывается в событии ПередЗаписью, а во вторых при отработке кода
Код
      Запрос = Новый Запрос(ТекстЗапроса);
      Запрос.УстановитьПараметр("Момент", МоментВремени());
      Если Ссылка.Пустая() Тогда
         Запрос.УстановитьПараметр("ТаблицаТовары", Товары);
      Иначе
         Запрос.УстановитьПараметр("Ссылка", Ссылка);
      КонецЕсли;

срабатывает именно ветка Запрос.УстановитьПараметр("Ссылка", Ссылка);, что влечет за собой проверку уже записанного, ошибочного документа базы, а не того, который мы видим на экране и где пытаемся изменить склад в табличной части. В дальнейшем смешение исходных и текущих данных приводит к ошибке отсутствия запчасти на складе.
Изменено: Сергей Большаков - 01.12.2010 07:42:23 (Дополнение)
 
Согласен, данная проверка имеет смысл только для нового чека и только для "фронт кассира".

Ошибка зарегистрирована под номером С0104199.
 
Будет какое-нибудь решение? Может быть кусок кода?
 
Нужно заменить в модуле Чека функцию ПроверитьКорректность()
текст функции в прикреплении.

В модуле обработки "фронт кассира" подправить функцию
ЗаписатьЧек()

Блок условия (он находится примерно с номера строки 6189)

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


заменить на


// Выполняем проверку корректности заполнения документа
Если ПроверитьКорректность Тогда
ДокументОбъект.СообщениеОбОшибке="";
Если НЕ ДокументОбъект.ПроверитьКорректность(ДокументОбъект.СообщениеОбОшибке,, ИСТИНА, ИСТИНА, ИСТИНА) Тогда
СообщениеОбОшибке = ДокументОбъект.СообщениеОбОшибке;
ЗаписатьВФайлЛога("Записать чек", 1, "ОШИБКА ПРИ ЗАПИСИ ЧЕКА: "+СообщениеОбОшибке,,1);
Возврат ЛОЖЬ;
КонецЕсли;
КонецЕсли;
 
Судя по блоку кода во фронте кассира, функция ПроверитьКорректность() с такими измененными параметрами может вызываться не только для документа Чек?
 
Да, чуть позже это учли

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

Если ЕстьОшибка Тогда
СообщениеОбОшибке = ДокументОбъект.СообщениеОбОшибке;
ЗаписатьВФайлЛога("Записать чек", 1, "ОШИБКА ПРИ ЗАПИСИ ЧЕКА: "+СообщениеОбОшибке,,1);
Возврат ЛОЖЬ;
КонецЕсли;
КонецЕсли;
 
Ошибка исправлена, исправления появятся в 19 релизе.
Страницы: 1
Читают тему
Поддержка отраслевых решений «1С-Рарус»
Услуги 1С