Восстановление номенклатуры по счетам покупателей. БП3
Ненужная номенклатура была помечена на удаление, в наименование добавлен префикс Ъ и перемещена в папку «Архив 2023».
Нужно по определенному списку счетов покупателей вернуть номенклатуру из архива — т.е. снять пометку удаления, и убрать префикс Ъ.
Я хотел попробовать одну консоль, где вроде бы можно было загружать данные из таблиц значений и макетов, но не понял, как ею пользоваться:
Пришлось старым добрым дедовским Excel-способом.
В Excel, где мне предоставили список счетов на оплату покупателю, я добавил колонку и прописал там формулу формирования условия для языка запросов:
Формула Excel:
=СЦЕПИТЬ("Т.Ссылка.Номер=""";B2;""" И НАЧАЛОПЕРИОДА(Т.Ссылка.Дата)=ДАТАВРЕМЯ(";ПСТР(A2;7;4);",";ПСТР(A2;4;2);",";ПСТР(A2;1;2);") ИЛИ")
Таким образом я получил условие отбора и скопировал его в запрос:
ВЫБРАТЬ РАЗЛИЧНЫЕ
Т.Номенклатура, Т.Номенклатура.Код
ИЗ
Документ.СчетНаОплатуПокупателю.Товары КАК Т ГДЕ
Т.Ссылка.Номер="00БП-000506" И НАЧАЛОПЕРИОДА(Т.Ссылка.Дата)=ДАТАВРЕМЯ(2021,03,04) ИЛИ
Т.Ссылка.Номер="00БП-000535" И НАЧАЛОПЕРИОДА(Т.Ссылка.Дата)=ДАТАВРЕМЯ(2021,03,10) ИЛИ
Т.Ссылка.Номер="0ИБП-000546" И НАЧАЛОПЕРИОДА(Т.Ссылка.Дата)=ДАТАВРЕМЯ(2021,04,01) ИЛИ
Т.Ссылка.Номер="00БП-000752" И НАЧАЛОПЕРИОДА(Т.Ссылка.Дата)=ДАТАВРЕМЯ(2021,04,05) ИЛИ
Т.Ссылка.Номер="00БП-000901" И НАЧАЛОПЕРИОДА(Т.Ссылка.Дата)=ДАТАВРЕМЯ(2021,04,26) ИЛИ
Т.Ссылка.Номер="00БП-000902" И НАЧАЛОПЕРИОДА(Т.Ссылка.Дата)=ДАТАВРЕМЯ(2021,04,26) ИЛИ
....
Тут важно, что даты документа надо сравнивать без времени.
В результате работы запроса я получил список товаров и их кодов. Мне нужны были коды.
Список я выгрузил в Excel и точно также добавил колонку с формулой для запроса:
Формула Excel попроще:
=СЦЕПИТЬ("Т.Код = """; СЖПРОБЕЛЫ(B4);""" ИЛИ ")
Далее осталось выполнить этот запрос в другой базе, т.к. исходный запрос я выполнял на копии:
ВЫБРАТЬ РАЗЛИЧНЫЕ Т.Ссылка ИЗ Справочник.Номенклатура КАК Т ГДЕ Т.Код = «000368094» ИЛИ Т.Код = «000373964» ИЛИ Т.Код = «000373965» ИЛИ Т.Код = «000373968» ИЛИ Т.Код = «000374853» ИЛИ Т.Код = «БП-00006268» ИЛИ Т.Код = «БП-00007698» ИЛИ Т.Код = «БП-00007699» ИЛИ Т.Код = «БП-00007700» ИЛИ Т.Код = «БП-00010317» ИЛИ Т.Код = «БП-00010318» ИЛИ Т.Код = «БП-00010320» ИЛИ Т.Код = «БП-00011667» ИЛИ …Я использовал консоль, которая умеет обрабатывать результат запроса, прописал там такой код:
Выборка = Результат[0].Выбрать(); Пока Выборка.Следующий() Цикл Если Лев(Выборка.Ссылка.Наименование, 2) = "Ъ " Тогда ОО = Выборка.Ссылка.ПолучитьОбъект(); Сообщить(ОО); ОО.Наименование = СтрЗаменить(ОО.Наименование, "Ъ ", ""); ОО.НаименованиеПолное = СтрЗаменить(ОО.НаименованиеПолное, "Ъ ", ""); ОО.ПометкаУдаления = ложь; ОО.Записать() КонецЕсли; КонецЦикла;
Правда, у меня было 2000 позиций номенклатуры и такой большой код консоль не могла скушать, пришлось разбить на две части по 1000 позиций. Только так удалось обработать номенклатуру.
Подумал, что не хватает консоли запросов, которая умела бы брать данные из макетов. Вроде в Инструментах Разработчика такая есть, но ее надо тянуть со всем расширением, сложно. Надо написать свою.
Среда: БП 3.0.131.34. Объем: 1 час.
Зачем второй раз эксель, можно номенклатуру всю собрать из тч документов во временную таблицу и нужное обработать…
вы упустили нюанс, что список номенлатуры я составляю в одной базе, а обрабатываю номенклатуру в другой.