1с перебрать все документы изменить реквизиты

Как перебрать в цикле все документы ?

Я
   aptomilov

05.03.12 — 07:56

Как перебрать в цикле все документы ?

  

Партнерская программа EFSOL Oblako

   kortun

1 — 05.03.12 — 07:58

Выборка = Документы.Реализация.Выбрать();

   Amra

2 — 05.03.12 — 07:58

Метаданные+Выбрать+Следующий

   kortun

3 — 05.03.12 — 07:58

Выборка = Документы.Реализация.Выбрать();

Пока Выборка.Следующий() Цикл

КонецЦикла;

так вернее будет

   Rie

4 — 05.03.12 — 07:59

(0) Судя по ответам (1) и (2), существует более одной версии того, что же имел в виду топикстартер под «все документы».

   aptomilov

5 — 05.03.12 — 08:08

все это все интересно про метаданные

   aptomilov

6 — 05.03.12 — 08:19

имелись ввиду все виды документов

   golden-pack

7 — 05.03.12 — 08:20

(5) лол

   Fragster

8 — 05.03.12 — 08:22

Запрос = Новый Запрос;

ТЗ = «Выбрать Док.Ссылка Из Документ.&ВидДок»;

Для каждого метадок из метаданные.докуметы Цикл

 Запрос.Текст = СтрЗаменить(ТЗ,»&ВидДок»,МетаДок.Имя);

 Выборка = Запрос.Выполнить().Выбрать();

 Пока Выборка.Следующий() Цикл

   Док = Выборка.Ссылка.ПолучитьОбъект;

   Док.Удалить(Истина);

 КонецЦикла;

КонецЦикла;

   Fragster

9 — 05.03.12 — 08:22

ну там синтаксические ошибки поправить надо, да

   МимохожийОднако

10 — 05.03.12 — 08:27

хорошая бомба (8)

   Ээйч

11 — 05.03.12 — 08:29

>>>хорошая бомба (8)

Не, ну а чо? ТС — суровый Челябинец ))

   aptomilov

12 — 05.03.12 — 08:37

бомба шекарная спасибо всем щас запущу гы гы

   aptomilov

13 — 05.03.12 — 08:59

вот полностью раб вариант, но медленно блин

   Запрос = Новый Запрос;

   ТЗ = «Выбрать Док.Ссылка Из Документ.&ВидДок КАК Док»;

   Для каждого метадок из метаданные.документы Цикл

       Запрос.Текст = СтрЗаменить(ТЗ,»&ВидДок»,МетаДок.Имя);

       Выборка = Запрос.Выполнить().Выбрать();

       Пока Выборка.Следующий() Цикл

           Док = Выборка.Ссылка.ПолучитьОбъект();

           Сообщить(«Удаляем документ » + Строка(Док));

           Док.Удалить();

       КонецЦикла;

   КонецЦикла;

   Stim

14 — 05.03.12 — 09:01

быстрее будет только удалить МД в конфигураторе хD

   Serg_1960

15 — 05.03.12 — 09:05

(13) «Запрос в цикле — есть зло»(с) Ща, посмотрю что у меня есть…

   Maxus43

16 — 05.03.12 — 09:08

(13) не запускай пока работу другую не найдёш, запускай в последний день только

   Serg_1960

17 — 05.03.12 — 09:11

(0) Ничего не нашёл, кроме вот этого («срез последних» для справочника спецификаций по упоминанию в документах):

   ТекстЗапроса =

   «ВЫБРАТЬ

   |    ВсеСпецификации.Ссылка КАК Спецификация,

   |    ВсеСпецификации.ПометкаУдаления КАК ПометкаУдаления,

   |    СрезПоследних.Дата КАК Дата

   |ИЗ

   |    Справочник.СпецификацииНоменклатуры КАК ВсеСпецификации

   |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ

   |            Спецификации.Спецификация КАК Спецификация,

   |            МАКСИМУМ(Спецификации.Дата) КАК Дата

   |        ИЗ

   |»;

   
   ЭтоНачало = Истина;

   Начало = »            («;

   Продолжение = »

   |    

   |            ОБЪЕДИНИТЬ

   |    

   |            «;

   
   ИщуТип = Тип(«СправочникСсылка.СпецификацииНоменклатуры»);

   
   Для Каждого Документ Из Метаданные.Документы Цикл

       Для Каждого Реквизит Из Документ.Реквизиты Цикл

           Если Реквизит.Тип.СодержитТип(ИщуТип) Тогда

               ТекстЗапроса = ТекстЗапроса + ?(ЭтоНачало,Начало,Продолжение) +

               «ВЫБРАТЬ

               |                ТекОбъект.» + Реквизит.Имя + » КАК Спецификация,

               |                МАКСИМУМ(ТекОбъект.Дата) КАК Дата

               |            ИЗ

               |                Документ.» + Документ.Имя + » КАК ТекОбъект

               |            ГДЕ

               |                ТекОбъект.» + Реквизит.Имя + » ССЫЛКА Справочник.СпецификацииНоменклатуры

               |                И ТекОбъект.» + Реквизит.Имя + » <> &ПустаяСсылка

               |            

               |            СГРУППИРОВАТЬ ПО

               |                ТекОбъект.» + Реквизит.Имя;

               ЭтоНачало = Ложь;

           КонецЕсли;

       КонецЦикла;

       
       Для Каждого Таблица Из Документ.ТабличныеЧасти Цикл

           Для Каждого Реквизит Из Таблица.Реквизиты Цикл

               Если Реквизит.Тип.СодержитТип(ИщуТип) Тогда

                   ТекстЗапроса = ТекстЗапроса + ?(ЭтоНачало,Начало,Продолжение) +

                   «ВЫБРАТЬ

                   |                ТекОбъект.» + Реквизит.Имя + » КАК Спецификация,

                   |                МАКСИМУМ(ТекОбъект.Ссылка.Дата) КАК Дата

                   |            ИЗ

                   |                Документ.» + Документ.Имя + «.» + Таблица.Имя + » КАК ТекОбъект

                   |            ГДЕ

                   |                ТекОбъект.» + Реквизит.Имя + » ССЫЛКА Справочник.СпецификацииНоменклатуры

                   |                И ТекОбъект.» + Реквизит.Имя + » <> &ПустаяСсылка

                   |            

                   |            СГРУППИРОВАТЬ ПО

                   |                ТекОбъект.» + Реквизит.Имя;

                   ЭтоНачало = Ложь;

               КонецЕсли;

           КонецЦикла;

       КонецЦикла;

   КонецЦикла;

   
   ТекстЗапроса = ТекстЗапроса + «) КАК Спецификации

   |        

   |        СГРУППИРОВАТЬ ПО

   |            Спецификации.Спецификация) КАК СрезПоследних

   |        ПО (СрезПоследних.Спецификация = ВсеСпецификации.Ссылка)

   |

   |УПОРЯДОЧИТЬ ПО

   |    ВсеСпецификации.Ссылка.Наименование»;

   
   //Сообщить(ТекстЗапроса);

   
   Запрос = Новый Запрос(ТекстЗапроса);

   Запрос.УстановитьПараметр(«ПустаяСсылка», Справочники.СпецификацииНоменклатуры.ПустаяСсылка());

   Maxus43

18 — 05.03.12 — 09:13

(17) в типовой УПП есть запросы в цикле, 2 места видел точно) бывает оправданно

   NcSteel

19 — 05.03.12 — 09:14

(17) У тебя нет УДАЛИТЬ. Исправься пожалуйста. )

   Serg_1960

20 — 05.03.12 — 09:39

