<?php // Полная загрузка сервисных книжек, создан 2025-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
Вылезает с ошибкой:
ТекПринтер=scrptCtrl.run(«GetDefaultPrinter»);
{C:ПЕЧАТЬ ЦЕННИКОВ И ЭТИКЕТОК.ERT(561)}: Ошибка выполнения Microsoft VBScript: Невозможно создание объекта контейнером ActiveX
ТипЦен=Склад.ТипЦен;
{C:DOCUMENTS AND SETTINGSDENISРАБОЧИЙ СТОЛPECHATJ CENNIKOV I ETIKETOK.ERT(601)}: Поле агрегатного объекта не обнаружено (ТипЦен)
Исправил и перезалил. Спасибо за тестирование
Обновление. Исправлены ошибки.
Печатает на лист количество колонок только до 9, нужно 15, а остальное очень удобно, благодарю.
Хорошо, если б в ценнике печаталась и этикетка (штрихкод), например, снизу, между датой и страной производителем.
Также шрифт наименования необходимо увеличить.
В остальном, всё нормально.
А у меня не пашет вот что выдаеть. Что делать???
Таб.Цена=глПолучитьЦену(Таб.Товар,ТипЦен.ТекущийЭлемент(),РабочаяДата()<<?>>);
{J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(125)}: Недостаточно фактических параметров
Таб.Цена=глПолучитьЦену(Таб.Товар,ТипЦен.ТекущийЭлемент(),РабочаяДата()<<?>>);
{J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(194)}: Недостаточно фактических параметров
Если глТерминалВключен<<?>>() = 1 Тогда
{J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(239)}: Функция не обнаружена (глТерминалВключен)
Если глЕстьРеквизитМнЧ<<?>>(«Номенклатура», Метаданные.Документ(Сч).Идентификатор)=1 Тогда
{J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(272)}: Функция не обнаружена (глЕстьРеквизитМнЧ)
ИначеЕсли глЕстьРеквизитМнЧ<<?>>(«Номенклатура»,Док.Вид())=1 Тогда
{J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(296)}: Функция не обнаружена (глЕстьРеквизитМнЧ)
Если глТерминалЗагрузитьДанные<<?>>(ТермДанные) = 0 Тогда
{J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(355)}: Функция не обнаружена (глТерминалЗагрузитьДанные)
Если глПолучитьТоварПоШтрихкоду<<?>>(ТермДанные.Штрихкод, ВремНоменклатура, ВремЕдиница, ВремКолво) = 0 Тогда
{J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(366)}: Функция не обнаружена (глПолучитьТоварПоШтрихкоду)
глТерминалОчиститьПамять<<?>>();
{J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(386)}: Процедура не обнаружена (глТерминалОчиститьПамять)
ТаблицаТоваров.Валюта=глРубли<<?>>;
{J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(459)}: Переменная не определена (глРубли)
ПечРозн = глФРМ<<?>>(ТаблицаТоваров.Цена, ТаблицаТоваров.Валюта);
{J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(461)}: Функция не обнаружена (глФРМ)
глОживить<<?>>(1);
{J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(470)}: Процедура не обнаружена (глОживить)
Обработка предназначена ТОЛЬКО для ТИС редакции 9.2. Судя по сообщениям ошибок, конфигурация самописная, или сильно измененная
Все вроде бы ничего,но надо бы,что бы и автоматом ставилась не только Тип цен,Фирма,но и непосредственно сам товар.
У кого есть можете скинуть на мыло sergei-dantist@mail.ru
Какой товар и куда?
Не работает. Те же ошибки что и у Predator
Написали бы где запускали, да и ошибка, судя по сообщению пустяковая, видимо у Вас в функции «глПолучитьЦену» больше параметров, чем в ТИС 9.2.
Спасибо огромное за обработку!!!
Единственно — не могу добавить в этикетку (не ценник) цену за товар. Не подскажешь — как?
З.Ы. Артикул — без проблем добавляется.
Если этикетка печатается с использованием Godex, то в процедуру «ПечатьЭтикетокГодекс» надо добавить строку «ПринтерЭтикеток.ВывестиТекст(1, 1, 1, 0, ТБ.Цена);» например перед «ПринтерЭтикеток.СформироватьШтрихкод…». А если этикетка печатается на Windows принтер, то макет таблицы «Этикетка» добавить поле с типом «выражение» с значением «ПечРозн»
Уряяяя! Получилось! (Сам я ни разу не программист).
Только пришлось добавить строку в процедуру «ПечатьЭтикетокГодекс» — «ПечЦена= Лев(ТБ.Цена,10.2);» и соответственно в макет таблицы поле с типом «шаблон» с значением Цена:[ПечЦена]руб.
🙂
😉
> З.Ы. Артикул — без проблем добавляется.
Как добавить артикул в этикетку ?
Надо (в модуле) в процедуре «ПечатьЭтикеток(ТБ)()» добавить строчку «ПечКод=Число(ТБ.Товар.ТекущийЭлемент().Артикул);». Например после строчки «ПечТовар = Лев(ПечТовар,80);». Затем создать в табличной форме этикетки поле с атрибутами, как в табличной форме ценника для артикула. И усё.
Подскажите, у меня не выдается на ценнике артикул, печатает «Артикул: 0». Что нужно сделать? Заранее спасибо.
«Подскажите, у меня не выдается на ценнике артикул, печатает «Артикул: 0″.» Это только в том случае, если в номенклатре артикул в виде: «Р5511», т.е. когда в нем присутствуют буквы, а если букву убрать, то все нормально печатается. Как сделать, чтобы артикул выводился с буквами?
1). Строку 617 необходимо заменить на
Таб.НоваяКолонка(«Артикул»,»Строка»,8,,»Артикул»,8,,2);
2). Строку 463 заменить на
ПечКод=ТаблицаТоваров.Товар.ТекущийЭлемент().Артикул;
Это потому, что тип поля Артикул «Число».
Из документа основания не подставляется колличество товара. Например из «Поступление ТМЦ». Колличество товара всегда равно 1. Это так и задумано или модуль не корректно работает? 😉
Количество, указанное в таблице — это количество ценников или этикеток. Если для этикеток это как-то еще оправдано, то для ценника по-моему нет. Поэтому устанавливается в 1. Если кому-то надо, можно переделать, благо не сложно
Для этикеток это более чем оправдано. Сильно время сокращает. Особенно когда товара много. Для ценников — енто дааа…
Если можно доработайте плиз или запостите кусочек переделанного модуля…
(25)Да ну, чего там делать, то
В функции «ПриВыбореЗначения» заменить ветку
ИначеЕсли Об=»Добавить из документа» Тогда
Сп=СоздатьОбъект(«СписокЗначений»);
Для Сч=1 По Метаданные.Документ() Цикл
Если глЕстьРеквизитМнЧ(«Номенклатура», Метаданные.Документ(Сч).Идентификатор)=1 Тогда
Сп.ДобавитьЗначение(Метаданные.Документ(Сч).Идентификатор, Метаданные.Документ(Сч).Представление());
КонецЕсли;
КонецЦикла;
Если Сп.РазмерСписка()=0 Тогда
Возврат 0;
КонецЕсли;
ВидДок=ВосстановитьЗначение(«ПоследнийВидДокумента»);
Если Сп.ВыбратьЗначение(ВидДок,»Выберите вид документа»)=0 Тогда
Возврат 0;
КонецЕсли;
СохранитьЗначение(«ПоследнийВидДокумента»,ВидДок);
Попытка
Док = СоздатьОбъект(«Документ.»+ВидДок);
Исключение
Возврат 0;
КонецПопытки;
Если Док.Выбрать(«Выберите документ»)<>1 Тогда
Возврат 0;
ИначеЕсли глЕстьРеквизитМнЧ(«Номенклатура»,Док.Вид())=1 Тогда
Док.ВыбратьСтроки();
Форма.Таб.Видимость(0);
Пока Док.ПолучитьСтроку()=1 Цикл
ПриВыбореЗначения(«Добавить»,Док.Номенклатура.ТекущийЭлемент());
КонецЦикла;
Если глЕстьРеквизитМнЧ(«Количество», Док.Вид())=1 Тогда
Таб.Количество = Макс(Док.Количество*Док.Коэффициент,1);
КонецЕсли;
Форма.Таб.Видимость(1);
КонецЕсли;
(26) Что-то не хотят работать эти три строчки:
Если глЕстьРеквизитМнЧ(«Количество», Док.Вид())=1 Тогда
Таб.Количество = Макс(Док.Количество*Док.Коэффициент,1);
КонецЕсли;
🙁
Доброго дня всем
Обьясните пожалуста чайнику, как и куда этот файл прикрепить чтоб все заработало
Заранее благодарен всем
Куда нибудь это файл положить и в 1С меню «Файл-Открыть»
Всё работает нормально, только при выводе на печать на лист попадает только часть ценников, треть обрезана. В чём может быть причина? Ставлю 5 колонок и 70% — выходит форма с 5 ценниками вряд, но при печати обрез справа — остаётся ток 3 . Спасибо
Все замечтательно работает, автору +
(28) Фаил обработки помещаешь в каталог ExtForms информационной базы, при помощи текстового редактора создаешь текстовый файл с именем таким же, как и имя внешнего файла, и расширением EFD (External File Description), можно в текстовом файле просто заменить *.txt на *.edf.
Этот файл должен содержать строку такого вида:
Название=<текстовое название файла>
//в нашем случае:
//Название=<Обработка для печати ценников и этикеток>
Далее в 1С открываешь вкладку Сервис/Дополнительные возможности и ВУАЛЯ наблюдаешь в списке свою обработку!
При открытии обработка осматривает каталог ExtForms и ищет все файлы
с расширением EFD.
И совет, почитай про Доп возможности, в книжке «Описание» идущей в комплекте с программой! Я тоже не гуру, но все доступным языком в принципе описано.
Как добавить производителя?
(33) дописать код и добавить в макет(таблицу)
Не могли бы вы прокоментировать позт 30. Проблемма актуальна. ТиС 9.2
(35) проверяйте флаг «Автомасштаб»
не могу дорубиться как добавить еще форму другого ценника
ГОСПОДА! Не выдавайте чужие разработки за свои. Недавно пришел к новому клиенту, приводить в порядок то, что предыдущий «программист» на вертел. И увидел свою обработку, которую предшественник выдавал за свою и не мог в ней настроить размер ценников под высоту держателей, еще и денег не кисло срубил…
Классная обработка мне пригодилась «ВЕЩЬ!»
Обработка хорошая. Но как же добавить количество из документа?
Для этикеток очень актуально.
(26) Всё таки я разобрался как добавить количество из документа для этикеток. Всё дело в цикле. У меня получилось вот так.
Если Док.Выбрать(«Выберите документ»)<>1 Тогда
Возврат 0;
ИначеЕсли глЕстьРеквизитМнЧ(«Номенклатура»,Док.Вид())=1 Тогда
Док.ВыбратьСтроки();
Форма.Таб.Видимость(0);
Пока Док.ПолучитьСтроку()=1 Цикл
ПриВыбореЗначения(«Добавить»,Док.Номенклатура.ТекущийЭлемент());
Если глЕстьРеквизитМнЧ(«Количество», Док.Вид())=1 Тогда
Таб.Количество = Макс(Док.Количество*Док.Коэффициент,1);
КонецЕсли;
КонецЦикла;
Форма.Таб.Видимость(1);
КонецЕсли;
Не печатается артикул печатает (Артикул0) артикулы у меня с буквами ,что можно сделать
(42) об этом уже было. Поправлю.
У меня не работает! При попытке открыть пишет:
Таб.Цена=глПолучитьЦену<<?>>(Таб.Товар,ТипЦен.ТекущийЭлемент(),РабочаяДата());
{F:1СВНЕШНИЕ УТИЛИТЫПЕЧАТЬ ЦЕННИКОВ И ЭТИКЕТОКПЕЧАТЬ_ЦЕННИКОВ_И_ЭТИКЕТОК.ERT(125)}: Функция не обнаружена (глПолучитьЦену)
и т.д. и т.п.
(44) Конфигурация предназначена для ТиС ред. 9.2 и построенных на ее основе
подскажите как сделать чтобы на этикетке печаталась цена. Спасибо!!!
(46) нужно дописать код.
ну это понимаю просто перепробовал все возможные обработки чего только уже не скачивал и не устанавливал. Размер этикетки 30*20 принтер Zebra. 1C ТИС9,2.
пробовал в самой конфигурации не через внешнюю обработку тоже не получилось.
Может подскажет как это все можно сделать
(48) Исправил, скачайте заново обработку
Спасибо. Сейчас круто!!!! А как сделать чтобы при стандартной печати чека было также? или чтобы на этикетке 30*20 принтер ZEBRA LP2824 штрих код на половину этикетки а верняя половина. наименование и цена?
А еще вопрос? сейчас все печатает нормально но штрих код почему то сжимается по длине. по высоте нормальный и по длине на половину почти. Как это можно исправить?
1). Строку 617 необходимо заменить на
Таб.НоваяКолонка(«Артикул»,»Строка»,8,,»Артикул»,8,,2);
2). Строку 463 заменить на
ПечКод=ТаблицаТоваров.Товар.ТекущийЭлемент().Артикул;
Попробовал воспользоваться данным изменением. Но Увы…… Не подхватывает КОЛИЧЕСТВО в соответствующий столбец, если добавлять ИЗ ДОКУМЕНТА.
Всё равно количество всегда 1шт 🙁
У меня почему-то не берёт цены из документов 🙁 , в чём может быть дело?)
(53) Обработка цены из документа и не должна брать — она их берет из справочника цен
Справочник цен как я понимаю надо вручную забивать?)
(55) В ручную или обработкой «обновление цен в справочнике»
Спасибо) 🙂
Спасибо! Данная обработка очень облегчила нам работу. Подскажите как добавить штрихкод в ценник? Элемент баркод скопировали из этикетки. А вот изменения в коде какие:(?
Когда окончательно посылаю на печать, все равно указывает не тот принтер, который надо.
Убила массу времени.
Оказывается длинна наименования принтера не должна быть больше 31 символа!
Спасибо! Очень помогли, внедряем штрихкодирование у себя в магазине и это как раз то что нам нужно было , а то вручную печатать было как то не айс. Еще раз Спасибо!
Спасибо! Обработка подошла на все 100%. Особенно удобен механизм задающий количество строк (ценников).
Когда окончательно посылаю на печать, все равно указывает не тот принтер, который надо.
Убила массу времени.
Оказывается длинна наименования принтера не должна быть больше 31 символа!
ВСЕ НОРМАЛЬНО ПЕЧАТАЕТ ((((((только вот не хочет печатать на зебру как в Парусе(((( как его сделать так чтоб он печатал на рулон с клейкой бумагой?????