ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар")
Разработка - Механизмы платформы 1С
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Идея в общем-то простая. В чистом SQL есть запросы типа INSERT, UPDATE, DELETE. А в языке запросов 1С таких запросов нет. Ну вернее не было ) Вашему вниманию предлагается расширение языка запросов, которое предоставляет возможность писать запросы типа ИЗМЕНИТЬ, УДАЛИТЬ и ВСТАВИТЬ. Для скачивания доступна консоль запросов, реализующая это расширение (так же работает и обычный ВЫБРАТЬ). Запросы могут быть например, такие:
|ИЗМЕНИТЬ Справочник.Номенклатура
|УСТАНОВИТЬ ЕдиницаИзмерения = &МояЕдиница, Наименование = НаименованиеПолное
|ГДЕ ВидНоменклатуры = &МойВид
|;
|УДАЛИТЬ ИЗ Справочник.Номенклатура
|ГДЕ ВидНоменклатуры = &МойВид
|;
|ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование, ВидНоменклатуры)
|Значения (68549, &НаименованиеНовых, &МойВид)
Работает все это исключительно в рамках встроенного языка платформы и ни в какие внешние среды (типа прямого доступа к SQL) не лезет. Фразы ИЗМЕНИТЬ, УСТАНОВИТЬ, УДАЛИТЬ ИЗ и ВСТАВИТЬ В для языка запросов новые. Все остальное (ВЫБРАТЬ, ГДЕ, ПОМЕСТИТЬ и т.п.) подчиняется тем же правилам, что и в "обычном" запросе, т.е. эти части запроса могут быть сколь угодно сложными: включать вложенные запросы, формироваться временные таблицы и так далее. Поддерживается редактирование всех первичных таблиц:
- таблицы ссылочных типов (документов, справочников...)
- табличные части ссылочных типов
- регистры подчиненные и не подчиненные регистратору
Если интересно подробнее - есть длинный и занудный текст о том как это работает.
Обработку можно использовать через пользовательский интерфейс как консоль запросов для аналитических целей или через программный интерфейс. Все процедуры для программного использования изолированы в модуле объекта, работа с ними максимально приближена к тому, как работает обычный объект Запрос. Сама форма консоли будет примером того как использовать программный интерфейс.
Последние изменения:
- добавлена поддержка запроса ВСТАВИТЬ
- изменен пользовательский интерфейс:основное место теперь отведено тексту запроса, а результат запроса можно развернуть на полный экран
- добавлено редактирование параметров запроса табличного типа, т.е. теперь исходные данные для запроса на изменение можно вводить в Excel-стиле (в табличный документ)
Платформа 8.3.9.2233. Навскидку, единственное, что мешает даунгрейду до 8.2 - процедуры типа СтрСоединить, если их дописать - все должно заработать. Код полностью открыт, запароленных и/или обфусцированных участков нет. Удачи!
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Механизмы платформы 1С Разработчик Бесплатно (free)
Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?
16.07.2025 45618 TitanLuchs 109
Работа с интерфейсом WEB-интеграция Механизмы платформы 1С Бесплатно (free)
Веб-интерфейсы повышают качество внешнего вида приложений 1С, предсказуемы с точки зрения верстки, позволяют организовать удобные и высокопроизводительные рабочие места для пользователей. Расскажем об особенностях разработки веб-интерфейсов на React внутри 1С, двустороннем взаимодействии 1С и JavaScript, а также сборке веб-приложения в одностраничный файл.
19.06.2025 18636 zeegin 15
Механизмы платформы 1С Работа с интерфейсом Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)
Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).
03.02.2025 25998 bayselonarrend 127
Механизмы платформы 1С Разработчик 1С:Предприятие 8 Бесплатно (free)
В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.
30.01.2025 33235 user2122906 10
Механизмы платформы 1С Файловый обмен (TXT, XML, DBF), FTP Разработчик 1С:Предприятие 8 Бесплатно (free)
Этот материал познакомит вас с механизмом XDTO (XML Data Transfer Objects) в 1С и научит эффективно использовать его возможности. Мы разберёмся, как работать с XML-схемами, создавать модели данных, манипулировать объектами XDTO, а также сериализовать и десериализовать их в XML. Вы узнаете, как использовать XDTO для интеграции с внешними системами, избегать типичных ошибок и оптимизировать код. К концу вы будете уверенно применять XDTO для решения сложных задач обмена данными и автоматизации процессов.
17.01.2025 55668 user2122906 13
Механизмы платформы 1С WEB-интеграция Разработчик 1С:Предприятие 8 Бесплатно (free)
В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.
14.01.2025 46750 dsdred 110
Механизмы платформы 1С Разработчик 1С:Предприятие 8 Бесплатно (free)
Особенности "Знач" и разбор документации к нему.
10.01.2025 26426 VAAngelov 60
Механизмы платформы 1С Разработчик Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.
23.06.2024 40414 bayselonarrend 24
изменить Документ.ЗаказПоставщику.Товары
УСТАНОВИТЬ Проект = &ПроектН
где Проект = &Проект
вылетает по ошибке
простой запрос
типа
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
ЗаказПоставщикуТовары.Номенклатура,
ЗаказПоставщикуТовары.Количество,
ЗаказПоставщикуТовары.Заявка,
ЗаказПоставщикуТовары.Проект
ИЗ
Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
ГДЕ
ЗаказПоставщикуТовары.Проект = &Проект
отрабатывает нормально
на изменение реквизитов документа работает
1С:Предприятие 8.2 (8.2.19.90)
Функция СтрНайти (ИсходнаяСтрока, ИскомаяСтрока, НаправлениеПоиска = "СНачала", НачальнаяПозиция = Неопределено, НомерВхождения = 1) Экспорт
Если СтрДлина(ИскомаяСтрока)>СтрДлина(ИсходнаяСтрока) ИЛИ СтрДлина(ИсходнаяСтрока) = 0 Тогда
Возврат 0;
КонецЕсли;
Если НаправлениеПоиска = "СНачала" ИЛИ НаправлениеПоиска = Неопределено Тогда
Если НачальнаяПозиция = Неопределено Тогда
НачальнаяПозиция = 1;
ИначеЕсли НачальнаяПозиция > СтрДлина(ИсходнаяСтрока) Тогда
ВызватьИсключение ("Неправильный параметр: Начальная позиция");
КонецЕсли;
//Выполнить Поиск
Результат = 0;
ВременнаяСтрока = Прав(ИсходнаяСтрока, СтрДлина(ИсходнаяСтрока)-(НачальнаяПозиция-1));
Для Индекс = 1 По НомерВхождения Цикл
ВременныйРезультат = Найти(ВременнаяСтрока, ИскомаяСтрока);
Если ВременныйРезультат Тогда
Результат = Результат + ВременныйРезультат ;
ВременнаяСтрока = Прав(ВременнаяСтрока, (СтрДлина(ВременнаяСтрока) - ВременныйРезультат - (СтрДлина(ИскомаяСтрока)-1)));
//Сообщить ("Вхождение " + Индекс + ": " + (Результат));
Иначе
//Сообщить("Требуемое вхождение не найдено");
Возврат 0;
КонецЕсли;
Если Индекс < НомерВхождения Тогда
Результат = Результат + СтрДлина(ИскомаяСтрока)-1;
КонецЕсли;
КонецЦикла;
Возврат Результат+НачальнаяПозиция-1;
ИначеЕсли НаправлениеПоиска = "СКонца" Тогда //Ищем с конца
Если НачальнаяПозиция = Неопределено Тогда
НачальнаяПозиция = СтрДлина(ИсходнаяСтрока);
ИначеЕсли НачальнаяПозиция > СтрДлина(ИсходнаяСтрока) ИЛИ НачальнаяПозиция < 1 Тогда
ВызватьИсключение("Неправильный параметр: НачальнаяПозиция");
КонецЕсли;
//ВыполнитьПоиск
Результат = 0;
ВременнаяСтрока = Лев(ИсходнаяСтрока, НачальнаяПозиция +1);
Вхождения = Новый Массив;
Пока Истина Цикл
ВременныйРезультат = Найти(ВременнаяСтрока, ИскомаяСтрока);
Если ВременныйРезультат Тогда
Результат = Результат + ВременныйРезультат;
Вхождения.Добавить(Результат);
ВременнаяСтрока = Прав(ВременнаяСтрока, (СтрДлина(ВременнаяСтрока) - ВременныйРезультат - (СтрДлина(ИскомаяСтрока)-1)));
//Сообщить ("Вхождение " + Индекс + ": " + (Результат));
Результат = Результат + СтрДлина(ИскомаяСтрока)-1;
Иначе
//Сообщить("Требуемое вхождение не найдено");
Прервать;
КонецЕсли;
КонецЦикла;
Если Вхождения.Количество()<НомерВхождения Тогда
//Вхождение не найдено
Возврат 0;
Иначе
Возврат Вхождения[(Вхождения.Количество()-НомерВхождения)]
КонецЕсли;
Иначе
ВызватьИсключение("Неправильный параметр: НаправлениеПоиска. Опции: ""СНачала"", ""СКонца""");
КонецЕсли;
КонецФункции
Функция СтрНачинаетсяС(Знач Строка, Знач СтрокаПоиска)
если Найти(Строка, СтрокаПоиска)=1 тогда
Возврат Истина;
иначе
Возврат Ложь;
конецесли;
КонецФункции
Функция СтрЗаканчиваетсяНа (Знач Строка, Знач СтрокаПоиска)
если Найти(Строка, СтрокаПоиска)=1 тогда
Возврат Истина;
иначе
Возврат Ложь;
конецесли;
КонецФункции
Функция СтрСоединить(Массив, Разделитель="")
Строка = "";
Для каждого Элемент Из Массив Цикл
Строка = Строка + СокрЛП(Элемент) + Разделитель;
КонецЦикла;
Возврат Строка;
КонецФункции
Функция стрРазделить(Знач Строка, Знач Разделитель = ",",
Знач ПропускатьПустыеСтроки = Неопределено)
Результат = Новый Массив;
// для обеспечения обратной совместимости
Если ПропускатьПустыеСтроки = Неопределено Тогда
ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь);
Если ПустаяСтрока(Строка) Тогда
Если Разделитель = " " Тогда
Результат.Добавить("");
КонецЕсли;
Возврат Результат;
КонецЕсли;
КонецЕсли;
//
Позиция = Найти(Строка, Разделитель);
Пока Позиция > 0 Цикл
Подстрока = Лев(Строка, Позиция - 1);
Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда
Результат.Добавить(Подстрока);
КонецЕсли;
Строка = Сред(Строка, Позиция + СтрДлина(Разделитель));
Позиция = Найти(Строка, Разделитель);
КонецЦикла;
Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда
Результат.Добавить(Строка);
КонецЕсли;
Возврат Результат;
КонецФункции Показатьа ссылку можете указать? подправлю - может взлетит
ИнициализироватьПараметрыРасширенногоЗапроса(РасширенныйЗапрос, Ложь);
Запрос = ИнициализироватьЗапросПолученияДанных(РасширенныйЗапрос);
МассивРезультатов = Запрос.ВыполнитьПакет();
ВыполнитьИзменениеДанных(РасширенныйЗапрос, МассивРезультатов);
Возврат МассивРезультатов;
КонецФункции
На ВыполнитьИзменениеДанных выносит
ОбъектРедактирования.Записать();
на этом ее и выносит
проверил в ка 2.4 - рабочие
не вылетает
ошибка на строке
ОбъектРедактирования.Записать();
говорит о том, что проблема с записью самого объекта, при чем характер ошибки намекает на ее платформенную природу. попробуйде провалиться в обработчики/подписки перед/при записи.
на другой заработало
Лучше бы изменяемую схему СКД + групповое изменение, насколько помню уже давно есть такие консоли.
это альтернативный инструмент. смотришь, сравниваешь, выбираешь какой подходит в твоей ситуации. в моем понимании, основными (но не факт что единственными) плюсами запроса на изменение является его предельная простота в сравнении с "наколеночной" обработкой и крайне широкие возможности в сравнении с обработкой группового изменения данных.
соответственно, аналитики и консультанты теперь имеют альтернативный инструмент массового изменения данных. да и программисту по-короче набросать две строчки запроса, чем писать "запрос = новый запрос();...".
Я и спрашиваю преимущества в чем? В том, что есть люди которым удобнее писать запрос вручную наизусть зная структуру имен полей? Чем перетащить из таблички? И по вашему ответу тоже не вижу ни одного реального примера. Представите хоть один реальный, значимый?
Чем кстати этот инструмент шире по сравнению с хорошей групповой обработкой?
"да и программисту по-короче набросать две строчки запроса", я тоже могу придираться к словам, а не вычленять их смысл. Запрос написанный в 2 стандартных коротких строчки запроса не задача для написания такого инструмента и даже изучения такого инструмента не стоит, имхо.
так извращаться действительно нет смысла. если вы не можете набросать запрос без конструктора - переходить к запросам на изменение рановато..
"Поддерживается редактирование всех первичных таблиц:
таблицы ссылочных типов (документов, справочников...)
табличные части ссылочных типов
регистры подчиненные и не подчиненные регистратору"
и вспоминаю, что иногда возникают задачи больших корректировок регистров, приходится делать обработку, которая формирует набор(ы) записей регистров, на основании существующей в ИБ информации, и привязывает их к "ручной операции/корректировке". Попробую делать это в запросе, не открывая конфигуратора, вдруг будет удобнее. Получается более универсальный инструмент чем типовая обработка изменения реквизитов - может менять ещё и регистры.
Конечно идея хорошая, но к таким вещам необходимо ограничивать доступ.
Фирма 1С сколько ее не ругай сделала очень грамотный ход - она просто отказалась от реализации подобных возможностей из режима предприятия.
если серьезно, без шуток и ёрничания: в чем опасность? почему плохо, что такой инструмент будет у всех?
Если говорить о более сложных моментах, то удобно при обменах данными с произвольными БД, т.к. пишешь только запросы/пакеты запросов на выгрузку/загрузку данных, в код на 1с не лезешь.
По крайней мере к реальным.
Любые обработки в массивах рекомендуется исключить или хотя бы свести к минимуму.
Программа должна предусматривать безопасную работу пользователей без вмешательства программиста. Это все относится к обычному режиму.
Но если это хайлоад, то все меняется на прямо противоположные требования, и момент, когда все уже ...устали может наступить без квалифицированного программиста, владеющего необходимыми навыками.
ИЗМЕНИТЬ Справочник.Номенклатура
УСТАНОВИТЬ ИспользованиеХарактеристик = ВидНоменклатуры.ИспользованиеХарактеристик
ГДЕ НЕ ИспользованиеХарактеристик = ВидНоменклатуры.ИспользованиеХарактеристик
процедурным языком будет существенно дольше с точки зрения разработки. запись, понятно, будет длиться одинаковое количество времени.
Рейтинг: 987
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 838790
Создание 01.06.18 10:00
Обновление 01.06.18 10:00
Просмотры 47203
Загрузки 110
Рейтинг
116
Комментарии 60
Код открыт Да
Рубрики Механизмы платформы 1С
Кому Разработчик
Тип файла Внешняя обработка (ert,epf)
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)