(19) «Удалить»? Что удалить? Расшифруй :(

  

Serg_1960

21 — 05.03.12 — 09:40

+ Пятница, однако ведь, закончилась :(

Часто в работе возникают ситуации, когда требуется в справочниках или документах изменить большое количество реквизитов или сведений объекта, или выполнить какие-то действия над множеством объектов. В программе 1С 8.3 это можно сделать двумя способами — из формы списка или используя обработку Групповое изменение реквизитов. Рассмотрим оба варианта.

Содержание

  • Групповое изменение реквизитов в 1С 8.3 с использованием формы списка
  • Групповая обработка документов в 1С 8.3 Бухгалтерия 3.0
  • Применение обработки Групповое изменение реквизитов

Этот вариант довольно прост, но его использование удобно для небольшого количества объектов или групп объектов. Предположим, что мы ошибочно в номенклатуре указали не ту единицу измерения и нам необходимо ее изменить.

В нашем примере изменим единицу измерения Шт на Кг.

Для того чтобы выделить несколько элементов, при их выборе удерживаем кнопку Shift или Ctrl и нажав правой кнопкой мышки выбираем пункт Изменить выделенные.

В окне отобразятся реквизиты, которые мы можем изменить. Отмечаем галочкой реквизит Единица и устанавливаем правильную, в нашем примере Кг. После нажатия кнопки Изменить реквизиты выполнится их замена во всех выделенных нами элементах.

Замена выполнена.

Предположим, что нам необходимо изменить реквизиты сразу у нескольких групп объектов, включая их подчиненные элементы. Для этого в кнопке Дополнительные параметры достаточно установить галочку Обрабатывать дочерние элементы. В этом случае замена указанных реквизитов произойдет во всех подчиненных элементах, иначе программа 1С 8.3 обработает только саму группу.

Групповая обработка документов в 1С 8.3 Бухгалтерия 3.0

Обработка Групповое изменение реквизитов в 1С 8.3 имеет больше функциональных возможностей. Она позволяет массово изменять табличные части и реквизиты выбранных объектов — справочников, документов. Она имеется во всех программах 1С. Так, в программе 1С 8.3 Бухгалтерия предприятия 3.0 ее найти можно в разделе меню Администрирование — Обслуживание.

Далее открываем раздел Корректировка данных и видим нужную нам ссылку Групповое изменение реквизитов.

Если вы по каким-то причинам не можете найти обработку, то она также доступна через раздел Все функции.

Если его не видно в меню, включить его можно в разделе Сервис — Параметры, установив галочку Отображать команду Все функции.

Применение обработки Групповое изменение реквизитов

Ситуации для применения обработки могут быть различные, мы для примера рассмотрим изменение договора во всех введенных документах. Сформировав Оборотно-сальдовую ведомость по счету 60 — Расчеты с поставщиками и подрядчиками (меню Отчеты — Оборотно-сальдовая ведомость по счету) мы видим, что при проведении документов с контрагентом ФГУП Почта России за год ошибочно был использован старый договор и нам надо заменить его на договор 2018 года. Такая ошибка может возникнуть вследствие невнимательного копирования документов.

Для его изменения воспользуемся обработкой Групповое изменение реквизитов.

В поле выбора элементов для изменения, используя кнопку выбора указываем реквизит — документ Поступление (акты, накладные), т.к. именно в нем нам необходимо произвести замену реквизита Договор. При этом, в форме выбора можно найти нужную строчку, начав вводить текст и программа 1С 8.3 автоматически осуществит поиск вводимого элемента.

Далее, нам необходимо из всех документов отобрать документы по контрагенту ФГУП Почта России за период 2018 год. Для этого, нажав ссылку Все элементы, настроим отбор. Нажав кнопку Добавить условия отбора, указываем контрагент равно ФГУП Почта России и Дата, Больше, Начало этого года.

Далее нажав кнопку ОК мы ищем в реквизитах поле Договор и устанавливаем новое значение Договор  Почта России от 01.01.2018.

Хотелось бы обратить внимание на закладки формы, т.к. они зависят от вида выбранного элемента. Например, если бы нам надо было изменить договор в документе Списание с расчетного счета, то этот реквизит находится в табличной части документа и для его изменения нам надо отметить его на закладке Расшифровка платежа.

После обработки документов, снова формируем Оборотно-сальдовую ведомость и проверяем договор. Все операции отражены на нужном договоре.

Кроме замены реквизитов, с помощью данной обработки можно устанавливать и снимать пометку на удаление на группу объектов, отметку о проведении документов. Но по умолчанию эти функции не доступны. Чтобы они появились в списке возможностей нужно нажав кнопку Дополнительные параметры в разделе Специальные возможности установить галочку Показывать служебные реквизиты.

После чего в нашем списке станут доступны эти действия.

См. также:

  • Групповое перепроведение документов в 1С 8.3 Бухгалтерия 3.0
  • Как удалить помеченные на удаление документы в 1С 8.3
  • Сбилась нумерация документов в 1С 8.3: как исправить
  • Тестирование и исправление базы 1С 8.3: какие галочки ставить
  • Горячие клавиши в 1С
  • Как выгрузить документ, отчет из 1С 8.3 в Excel
  • Выгрузка в 1С из xml: как выгрузить данные из 1С 8.3 и загрузить в 1С 8.3

Если Вы еще не являетесь подписчиком системы БухЭксперт8:

Активировать демо-доступ бесплатно →

или

Оформить подписку на Рубрикатор →

После оформления подписки вам станут доступны все материалы по 1С Бухгалтерия, записи поддерживающих эфиров и вы сможете задавать любые вопросы по 1С.

Подписывайтесь на наши YouTube и Telegram чтобы не пропустить
важные изменения 1С и законодательства

Помогла статья?

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

/// Как выбрать и упорядочить документы за период
/// в 1с 8.3, 8.2
 
&НаСервере
Процедура КакВыбратьИУпорядочитьДокументыЗаПериодНаСервере()
 
    // найдём все документы поступления еды за 2014 год
    // упорядочив их по возрастанию даты
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Ссылка
        |ИЗ
        |   Документ.ПоступлениеЕды КАК ПоступлениеЕды
        |ГДЕ
        |   Дата МЕЖДУ &НачДата И &КонДата
        |УПОРЯДОЧИТЬ ПО
        |   Дата ВОЗР";
 
    Запрос.УстановитьПараметр("НачДата", '20140101');
    Запрос.УстановитьПараметр("КонДата", '20141231');
 
    РезультатЗапроса = Запрос.Выполнить();
 
    ВыборкаДокументов = РезультатЗапроса.Выбрать();
 
    Пока ВыборкаДокументов.Следующий() Цикл
        Сообщить(ВыборкаДокументов.Ссылка);
    КонецЦикла;
 
КонецПроцедуры
 
/// Как найти документ по номеру в 1с 8.3, 8.2
 
&НаСервере
Процедура КакНайтиДокументПоНомеруНаСервере()
 
    // найдём поступление еды № ВМБП-000005 за 2014 год
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Ссылка
        |ИЗ
        |   Документ.ПоступлениеЕды КАК ПоступлениеЕды
        |ГДЕ
        |   Дата МЕЖДУ &НачДата И &КонДата И
        |   Номер = &ВыбНомер";
 
    Запрос.УстановитьПараметр("НачДата", '20140101');
    Запрос.УстановитьПараметр("КонДата", '20141231');
    Запрос.УстановитьПараметр("ВыбНомер", "ВМБП-000005");
 
    РезультатЗапроса = Запрос.Выполнить();
 
    ВыборкаДокументов = РезультатЗапроса.Выбрать();
 
    Если ВыборкаДокументов.Следующий() Тогда
        Сообщить(ВыборкаДокументов.Ссылка);        
    Иначе
        Сообщить("Документ с таким номером не существует!");
    КонецЕсли;
 
КонецПроцедуры
 
/// Как найти документы по реквизиту в 1с 8.3, 8.2
 
&НаСервере
Процедура КакНайтиДокументПоРеквизитуНаСервере()
 
    // найдём все документы поступления еды
    // от поставщика ООО "Поле"
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Ссылка,
        |   Поставщик
        |ИЗ
        |   Документ.ПоступлениеЕды КАК ПоступлениеЕды
        |ГДЕ
        |   Поставщик = &ВыбПоставщик
        |УПОРЯДОЧИТЬ ПО
        |   Дата ВОЗР";
 
    Запрос.УстановитьПараметр(
        "ВыбПоставщик",
        Справочники.Поставщики.НайтиПоНаименованию("ООО ""Поле""")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    ВыборкаДокументов = РезультатЗапроса.Выбрать();
 
    Пока ВыборкаДокументов.Следующий() Цикл        
        Сообщить(
            Строка(ВыборкаДокументов.Ссылка) + " " + 
            ВыборкаДокументов.Поставщик
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как выбрать все документы, которые не проведены и
/// не помечены на удаление в 1с 8.3, 8.2
 
&НаСервере
Процедура КакВыбратьВсеДокументыКоторыеНеПроведеныИНеПомеченыНаУдалениеНаСервере()
 
    // найдём не проведенные и не помеченные на удаление
    // документы поступления еды
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Ссылка,
        |   Проведен,
        |   ПометкаУдаления        
        |ИЗ
        |   Документ.ПоступлениеЕды КАК ПоступлениеЕды
        |ГДЕ
        |   Проведен = ЛОЖЬ И
        |   ПометкаУдаления = ЛОЖЬ
        |УПОРЯДОЧИТЬ ПО
        |   Дата ВОЗР";
 
    РезультатЗапроса = Запрос.Выполнить();
 
    ВыборкаДокументов = РезультатЗапроса.Выбрать();
 
    Пока ВыборкаДокументов.Следующий() Цикл
        Сообщить(
            Строка(ВыборкаДокументов.Ссылка) + " " + 
            ВыборкаДокументов.Проведен + " " +
            ВыборкаДокументов.ПометкаУдаления
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как найти подчиненные документы в 1с 8.3, 8.2
 
&НаСервере
Процедура КакНайтиПодчиненныеДокументыНаСервере()
 
    // Рассмотрим работу с подчиненными (связанными) документами
    // на примере документов: ПоступлениеТоваровУслуг и СчетФактураПолученный.
 
    // Документ СчетФактураПолученный вводится на основании документа
    // ПоступлениеТоваровУслуг, то есть счет фактура является подчиненной
    // по отношению к поступлению.
 
    // Факт подчиненности обычно (в типовых) фиксируется в самом подчиненном
    // документе через табличную часть ДокументыОснования.
    // Почему через табличную часть? Потому что один документ может зависеть
    // (быть подчиненным) сразу от нескольких родителей (оснований).
 
    // Пример №1.
    // У нас есть ссылка на поступление товаров и услуг. Требуется найти
    // счёт-фактуры, которые были введены на основании этого поступления.
    // В дереве подчиненности эти фактуры будут подчинены (зависимы) от
    // документа поступления.
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    Ссылка
        |ИЗ
        |    Документ.СчетФактураПолученный.ДокументыОснования КАК
        |    СчетФактураПолученныйДокументыОснования
        |ГДЕ
        |    СчетФактураПолученныйДокументыОснования.ДокументОснование =
        |    &ВыбПоступление";
 
    Запрос.УстановитьПараметр("ВыбПоступление", 
        Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру("0000-000004", '20160101')
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
 
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ПодчиненнаяФактура = ВыборкаДетальныеЗаписи.Ссылка;
        Сообщить(ПодчиненнаяФактура);
    КонецЦикла;
 
    // Пример №2.
    // У нас есть ссылка на счет-фактуру полученную. Требуется найти,
    // документы, на основании которых она была введена (родителей).
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ДокументОснование
        |ИЗ
        |    Документ.СчетФактураПолученный.ДокументыОснования КАК
        |    СчетФактураПолученныйДокументыОснования
        |ГДЕ
        |    СчетФактураПолученныйДокументыОснования.Ссылка =
        |    &ВыбСчетФактура";
 
    Запрос.УстановитьПараметр("ВыбСчетФактура",
        Документы.СчетФактураПолученный.НайтиПоНомеру("0000-000007", '20160101')
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
 
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        РодительФактуры = ВыборкаДетальныеЗаписи.ДокументОснование;
        Сообщить(РодительФактуры);
    КонецЦикла;
 
КонецПроцедуры
 
///  Как перебрать (перечислить) строки табличной части документа в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПеречислитьСтрокиИзТабличнойЧастиДокументаНаСервере()
 
    // У документа ПоступлениеЕды есть табличная часть 'Еда'.
    // У этой табличной части есть колонки: Номенклатура, Количество,
    // Сумма.
 
    ПоступлениеСсылка = 
        Документы.ПоступлениеЕды.НайтиПоНомеру(
            "ВМБП-000002", '20141231');    
 
    // перечислим строки табличной части этого документа
 
    // при помощи объектной техники
 
    Для Каждого Строка Из ПоступлениеСсылка.Еда Цикл
        Сообщить(
            Строка.Номенклатура.Наименование + " " +
            Строка.Количество + " шт. " + 
            Строка.Сумма + " руб."
        );
    КонецЦикла;
 
    // при помощи запроса    
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ПоступлениеЕдыЕда.Номенклатура,
        |   ПоступлениеЕдыЕда.Количество,
        |   ПоступлениеЕдыЕда.Сумма
        |ИЗ
        |   Документ.ПоступлениеЕды.Еда КАК ПоступлениеЕдыЕда
        |ГДЕ
        |   ПоступлениеЕдыЕда.Ссылка = &ВыбПоступление";
 
    Запрос.УстановитьПараметр("ВыбПоступление", ПоступлениеСсылка);
 
    РезультатЗапроса = Запрос.Выполнить();
 
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
 
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
 
        Сообщить(
            ВыборкаДетальныеЗаписи.Номенклатура.Наименование + " " +
            ВыборкаДетальныеЗаписи.Количество + " шт. " + 
            ВыборкаДетальныеЗаписи.Сумма + " руб."
        );
 
    КонецЦикла;
 
КонецПроцедуры
 
&НаСервере
Процедура СозданиеИИзменениеДокументовНаСервере()
 
    /// Как создать новый документ в 1с 8.3, 8.2
 
    // создадим новый документ поступление еды
    Поступление = Документы.ПоступлениеЕды.СоздатьДокумент();
    // заполним шапку документа
    Поступление.Дата = ТекущаяДата();
    Поступление.Поставщик = 
        Справочники.Поставщики.НайтиПоНаименованию(
            "ООО ""Кузбас"""
        );
    Поступление.Склад =
        Справочники.Склады.НайтиПоНаименованию(
            "Основной"
        );
    // заполним табличную часть Еда
    НоваяСтрока = Поступление.Еда.Добавить();
    НоваяСтрока.Номенклатура =
        Справочники.Еда.НайтиПоНаименованию(
            "Банан"
        );
    НоваяСтрока.Количество = 10;
    НоваяСтрока.Сумма = 550;
 
    /// Как записать документ в 1с 8.3, 8.2
 
    Поступление.Записать(РежимЗаписиДокумента.Запись);
 
    /// Как провести документ в 1с 8.3, 8.2
 
    Поступление.Записать(РежимЗаписиДокумента.Проведение);
 
    /// Как отменить проведение документа в 1с 8.3, 8.2
 
    Поступление.Записать(РежимЗаписиДокумента.ОтменаПроведения);
 
    /// Как внести изменения в документ по ссылке в 1с 8.3, 8.2
 
    // зачастую у нас есть только ссылка на документ
    // и чтобы по ней получить сам объект документа
    // для изменения нужно вызывать метод ПолучитьОбъект
 
    // найдём документ продажа еды под номером ВМБП-000001
    // для лаконичности примера воспользуемся не запросом,
    // а объектной техникой
 
    СсылкаНаПродажу = Документы.ПродажаЕды.НайтиПоНомеру(
        "ВМБП-000001",
        '20141231' // поиск среди документов 2014 года
     );
    // нам вернули не сам документ, а ссылку (указатель) на него
 
    // проверим - нашёлся ли вообще документ    
    Если СсылкаНаПродажу.Пустая() Тогда
        Сообщить("Документ не найден.");
    Иначе
        // получим сам документ по ссылке
        Продажа = СсылкаНаПродажу.ПолучитьОбъект();
        // вот его уже можно изменять и записывать
        Продажа.Клиент = 
            Справочники.Клиенты.НайтиПоНаименованию(
                "Пётр"
            );
        Продажа.Записать();
    КонецЕсли;
 
    /// Как получить пустую ссылку типа документ в 1с 8.3, 8.2
 
    ПустаяСсылка = Документы.ПродажаЕды.ПустаяСсылка();
    Если ПустаяСсылка.Пустая() Тогда
        Сообщить("Ссылка действительно пустая.");
    КонецЕсли;
 
    /// Как скопировать существующий документ в 1с 8.3, 8.2
 
    // скопируем найденный документ на продажу и запишем
    // как новый документ от сегодняшнего числа
 
    КопияПродажи = СсылкаНаПродажу.Скопировать();
    КопияПродажи.Дата = ТекущаяДата();
    КопияПродажи.Комментарий = "Копия документа " + 
        Строка(СсылкаНаПродажу);
    // запишем и проведём документ
    КопияПродажи.Записать(РежимЗаписиДокумента.Проведение);
 
    /// Как заблокировать документ перед изменениями 
    /// в 1с 8.3, 8.2
 
    // выполним блокировку документа
    // от изменения другими режимами или пользователями
 
    Продажа = СсылкаНаПродажу.ПолучитьОбъект();
    Если Не Продажа.Заблокирован() Тогда
        Продажа.Заблокировать();
        // тут идёт какой-то долгий алгоритм
        // в результате которого мы меняем
        // заблокированный элемент
        Продажа.Комментарий = "Документ изменён.";
        Продажа.Записать();
        // и только потом освобождаем его
        // для других режимов и пользователей
        Продажа.Разблокировать();
    КонецЕсли;
 
    /// Как создать новый документ на основании другого объекта
    /// в 1с 8.3, 8.2
 
    // создадим документ продажа на основании поступления
    // скопировав из поступления табличную часть
 
    // в модуле документа ПродажаЕды я определил процедуру
    // ОбработкаЗаполнения, которая обрабатывает ситуации
    // когда мы заполняем один элемент на основании
    // данных другого (см. в базе для скачивания)
 
    ПродажаНаОсновании = Документы.ПродажаЕды.СоздатьДокумент();
    ПродажаНаОсновании.Дата = ТекущаяДата();
    ПродажаНаОсновании.Комментарий =
        "Документ введён на основании " + Строка(Поступление.Ссылка);
    ПродажаНаОсновании.Заполнить(Поступление.Ссылка);
    ПродажаНаОсновании.Записать(РежимЗаписиДокумента.Проведение);
 
    /// Как пометить на удаление документ в 1с 8.3, 8.2
 
    ПродажаНаОсновании.УстановитьПометкуУдаления(Истина);
    // метод Записать вызывать не нужно
 
КонецПроцедуры
 
/// Как найти и изменить программно движения документа
/// по регистрам в 1с 8.3, 8.2
 
&НаСервере
Процедура КакНайтиИИзменитьДвиженияДокументаНаСервере()
 
    // предположим у нас есть ссылка на проведенный
    // документ поступления еды № ВМБП-000002
 
    ПоступлениеСсылка = 
        Документы.ПоступлениеЕды.НайтиПоНомеру(
            "ВМБП-000002", '20141231');
 
    // мы знаем, что этот документ делает записи по
    // двум регистрам:
    // - регистр накопления "ЗапасЕды"
    // - регистр бухгалтерии "Хозрасчетный"
 
    // наша задача: найти записи по регистру "ЗапасЕды"
    // изменить их (например, удвоим количество)
    // и записать вместо старых
 
    // используем объектную технику получения движений,
    // ведь мы будем их изменять
 
    Поступление = ПоступлениеСсылка.ПолучитьОбъект();
 
    // получим набор записей этого документа в регистр ЗапасыЕды
    НаборЗаписей = Поступление.Движения.ЗапасыЕды;
 
    // прочитаем записи из базы данных
    НаборЗаписей.Прочитать();
 
    Для Каждого Запись Из НаборЗаписей Цикл
 
        // выведем старые значения
        Сообщить(
            Строка(Запись.ВидДвижения) + " " +
            Запись.Еда + " " + Запись.Количество
        );
 
        // изменим запись, удвоив количество
        Запись.Количество = Запись.Количество * 2;
 
    КонецЦикла;
 
    // добавим новую запись
    НоваяЗапись = НаборЗаписей.ДобавитьПриход();    
    НоваяЗапись.Склад = 
        Справочники.Склады.НайтиПоНаименованию("Основной");
    НоваяЗапись.Еда = 
        Справочники.Еда.НайтиПоНаименованию("Банан");
    НоваяЗапись.Количество = 3;
    НоваяЗапись.Период = ТекущаяДата();
 
    // разом запишем набор записей
    НаборЗаписей.Записать(
        Истина // удалим старые движения и запишем вместо них новые
    );
 
    // теперь движения документа № ВМБП-000002 отличаются от тех,
    // что были записаны документом при проведении
    // чтобы вернуть их к начальному виду - нужно
    // перепровести документ
 
КонецПроцедуры
 
/// Как прочитать движения документа по регистрам запросом
/// в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьДвиженияДокументаЗапросомНаСервере()
 
    // этот приём используется, если не требуется изменять
    // найденные записи    
 
    // предположим у нас есть ссылка на проведенный
    // документ поступления еды № ВМБП-000002
 
    ПоступлениеСсылка = 
        Документы.ПоступлениеЕды.НайтиПоНомеру(
            "ВМБП-000002", '20141231');
 
    // мы знаем, что этот документ делает записи по
    // двум регистрам:
    // - регистр накопления "ЗапасЕды"
    // - регистр бухгалтерии "Хозрасчетный"
 
    // прочитаем записи по регистру "ЗапасЕды" запросом
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЗапасыЕды.НомерСтроки,
        |   ЗапасыЕды.ВидДвижения,
        |   ЗапасыЕды.Еда,
        |   ЗапасыЕды.Количество
        |ИЗ
        |   РегистрНакопления.ЗапасыЕды КАК ЗапасыЕды
        |ГДЕ
        |   ЗапасыЕды.Регистратор = &ВыбРегистратор
        |
        |УПОРЯДОЧИТЬ ПО
        |   ЗапасыЕды.НомерСтроки";
 
    Запрос.УстановитьПараметр("ВыбРегистратор", ПоступлениеСсылка);
 
    РезультатЗапроса = Запрос.Выполнить();
 
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
 
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить(
            "#" + ВыборкаДетальныеЗаписи.НомерСтроки +
            " " + ВыборкаДетальныеЗаписи.ВидДвижения +
            " " + ВыборкаДетальныеЗаписи.Еда + 
            " " + ВыборкаДетальныеЗаписи.Количество
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как изменить проведенный документ, не меняя его
/// движений (проводок) в 1с 8.3, 8.2
 
&НаСервере
Процедура КакИзменитьПроведенныйДокументНеМеняяЕгоДвиженийНаСервере()
 
    // бывает так, что есть проведенный документ
    // в уже закрытом периоде и нужно изменить
    // некоторое поле документа, но так чтобы
    // не поменялись проводки документа
 
    ПоступлениеСсылка = 
        Документы.ПоступлениеЕды.НайтиПоНомеру(
            "ВМБП-000005", '20141231');
 
    // Изменим количество в табличной части этого документа
    // на 1, но чтобы проводки (движения) остались прежними
 
    Поступление = ПоступлениеСсылка.ПолучитьОбъект();
 
    Для Каждого Строка Из Поступление.Еда Цикл
        Строка.Количество = 1;
    КонецЦикла;
 
    // если сейчас просто записать документ
    // изменятся его проводки, ведь он уже проведён
 
    // но если установить флаг Загрузка
    Поступление.ОбменДанными.Загрузка = Истина;    
 
    // то можно записать проведенный документ
    // без повторного проведения
 
    Поступление.Записать();
 
КонецПроцедуры
 
&НаСервереБезКонтекста
Функция ПолучитьПродажуПоНомеру(Номер, Интервал)
 
    Возврат Документы.ПродажаЕды.НайтиПоНомеру(
        Номер, Интервал
    );
 
КонецФункции
 
/// Как открыть форму существующего документа 
/// по ссылке в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуСуществующегоДокумента(Команда)
 
    СсылкаНаДокумент = ПолучитьПродажуПоНомеру("ВМБП-000006", '20141231');
 
    ПараметрыФормы = Новый Структура("Ключ", СсылкаНаДокумент);
 
    ОткрытьФорму(
        "Документ.ПродажаЕды.ФормаОбъекта", // имя формы
        ПараметрыФормы // параметры для формы
    );
 
КонецПроцедуры
 
/// Как открыть форму выбора документа и
/// отследить её закрытие в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуВыбораДокумента(Команда)
 
    ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораДокумента",
        ЭтотОбъект);
 
    ОткрытьФорму(
        "Документ.ПродажаЕды.ФормаВыбора",,,,,,ОповещениеОЗакрытии        
    );
 
КонецПроцедуры
 
&НаКлиенте
Процедура ПослеВыбораДокумента(Результат, Параметры) Экспорт
 
    Если Результат <> Неопределено Тогда
        Сообщить("Был выбран документ " + Результат);
    КонецЕсли;
 
КонецПроцедуры
 
&НаСервереБезКонтекста
Функция НайтиПоставщикаПоИмени(Имя)
 
    Возврат Справочники.Поставщики.НайтиПоНаименованию(
        Имя
    );
 
КонецФункции
 
/// Как открыть форму списка (журнал) документов и
/// с отбором по реквизиту в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуСпискаДокументовСОтбором(Команда)
 
    // откроем список поступлений, оставив
    // только те, что от поставщика ООО "Поле"
 
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Поставщик",
        НайтиПоставщикаПоИмени("ООО ""Поле"""));
 
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);
 
    ОткрытьФорму(
        "Документ.ПоступлениеЕды.ФормаСписка",
        ПараметрыФормы
    );
 
КонецПроцедуры
 
/// Как открыть форму только что созданного, но ещё
/// не записанного документа в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуНовогоНеЗаписанногоДокумента(Команда)
 
    // получаем форму нового документа
    ФормаНовогоДокумента = ПолучитьФорму(
        "Документ.ПоступлениеЕды.ФормаОбъекта",,, Истина); 
 
    // делаем копию её данных (так как напрямую их менять
    // нельзя)
    КопияДанныхФормы = ФормаНовогоДокумента.Объект;
 
    // заполняем эти данные на сервере
    ЗаполнитьДанныеФормыНаСервере(КопияДанныхФормы);    
 
    // копируем заполненные данные в исходную форму
    КопироватьДанныеФормы(КопияДанныхФормы,
        ФормаНовогоДокумента.Объект);
 
    // показываем форму нового заполненного
    // документа пользователю
    ФормаНовогоДокумента.Открыть();
 
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьДанныеФормыНаСервере(ДанныеФормы)
 
    // преобразуем данные формы в документ
    Поступление = ДанныеФормыВЗначение(ДанныеФормы,
        Тип("ДокументОбъект.ПоступлениеЕды"));
 
    // заполним только табличную часть
    НоваяСтрока = Поступление.Еда.Добавить();
    НоваяСтрока.Номенклатура =
        Справочники.Еда.НайтиПоНаименованию(
            "Банан"
        );
    НоваяСтрока.Количество = 10;
    НоваяСтрока.Сумма = 550;
 
    // преобразуем документа обратно в данные формы
    ЗначениеВДанныеФормы(Поступление, ДанныеФормы);
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере
  • АКТУАЛЬНЫЕ РЕЛИЗЫ 1С
  • ПРИМЕРЫ КОДА НА ПЛАТФОРМЕ 1С
Документы в 1С 8.x
  • Как создать новый документ?
  • Как найти документ?
  • Как открыть форму документа?
  • Как изменить значение реквизита и записать документ?
  • Как добавить строку в табличную часть документа, имея ссылку на документ?
  • Как удалить строки из табличной части документа?
  • Как перебрать строки документа?
  • Как выгрузить табличную часть документа?
  • Как посчитать итог в табличной части документа?
  • Как провести документ?
  • Как перебрать документы?
  • Как пометить на удаление все приходные накладные?
  • Как, имея ссылку на документ, создать в базе его копию?
  • Как, имея ссылку на документ, прочитать его движения по регистру?
  • Как определить, по каким регистрам документ выполнил движения?
  • Как в табличной части документа удалить строки с нулевым значением реквизита «Количество»?
  • Как очистить колонку «СтавкаНДС» в табличном поле «Товары» уже заполненного документа?
  • Как заполнить значения свойств нового документа на основании существующего?
  • Как получить перечень приходных накладных, в которых не заполнены номенклатурные позиции?
  • Как на дату расходной накладной определить курс валюты управленческого учета? Валюта управленческого учета храниться в периодическом регистре сведений.
  • Как из формы документа вызвать его неоперативное проведение?
  • Как в обработке проведения получить остатки, актуальные на позицию документа?
  • Как определить количество документов и количество разных значений реквизита в таблице записей документа?
  • В последовательность «ПартионныйУчет» добавлено измерение «Организация». Как теперь получить данные по границам последовательности для каждого значения этого измерения?
  • Как быстро получить информацию, по всем объектам, находящимся в компетенции конкретного менеджера (элемент справочника «Пользователи») по продажам?

Как создать новый документ?

НовыйДокумент = Документы.ПриходныйКассовыйОрдер.СоздатьДокумент(); 
НовыйДокумент.Дата = ТекущаяДата();          
Как найти документ?

ИскомыйДокумент = Документы.РеализацияТоваровУслуг.НайтиПоНомеру(НомерДок, Дата(2005, 1, 1)); 
Если НЕ ИскомыйДокумент.Пустая() Тогда 
	// Выполнить действия в случае обнаружения такого документа. … 
КонецЕсли;          
Как открыть форму документа?

Форма = ИскомыйДокумент.ПолучитьФорму(); 
Форма.Открыть();          
Как изменить значение реквизита и записать документ?

ДокОбъект = СсылкаНаДокумент.ПолучитьОбъект(); 
ДокОбъект.Ответственный = глТекущийПользователь; 
ДокОбъект.Записать(); 

// Запись с проведением документа
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение); 

// Запись с отменой проведения
ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);          
Как добавить строку в табличную часть документа, имея ссылку на документ?

ОбъектДок = Док.ПолучитьОбъект(); 
НоваяСтрока = ОбъектДок.Товары.Добавить(); 

// Заполнить значения реквизитов. 
НоваяСтрока.Количество = 10; 
НоваяСтрока.Цена = 55;  

// Записать документ. 
ОбъектДок.Записать();          
Как удалить строки из табличной части документа?

ОбъектДокумента = Документ.ПолучитьОбъект(); 
ОбъектДокумента.Товары.Очистить();          
Как перебрать строки документа?

Для Каждого ТекущаяСтрока Из Документ.Товары Цикл 
	// Действия со строкой табличной части. 
КонецЦикла; 


СтаршийИндекс = Документ.Товары.Количество() - 1; 
Для Сч = 0 по СтаршийИндекс Цикл 
	// Действия со строкой табличной части.
КонецЦикла;          
Как выгрузить табличную часть документа?

ТаблицаТоваровДокумента = Документ.Товары.Выгрузить();          
Как посчитать итог в табличной части документа?

ВсегоПоКолонкеСумма = Документ.Товары.Итог("Сумма");         
Как провести документ?

НужныйДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);          
Как перебрать документы?

ВыборкаДокументов = Документы.Расходная.Выбрать(НачалоГода(ТекущаяДата()), КонецГода(ТекущаяДата())); 
Пока ВыборкаДокументов.Следующий() Цикл 
	// Действия с документом - элементом выборки, 
	// его значение содержится в переменной ВыборкаДокументов 
КонецЦикла 


Запрос = Новый Запрос; 
Запрос.Текст = " 
	|ВЫБРАТЬ 
	|	РеализацияТоваровУслуг.Ссылка 
	|ИЗ 
	|	Документ. РеализацияТоваровУслуг КАК РеализацияТоваровУслуг 
	|ГДЕ 
	|	РеализацияТоваровУслуг.Контрагент = &Контрагент 
	|	И 
	|	(РеализацияТоваровУслуг.Номер < 100 | ИЛИ | РеализацияТоваровУслуг.Дата < ДАТАВРЕМЯ(2005, 1, 1)) 
	|	И 
	|	РеализацияТоваровУслуг.Товары.Номенклатура В ИЕРАРХИИ(&Номенклатура)"; 

Запрос.УстановитьПараметр("Контрагент", ОтбКонтрагент); 
Запрос.УстановитьПараметр("Номенклатура", ОтбНоменклатура); 

Результат = Запрос.Выполнить(); 
Выборка = Результат.Выбрать(); 
Пока Выборка.Следующий() Цикл 
	// действия с документом - элементом выборки, 
	// его значение содержится в переменной Выборка 
КонецЦикла;         
Как пометить на удаление все приходные накладные?

ДокументыВида = Документы.ПоступлениеТоваровУслуг.Выбрать(); 
Пока ДокументыВида.Следующий() Цикл 
	ДокОбъект = ДокументыВида.ПолучитьОбъект(); 
	ДокОбъект.УстановитьПометкуУдаления(Истина); 
КонецЦикла;          
Как, имея ссылку на документ, создать в базе его копию?

ДокументКопия = ИсходныйДокумент.Скопировать(); 
ДокументКопия.Дата = РабочаяДата; 
ДокументКопия.Записать(); 

ДокументКопия.Дата = ИсходныйДокумент.Дата;          
Как, имея ссылку на документ, прочитать его движения по регистру?

Запрос = Новый Запрос; 
Запрос.Текст ="ВЫБРАТЬ * 
	|ИЗ 
	|	РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры 
	|ГДЕ 
	|	ОстаткиНоменклатуры.Регистратор = &Регистратор"; 

Запрос.УстановитьПараметр("Регистратор", ПолеВводаРегистратор); 

НаборЗаписейРегистра = Движения.ОстаткиНоменклатуры; 
НаборЗаписейРегистра.Прочитать(); 
Для Каждого Запись из НаборЗаписейРегистра Цикл 
	// Чтение и модификация очередного движения. 
КонецЦикла; 


Для Каждого НаборЗаписейРегистра из Движения Цикл 
	НаборЗаписейРегистра.Прочитать(); 
	Для Каждого Запись из НаборЗаписейРегистра Цикл 
		// Чтение и модификация очередного движения. 
	КонецЦикла; 
КонецЦикла;          
Как определить, по каким регистрам документ выполнил движения?

ВЫБРАТЬ ПЕРВЫЕ 1 
	"Внутренние заказы" КАК Регистр 
ИЗ 
	РегистрНакопления.ВнутренниеЗаказы КАК ВнутренниеЗаказы 
ГДЕ 
	ВнутренниеЗаказы.Регистратор = &Регистратор 

ОБЪЕДИНИТЬ 

ВЫБРАТЬ ПЕРВЫЕ 1 
	"Заказы поставщикам" КАК Регистр 
ИЗ 
	РегистрНакопления.ЗаказыПоставщикам КАК ЗаказыПоставщикам 
ГДЕ 
	ЗаказыПоставщикам.Регистратор = &Регистратор 

ОБЪЕДИНИТЬ 

ВЫБРАТЬ ПЕРВЫЕ 1 
	"Размещение заказов покупателей" КАК Регистр 
ИЗ 
	РегистрНакопления.РазмещениеЗаказовПокупателей КАК РазмещениеЗаказовПокупателей 
ГДЕ 
	РазмещениеЗаказовПокупателей.Регистратор = &Регистратор 

ОБЪЕДИНИТЬ 

ВЫБРАТЬ ПЕРВЫЕ 1 
	"Товары в резерве на складах" КАК Регистр 
ИЗ 
	РегистрНакопления.ТоварыВРезервеНаСкладах КАК ТоварыВРезервеНаСкладах 
ГДЕ 
	ТоварыВРезервеНаСкладах.Регистратор = &Регистратор          
Как в табличной части документа удалить строки с нулевым значением реквизита «Количество»?

ОбъектДок = СсылкаДок.ПолучитьОбъект(); 
СтруктураДляПоиска = Новый Структура("Количество", 0); 

ТабличнаяЧастьДок = ОбъектДок.Товары; 
МассивПустыхСтрок = ТабличнаяЧастьДок.НайтиСтроки(СтруктураДляПоиска); 

Для каждого Строка Из МассивПустыхСтрок Цикл 
	ТабличнаяЧастьДок.Удалить(Строка); 
КонецЦикла; 

ОбъектДок.Записать(); 

СтруктураДляПоиска = Новый Структура("Количество", 0); 

МассивПустыхСтрок = Товары.НайтиСтроки(СтруктураДляПоиска); 

Для каждого Строка Из МассивПустыхСтрок Цикл 
	Товары.Удалить(Строка); 
КонецЦикла;          
Как очистить колонку «СтавкаНДС» в табличном поле «Товары» уже заполненного документа?

Процедура ТоварыСтавкаНДСПриИзменении(Элемент) 

	// Рассчитать реквизиты табличной части. 
	РассчитатьСуммуНДСТабЧасти(ЭлементыФормы.Товары.ТекущиеДанные, ЭтотОбъект); 

КонецПроцедуры // ТоварыСтавкаНДСПриИзменении() 


Для Каждого Строка из Товары Цикл 
	Строка.СтавкаНДС = Неопределено; 
	// Передать управление на процедуру, вызываемую 
	// из обработчика события "ПриИзменении" для поля ввода "СтавкаНДС" 
	ЭлементыФормы.Товары.ТекущаяСтрока = Строка; 
	РассчитатьСуммуНДСТабЧасти(ЭлементыФормы.Товары.ТекущиеДанные, ЭтотОбъект); 
КонецЦикла;          
Как заполнить значения свойств нового документа на основании существующего?

НовыйСчет = Документы.СчетНаОплатуПокупателю.СоздатьДокумент(); 
ЗаполнитьЗначенияСвойств(НовыйСчет, ДокументЗаказа, , "Дата"); 

// Заполнить табличную часть Товары. 
Для Каждого СтрокаТоваровЗаказа Из ДокументЗаказа.Товары Цикл 
	ЗаполнитьЗначенияСвойств(НовыйСчет.Товары.Добавить(), СтрокаТоваровЗаказа); 
КонецЦикла; 

// Заполнить табличную часть ВозвратнаяТара 
Для Каждого СтрокаТарыЗаказа Из ДокументЗаказа.ВозвратнаяТара Цикл 
	ЗаполнитьЗначенияСвойств(НовыйСчет.ВозвратнаяТара.Добавить(), СтрокаТарыЗаказа); 
КонецЦикла; 

// Заполнить табличную часть Услуги 
Для Каждого СтрокаУслугЗаказа Из ДокументЗаказа.Услуги Цикл 
	ЗаполнитьЗначенияСвойств(НовыйСчет.Услуги.Добавить(), СтрокаУслугЗаказа); 
КонецЦикла; 

НовыйСчет.ЗаказПокупателя = ДокументЗаказа; 

Форма = НовыйСчет.ПолучитьФорму(); 
Форма.Открыть();          
Как получить перечень приходных накладных, в которых не заполнены номенклатурные позиции?

Запрос = Новый Запрос; 
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ 
	|	ПриходнаяТовары.Ссылка как Накладные 
	|ИЗ 
	|	Документ.ПоступлениеТоваровУслуг.Товары КАК ПриходнаяТовары 
	|ГДЕ 
	|	ПриходнаяТовары.Номенклатура = &ПустаяНоменклатура"; 

Запрос.УстановитьПараметр("ПустаяНоменклатура", Справочники.Номенклатура.ПустаяСсылка()); 

ТаблицаНакладных = Запрос.Выполнить();          
Как на дату расходной накладной определить курс валюты управленческого учета? Валюта управленческого учета храниться в периодическом регистре сведений.

ВЫБРАТЬ 
	КурсыВалютСрезПоследних.Валюта КАК ВалютаУпр, 
	КурсыВалютСрезПоследних.Курс КАК КурсУпр 
ИЗ 
	РегистрСведений.КурсыВалют.СрезПоследних(&ДатаДокумента, Валюта В 
(ВЫБРАТЬ 
	УчетнаяПолитикаСрезПоследних.ВалютаУправленческая 
ИЗ 
	РегистрСведений.УчетнаяПолитика.СрезПоследних(&ДатаДокумента, ) 
	КАК УчетнаяПолитикаСрезПоследних ) 
) КАК КурсыВалютСрезПоследних          
Как из формы документа вызвать его неоперативное проведение?

Процедура ОсновныеДействияФормыОК(Кнопка) 
	ЭтаФорма.ИспользоватьРежимПроведения = ИспользованиеРежимаПроведения.Неоперативный; 
	ЗаписатьВФорме(РежимЗаписиДокумента.Проведение); 
	Закрыть(); 
КонецПроцедуры          
Как в обработке проведения получить остатки, актуальные на позицию документа?

Запрос.Текст = " ВЫБРАТЬ 
	|	ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток, 
	|	ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток 
	|ИЗ 
	|	РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&ПараметрПериод, 
	|								ДоговорКонтрагента = &Договор 
	|								И 
	|								Сделка =&Сделка) КАК ВзаиморасчетыСКонтрагентамиОстатки"; 

Запрос.УстановитьПараметр("ПараметрПериод", МоментВремени());           
Как определить количество документов и количество разных значений реквизита в таблице записей документа?

ВЫБРАТЬ 
	КОЛИЧЕСТВО(РегистрацияПростоевВОрганизации.Ссылка) КАК Случаев, 
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегистрацияПростоевВОрганизации.ФизЛицо) КАК Работников 
ИЗ 
	Документ.РегистрацияПростоевВОрганизации КАК РегистрацияПростоевВОрганизации 
ГДЕ 
	РегистрацияПростоевВОрганизации.Проведен           
В последовательность «ПартионныйУчет» добавлено измерение «Организация». Как теперь получить данные по границам последовательности для каждого значения этого измерения?

ТаблицаГраниц = Последовательности.ПартионныйУчет.ПолучитьГраницы("Организация"); 
Для Каждого СтрокаТаблицыГраниц Из ТаблицаГраниц Цикл 
	Организация = СтрокаТаблицыГраниц.Организация; 
	ДатаГП = СтрокаТаблицыГраниц.Граница.Дата; 
	СсылкаГП = СтрокаТаблицыГраниц.Граница.Ссылка; 
КонецЦикла;          
Как быстро получить информацию, по всем объектам, находящимся в компетенции конкретного менеджера (элемент справочника «Пользователи») по продажам?

МассивСсылок = КритерииОтбора.КомпетенцияМенеджераПродаж.Найти(Менеджер); 
Для Каждого Ссылка из МассивСсылок Цикл 
	Сообщить(Ссылка); 
КонецЦикла; 

ВЫБРАТЬ 
	КомпетенцияМенеджераПродаж.Ссылка 
ИЗ 
	КритерийОтбора.КомпетенцияМенеджераПродаж(&Менеджер) КАК КомпетенцияМенеджераПродаж          

Задайте вопрос программисту 1С

ДокументыМенеджер

Объект ДокументыМенеджер позволяет получить доступ ко всем менеджерам документов. Это можно сделать перебрав все менеджеры в цикле или обратившись к конкретному менеджеру по имени. Также данный объект позволяет проверить является ли ссылка ссылкой на какой-нибудь документ:

//получение конкретного менеджера документа по имени
МенеджерДокаПриход = Документы.ПриходТовара;
МенеджерДокаРасход = Документы["РасходТовара"];

//перебор всех менеджеров документа
Для Каждого МенеджерДока Из Документы Цикл
	Сообщить(МенеджерДока);	
КонецЦикла;	

СсылкаНаЧтото = ПолучитьСсылкуНаЧтото();

//проверка является ли ссылка ссылкой на документ
ВсеДоки = Документы.ТипВсеСсылки();
Если ВсеДоки.СодержитТип(ТипЗнч(СсылкаНаЧтото)) Тогда
	//это ссылка на документ
Иначе
	//что-то другое
КонецЕсли;

Создание документа программно

Чтобы программно создать документ нужно использовать метод менеджера документа СоздатьДокумент:

//создаем новый документ
ПриходныйДок = Документы.ПриходТовара.СоздатьДокумент();
//обязательно заполняем дату
ПриходныйДок.Дата = ТекущаяДатаСеанса();
//... заполняем другие реквизиты
ПриходныйДок.Поставщик = СсылкаНаПоставщика;
//записываем в базу данных
ПриходныйДок.Записать();


Программное заполнение документа

Для программного заполнения документа нужно обращаться к каждому реквизиту объекта по имени, через точку от объекта:

//создаем новый документ
ПриходныйДок = Документы.ПриходТовара.СоздатьДокумент();
//обязательно заполняем дату
ПриходныйДок.Дата = ТекущаяДатаСеанса();
//заполняем реквизиты Поставщик, Склад, Комментарий
ПриходныйДок.Поставщик = СсылкаНаПоставщика;
ПриходныйДок.Склад = СсылкаНаСклад;
ПриходныйДок.Комментарий = "документ создан программно";
//записываем в базу данных
ПриходныйДок.Записать();

Программное заполнение табличной части документа

К табличной части документа можно обратиться по имени, через точку от объекта. Затем через метод Добавить добавить новую строку табличной части. К реквизитам строки можно обращаться по имени, через точку от строки. В целом работа с табличной частью документа похожа на работу с таблицей значений:

//создаем новый документ
ПриходныйДок = Документы.ПриходТовара.СоздатьДокумент();
//добавим несколько строк в табличную часть СписокТоваров
НоваяСтрТЧ = ПриходныйДок.СписокТоваров.Добавить();
НоваяСтрТЧ.Товар = СсылкаНаТоварОдин;
НоваяСтрТЧ.Количество = 18;

НоваяСтрТЧ = ПриходныйДок.СписокТоваров.Добавить();
НоваяСтрТЧ.Товар = СсылкаНаТоварДва;
НоваяСтрТЧ.Количество = 36;

//можно загрузить строки из таблицы значений
//имена колонок должны совпадать с именами реквизитов табличной части
ПриходныйДок.СписокТоваров.Загрузить(НекаяТаблица);

//записываем в базу данных
ПриходныйДок.Записать();

Программное изменение документа

Изменить документ можно только через программный объект. Для этого методом ПолучитьОбъект нужно получить из ссылки объект и потом изменить его реквизиты:

//получаем объект из ссылки
ПриходныйДок = СсылкаНаДок.ПолучитьОбъект();
//меняем поставщика
ПриходныйДок.Поставщик = СсылкаНаПоставщика;
//записываем
ПриходныйДок.Записать();


Программное копирование документа

Для создания копии объекта предназначен метод Скопировать. Данный метод есть как у ссылки на документ, так и у объекта:

//копия документа через ссылку
НоваяКопия = СсылкаНаДок.Скопировать();
НоваяКопия.Дата = ТекущаяДатаСеанса();
НоваяКопия.Записать();

//копия документа через объект
ДокОбъект = СсылкаНаДок.ПолучитьОбъект(); 
НоваяКопия = ДокОбъект.Скопировать();
НоваяКопия.Дата = ТекущаяДатаСеанса();
НоваяКопия.Записать();

Программное удаление документа

Пометить на удаление документ можно с помощью метода УстановитьПометкуУдаления. Параметром нужно передать значение пометки на удаление. При установке пометки на удаление документ автоматически распроводится, если он был проведен и записывается. Также можно полностью удалить документ из базы методом Удалить:

//устанавливать пометку на удаление можно только через объект
ПриходныйДок = СсылкаНаДок.ПолучитьОбъект();

//пометить на удаление
ПриходныйДок.УстановитьПометкуУдаления(Истина);

//снять пометку на удаление
ПриходныйДок.УстановитьПометкуУдаления(Ложь);

//удаление документа из базы
ПриходныйДок.Удалить();

Программное проведение документа

У документа нет отдельного метода для проведения документа. Проведение — это запись документа с проведением. Для проведения документа используется метод Записать, в который параметром нужно передать режим записи документа. Всего есть три режима записи: запись, проведение, отмена проведения. Если параметр не указан, то используется запись:

ПриходныйДок = Документы.ПриходТовара.СоздатьДокумент();
ПриходныйДок.Дата = ТекущаяДатаСеанса();

//запись документа
ПриходныйДок.Записать(РежимЗаписиДокумента.Запись);
//тоже запись
ПриходныйДок.Записать();

//проведение документа
ПриходныйДок.Записать(РежимЗаписиДокумента.Проведение);

//отмена проведения документа
ПриходныйДок.Записать(РежимЗаписиДокумента.ОтменаПроведения);

Программная работа с движениями документа

Через свойство Движения можно обращаться к движениям проведенного документа и даже редактировать их. Рассмотрим на примере:

ДатаПоиска = ТекущаяДатаСеанса();
ПриходныйДок = Документы.ПриходТовара.НайтиПоНомеру("АА0000003", ДатаПоиска);

ДокПриходОбъект = ПриходныйДок.ПолучитьОбъект();
//получаем все движения документа
ДвиженияДока = ДокПриходОбъект.Движения;

//перебор всех регистров, по которым выполняются движения документом
Для Каждого Рег Из ДвиженияДока Цикл
	Сообщить(Рег);
КонецЦикла;	

//количество регистров из коллекции движений
КолвоРег = ДвиженияДока.Количество(); 

//поиск по имени регистра
РегОстатки = ДвиженияДока.Найти("ОстаткиТоваров");
Если Не РегОстатки = Неопределено Тогда
	//есть такой регистр
	//читаем записи регистра из базы данных
	РегОстатки.Прочитать();
	//перебирам в цикле и увеличиваем количество вдвое
	Для Каждого ЗаписьРег Из РегОстатки Цикл
		ЗаписьРег.Количество = ЗаписьРег.Количество * 2;	
	КонецЦикла;	
	//записываем
	РегОстатки.Записать();
КонецЕсли;

Программный поиск документа

Чтобы программно найти документ можно использовать методы НайтиПоНомеру и НайтиПоРеквизиту менеджера документа.

НайтиПоНомеру

В метод НайтиПоНомеру первым параметром передается номер документа, вторым дата, для определения периода, в котором нужно искать документ. Если для документа указана периодичность = В пределах года, то можно передать любую дату за этот год:

ДатаПоиска = Дата(2021,1,1);
//в настройках нумерации указана Периодичность = В пределах года
ПриходныйДок = Документы.ПриходТовара.НайтиПоНомеру("000000017", ДатаПоиска);
//поиск будет выполняться среди документов за 2021 год с номером 000000017

//в настройках нумерации указана Периодичность = В пределах месяца
ПриходныйДок= Документы.ПриходТовара.НайтиПоНомеру("000000017", ДатаПоиска);
//поиск будет выполняться среди документов за январь 2021 год с номером 000000017

//в настройках нумерации указана Периодичность = Непериодический
//дату можно не указывать
ПриходныйДок = Документы.ПриходТовара.НайтиПоНомеру("000000017");
//поиск будет выполняться среди всех документов

//если документ не найден, то в ПриходныйДок будет пустая ссылка
Если ПриходныйДок = Документы.ПриходТовара.ПустаяСсылка() Тогда
	//не нашли
ИначеЕсли ПриходныйДок = Неопределено Тогда
	//для документа указана нулевая длина номера
Иначе
	//ПриходныйДок - ссылка на документ
КонецЕсли;

НайтиПоРеквизиту

Метод НайтиПоРеквизиту принимает два параметра: имя реквизита и значение реквизита. Если реквизит имеет тип Строка, то поиск выполняется по точному соответствию. Нельзя искать по реквизиту с типом ХранилищеЗначения или неограниченная строка.

//поиск по реквизиту
//первый параметр - имя реквизита
//второй параметр - значение реквизита
ПриходныйДок = Документы.ПриходТовара.НайтиПоРеквизиту("Поставщик", СсылкаНаПоставщика);

//если документ не найден, то в ПриходныйДок будет пустая ссылка
Если ПриходныйДок = Документы.ПриходТовара.ПустаяСсылка() Тогда
	//не нашли
Иначе
	//ПриходныйДок - ссылка на найденный документ
	//если было несколько документов с таким значением реквизита, то 
	//будет найден первый попавшийся
КонецЕсли;

Выборка документов

Чтобы получить выборку документов можно воспользоваться методом Выбрать менеджера документа. Затем полученную выборку можно перебрать с помощью цикла Пока. На каждом витке цикла будут данные об одном документе. Через параметры метода можно ограничить выборку по периоду или по реквизитам.

//выборка всех документов
ВыборкаПриходов = Документы.ПриходТовара.Выбрать();
Пока ВыборкаПриходов.Следующий() Цикл
	//через выборку есть доступ ко всем реквизитам объекта
	Сообщить(ВыборкаПриходов.Номер);
	Сообщить(ВыборкаПриходов.Поставщик);
	//также через выборку можно получить объект
	ДокОбъект = ВыборкаПриходов.ПолучитьОбъект();
КонецЦикла;	

//выборка документов за 2 месяца
ВыборкаПриходов = Документы.ПриходТовара.Выбрать(Дата(2021,1,1), Дата(2021,2,28));

//выборка всех документов, у которых дата больше 1 марта 2021
ВыборкаПриходов = Документы.ПриходТовара.Выбрать(Дата(2021,3,1));

//выборка всех документов, у которых дата меньше 15 марта 2021
ВыборкаПриходов = Документы.ПриходТовара.Выбрать(, Дата(2021,3,15));

//выборка документов с конкретной датой 
ОтборДок = Новый Структура("Дата", Дата(2021,3,22));
ВыборкаПриходов = Документы.ПриходТовара.Выбрать(,, ОтборДок);

//выборка документов с конкретным значением реквизита 
ОтборДок = Новый Структура("Поставщик", СсылкаНаПоставщика);
ВыборкаПриходов = Документы.ПриходТовара.Выбрать(,, ОтборДок);

//выборка отсортированная по убыванию даты
ВыборкаПриходов = Документы.ПриходТовара.Выбрать(,,, "Дата Убыв");

Выборка позволяет получать данные из базы порциями. Если в базе будет 1000000 документов, то выборка будет получить их небольшими порциями, а не загружать сразу все документы в оперативную память.

Программная работа с ссылкой на документ

Через ссылку на документ можно обратиться к реквизитам объекта. При этом будет неявно выполнен запрос к базе данных для получения значения реквизита. Так как работа с базой данных возможна только на сервере, то на клиенте нельзя от ссылки получать значения реквизитов:

Поставщик = СсылкаНаДокПриход.Поставщик;
ДатаДок = СсылкаНаДокПриход.Дата;
//однако на клиенте такой код не сработает с ошибкой:
// поле объекта не обнаружено

Для получения пустой ссылки можно использовать метод ПустаяСсылка. Для проверки на пустую ссылку можно воспользоваться методом Пустая:

//получение пустой ссылки на документ
ПустойДокПриход = Документы.ПриходТовара.ПустаяСсылка();

//проверка на пустую ссылку
Если ПустойДокПриход.Пустая() Тогда
	//пустая ссылка
КонецЕсли;	
//или так
Если ПустойДокПриход = Документы.ПриходТовара.ПустаяСсылка() Тогда
	//тоже пустая ссылка
КонецЕсли;

Сопоставление документов по идентификатору

У каждого документа есть уникальный идентификатор, который присваивается при первой записи документа и не может быть изменен. Часто при обмене между двумя базами данных требуется сопоставлять документы. Для этого можно использовать идентификаторы.

Пример выгрузки идентификатора документа. Уникальный идентификатор получается из ссылки методом УникальныйИдентификатор:

ВыборкаПриходов = Документы.ПриходТовара.Выбрать();
Пока ВыборкаПриходов.Следующий() Цикл
	//получаем уникальный идентификатор
	УИДПрихода = ВыборкаПриходов.Ссылка.УникальныйИдентификатор();
	//преобразуем в строку
	УИДПриходаСтрокой = Строка(УИДПрихода);
	//дальше записываем строку в файл обмена
КонецЦикла;	

Пример сопоставления документов по идентификатору. Здесь используется метод ПолучитьСсылку для получения ссылки на документ по уникальному идентификатору и метод УстановитьСсылкуНового чтобы уникальный идентификатор нового документа был равен уникальному идентификатору, полученному из другой базы.

//ТаблицаЗагрузки - некая таблица с данными из другой базы
Для Каждого Стр ИЗ ТаблицаЗагрузки Цикл
	УИДПриходаСтрокой = Стр.УИД;
	//создаем уникальный идентификатор
	УИДПрихода = Новый УникальныйИдентификатор(УИДПриходаСтрокой);
	
	//получаем ссылку на документ
	ПриходныйДок = Документы.ПриходТовара.ПолучитьСсылку(УИДПрихода);
	//из ссылки получаем объект
	ДокПриходОбъект = ПриходныйДок.ПолучитьОбъект();
	Если ДокПриходОбъект = Неопределено Тогда
		//если объект = Неопределено значит документа с таким
		//идентификатором еще нет, создаем его
		ДокПриходОбъект = Документы.ПриходТовара.СоздатьДокумент();
		//...заполнение
		
		//до записи обязательно устанавливаем полученную ссылку 
		//тогда идентификаторы будут совпадать
		ДокПриходОбъект.УстановитьСсылкуНового(ПриходныйДок);
		ДокПриходОбъект.Записать();
	Иначе
		//уже есть документ с таким идентификатором,
		//перезаписываем его
	КонецЕсли;	
КонецЦикла;	

Смотрите также:
Электронный учебник по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Игра «Кто хочет стать миллионером?» с вопросами на определенную тематику (язык программирования JavaScript, английские, немецкие, французские, испанские, португальские, ни­дер­ландские, итальянские слова, электробезопасность, промышленная безопасность, бокс и т.п.), написанная на 1С
Программирование в 1С 8.3 с нуля — краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

Опубликовано 15.03.2021 06:29
Автор: Administrator
Просмотров: 14092

Как часто вам достается от предыдущего бухгалтера хорошая база 1С, в которой почти нет ошибок? Да, практически, никогда! «Задвоенные», а то и «затроенные» данные, куча лишних договоров у контрагентов, некорректные счета учета, отрицательные остатки по номенклатуре – вот лишь малая часть того, с чем сталкивается новый бухгалтер. И, зачастую, совсем мало времени остается на исправление. Пользователи могут сутками вручную переносить данные на верную позицию в базе, однако в этом материале мы хотим рассказать об интересном функционале программы 1С, с помощью которого вы управитесь за считанные минуты! Речь пойдет о групповом изменении реквизитов в программе 1С: Бухгалтерия предприятия ред. 3.0. 

Изменение значений реквизитов в документах

Как часто вы сталкивались с проблемой раздвоения информации по договорам или контрагенту? Например, при выгрузке из клиент-банка создался новый элемент в справочнике, и пользователь, не обратив внимание, использует оба наименования при вводе документов.

Рассмотрим на примере ИП Симоновой А.И.

В оборотно-сальдовой ведомости по счету 60 «Расчеты с поставщиками и подрядчиками» видно, что поставщик ООО «Гладиолус» повторяется дважды. Кроме этого, по второй строке ООО «Гладиолуса», в оборотах 2021 года, в документах фигурирует договор 2020 года. 

Если такой случай единичный, конечно же пользователь может исправить недочет вручную. А как быть, если документов много?

В такой ситуации поможет данная обработка.

ВНИМАНИЕ: Если у вас недостаточно опыта, лучше доверить это специалистам, т.к. данная процедура необратима. И если вы всё же решите поэкспериментировать со своей базой, не забудьте сделать резервную копию.

Рассмотрим действия пошагово.

Шаг 1. Перейдите в раздел «Администрирование» — «Обслуживание».

Шаг 2. Разверните меню «Корректировка данных» и перейдите по гиперссылке «Групповое изменение реквизитов».

Кредиторская задолженность в оборотно-сальдовой ведомости по первой строке ООО «Гладиолус» образована документами «Поступление (акт, накладная, УПД)». Значит в первую очередь нам надо заменить в них ООО «Гладиолус» №1 на ООО «Гладиолус» №2. А следующим этапом приступись к обработке договоров.

Шаг 3. Выполните настройку формы.

• В поле «Изменять» укажите обрабатываемый документ. В нашем примере это «Поступление (акты, накладные, УПД)».

• Изменяемый реквизит документа отметьте галочкой «Контрагент» и в поле «Новое значение» установите ООО «Гладиолус», на который надо сделать замену.

Для того, чтобы установить дополнительные фильтры и настройки, перейдите по гиперссылке «Все элементы».

В поле «Выбранные элементы» отображаются все документы поступления. Для установления фильтра установите отбор.

Шаг 4. Нажмите кнопку «Добавить условие» и задайте: «Контрагент» равно ООО «Гладиолус». При выборе значения выберите тот элемент, который нужно заменить.

Лишние документы отсеются и останутся лишь удовлетворяющие условию отбора.

Нажмите «Ок».

Итак, задано две настройки:

Первая – отбор по контрагенту ООО «Гладиолус» (№1);

Вторая – указание нового значения поля «Контрагент» — ООО «Гладиолус» (№2).

