Здравствуйте!
Розница 2.2 серверная
Делаю внешнюю обработку.
При программном заполнении Отчета о розничных продажах товар не находится по Коду номенклатуры.
НО документ заполняется в Файловом варианте базы.
В серверной базе отладчиком не получается остановиться.
Подскажите, пожалуйста, в чем может быть причина?
Заранее спасибо!
Розница 2.2 серверная
Делаю внешнюю обработку.
При программном заполнении Отчета о розничных продажах товар не находится по Коду номенклатуры.
НО документ заполняется в Файловом варианте базы.
В серверной базе отладчиком не получается остановиться.
Подскажите, пожалуйста, в чем может быть причина?
Заранее спасибо!
По теме из базы знаний
- Загрузка характеристик номенклатуры из Excel. Поиск номенклатуры по коду
- Загрузка документов и номенклатуры из Excel в 1С "одним нажатием": УПД, ТОРГ-12, отчеты маркетплейсов, заказы, счета, прайсы
- Поиск номенклатуры по штрих-коду в Интернете для 1С:УТ 11.3 и 1С Розницы 2.2
- Поиск номенклатуры по штрихкоду
- Поиск номенклатуры по штрихкоду в табличной части
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)часть:
тут Продажи - это табл.значений
Отчет = НайтиДокОтчетККМ(НомерОтчета,ДатаДок,КассаККМ,ТекПользователь);
Отчет.Товары.Очистить();
Отчет.ОплатаПлатежнымиКартами.Очистить();
Отчет.ВозвращенныеТовары.Очистить();
РежимПроведения = РежимПроведенияДокумента.Неоперативный;
ПродажиСвернутые = Продажи.Скопировать();
Для Каждого Товар из ПродажиСвернутые Цикл
Если Товар.Сумма = 0 Тогда
Продолжить;
КонецЕсли;
НайдТовар = Товар.Товар;
СтрокаТЧ = Отчет.Товары.Добавить();
СтрокаТЧ.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(Товар.Код);
Сообщить(Строка(СтрокаТЧ.Номенклатура) + " / " + Строка(Товар.Код));
//СтрокаТЧ.Упаковка.ЕдиницаИзмерения = НайдТовар.ЕдиницаИзмерения;
//СтрокаТЧ.Коэффициент = НайдТовар.ЕдиницаХраненияОстатков.Коэффициент;
СтрокаТЧ.Количество = Товар.Количество;
СтрокаТЧ.КоличествоУпаковок = Товар.Количество;
СтрокаТЧ.Цена = Товар.Цена;
СтрокаТЧ.Сумма = Товар.Сумма;
СтрокаТЧ.Склад = выб.Склад;
СтрокаТЧ.ПроцентСкидкиНаценки = ?(Товар.Количество * Товар.Цена = 0, 0, 100 * (1 - Товар.Сумма / (Товар.Количество * Товар.Цена)));
//ОбработкаТабличныхЧастей.ПриИзмененииЕдиницыТабЧасти(СтрокаТЧ, Отчет);
СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
//ОбработкаТабличнойЧастиТоварыСервер.РассчитатьСуммуНДСТабЧасти(СтрокаТЧ, Отчет);
Если Товар.БезНал = 1 Тогда
СтрокаТЧ = Отчет.ОплатаПлатежнымиКартами.Добавить();
СтрокаТЧ.ВидОплаты = Справочники.ВидыОплатЧекаККМ.НайтиПоРеквизиту("ТипОплаты",Перечисления.ТипыОплатЧекаККМ.ПлатежнаяКарта);
СтрокаТЧ.Сумма = Товар.Сумма;
//ПроцентТорговойУступки = Отчет.ДоговорЭквайринга.ТарифыЗаРасчетноеОбслуживание[0].ПроцентТорговойУступки;
//СтрокаТЧ.ПроцентТорговойУступки = ПроцентТорговойУступки;
//СтрокаТЧ.СуммаТорговойУступки = Товар.Сумма*ПроцентТорговойУступки/100;
КонецЕсли;
КонецЦикла;
Показатьтут Продажи - это табл.значений
ну для начала можно вместо отладки использовать вывод сообщений. Код, по которому ищем. Проверить типы (код номенклатуры число или строка, и что передаем в поиск). Поставить флажок "поиск по всем справочнике" (возможно, где-то раньше группа выбрана).
Потом дальше думать, если ничего не найдем.
Потом дальше думать, если ничего не найдем.
(10) пробел конечно прикольно, такое впечатление, что код - число, которое выводится как строка с группировкой по три.
Еще могу предложить такой вариант: пишем обработку, в которой в форме поле нужного типа, кнопка "найти" вызывает наш поиск. В поле забиваем разные строки и на опыте узнаем, что именно нужно для того, чтобы найти номенклатуру.
Написать такое минут пять надо, в форум дольше писать кмк.
Еще могу предложить такой вариант: пишем обработку, в которой в форме поле нужного типа, кнопка "найти" вызывает наш поиск. В поле забиваем разные строки и на опыте узнаем, что именно нужно для того, чтобы найти номенклатуру.
Написать такое минут пять надо, в форум дольше писать кмк.
есть файлик, в котором есть коды номенклатуры, например, 12345.
но в базе код номенклатуры 12 345 с пробелом
в другой части кода при чтении файлика:
Код преобразуется так:
Код = Строка(Число(Спис[7]));
и получаю 12 345
в файловой базе так все нормально заполняется, а в серверной нет.
прикрепил всю обработку.
но в базе код номенклатуры 12 345 с пробелом
в другой части кода при чтении файлика:
Для Счетчик=1 по Файл.КоличествоСтрок() Цикл
ТекСтрока=сокрлп(Файл.получитьСтроку(Счетчик));
Если ТекСтрока = "" Тогда
Продолжить;
КонецЕсли;
Спис = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекСтрока,";");
Если Спис.Количество() < 12 Тогда
Если ТекСтрока = "#" Тогда
СчетчикСмены = 1;
Иначе
СчетчикСмены = СчетчикСмены + 1;
КонецЕсли;
Если СчетчикСмены = 3 Тогда
НомерСмены = ТекСтрока;
СчетчикСмены = 0;
КонецЕсли;
Продолжить;
КонецЕсли;
НомерТранзакции = Число(Спис[0]);
ДатаТранзакции = Дата(2000 + Число(Прав(Спис[1],2)),Число(Сред(Спис[1],4,2)),Число(Лев(Спис[1],2)),Число(Лев(Спис[2],2)),Число(Сред(Спис[2],4,2)),Число(Прав(Спис[2],2)));
ВремяТранзакции = Спис[2];
ТипЧека = Число(Спис[3]);
НомерККМ = Число(Спис[4]);
НомерЧека = Число(Спис[5]);
Кассир = Число(Спис[6]);
Если СокрЛП(Спис[7]) = "" Тогда
Код = 0;
Иначе
Попытка
//Код = Число(Формат(Спис[7],"ЧРГ=' '"));
Код = Строка(Число(Спис[7]));
Исключение
//Сообщить("" + Код + " " + Счетчик)
КонецПопытки;
КонецЕсли;
Секция = Число(Спис[8]);
Цена = Число(Спис[9]);
Количество = Число(Спис[10]);
Сумма = Число(Спис[11]);
ПоказатьКод преобразуется так:
Код = Строка(Число(Спис[7]));
и получаю 12 345
в файловой базе так все нормально заполняется, а в серверной нет.
прикрепил всю обработку.
Прикрепленные файлы:
ВнешняяПОС.epf
(14) а вот еще подумал, что пробел может быть разным. Если этот дурацкий код с пробелом копировали из какого-нибудь екселя, то там запросто может быть не пробел, а символ 160.
Я бы пожалуй начал бы с перекодировки, сделать всем нормальные коды 0000012345, потом уже играться с поиском. Пробел в код вставить, это какое-то особенно изысканное извращение все же.
Я бы пожалуй начал бы с перекодировки, сделать всем нормальные коды 0000012345, потом уже играться с поиском. Пробел в код вставить, это какое-то особенно изысканное извращение все же.
(19)вынес поиск номенклатуры в отдельную функцию на Сервере:
получаю код как строку: Код = Строка(Число(Спис[7])); и передаю в функцию.
сначала ищу как получилось с символом Триад.
потом символ Триад меняю на пробел у тех позиций, у которых номер не понятно как заводили.
так заполнилось 650 строк.
3 не заполнились, потому что у них код 12345 - без пробела и символа триад - буду выяснять сколько их и "причесывать"
&НаСервере
Функция НайтиНаСервере(КодН,Номенклатура1)
Сообщить(""+КодН+":"+ТипЗнч(КодН));
Номенклатура1 = Справочники.Номенклатура.НайтиПоКоду(СокрЛП(КодН));
Если (Номенклатура1 = Неопределено) или (Номенклатура1.Пустая()) Тогда
КодН = СтрЗаменить(КодН,Символ(160)," ");
Номенклатура1 = Справочники.Номенклатура.НайтиПоКоду(СокрЛП(КодН));
КонецЕсли;
Сообщить(Номенклатура1);
Возврат Номенклатура1;
КонецФункции
Показатьполучаю код как строку: Код = Строка(Число(Спис[7])); и передаю в функцию.
сначала ищу как получилось с символом Триад.
потом символ Триад меняю на пробел у тех позиций, у которых номер не понятно как заводили.
так заполнилось 650 строк.
3 не заполнились, потому что у них код 12345 - без пробела и символа триад - буду выяснять сколько их и "причесывать"
В серверном варианте необходимо включить отладку на сервере, чтобы отладчик работал...
-debug в строке запуска сервера 1С
Не заполняется в серверном вароианте скорее всего потому , что поиск номенклатуры необходимо делать в процедуре, выполняемой на сервере, а вы ищете на клиенте возможно...
-debug в строке запуска сервера 1С
Не заполняется в серверном вароианте скорее всего потому , что поиск номенклатуры необходимо делать в процедуре, выполняемой на сервере, а вы ищете на клиенте возможно...
У вас нет четкого понимания, какие процедуры можно выполнять на клиенте, а какие только на сервере....
желательно у каждой процедуры иметь четкое указание, где она будет выполняться, тогда вам же будет проще видеть что не так.
работать со справочниками можно только на сервере...
У вас поиск идет как раз в справочнике, а процедура пытается выполниться на клиенте...
Проверьте синтаксис контроль в серверном варианте - ошибки необходимо все исправить.
Хотя с вашими ошибками в файловом варианте все будет работать - потому что там нет разницы - клиент-сервер...
желательно у каждой процедуры иметь четкое указание, где она будет выполняться, тогда вам же будет проще видеть что не так.
работать со справочниками можно только на сервере...
У вас поиск идет как раз в справочнике, а процедура пытается выполниться на клиенте...
Проверьте синтаксис контроль в серверном варианте - ошибки необходимо все исправить.
Хотя с вашими ошибками в файловом варианте все будет работать - потому что там нет разницы - клиент-сервер...
что как-то тут все запутано =)
из всех возможных проблем с поиском кодов Справочники.Номенклатура.НайтиПоКоду(Товар.Код) можно перечислить :
1. пробелы между символами кода лечится функцией СтрЗаменить() или Формат()
2. разная длина кодов как писал starjevschik добавь нули =) Прав("00000000"+ КОД, ДлинаКода)
З.Ы, отладка в помощь
из всех возможных проблем с поиском кодов Справочники.Номенклатура.НайтиПоКоду(Товар.Код) можно перечислить :
1. пробелы между символами кода лечится функцией СтрЗаменить() или Формат()
2. разная длина кодов как писал starjevschik добавь нули =) Прав("00000000"+ КОД, ДлинаКода)
З.Ы, отладка в помощь
1. нужно создать функцию на сервере которая будет искать элемент по коду и возвращать ссылку
2.На клиенте обратиться к ней и дальше уже ваши послед дейтсвия
не все выражения срабатывают в упр формах так в лоб как в обычном приложении. в правке посмотрите где можно использовать данную функцию :
сервер, толстый клиент...
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
НайтиПоКоду (FindByCode)
Синтаксис:
НайтиПоКоду(<Код>, <ПоискПоПолномуКоду>, <Родитель>, <Владелец>)
Параметры:
<Код> (обязательный)
Тип: Число; Строка.
Искомый код.
Строка или число в зависимости от настроек справочника в конфигураторе.
<ПоискПоПолномуКоду> (необязательный)
Тип: Булево.
Определяет режим поиска по полному коду. Истина - искомый код следует задавать в виде строки, состоящей из последовательности кодов по уровням справочника, разделенных символом "/".
Значение по умолчанию: Ложь
<Родитель> (необязательный)
Тип: СправочникСсылка.
Родитель, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
<Владелец> (необязательный)
Тип: СправочникСсылка.
Владелец, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
Возвращаемое значение:
Тип: СправочникСсылка.<Имя справочника>; Неопределено.
Если не существует ни одного элемента с требуемым кодом, то будет возвращена пустая ссылка.
Если для справочника код не задан (длина = 0), то будет возвращено Неопределено.
Описание:
Осуществляет поиск элемента по его коду.
Доступность:
Сервер, толстый клиент, внешнее соединение.
2.На клиенте обратиться к ней и дальше уже ваши послед дейтсвия
не все выражения срабатывают в упр формах так в лоб как в обычном приложении. в правке посмотрите где можно использовать данную функцию :
сервер, толстый клиент...
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
НайтиПоКоду (FindByCode)
Синтаксис:
НайтиПоКоду(<Код>, <ПоискПоПолномуКоду>, <Родитель>, <Владелец>)
Параметры:
<Код> (обязательный)
Тип: Число; Строка.
Искомый код.
Строка или число в зависимости от настроек справочника в конфигураторе.
<ПоискПоПолномуКоду> (необязательный)
Тип: Булево.
Определяет режим поиска по полному коду. Истина - искомый код следует задавать в виде строки, состоящей из последовательности кодов по уровням справочника, разделенных символом "/".
Значение по умолчанию: Ложь
<Родитель> (необязательный)
Тип: СправочникСсылка.
Родитель, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
<Владелец> (необязательный)
Тип: СправочникСсылка.
Владелец, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
Возвращаемое значение:
Тип: СправочникСсылка.<Имя справочника>; Неопределено.
Если не существует ни одного элемента с требуемым кодом, то будет возвращена пустая ссылка.
Если для справочника код не задан (длина = 0), то будет возвращено Неопределено.
Описание:
Осуществляет поиск элемента по его коду.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот