<?php // Полная загрузка сервисных книжек, создан 2024-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='\
так понимаю, что изменяете количество в регистрах, а в документах коефициенты и количество оставляете?
Вы правильно понимаете. Количество и коэффициенты в документах и не требуется менять. Зачем? В документе может быть указана любая ед. изм., но при проведении в регистрах она переводится в ед. хранения остатков. По поводу коэффициентов. если мы не меняем базовую ед. измерения, то коэффициенты остаются те же. Коэффициент- это отношение ед. изм. к базовой ед. изм. Если поменять базовую ед. изм, то в старых документах обработка коэффициенты не поменяет. Но в нашей организации и не перепроводят документы в закрытом периоде.
пересчет сделала, единицу не поменяла! ругнулась на запрет изменения ед хран ост! теперь вместо 17т у меня 17000т!
Что за конфигурация? Может прав нету?? Нужны полные права. Не поленитесь поставить плюсик, если пригодилась обработина))
В типовых конфигурациях для Украины проверка на запись единицы измерения стоит в модуле объекта справочника Номенклатура. Поэтому приведенный выше код вызовет ошибку и не запишет номенклатуру.
Поставьте хотя бы ОбменДанными.Загрузка = Истина при записи номенклатуры,чтобы не попадать на проверки в модуле объекта.
(5)Грамотное замечание! Спс, подправлю попозже.
+(3)(5)(6) Не поленился, подправил ошибку, загрузил обновленную обработку
(7) залили небось конвертированную под 8,2?:)
под 8,1 в УТ 10.3 не открылась…
плюс поставлю, дайте хоть посмотреть))))
попробовала на 8.2, выдало ошибку
{Форма.Форма.Форма(147)}: Ошибка при вызове метода контекста (Выполнить)
Возврат Запрос.Выполнить().Выгрузить();
по причине:
по причине:
{(1, 1)}: Ожидается выражение «ВЫБРАТЬ»
еще вопрос, у самой номенклатуры должна изменится единиица хранения остатков? может у меня из-за ошибки не изменилось? запустила несколько раз подряд обработку, уже кол-ва с 1 шт дошли до 0,0001, а у номенклатуры все штуки в единицах…
есть такое сообщение:
Для номенклатуры Hama 47665 Mechanical Timer «Time Control III» ед. хр. ост. шт. участвует в следующих Движениях Регистра накопления—————
то есть не пойму, поправили вы в (7) или нет… и что вы залили, собсно)
теперь 100% плюс!
Можно узнать, а единицу хранения в отчетах меняет в номерклатуре?
СПАСИБО ГЛЮКИ ПРОШЛИ!!! Это я все ручками натворила… Выручили.
Спасибо, пригодилось!
Очень полезная штука…У меня был клиент, дак у него таких позиций ваще дофига (больше половины всей номенклатуры)))) эта обработочка конечно помогла, но я столкнулся еще и с другой проблемой, там был косяк еще с ед. хранения остатков
кстати никто не подскажет где взять такую обработочку чтобы избавиться от косяков с ед. хранения остатков?
Спасибо. Мне помогла ваша обработка.
Спасибо, полезная вещица! )
Спасибо за ваш труд!
Если пишите что под 8.1 и 8.2 то должно быть 2 файла
по моему, проще пересортицу сделать, с соответсвюущими корректировками на пересчет единиц измерения?
ёшкин кот, и эти поделки продаются? о_О У меня есть подобная обработка. Только она позволяет вообще всю номенклатуру и любые единицы исправить скопом (например если полетели единицы в товарах), а замена для конкретной номенклатуры прикручена как доп. функционал
ЭТО стоит денег? о_О
Есть обработка специальная, на форуме этом есть (забыл как звать ее (( )
Налетели халявщики)
(22)(23) Добавил возможность массово менять + различные улучшения. За труд вообще-то платят, к тому же большинство моих публикаций бесплатны. Никто вас не заставляет платить, можете вместо этого потратить свое время и изобрести велосипед, сэкономив 1000 р. Я не против конкуренции, если вы готовы сделать лучше, а не только сообщения на форум писать.
Ошибочно завели номенклатуру . С единицей Хранения остатков Упаковка Коэф=1;
Надо Упаковка Коэф=9
Базовая штуки.
Не дает поменять — «НЕВЕРНО указан новый или текущий коэффициент единицы измерения»
текущий 1 новый 9 что неверно???
В чем смысл обработки???
У вас 1 упаковка =1 штука?
да, сейчас 1шт = 1уп
надо 1уп=9шт
Добавил единицу измерения упак. с коэфф. 9, в обработке выбрал новую ед изм. упак, нажимаю внизу в обработке «Изменить»
Выдает «НЕВЕРНО указан новый или текущий коэффициент единицы измерения»
Причем в моем случае мне и в самом документе надо изменить количество/коэффициент, а не только в движениях чтобы при перепроведении потом все было правильно.
Например так
Было 10 упакСтар к=1 * 90 руб
Стало 1 упакНов к=9 * 90 руб
(9), Аналогичная проблема на УТ 10.3
(9)(32) К сожалению, УТ 10.3 у меня нету, поэтому не имею возможности посмотреть.(( Я бы подправил… Если кто-нибудь подправил самостоятельно, прошу выложить код
В УТ10.3 нет регистров бухгалтерии, при коментрировании этих кусков кода все становиться на свои места
(34)Спасибо, попозже подправлю
Было:
Подправил (добавил .Наименование):
И усе.
А в УПП регистры РАУЗ корректно отрабатывает? Ведь в регистрах РАУЗ не прямые ссылки.
Или к примеру, если править регистр Заказы покупателей, то идет ли пересчет цен. Ведь если из тонны в кг переводим то и цена должна меняться. Изменение цен, конечно, не критично в этом регистре, но пользователи есть пользователи.
(37) Что-то я не пойму, зачем менять цены??? было 1т=10000 руб, стало 1000 кг=10000 руб. В чем разница?
(36) А это зачем? наменование сравнивается с ссылкой? Стр.ТекущаяЕдиницаИзмерения.ЕдиницаПоКлассификатору.Наименование<>Стр.БазоваяЕдиницаИзмерения
по идее тут всегда истина будет
Есть цена за 1 кг = 10 руб. и если ее пересчитать с коэф. то будет цена за 1 т = 10000 руб.
Прошу не путать с суммой. Ее править не надо. С Этим согласен.
А как на счет регистров РАУЗ?
(40) Вы, наверное , не поняли для чего нужна обработка. Почитайте описание. Изменяется КОЛИЧЕСТВО.
(39)
дак сравниваются строковые значения (в отладчике словил). Лично у меня сработала данная обработка после изменения. Кстати сбасибо за обработку…пригодилась 🙂
(44) Хотя, да у 1с есть такая фича, если слева в выражении строка, то справа значения приводятся к строке. Если написать выражение типа а=»Номенклатура «+ссылка, то система приведет ссылку к представлению ссылки
Возможно, кто-нибудь сталкивался с ситуацией в УТ 10.3, когда единица хранения остатков задана с коэффициентом, отличным от 1,000…
В моем случае сам натворил такую картину: базовая единица — кг (коэф. 1,000), а единица хранения остатков — т (коэф. 1000,000). Расчет был благим: ввести позже единицу измерения шт., которым необходима точность в граммах. Но при оформлении типовой выгрузки из УТ10.3 в БП 2.0 вышло, что единицы хранения делятся на коэффициент и представляются в кг. В результате в УТ цены и количества во всех документах указаны в тоннах, а при перегрузке в бухгалтерию все переводится в килограммы (цены также меняются из руб./тн в руб./кг) — то есть весь бухучет плывет.
Хотел опробовать эту обработку, но новые единицы-коэффициенты только усложняют картину. Может быть, дадите совет по такой ситуации? Сейчас мечтаю просто получить все так, как было в старой базе: базовые единицы — т, единица хранения остатков — т (коэф. 1,000).
(46) В вашем случае, если я правильно понимаю, нужно просто заменить базовую единицу на тонны и у ед. измерения тонны поставить коэффициент 1 и все..
Я закомментировал вторую проверку, т.к. непонятно зачем она нужна. Да и вообще мне не понятен смысл это проверки.
Автор, объясните пожалуйста, зачем?
(48)»Защита от дурака»
А как на счет регистров РАУЗ?
Почему нет ответа на данный вопрос?
Спасибо за обработку пробую в 10,3
Обработка в принципе рабочая. Но после использования обработки задваиваются (затраиваются и т.д.) записи регистра «СвободныеОстатки» конфигурация УПП 1.3. Так что, будьте внимательны, кто использует СвободныеОстатки и применяет данную обработку. Автору просьба поправить обработку или описание.
(52) Нейросоучастник,
Для Свободных остатков, во-первых надо заполнить ресурс «КоличествоСУчетомСерии», во-вторых ОбменДанными = Загрузка позволит избежать задвоения в этом регистре.
Показать
Так же крайне желательно, чтобы не было мучительно больно, когда обработка вылетит на середине, обрамить обработку каждой единицы в конструкцию НачатьТранзакцию() — ЗафиксироватьТранзакцию().
Я так понимаю, обработка полезная, если у единиц разный коэффициент.
а если просто указаная единица с неверным владельцем, н ос таким же коэффициентом (1:1) чтобы ее заменить, необязательно бегать по регистрам. можно просто перезаписать саму номенклатуру. но как быть с единицей указанной в документах? при проведении конечно будет использоваться новая единица хранения остатков, но и удалить старую нельзя — остануться ссылки в документах..
Если (Стр.КоэффициентНов<>1 и Стр.НоваяЕдиницаИзмерения.ЕдиницаПоКлассификатору=Стр.БазоваяЕдиницаИзмерения)
Или (Стр.КоэффициентТек<>1 и Стр.ТекущаяЕдиницаИзмерения.ЕдиницаПоКлассификатору=Стр.БазоваяЕдиницаИзмерения)
//или
//(Стр.КоэффициентНов=1 и Стр.НоваяЕдиницаИзмерения.ЕдиницаПоКлассификатору<>Стр.БазоваяЕдиницаИзмерения)
//Или (Стр.КоэффициентТек=1 и Стр.ТекущаяЕдиницаИзмерения.ЕдиницаПоКлассификатору<>Стр.БазоваяЕдиницаИзмерен
При конвертирования из 8.0 в 8.1 сохраненных в 8.0 только справочников
(Справочник номенклатуры, справ. ед. из, классиф. ед изм, валюты и т.п )
получилась ситуация
Элемент номенклатуры
— базовая единица заполнена.
— Табличная часть (единиц измерения) заполнена.
НО ЕдиницаДляОтчетов -не выбрана
ЕдиницаХраненияОстатков — не выбрана
т.е. поъхоже ссылки на ед. из. утерены при конфертировании.
Задача проставить каждом элементе номенклатуры в соответствие
ЕдиницаДляОтчетов и ЕдиницаХраненияОстатков Базовую еденицу Измерения
Делаю так
Ссылка = Справочники.Номенклатура.НайтиПоКоду(» Код элемента»);
Элемент = Ссылка.ПолучитьОбъект();
Запрос2 = Новый Запрос;
Запрос2.Текст = «ВЫБРАТЬ
| ЕдиницыИзмерения.Ссылка,
| ЕдиницыИзмерения.Владелец,
| ЕдиницыИзмерения.Код,
| ЕдиницыИзмерения.Наименование,
| КлассификаторЕдиницИзмерения.Ссылка КАК Ссылка1,
| КлассификаторЕдиницИзмерения.Код КАК Код1
|ИЗ
| Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлассификаторЕдиницИзмерения КАК КлассификаторЕдиницИзмерения
| ПО ЕдиницыИзмерения.ЕдиницаПоКлассификатору = КлассификаторЕдиницИзмерения.Ссылка
|ГДЕ
| ЕдиницыИзмерения.Владелец = &Владелец
| И ЕдиницыИзмерения.ЕдиницаПоКлассификатору.Код = &ЕдиницаИзмПоКл»;
Запрос2.УстановитьПараметр(«Владелец»,Справочники.Номенклатура.НайтиПоКоду(Ссылка.Код).Ссылка);
Запрос2.УстановитьПараметр(«ЕдиницаИзмПоКл»,Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(Элемент.БазоваяЕдиницаИзмерения.Код).Ссылка );
Результат2 = Запрос2.Выполнить();
ВыборкаЭЛ = Результат2.Выбрать();
Если ВыборкаЭЛ.Количество()=1 Тогда
Сообщить («Правим этот элемент»,СтатусСообщения.БезСтатуса);
Элемент.ЕдиницаДляОтчетов = ВыборкаЭЛ.ЕдиницыИзмерения.Ссылка;
Элемент.ЕдиницаХраненияОстатков = ВыборкаЭЛ.ЕдиницыИзмерения.Ссылка;
КонецЕсли;
Элемент.Записать();
Где я не прав?
Подскажите пожалуйста!!
(43) и все-таки менять только количество, ежели в доках есть цена, имхо, не правильно. Надо и цену пересчитывать исходя из уже нового количества и суммы. Нет?
ЗЫ. Мне помогла обработка при переносе остатков — меняли единицы измерений хранения остатков.
Думаю, подобные обработки выкладывать нельзя, т.к. не понимая сути произведут замену, а последствия выявятся не сразу.
Обработка не открывается в УТ 10.3 81 что делать?
Будет ли файл для Платформы 8.1?
По какой причине может вылазить эта ошибка:
{Форма.Форма.Форма(180)}: Ошибка при вызове метода контекста (Записать) НаборЗаписей.Записать();
по причине:
Запись не верна! Значение поля «Заказ покупателя» не может быть пустым! (Регистр накопления: Заказы покупателей; Номер строки: 1)
(62) В сообщении об ошибке дана исчерпывающая информация — не заполнено обязательное поле «Заказ покупателя» в записи РН
Народ, на УПП кто-нибудь делал?
Последствий нет?
РАУЗ нормально работает после нее?
Вот думаю — то ли заморчиться, то ли проще будет новую номенклатуру завести
(64) Я делал на УПП, все работало корректно. Обработка работает практически на любой конфигурации, даже доработанной и самодельной, т.к. там идет анализ и перебор метаданных. ОДНАКО настоятельно рекомендую потестить на копии и посмотреть результат
(61) Откройте в конфигураторе и конвертируйте обработку на другую платформу. Для этого нужно открыть и сохранить ее. если не будет работать-могу переделать, по идее должна. Обработка хороша тем,что универсальна
Для управляемых форм честно лень переделывать откройте в «старом» режиме и будет работать
Привет, в КА1.1 Платформа 8.3 :НЕВЕРНО указан новый или текущий коэффициент единицы измерения кг.Запись не произверена!
причем из тонн в кг не хочет переводить а из кг в т. перевела на ура. где косяк?
(68)
Посмотрите настройки единиц измерения. Написано, что проблема в коэффициенте. Возможно еще в записях регистра косяк. Лучше воспользуйтесь помощью программиста- он по отладчику поймет где собака зарыта. Это больше для разработчиков обработка
Привет. На УТ 10.3 будет работать?
(70) да