В окне обработки нажмите «Изменить реквизиты».

Подождите окончания выполнения действия и проверьте Оборотно-сальдовую ведомость снова.

ООО «Гладиолус» у нас остался в единственном экземпляре, но с разбивкой по договорам.

Аналогично рассмотренному варианту перенесите договора «Без договора» и «Договор 2020 г.» на одну строку – «Договор 2021 г.»

Шаг 5. Выполните новую настройку.

Перейдя по гиперссылке «Все реквизиты», одновременно с отбором по контрагенту ООО «Гладиолус» (новое значение), установите отбор – «Договор» равно «Без договора».

Шаг 6. Нажмите «ОК» и в поле «Новое значение» для реквизита «Договор» укажите тот, на который производится замена – «Договор 2021».

Шаг 7. Нажмите «Изменить реквизиты».

Аналогично проделайте со вторым договором – «Договор 2020 г.». Но обратите внимание, что расхождение в данном договоре по дебету счета 60 «Расчеты с поставщиками и подрядчиками», а значит задействована оплата поставщику и документ «Списание с расчетного счета».

Шаг 8. Выберите вид обрабатываемого документа – «Списание с расчетного счета».

Перейдите по гиперссылке «Все элементы» и установите отбор по полю «Получатель» — «Контрагент» — ООО «Гладиолус» и полю «Договор» – «Договор 2020 г.».

Обратите внимание, что значение состава реквизитов в таблице меняется в зависимости от выбранного элемента обработки.

Нажмите «Изменить реквизиты». Действие замены выполнено.

Проверьте Оборотно-сальдовую ведомость по счету 60: все договора перенесены на один – «Договор 2021 г.»

Таким образом можно изменять не только реквизиты документов, но и справочников.

Изменение значений реквизитов в справочках

Например, изменим единицу измерения у товаров, находящихся в группе «Крупы».

В карточке номенклатуры товара, с одноименным названием группы – «Крупа» — установлена единица измерения – граммы. Предположим, что пользователь ошибочно, копируя при внесении в справочник номенклатуру, указал всем наименованиям эту единицу измерения. Установим с помощью обработки верное значение – килограммы.

Шаг 1. Выполните настройку, указав в поле «Изменять» справочник «Номенклатура».

Значение изменяемого реквизита «Единица» установите – «Кг».

В настройке отбора добавьте условие: «Входит в группу» равно «Крупы».

Нажмите «Ок» и кнопку выполните команду «Изменить реквизиты».

Проверим справочник «Номенклатура» группу «Крупы». Единица измерения «Кг» на входящие в нее элементы установлена.

Таким образом, можно произвести замену любого реквизита справочника.

И еще один лайфхак 1С: с помощью обработки «Групповое изменение реквизитов» можно ставить и снимать пометку на удаление.

Установка (снятие) пометки на удаление с помощью обработки
«Групповое изменение реквизитов»

Шаг 1. В нижней части обработки нажмите кнопку «Дополнительные параметры…»

Разверните пункт «Специальные возможности» и установите галочку «Показывать служебные реквизиты».

В результате этого действия в списке реквизитов появилось поле – «Пометка на удаление», где пользователь может задать значение «Да» или «Нет».

Шаг 2. Установите значение пометки на удаление «Да» и выберите объект, который надо удалить. В нашем примере обрабатываются документы «Поступление на расчетный счет».

Шаг 3. Перейдите по гиперссылке «Все элементы» и установите отбор.

Обратите внимание, если ведется учет по нескольким организациям, в условие отбора добавьте и обрабатываемую организацию.

В данном условии заложена команда – отобрать все документы «Поступления на расчетный счет», по организации «ИП Симонова А.И.», введенные датой позже 01.01.2021 года.

Нажав кнопку «Изменить реквизиты», на документы, удовлетворяющие заданному условию, установится пометка на удаление.

Одновременно установите значение реквизита проведен «Нет», чтобы при обработке система сделала их непроведенными. В противном случае 1С выдаст сообщение: «Проведенный документ не может быть помечен на удаление!»

По окончании действия обработки программа сообщит, что реквизиты изменены и покажет количество обработанных объектов.

Подведем итог: работая с большим объемом информации, пользователь может допускать некоторые ошибки, исправить которые легко можно с помощью данного инструмента, зная о его существовании.

Автор статьи: Ольга Круглова

Text.ru - 100.00%

Понравилась статья? Подпишитесь на рассылку новых материалов

Добавить комментарий

В данной статье мы рассмотрим, как можно изменить реквизиты сразу у нескольких элементов какого-либо документа или справочника. В качестве примера все действия будут производиться на демо-базе 1С 8.3 Бухгалтерия 3.0.

Такие ситуации встречаются довольно часто, а причин их множество. Только представьте, насколько неудобно и трудозатратно было бы совершать данную операцию для каждого документа по отдельности.

В программе 1С 8.3 (на управляемых формах) существуют два основных способа групповой обработки справочников и документов:

  • из формы списка;
  • при помощи стандартной обработки.

Первый способ достаточно прост, и любой пользователь без труда с ним справится. Второй же предназначен для администраторов и имеет гораздо больший функционал, например, изменение реквизитов в табличных частях.

Давайте начнем от простого к сложному. Рассмотрим как пользоваться обработкой в первом варианте.

Содержание

  • Изменение справочников и документов из формы списка
  • Стандартная обработка «Групповое изменение реквизитов»
    • Введение новых значений
    • С помощью произвольного алгоритма

Изменение справочников и документов из формы списка

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.

Связаться с нами можно по телефону +7 499 350 29 00.

Услуги и цены можно увидеть по ссылке.

Будем рады помочь Вам!

Предположим, в нашем примере нам нужно изменить ставку НДС сразу у нескольких номенклатурных позиций одноименного справочника. Для этого нам необходимо открыть его форму списка.

Выделите те позиции, которые должны подвергнуться изменению. Это можно сделать левой кнопкой мыши и зажатой клавишей на клавиатуре «Ctrl» или «Shift». Если все элементы идут подряд, то их можно выделить не мышкой, а стрелками вверх и вниз на клавиатуре.

Не снимая выделения, нажмите по одному из элементов правой кнопкой мыши и выберите пункт «Изменить выделенные» в появившемся контекстном меню.

изменить выделенные

Далее перед вами откроется окно, в левом верхнем углу которого будет отображаться, сколько элементов подлежит изменению. В табличной части ниже укажите, какие реквизиты нужно изменить, и какое значение им задать. В нашем случае мы установим у всех номенклатурных позиций в поле «% НДС» — «Без НДС».

без НДС

Так же, данная обработка позволяет изменять не только несколько элементов одновременно, но и несколько групп со всеми подчиненными элементами. Для этого в форме настройки реквизитов нажмите на кнопку «Дополнительные параметры» и в открывшемся окне установите флаг в пункте «Обрабатывать дочерние элементы».

обрабатывать дочерние элементы

После того, как вы установили все нужные настройки, нажмите в форме указания реквизитов на кнопку «Изменить реквизиты». При большом количестве изменяемых данных, выполнение данной операции моет занять длительное время. По завершению программа выдаст соответствующее уведомление.

успешная обработка справочника

Теперь в той же форме списка мы видим, что процент НДС изменился во всех выделенных нами позициях.

список элементов

Стандартная обработка «Групповое изменение реквизитов»

Несомненно, описанный выше способ очень прост в использовании и не требует особых навыков и прав доступа у пользователя, но, к сожалению, он не всегда может быть применим. Тогда на помощь приходит стандартная обработка, которая расположена в разделе «Администрирование» — «Поддержка и обслуживание». Так же вы можете ее найти в обработках через меню «Все функции».

групповое изменение реквизитов

Перед вами откроется форма самой обработки. В верхнем поле «Изменять» мы выберем документы «Реализация (акты, накладные)». Правее появится гиперссылка «Все элементы». Нажав на нее можно настроить отбор для выбора не всех документов, а лишь части по какому-то критерию.

что изменять

В открывшейся форме отбора укажем, что нас нужны только документы с декабря прошлого года. Это можно сделать в верхнем поле окна. Отборов может быть сколько угодно. В нижней же его части динамически отбираются те документы, которые соответствуют указанному отбору. В нашем случае будет обрабатываться всего 56 документов.

условие отбора документов

Теперь нам нужно указать, какие данные и чем мы будем заменять. Обработка позволяет редактировать не только реквизиты шапки, но и табличные части. Они размещены в качестве вкладок на форме обработки.

Введение новых значений

Данная обработка позволяет, как жестко задавать значения реквизитов, так и использовать гибкие алгоритмы. В первом случае все намного проще. Этот режим установлен по умолчанию при открытии обработки и может переключаться соответствующей кнопкой.

ввести новые значения

Для простоты примера мы будем устанавливать везде в качестве склада «Основной склад». После внесения всех изменений, нажмите на кнопку «Изменить реквизиты».

список реквизитов для изменения

При нажатии на кнопку «Дополнительные параметры» вы можете немного расширить возможность настроек изменения реквизитов, например, изменять служебные реквизиты.

дополнительные параметры

С помощью произвольного алгоритма

Данный режим более гибкий, чем предыдущий, но тут не обойтись без базовых навыков в программировании. Включить его можно, нажав на кнопку «Выполнить произвольный алгоритм».

выполнить произвольный алгоритм

В левой части обработки нужно описать сам алгоритм, а в правой ее части для удобства расположены реквизиты нашего документа.

В нижней части формы вы можете указать, записывается изменяемый вами объект автоматически, либо данное условие будет указано в вашем алгоритме. Так же вы можете отключить использование безопасного режима при выполнении группового изменения реквизитов.

Понравилась статья? Поделить с друзьями:
  • 1с перед записью на сервере изменить реквизит
  • 1с получить значение реквизита формы по имени
  • 1с получить реквизит справочника номенклатура
  • 1с получить реквизит формы в модуле менеджера
  • 1с при записи проверить изменился ли реквизит