В этой статье будете показано решение задачи, которую дали моему читателю в качестве проверочной на собеседовании во время приема не работу. Название задаче я придумал сам =)
Текст задачи:
В конфигурации имеется документ с табличной частью «Товары», у этой табличной части имеется реквизит, тип которого ссылка на справочник «Номенклатура». Требуется создать обработку, которая выполняет следующий функционал: у всех документов, у которых в табличной части имеется номенклатура «X», эта номенклатура должна заменяться на номенклатуру «Y».
Решение:
Немного усложним решение: будем выгружать найденные документы в таблицу значений на форме, в которой можно будет отмечать те документы, где следует поменять номенклатуру.
Поскольку в задании не была указано, в какой конфигурации нужно реализовать решение, то создадим конфигурацию с одним справочником «Номенклатура» и одним документом «Продажи» (с табличной частью «Товары», в которой будет реквизит с типом ссылка на справочник «Номенклатура»).
Создадим обработку, на управляемой форме которой будут два реквизита НоменклатураПоиска и НомкнклатураНаЗамену с типами ссылка на справочник «Номенклатура». И одна таблица значений с колонками Отметка и Документ, у первой колонки тип Булево, у второй тип – ссылка на документ «Продажи». Также на форме обработки будут две команды ПоискДокументов и Замена.
При выполнении команды ПоискДокументов будем искать те документы, у которых в табличной части есть номенклатура из реквизита НоменклатураПоиска.
&НаСервере Процедура ПоискДокументовНаСервере() НайденныеДокументы.Очистить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПродажаТовары.Ссылка КАК Документ |ИЗ | Документ.Продажа.Товары КАК ПродажаТовары |ГДЕ | ПродажаТовары.Номенклатура = &Номенклатура | |СГРУППИРОВАТЬ ПО | ПродажаТовары.Ссылка"; //сгруппируем, на тот случай, когда в одном документе может быть несколько одинаковых строк с номенклатурой Запрос.УстановитьПараметр("Номенклатура",НоменклатураПоиска); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл НоваяСтрока = НайденныеДокументы.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока,Выборка); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ПоискДокументов(Команда) Если Не ПроверитьЗаполнение() Тогда Возврат; КонецЕсли; ПоискДокументовНаСервере(); КонецПроцедуры
А при выполнении команды Замена, будем менять номенклатуру в найденных и отмеченных документах. При этом будем их записывать, если они не проведены, и проводить, если они проведены.
Процедура ЗаменаНаСервере() Для Каждого стрДокумент из НайденныеДокументы Цикл Если Не стрДокумент.Отметка Тогда Продолжить; КонецЕсли; ДокументОбъект = стрДокумент.Документ.ПолучитьОбъект(); СтрокиСНоменклатурой = ДокументОбъект.Товары.НайтиСтроки(Новый Структура("Номенклатура", НоменклатураПоиска)); Для Каждого стрТабЧасти из СтрокиСНоменклатурой Цикл стрТабЧасти.Номенклатура = НоменклатураНаЗамену; КонецЦикла; Попытка РежимЗаписи = ?(ДокументОбъект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись); ДокументОбъект.Записать(РежимЗаписи, РежимПроведенияДокумента.Неоперативный); Сообщить(СтрШаблон("В документе %1 номенклатура успешно заменена!",стрДокумент.Документ )); Исключение Сообщить(СтрШаблон("Не удалось записать/провести документ %1 !",стрДокумент.Документ )); КонецПопытки; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура Замена(Команда) Если НайденныеДокументы.Количество() = 0 Тогда Возврат; КонецЕсли; ЗаменаНаСервере(); КонецПроцедуры
Вот и всё задача выполнена!
Если вы в самом начале своего пути, то рекомендую эту задачу реализовать самостоятельно, а потом ещё раз, и ещё раз =).
Успеха в обучении!
Подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Вступайте в мои группы:
Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009