Как программно изменить значение регистра при вводе начальных остатков 1с

Куку, епта! Для чего предназначены регламентные задания? Регламентное задание – последовательность действий, описанных с помощью встро...

Куку, епта!

Для чего предназначены регламентные задания?

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

Как задать расписание для автоматического запуска
заданий?

Находим в древе конфигурации штучку «Регламентные задания» и
правым кликом создаем.

Чтобы установить расписание, жмакаем на ссылку «Открыть»
напротив «Расписание» (рис.1)

рис.1

Как обеспечить запуск заданий по расписанию в файловом
варианте работы?

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

Занятие 21.

Для чего предназначен документ для ввода начальных
остатков и как его создать?

Ну как бы предполагается, что возможен вариант, что 1С
внедряется в уже счуществующую фирму, где уже есть какой-то документооборот,
товары на складе, работники бухают и т.д. И нужно, чтобы в регистрах такие
данные существовали.

Создается такой документ – как и все в 1с, правым кликом.
Разве что для этого документа нужно запретить проведение.

Как программно изменить значение регистра при вводе
начальных остатков?

Мне вообще странно, что в данной теме не рассказали о такой
возможности, как тупо обработкой добавить в регистр данные, не создавая никаких
документов. Поэтому вот пример: есть команда
РегистрыСведений.ИмяВашегоРегистра.СоздатьНаборЗаписей();
— почитайте про неё на досуге, как с её помощью можно
изменять/удалять/модифицировать данные любого регистра.

А в
самом занятии нам предлагается рассмотреть возможность программно изменять
какие-либо параметры либо в модуле формы объекта, либо в модуле объекта.

В
каких случаях использовать модуль формы, а в каких – модуль объекта для
размещения обработчиков событий?

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

В

нашей
информационной
базе,

как

и
в

любой
другой,

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

нашей
информационной
базой

не

с

чистого
листа,
а

с

некоторого
исходного
состояния,

которое

было

в

их

прежней

системе

учета

(на
бумаге
например).

Задача
ввода
начальных
остатков
отличается
от

прочих
алгоритмов
изменения

состояния

регистров

тем,

что

подразумевает
изменение
данных
непосредственно
в
регистрах,
без
использования
промежуточных
алгоритмов
(заполнения

документов
данными,
проведения
документов,
контроля
правильности
данных,
указанных
в
документах
и
т.д.).

Рассмотрим

пример

ввода

начальных

остатков

регистра

накопления

ОстаткиМатериалов.

Для
выполнения

этой
задачи

мы

создадим

документ,
в
котором
будем
вручную
редактировать
его
движения
по

регистру
ОстаткиМатериалов
прямо
в
форме
документа.

В
режиме
Конфигуратор

Создадим

новый

объект

документ

с

именем

ВводНачальныхОстатковНоменклатуры.

На

закладке
Движения

запретим

проведение

документа

(поскольку
сами
будем
формировать
записи
регистра)
и
отметим,
что

движения
документа

будут
находиться

в

регистре

накопления
ОстаткиМатериалов.

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

создадим
основную
форму
документа.

В

окне

редактора

форм
на
закладке

Реквизиты

раскроем

основной
реквизит

формы
Объект,

затем

раскроем

Движения,

найдем
строку
ОстаткиМатериалов

и

перетащим

ее

в

окно

элементов

формы.

На

вопрос
системы
«добавить
колонки
таблицы?»
ответим
«да».

Немного
изменим
внешний
вид
формы.

В

окне

элементов

формы
добавим

группу
полей

с

типом

группировки

Горизонтальная
и

перетащим
в
нее
поля
документа
Номер
и

Дата.
А

также

поменяем

местами

поля

таблицы

ДвиженияОстаткиМатериаловНаборСвойств
и
Склад.

В

заключение

отредактируем
командный
интерфейс

формы
документа,
чтобы

в

панели

навигации

формы

иметь

возможность
переходить

к
списку
записей

регистра

ОстаткиМатериалов,

связанному

с
документом.
Для
этого
в
левом
верхнем
окне
редактора

форм
перейдем
на
вкладку
Командный
интерфейс.

В

группе

Панель

навигации
в

подгруппе

Перейти

установим
видимость
для
команды
открытия
регистра
Остатки
материалов.

В

окне
редактирования

документа
ВводНачальныхОстатковНоменклатуры

установим
принадлежность
к
подсистеме
Бухгалтерия.

В

заключение
отредактируем
командный
интерфейс
этой
подсистемы

Общие

Подсистемы

Все
подсистемы.

Выделим
в
списке
подсистем
Бухгалтерию

и
в
списке
команд
установим
видимость

команды

Ввод

начальных

остатков
номенклатуры:
создать
в
группе
Панель
действий.Создать.

В
режиме
1С:Предприятие

Запустим
режим
отладки
и
проверим
работу
нашего
документа.
Выполним

команду

Ввод

начальных

остатков

номенклатуры

в

панели
действий
раздела
Бухгалтерия.

Создадим

документ

для

ввода

начальных

остатков

в

регистр

ОстаткиМатериалов
и
внесем
в
него
следующие
данные.

Обратите

внимание,

что

дата

документа

не

совпадает

с

датами
отдельных
записей,
которые
мы

создаем
в
движениях
документа.

Нажмем
Записать

и

в
панели
навигации
перейдем
к

движениям
нашего
документа
в
регистре
ОстаткиМатериалов.

Таким

образом,
мы

добились

поставленной

цели:

с

одной

стороны,
задавая

дату

документа,

мы

можем

фиксировать

момент
внесения
изменений

в

записи

регистра,

с

другой

стороны

для

каждой
создаваемой

нами
записи
регистра

мы
можем
указать

индивидуальное
значение
поля
Период.

Теперь

займемся

ужесточением
требований

к

тому,
как

наш
документ
формирует
записи
регистра,
и
рассмотрим
два
типичных
варианта.

Программное
редактирование
записей
регистра

В
режиме
Конфигуратор

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

формироваться

той
же
датой,

что
и
дата

документа.

Иначе
говоря,
синхронизируем
дату
движений
с
датой
документа.

Для

этого

создадим

для

формы

документа

обработчик

события

ПередЗаписью
и
добавим
в
него
следующий
текст.

&НаКлиенте

Процедура
ПередЗаписью(Отказ,
ПараметрыЗаписи)

Для
К
аждого
ЗаписьРегистра
Из

Объект.Движения.ОстаткиМатериалов

Цикл

ЗаписьРегистра.Период
=
Объект.Дата;

КонецЦикла;

КонецПроцедуры

В
режиме
1С:Предприятие

Запустим
отладку,
откроем
наш
документ
и
нажмем
Записать.

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

ОстаткиМатериалов,

увидим,
что

значение
поля
Период
у
всех
записей
стало
равно
дате
документа.

Можно
сказать,
что

мы

достигли
поставленной
цели,
но

лишь
для
интерактивной

записи

документа.

Если
программно

вызвать

метод
Записать()
у
объекта
нашего
документа,
он

будет
записан
без
участия
формы
документа.
Это

значит,
что

событие
ПередЗаписью

формы
документа
вызвано
не
будет
и
наш
код
обработчика
не
сработает.

Чтобы
предусмотреть
возможность
синхронизации
периода
движений
документа
с

датой
документа
и

в
случае
программной
записи
объекта
Документ,
следует

использовать

обработчик

события
ПередЗаписью
объекта
Документ,
а
не
формы
документа.
Событие
ПередЗаписью

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

В
режиме
Конфигуратор

Вернемся
в
конфигуратор
и
удалим
из
модуля
формы
добавленный
нами
текст

и

создадим
обработчик
события
ПередЗаписью

в
модуле
документа
ВводНачальныхОстатковНоменклатуры.

Для

этого

откроем

на

закладке

Прочее
окна

редактирования

этого
объекта
модуль
объекта
и
внесем
в
него
следующий
текст.

Процедура
ПередЗаписью(Отказ,
РежимЗаписи,
РежимПроведения)

//
Определить,
нужно
ли

обновлять
дату
в
движениях

ОбновитьДатуДвижений
=
ЭтоНовый()
Или

Движения.ОстаткиМатериалов.Модифицированность();
Если
Не
ОбновитьДатуДвижений
Тогда

//
Проверить,
что

дата
изменилась
Запрос
=
Новый
Запрос;
Запрос.УстановитьПараметр(«ТекущийДокумент»,
Ссылка);
Запрос.Текст
=

«ВЫБРАТЬ

|
Дата

|ИЗ

|
Документ.ВводНачальныхОстатковНоменклатуры

|ГДЕ
Ссылка
=
&ТекущийДокумент»;

Выборка
=
Запрос.Выполнить().Выбрать();
Выборка.Следующий();

ОбновитьДатуДвижений
=
Выборка.Дата
<>
Дата;

КонецЕсли;

//
Установить
всем
новую
дату,
если
нужно

Если
ОбновитьДатуДвижений
Тогда

Если
Не
Движения.ОстаткиМатериалов.Выбран()
И

Не
Движения.ОстаткиМатериалов.Модифицированность()
Тогда

Движения.ОстаткиМатериалов.Прочитать();
КонецЕсли;

Для
Каждого
ЗаписьРегистра
Из
Движения.ОстаткиМатериалов
Цикл

ЗаписьРегистра.Период
=
Дата;
КонецЦикла;

КонецЕсли;

КонецПроцедуры

Как
вы
видите,
в
этом
случае
обработчик
содержит
больше
кода
за
счет
дополнительных
проверок,

которые

выполняются

в

результате
возможности
как
интерактивной,
так
и
программной
записи
объекта.

Поясним
содержание

обработчика.

Если
записывается

новый
документ
или
были
изменены
его
движения,

следует

обновить
дату
движений.

В
противном
случае

мы

считваем

запросом

дату

документа

из

базы

и
сравниваем
ее
с

датой,
установленной
у

записываемого
объекта.

Если
даты
разные,
также
следует
обновить
дату
движений.

Перед
установкой
даты
мы

проверяем,
был
ли

прочитан
набор
записей
в
свойстве
Движения

объекта
и
изменился
ли

он.
Если
оба
этих
условия
ложны,
значит
набор
записей
в
свойстве
Движения

объекта
пуст,
и
это
состояние

не

связано

с

его

изменением.

В

этом

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

записей

в

регистре
(перезаписать
пустым

набором

записей),

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

читаем

движения

из
регистра
в
набор
записей
в
свойстве
Движения.

Затем,
как
и
в
предыдущем
случае,
устанавливаем
нужную
дату
для
всех
записей

этого
набора.

При

выполнении
записи

объекта

документ
этот
набор
будет
записан
в
регистр
накопления.

В
режиме
1С:Предприятие

Запустим
режим
отладки
и

убедимся,
что
указав

новую
дату
для
нашего

документа

и
записав

его,

мы

получим
движения

в

регистре
накопления
с
новой
датой.

В

процессе

записи
нашего

документа

можно

управлять

не

только
периодом
записей
регистра
накопления,
но

и

значениями

других
полей
регистра.

Например,
по

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

позволяющий
вводить

ручные

операции

в

регистр
бухгалтерии.

При

этом
вероятно,

что

кроме
управления

периодом
записей
регистра
вам
потребуется
управлять
значением
поля
Активность
(включать
и
выключать
проводки
документа)
и
т.д.

Где
создавать
обработчики
событий

Выбор
обработчика,

в

который

будет

помещен

текст
процедуры,
зависит
от

логики
работы
создаваемого
объекта.
Если
конфигурация
не
предусматривает
прогаммной

записи

объекта,

можно

выбрать
обработчик

модуля
формы.

Если
предполагается

и

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

Заметьте,

что

оба

этих
способа

не

исключают
модификацию

записей
регистра
через
объект
Регистр<>НаборЗаписей.<имя

регистра>.
Поэтому
если
логика
конфигурации
подразумевает

возможность
программной

модификации

объекта
НаборЗаписей,

код

обработки
следует
помещать
в
обработчик
события
набора

записей.

Все
попытки
изменить

данные
регистра

будут

сведены

к

записи

именно

набора
записей.

Контрольные
вопросы


Для
чего
предназначен

документ
для
ввода
начальных
остатков
и
как
его
создать.


Как
программно
изменить
значение

регистра
при
вводе
начальных
остатков.


В

каких
случаях
использовать
модуль
формы,
а
в
каких

модуль
объекта
для
размещения
обработчиков
событий.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
Анализируем вид регистра для выбора варианта редактирования записей

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

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

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

Изменяем записи в независимом регистре сведений

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

К примеру, нам необходимо перезаписать курс валюты. В первом варианте мы установим курс валюты без анализа уже записанных данных:

Процедура УстановитьКурсВалюты(Период, Валюта, Курс, Кратность) Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); Запись.Период = Период; Запись.Валюта = Валюта; Запись.Курс = Курс; Запись.Кратность = Кратность; Запись.Записать(); КонецПроцедуры

Т.к. регистр сведений у нас периодический — дополнительно мы указываем период для курса валюты.

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

Процедура УстановитьКурсВалюты(Период, Валюта, Курс) Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); Запись.Период = Период; Запись.Валюта = Валюта; Запись.Прочитать(); Если Запись.Выбран() Тогда Запись.Курс = Курс; Запись.Записать(); КонецЕсли; КонецПроцедуры

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

А теперь давайте выполним аналогичные действия с использованием объекта НаборЗаписей для изменения данных в регистре сведений:

Процедура УстановитьКурсВалюты(Период, Валюта, Курс) Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); Набор.Отбор.Период.Установить(Период); Набор.Отбор.Валюта.Установить(Валюта); Набор.Прочитать(); Если Набор.Количество() Тогда Запись = Набор[0]; Запись.Курс = Курс; Набор.Записать(); КонецЕсли; КонецПроцедуры

В примере выше мы создаем набор записей и устанавливаем для него отбор по измерениям и периоду. После установки отбора считываем записи. В результате в наборе будут ранее записанные записи. Т.к. мы установили полный отбор по измерениям (периоду и валюте) — максимальное количество записей в отборе равно 1. Поэтому мы проверяем набор на количество и если запись есть — устанавливаем новый курс валюты.

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

Изменяем записи в регистре с подчинением регистратору

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

В качестве примера будем использовать регистр сведений ЦеныНоменклатуры. Ниже показаны свойства этого регистра:

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

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

Вначале мы устанавливаем отбор по регистратору. После указания отбора считываем записи по этому регистратору и в обходе набора записей ищем записи по определенной номенклатуре и с оптовым видом цен. Если цена хоть в одной записи будет изменена — набор будет модифицирован. Таким образом мы будем записывать только изменившиеся данные.

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

Процедура УвеличитьЦенуНоменклатуры(Номенклатура, ВидЦеныОптовая) Запрос = Новый Запрос( "ВЫБРАТЬ | ЦеныНоменклатуры.Регистратор КАК Регистратор |ИЗ | РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры |ГДЕ | ЦеныНоменклатуры.Номенклатура = &Номенклатура | И ЦеныНоменклатуры.ВидЦены = &ВидЦеныОптовая"); Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Запрос.УстановитьПараметр("ВидЦеныОптовая", ВидЦеныОптовая); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Набор = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); Набор.Отбор.Регистратор.Установить(Выборка.Регистратор); Набор.Прочитать(); Для Каждого Запись Из Набор Цикл Если Запись.Номенклатура = Номенклатура И Запись.ВидЦены = ВидЦеныОптовая Тогда Запись.Цена = Запись.Цена * 1.3; КонецЕсли; КонецЦикла; Если Набор.Модифицированность() Тогда Набор.Записать(); КонецЕсли; КонецЦикла; КонецПроцедуры

Если сравните этот пример с первым — изменилось только определение регистратора. Если первый пример изменял данные только в одном регистраторе — последний пример изменит записи по всем регистраторам в регистре сведений.

На этих небольших примерах мы рассмотрели основные особенности изменения отдельных записей в регистрах сведений. Каждый регистр требует своего особенного подхода — но если Вы поймете общую последовательность действий по изменению регистра сведений, сложностей по работе с регистрами у Вас не будет.

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

Наши разработки:

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

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

В качестве примера, когда может потребоваться программно создать документ «Корректировка записей регистров», предлагаю рассмотреть операцию переоценки основных средств. Переоценка основных средств — ситуация хоть и нечастая, но все же вполне реальная, а специального документа для переоценки в типовых конфигурациях 1С нет. Чтобы пример получился более представительным (включал в себя все виды корректируемых регистров), я сделал обработку для конфигурации «1С:Управление производственным предприятием». Но с другой стороны, чтобы не перегружать пример лишней информацией, мы рассмотрим случай, когда в результате переоценки происходит увеличение стоимости основных средств и накопленной амортизации (дооценка).

В этом случае переоценка основных средств отражается в бухгалтерском учете проводками:

* Дт. 01.01. — Кт. 83.01 — Увеличение первоначальной стоимости ОС.
* Дт. 83.01. — Кт. 02.01 — Увеличение суммы накопленной амортизации ОС.

В налоговом учете операция переоценки основных средств не предусмотрена, но для того чтобы соблюдалось равенство БУ = НУ + ПР + ВР, мы должны отразить в учете возникновение постоянных разниц. Также мы должны сделать движения в регистрах накопления «СтоимостьОС», «СтоимостьОСБухгалтерскийУчет» и в регистрах сведений «ПараметрыАмортизацииОС», «ПараметрыАмортизацииОСБухгалтерскийУчет», «СобытияОС» и «СобытияОСОрганизаций».

Исходные данные для переоценки ОС берутся из dbf-таблицы с набором полей:

* OS (строка) — код основного средства;
* SumU (число) — сумма дооценки по управленческому учету в единицах валюты управленческого учета;
* SumB (число) — сумма дооценки по бухгалтерскому учету;
* AmortU (число) — сумма дооценки накопленной амортизации по управленческому учету в единицах валюты управленческого учета;
* AmortB (число) — сумма дооценки накопленной амортизации по бухгалтерскому учету.

Упрощенный фрагмент кода обработки, иллюстрирующий запись проводок в регистр бухгалтерии, представлен в листинге:

Код 1C v 8.х

 Сч01_01 = ПланыСчетов.Хозрасчетный.ОСвОрганизации;
Сч02_01 = ПланыСчетов.Хозрасчетный.АмортизацияОС_01;
Сч83_01 = ПланыСчетов.Хозрасчетный.ПриростСтоимостиИмуществаПоПереоценке;
ДБФ = Новый XBase;
ДБФ.ОткрытьФайл(ИмяФайла);
Если ДБФ.Открыта() Тогда
Попытка
НачатьТранзакцию();

ДокКорректировка = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ДокКорректировка.ЭтотОбъект, ПараметрыСеанса.ТекущийПользователь);
ДокКорректировка.Дата = Период;

НоваяСтрокаРегБух = ДокКорректировка.ТаблицаРегистровБухгалтерии.Добавить();
НоваяСтрокаРегБух.Имя = "Хозрасчетный";
НоваяСтрокаРегБух.Представление = "Журнал проводок (бухгалтерский учет)";

ДокКорректировка.Записать();
ДокКорректировкаСсылка = ДокКорректировка.Ссылка;

НЗХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НЗХозрасчетный.Отбор.Регистратор.Значение = ДокКорректировкаСсылка;

ДБФ.Первая();
Пока Не ДБФ.ВКонце() Цикл
ОсновноеСредство = Справочники.ОсновныеСредства.НайтиПоКоду(СокрЛП(ДБФ.OS));
Если ОсновноеСредство.Пустая() Тогда
Сообщить("Не найдено ОС с кодом " + ДБФ.OS + "!", СтатусСообщения.Важное);
Продолжить;
КонецЕсли;

ЗХозрасчетный = НЗХозрасчетный.Добавить();
ЗХозрасчетный.Период = Период;
ЗХозрасчетный.Регистратор = ДокКорректировкаСсылка;
ЗХозрасчетный.Организация = Организация;
ЗХозрасчетный.Содержание = "Увеличение первоначальной стоимости ОС";
ЗХозрасчетный.СчетДт = Сч01_01;
ЗХозрасчетный.СчетКт = Сч83_01;
БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетДт, ЗХозрасчетный.СубконтоДт, "ОсновныеСредства", ОсновноеСредство);
БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетКт, ЗХозрасчетный.СубконтоКт, "ОсновныеСредства", ОсновноеСредство);
ЗХозрасчетный.Сумма = ДБФ.SumB;

ЗХозрасчетный = НЗХозрасчетный.Добавить();
ЗХозрасчетный.Период = Период;
ЗХозрасчетный.Регистратор = ДокКорректировкаСсылка;
ЗХозрасчетный.Организация = Организация;
ЗХозрасчетный.Содержание = "Увеличение накопленной амортизации ОС";
ЗХозрасчетный.СчетДт = Сч83_01;
ЗХозрасчетный.СчетКт = Сч02_01;
БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетДт, ЗХозрасчетный.СубконтоДт, "ОсновныеСредства", ОсновноеСредство);
БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетКт, ЗХозрасчетный.СубконтоКт, "ОсновныеСредства", ОсновноеСредство);
ЗХозрасчетный.Сумма = ДБФ.AmortB;

ДБФ.Следующая();
КонецЦикла;
ДБФ.ЗакрытьФайл();
НЗХозрасчетный.Записать();

ЗафиксироватьТранзакцию();
Исключение
Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
ОтменитьТранзакцию();
КонецПопытки;
КонецЕсли;

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

Смотрите так же: Корректировка регистров накопления через документ

Источник

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

/// Как прочитать бухгалтерские проводки без значений
/// субконто в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьПроводкиБезСубконтоНаСервере()
 
    // За журнал проводок отвечает таблица РегистрБухгалтерии.Хозрасчетный.
    // Обратите внимание, что в ней нет информации о субконто - аналитике
    // счетов, участвующих в проводках.
 
    // получим все бухгалтерские проводки
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Хозрасчетный.Период КАК Период,
        |   Хозрасчетный.Организация,
        |   Хозрасчетный.СчетДт,
        |   Хозрасчетный.СчетКт,
        |   Хозрасчетный.КоличествоДт,
        |   Хозрасчетный.КоличествоКт,
        |   Хозрасчетный.Сумма
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
        |ГДЕ
        |   Хозрасчетный.Активность = Истина
        |УПОРЯДОЧИТЬ ПО
        |   Период";
 
    РезультатЗапроса = Запрос.Выполнить();
    Записи = РезультатЗапроса.Выбрать();    
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "[" + Формат(Записи.Период, "ДФ=dd.MM.yy") + "]   " +
            "Дт " + Записи.СчетДт + " " +
            "Кт " + Записи.СчетКт + " " +
            Записи.Сумма + " руб.");
    КонецЦикла;
 
КонецПроцедуры
 
/// Как прочитать бухгалтерские проводки вместе со
/// значениями субконто в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьПроводкиВместеССубконтоНаСервере()
 
    // За получение бухгалтерских проводок вместе с их аналитикой (субконто)
    // отвечает виртуальная таблица ДвиженияССубконто,
    // у неё есть параметры:
    // 1. Начало периода
    // 2. Конец периода
    // 3. Условие
    // 4. Порядок (влияет только на отбор первых)
    // 5. Первые (отбор перых N записей)
 
    // Получим проводки за 1 квартал 2014 года, где счёт 41.01 в
    // дебете или кредите, вместе с их аналитикой (субконто).
 
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   ХозрасчетныйДвиженияССубконто.Период КАК Период,
        |   ХозрасчетныйДвиженияССубконто.Организация,
        |   ХозрасчетныйДвиженияССубконто.Регистратор,
        |   ХозрасчетныйДвиженияССубконто.Активность,
        |   ХозрасчетныйДвиженияССубконто.СчетДт,
        |   ХозрасчетныйДвиженияССубконто.СубконтоДт1,
        |   ХозрасчетныйДвиженияССубконто.СубконтоДт2,
        |   ХозрасчетныйДвиженияССубконто.СубконтоДт3,
        |   ХозрасчетныйДвиженияССубконто.СчетКт,
        |   ХозрасчетныйДвиженияССубконто.СубконтоКт1,
        |   ХозрасчетныйДвиженияССубконто.СубконтоКт2,
        |   ХозрасчетныйДвиженияССубконто.СубконтоКт3,
        |   ХозрасчетныйДвиженияССубконто.Сумма,
        |   ХозрасчетныйДвиженияССубконто.КоличествоДт,
        |   ХозрасчетныйДвиженияССубконто.КоличествоКт
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       ДАТАВРЕМЯ(2014, 03, 31, 23, 59, 59),
        |       Активность = Истина И (
        |           СчетДт = &ВыбСчет ИЛИ СчетКт = &ВыбСчет)
        |   )
        |   КАК ХозрасчетныйДвиженияССубконто
        |УПОРЯДОЧИТЬ ПО
        |   Период Возр";
 
    Запрос.УстановитьПараметр("ВыбСчет",
        ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01"));
 
    РезультатЗапроса = Запрос.Выполнить();
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "[" + Формат(Записи.Период, "ДФ=dd.MM.yy") + "]   " +
            "Дт " + Записи.СчетДт + " " +
            "(" + Записи.СубконтоДт1 + ", " + Записи.СубконтоДт2 + ")" +
            " " +
            "Кт " + Записи.СчетКт + " " +
            "(" + Записи.СубконтоКт1 + ", " + Записи.СубконтоКт2 + ")" +
            " " +
            Записи.Сумма + " руб.");
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить обороты между бухгалтерскими счетами в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьОборотыМеждуСчетамиНаСервере()
 
    // Пример №1
    Сообщить("Пример №1");
 
    // За получение оборотов между счётом и корреспондирующим счётом
    // за произвольный период с заданной периодичностью в различных
    // разрезах аналитики отвечает виртуальная таблица Обороты,
    // у неё есть следующие параметры:
    // 1. Начало периода
    // 2. Конец периода
    // 3. Периодичность (например, Период, Запись, Год, Месяц...)
    // 4. Условие счета (например, Счет = &ВыбСчет)
    // 5. Субконто (список видов субконто, влияет на доступность
    //    и смысл Субконто1, Субконто2.., которыми можно оперировать
    //    в запросе).
    // 6. Условие (например, Субконто1 = &ВыбСклад)
    // 7. Условие корсчета (аналогично условию счёта)
    // 8. КорСубконто (аналогично субконто)
 
    // Узнаем сколько пришло и сколько ушло товара на основной склад
    // за январь 2014 года. То есть получим дебетовые и кредитовые
    // обороты по счёту 41.01, субконто Склады (значение "Основной склад")
 
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   ХозрасчетныйОбороты.Счет,
        |   ХозрасчетныйОбороты.Субконто1 КАК Склад,
        |   ХозрасчетныйОбороты.Организация,
        |   ХозрасчетныйОбороты.СуммаОборотДт КАК ПришёлТовар,
        |   ХозрасчетныйОбороты.СуммаОборотКт КАК УшёлТовар,
        |   ХозрасчетныйОбороты.СуммаОборот КАК Разница
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный.Обороты(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       ДАТАВРЕМЯ(2014, 01, 31, 23, 59, 59),
        |       Период,
        |       Счет = &ВыбСчет,
        |       &ВидыСубконто,
        |       Субконто1 = &ВыбСклад
        |   )
        |КАК ХозрасчетныйОбороты";
 
    Запрос.УстановитьПараметр("ВыбСчет",
        ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01")
    );
 
    ВидыСубконто = Новый Массив;
    ВидыСубконто.Добавить(
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады
    );
    Запрос.УстановитьПараметр("ВидыСубконто", ВидыСубконто);
 
    Запрос.УстановитьПараметр("ВыбСклад",
        Справочники.Склады.НайтиПоНаименованию("Основной")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Если Записи.Следующий() Тогда
 
        Сообщить("Счёт " + Записи.Счет + " (" + Записи.Склад + ")");
        Сообщить("Пришёл товар на " + Записи.ПришёлТовар + " руб.");
        Сообщить("Ушёл товар на " +Записи.УшёлТовар + " руб.");
        Сообщить("Разница между поступление и списанием " + 
            Записи.Разница + " руб."
        );
 
    КонецЕсли;
 
    // ===========================================================
 
    // Пример №2
    Сообщить("Пример №2");
 
    // Узнаем сколько пришло товара на основной склад
    // за каждый месяц 2014 года.
 
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   ХозрасчетныйОбороты.Период,
        |   ХозрасчетныйОбороты.Счет,
        |   ХозрасчетныйОбороты.Субконто1 КАК Склад,
        |   ХозрасчетныйОбороты.Организация,
        |   ХозрасчетныйОбороты.СуммаОборотДт КАК ПришёлТовар
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный.Обороты(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       ДАТАВРЕМЯ(2014, 12, 31, 23, 59, 59),
        |       Месяц,
        |       Счет = &ВыбСчет,
        |       &ВидыСубконто,
        |       Субконто1 = &ВыбСклад
        |   ) КАК ХозрасчетныйОбороты
        |УПОРЯДОЧИТЬ ПО
        |   Период Возр";
 
    Запрос.УстановитьПараметр("ВыбСчет",
        ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01")
    );
 
    ВидыСубконто = Новый Массив;
    ВидыСубконто.Добавить(
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады
    );
    Запрос.УстановитьПараметр("ВидыСубконто", ВидыСубконто);
 
    Запрос.УстановитьПараметр("ВыбСклад",
        Справочники.Склады.НайтиПоНаименованию("Основной")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
 
        Сообщить(
            Формат(Записи.Период, "ДФ=ММММ") + ": " +
            Записи.ПришёлТовар + " руб."
        );
 
    КонецЦикла;
 
    // ===========================================================
 
    // Пример №3
    Сообщить("Пример №3");
 
    // Узнаем сколько денег поступило в кассу от покупателей за 2014 год.
    // То есть проанализируем дебетовые обороты между 50.01 и 62.01
 
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   ХозрасчетныйОбороты.Счет,
        |   ХозрасчетныйОбороты.КорСчет,
        |   ХозрасчетныйОбороты.СуммаОборотДт
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный.Обороты(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       ДАТАВРЕМЯ(2014, 12, 31, 23, 59, 59),
        |       Период,
        |       Счет = &ВыбСчет,
        |       ,
        |       ,
        |       КорСчет = &ВыбКорСчет
        |   ) КАК ХозрасчетныйОбороты";
 
    Запрос.УстановитьПараметр("ВыбСчет",
        ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.01")
    );
 
    Запрос.УстановитьПараметр("ВыбКорСчет",
        ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
 
        Сообщить(
            "За 2014 год на " +
            Записи.Счет + " с " + Записи.КорСчет + " пришло " +
            Записи.СуммаОборотДт + " руб."
        );
 
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить остатки по бухгалтерскому счету в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьОстаткиПоСчетуНаСервере()
 
    // За получение остатков по бухгалтерским счетам
    // в разрезе аналитики отвечает виртуальная
    // таблица Остатки, у неё есть следующие параметры:
    // 1. Период (на который считаем остатки)
    // 2. Условие счета (например, Счет = &ВыбСчет)
    // 3. Субконто (список видов субконто, влияет на доступность
    //    и смысл Субконто1, Субконто2.., которыми можно оперировать
    //    в запросе
    // 4. Условие (например, Субконто1 = &ВыбСклад)
 
    // Найдём остатки товаров на всех складах на конец 2014 года.
    // То есть запросим дебетовые остатки по всем счетам,
    // входящих в группу 41 счёта в разрезе субконто Номенклатура.
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ХозрасчетныйОстатки.Счет,
        |   ХозрасчетныйОстатки.Субконто1 КАК Товар,
        |   ХозрасчетныйОстатки.КоличествоОстатокДт,
        |   ХозрасчетныйОстатки.СуммаОстатокДт        
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный.Остатки(
        |       ДАТАВРЕМЯ(2014, 12, 31, 23, 59, 59),
        |       Счет В ИЕРАРХИИ (&ВыбСчет), &ВидыСубконто
        |   ) КАК ХозрасчетныйОстатки";
 
    Запрос.УстановитьПараметр("ВыбСчет",
        ПланыСчетов.Хозрасчетный.НайтиПоКоду("41")
    );
 
    ВидыСубконто = Новый Массив;
    ВидыСубконто.Добавить(
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура
    );
    Запрос.УстановитьПараметр("ВидыСубконто", ВидыСубконто);
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Сообщить("Остатки товаров по всем складам на конец 2014 года.");
 
    Пока Записи.Следующий() Цикл
 
        Сообщить(
            Записи.Товар.Наименование +
            " Количество [" + Записи.КоличествоОстатокДт + " шт.]" +
            " Сумма [" + Записи.СуммаОстатокДт + " руб.]"
        );
 
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить сразу остатки и обороты по бухгалтерскому счету
/// в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьСразуОстаткиИОборотыПоСчетуНаСервере()
 
    // За получение остатков и обротов за произвольный период
    // с заданной периодичностью в разрезе аналитики отвечает
    // виртуальная таблица ОстаткиИОбороты, у неё есть параметры:
    // 1. Начало периода
    // 2. Конец периода
    // 3. Периодичность (например, Период, Год, Месяц...)
    // 4. Метод дополнения периодов (Движение или ДвиженияИГраницыПериода)
    // 5. Условие счета (например, Счет = &ВыбСчет)
    // 6. Субконто (список видов субконто, влияет на доступность
    //    и смысл Субконто1, Субконто2.., которыми можно оперировать
    //    в запросе
    // 7. Условие (например, Субконто1 = &ВыбТовар)
 
    // Для примера получим начальный остаток, приход, расход, и
    // конечный остаток банана на всех складах за каждый месяц
    // 2014 года.
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ХозрасчетныйОстаткиИОбороты.Период,
        |   ХозрасчетныйОстаткиИОбороты.Счет,
        |   ХозрасчетныйОстаткиИОбороты.Субконто1,
        |   ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстатокДт,
        |   ХозрасчетныйОстаткиИОбороты.КоличествоОборотДт,
        |   ХозрасчетныйОстаткиИОбороты.КоличествоОборотКт,
        |   ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстатокДт
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       ДАТАВРЕМЯ(2014, 12, 31, 23, 59, 59),
        |       Месяц, ДвиженияИГраницыПериода, 
        |       Счет В ИЕРАРХИИ (&ВыбСчет), &ВидыСубконто,
        |       Субконто1 = &ВыбТовар
        |   ) КАК ХозрасчетныйОстаткиИОбороты";
 
    Запрос.УстановитьПараметр("ВыбСчет",
        ПланыСчетов.Хозрасчетный.НайтиПоКоду("41")
    );
 
    ВидыСубконто = Новый Массив;
    ВидыСубконто.Добавить(
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура
    );
    Запрос.УстановитьПараметр("ВидыСубконто", ВидыСубконто);
 
    Запрос.УстановитьПараметр("ВыбТовар", 
        Справочники.Номенклатура.НайтиПоНаименованию("Банан")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(Формат(Записи.Период, "ДФ=ММММ") + ": ");
        Сообщить(
            Строка(Записи.Счет) + " " + Записи.Субконто1 + " " +
            "Нач. остаток " + Записи.КоличествоНачальныйОстатокДт +
            " приход " + Записи.КоличествоОборотДт + ", расход " +
            Записи.КоличествоОборотКт + " Кон. остаток " + 
            Записи.КоличествоКонечныйОстатокДт
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как найти и изменить программно бухгалтерские проводки
/// документа в 1с 8.3, 8.2
 
&НаСервере
Процедура КакНайтиИИзменитьПроводкиДокументаНаСервере()
 
    // предположим у нас есть ссылка на проведенный
    // документ поступления еды № ВМБП-000002
 
    ПоступлениеСсылка = 
        Документы.ПоступлениеЕды.НайтиПоНомеру(
            "ВМБП-000002", '20141231');
 
    // мы знаем, что этот документ делает следующие
    // проводки по регистру бухгалтерии "Хозрасчетный":
    // - Дт 41.01 Кт 60.01
    // - Дт 60.01 Кт 50.01
 
    // наша задача: найти эти проводки бухгалтерские проводки
    // и изменить их (например, удвоим количество по дебету 41.01)
    // и записать вместо старых
 
    // используем объектную технику получения проводок,
    // ведь мы будем их изменять
 
    Поступление = ПоступлениеСсылка.ПолучитьОбъект();
 
    // получим набор проводок этого документа в регистр "Хозрасчетный"
    НаборПроводок = Поступление.Движения.Хозрасчетный;
 
    // прочитаем проводки из базы данных
    НаборПроводок.Прочитать();
 
    Для Каждого Проводка Из НаборПроводок Цикл
 
        // выведем старые значения
        Сообщить(
            "Дт " + Проводка.СчетДт + " (" + Проводка.КоличествоДт + " шт.) " +
            "Кт " + Проводка.СчетКт + " (" + Проводка.КоличествоКт + " шт.) " +
            Проводка.Сумма + " руб."
        ); 
 
        Если 
            Проводка.СчетДт = 
            ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01")
        Тогда
            // эта проводка в дебет 41 счёта
            // изменим её, удвоив количество по дебету
            Проводка.КоличествоДт = Проводка.КоличествоДт * 2;
        КонецЕсли;
 
    КонецЦикла;
 
    // добавим новую проводку
    НоваяПроводка = НаборПроводок.Добавить();
    // дт
    НоваяПроводка.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01");
    НоваяПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады] =
         Справочники.Склады.НайтиПоНаименованию("Основной");
    НоваяПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] =
        Справочники.Номенклатура.НайтиПоНаименованию("Банан");
    НоваяПроводка.КоличествоДт = 333;    
    // кт
    НоваяПроводка.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.01");
    НоваяПроводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] =
        Справочники.Контрагенты.НайтиПоНаименованию("ООО ""Африка""");
    // общая часть
    НоваяПроводка.Период = ТекущаяДата();
    НоваяПроводка.Организация = Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""");
    НоваяПроводка.Сумма = 5000;
    НоваяПроводка.Содержание = "Проводка добавлена программно.";
 
    //  разом запишем набор проводок
    НаборПроводок.Записать(
        Истина // удалим старые проводки и запишем вместо них новые
    );
 
    // теперь бухгалтерские проводки документа № ВМБП-000002,
    // отличаются от тех, что были записаны документом при проведении
    // чтобы вернуть их к начальному виду - нужно
    // перепровести документ
 
КонецПроцедуры
 
/// Как прочитать бухгалтерские проводки документа запросом в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьПроводкиДокументаЗапросомНаСервере()
 
    // этот приём используется, если не требуется изменять
    // найденные проводки
 
    // предположим у нас есть ссылка на проведенный
    // документ поступления еды № ВМБП-000002
 
    ПоступлениеСсылка = 
        Документы.ПоступлениеЕды.НайтиПоНомеру(
            "ВМБП-000002", '20141231');
 
    // мы знаем, что этот документ делает проводки по
    // регистру бухгалтерии "Хозрасчетный"
 
    // прочитаем проводкипо регистру "Хозрасчетный" запросом
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Хозрасчетный.СчетДт,
        |   Хозрасчетный.СчетКт,
        |   Хозрасчетный.Сумма
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
        |ГДЕ
        |   Хозрасчетный.Регистратор = &ВыбРегистратор
        |
        |УПОРЯДОЧИТЬ ПО
        |   Хозрасчетный.НомерСтроки";
 
    Запрос.УстановитьПараметр("ВыбРегистратор", ПоступлениеСсылка);
 
    РезультатЗапроса = Запрос.Выполнить();
 
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
 
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить(
            "Дт " + ВыборкаДетальныеЗаписи.СчетДт +
            " Кт " + ВыборкаДетальныеЗаписи.СчетКт + 
            " " + ВыборкаДетальныеЗаписи.Сумма + " руб."
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как создать бухгалтерские проводки без привязки
/// к документу в 1с 8.3, 8.2
 
&НаСервере
Процедура КакСоздатьПроводкиБезДокументаНаСервере()
 
    // в нашей тестовой конфигурации нет документа
    // "ОперацияБух", который присутствует во всех
    // типовых
 
    Сообщить("Этот пример нельзя выполнить в этой базе.");
    Возврат;
 
    // бухгалтерские проводки обязательно должны быть к
    // привязаны к документу, в данном случае этим документом
    // будет документ "ОперацияБух", задуманный как раз для
    // ручных бухгалтерских операций
 
    // создаём и записываем пустой документ
    // пока без бухгалтерских проводок
    Операция = Документы.ОперацияБух.СоздатьДокумент();
    Операция.Дата = ТекущаяДата();
    Операция.Организация = Справочники.Организации.НайтиПоНаименованию("Ромашка");	
    Операция.СуммаОперации = 1000;
    Операция.Содержание = "Ручная операция по 41 счёту";
    Операция.Записать(РежимЗаписиДокумента.Запись);
 
    // затем получаем его набор проводок (пустой)
    // заполняем его и записываем
    НаборПроводок = Операция.Движения.Хозрасчетный;	
 
    Проводка = НаборПроводок.Добавить();
    Проводка.Период = Операция.Дата;
    Проводка.Организация = Операция.Организация;
    // дт
    Проводка.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01");
    Проводка.СубконтоДт[
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура
    ] = Справочники.Номенклатура.НайтиПоНаименованию("Банан");
 
    На41ВедетсяУчетПоСкладам = Проводка.СчетДт.ВидыСубконто.Найти(
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады
    ) <> Неопределено;
 
    Если На41ВедетсяУчетПоСкладам Тогда
        Проводка.СубконтоДт[
            ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады
        ] = Справочники.Склады.НайтиПоНаименованию("Основной");
    КонецЕсли;
 
    Проводка.КоличествоДт = 3;
    // кт
    Проводка.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.01");
    Проводка.СубконтоКт[
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты
    ] = Справочники.Контрагенты.НайтиПоНаименованию("Беркут");
    // общее
    Проводка.Сумма = 500;
 
    НаборПроводок.Записать(Истина);
 
КонецПроцедуры
 
/// Как получить информацию о бухгалтерском счёте
/// из плана счетов в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьИнформациюОСчетеНаСервере()
 
    // читаем информацию о счёте из плана счетов
 
    // находим счёт по коду
    Счёт41_1 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01");
 
    // смотрим состав субконто
    Для Каждого Субконто Из Счёт41_1.ВидыСубконто Цикл        
        Сообщить("Субконто " + Субконто.ВидСубконто.Наименование);
        Сообщить("  Валютный " + Субконто.Валютный);
        Сообщить("  Количественный " + Субконто.Количественный);
        Сообщить("  Суммовой " + Субконто.Суммовой);
    КонецЦикла;
 
    // узнаем, ведётся ли на 41.01 учёт по складам
    // (другими словами есть ли у этого счёта субконто
    // склады)
 
    Если Счёт41_1.ВидыСубконто.Найти(
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады
    ) <> Неопределено Тогда
        Сообщить("На 41.01 ведётся учёт по складам.");
    Иначе
        Сообщить("На 41.01 ведётся учёт по складам не ведётся.");
    КонецЕсли;
 
    // узнаем является ли один счёт родителем другого
    Счёт41 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41");
    Если Счёт41_1.ПринадлежитЭлементу(Счёт41) Тогда
        Сообщить(Счёт41.Код + " является родителем для " + 
            Счёт41_1.Код);
    КонецЕсли;
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

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

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

В качестве примера, когда может потребоваться программно создать документ «Корректировка записей регистров», предлагаю рассмотреть операцию переоценки основных средств. Переоценка основных средств — ситуация хоть и нечастая, но все же вполне реальная, а специального документа для переоценки в типовых конфигурациях 1С нет. Чтобы пример получился более представительным (включал в себя все виды корректируемых регистров), я сделал обработку для конфигурации «1С:Управление производственным предприятием». Но с другой стороны, чтобы не перегружать пример лишней информацией, мы рассмотрим случай, когда в результате переоценки происходит увеличение стоимости основных средств и накопленной амортизации (дооценка).

В этом случае переоценка основных средств отражается в бухгалтерском учете проводками:

* Дт. 01.01. — Кт. 83.01 — Увеличение первоначальной стоимости ОС.

* Дт. 83.01. — Кт. 02.01 — Увеличение суммы накопленной амортизации ОС.

В налоговом учете операция переоценки основных средств не предусмотрена, но для того чтобы соблюдалось равенство БУ = НУ + ПР + ВР, мы должны отразить в учете возникновение постоянных разниц. Также мы должны сделать движения в регистрах накопления «СтоимостьОС», «СтоимостьОСБухгалтерскийУчет» и в регистрах сведений «ПараметрыАмортизацииОС», «ПараметрыАмортизацииОСБухгалтерскийУчет», «СобытияОС» и «СобытияОСОрганизаций».

Исходные данные для переоценки ОС берутся из dbf-таблицы с набором полей:

* OS (строка) — код основного средства;

* SumU (число) — сумма дооценки по управленческому учету в единицах валюты управленческого учета;

* SumB (число) — сумма дооценки по бухгалтерскому учету;

* AmortU (число) — сумма дооценки накопленной амортизации по управленческому учету в единицах валюты управленческого учета;

* AmortB (число) — сумма дооценки накопленной амортизации по бухгалтерскому учету.

Упрощенный фрагмент кода обработки, иллюстрирующий запись проводок в регистр бухгалтерии, представлен в листинге:

Код 1C v 8.х

 Сч01_01 = ПланыСчетов.Хозрасчетный.ОСвОрганизации;
      
Сч02_01 = ПланыСчетов.Хозрасчетный.АмортизацияОС_01;
Сч83_01 = ПланыСчетов.Хозрасчетный.ПриростСтоимостиИмуществаПоПереоценке;
ДБФ = Новый XBase;
ДБФ.ОткрытьФайл(ИмяФайла);
Если ДБФ.Открыта() Тогда
Попытка
НачатьТранзакцию();

ДокКорректировка = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ДокКорректировка.ЭтотОбъект, ПараметрыСеанса.ТекущийПользователь);
ДокКорректировка.Дата = Период;

НоваяСтрокаРегБух = ДокКорректировка.ТаблицаРегистровБухгалтерии.Добавить();
НоваяСтрокаРегБух.Имя = "Хозрасчетный";
НоваяСтрокаРегБух.Представление = "Журнал проводок (бухгалтерский учет)";

ДокКорректировка.Записать();
ДокКорректировкаСсылка = ДокКорректировка.Ссылка;

НЗХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НЗХозрасчетный.Отбор.Регистратор.Значение = ДокКорректировкаСсылка;

ДБФ.Первая();
Пока Не ДБФ.ВКонце() Цикл
ОсновноеСредство = Справочники.ОсновныеСредства.НайтиПоКоду(СокрЛП(ДБФ.OS));
Если ОсновноеСредство.Пустая() Тогда
Сообщить("Не найдено ОС с кодом " + ДБФ.OS + "!", СтатусСообщения.Важное);
Продолжить;
КонецЕсли;

ЗХозрасчетный = НЗХозрасчетный.Добавить();
ЗХозрасчетный.Период = Период;
ЗХозрасчетный.Регистратор = ДокКорректировкаСсылка;
ЗХозрасчетный.Организация = Организация;
ЗХозрасчетный.Содержание = "Увеличение первоначальной стоимости ОС";
ЗХозрасчетный.СчетДт = Сч01_01;
ЗХозрасчетный.СчетКт = Сч83_01;
БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетДт, ЗХозрасчетный.СубконтоДт, "ОсновныеСредства", ОсновноеСредство);
БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетКт, ЗХозрасчетный.СубконтоКт, "ОсновныеСредства", ОсновноеСредство);
ЗХозрасчетный.Сумма = ДБФ.SumB;

ЗХозрасчетный = НЗХозрасчетный.Добавить();
ЗХозрасчетный.Период = Период;
ЗХозрасчетный.Регистратор = ДокКорректировкаСсылка;
ЗХозрасчетный.Организация = Организация;
ЗХозрасчетный.Содержание = "Увеличение накопленной амортизации ОС";
ЗХозрасчетный.СчетДт = Сч83_01;
ЗХозрасчетный.СчетКт = Сч02_01;
БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетДт, ЗХозрасчетный.СубконтоДт, "ОсновныеСредства", ОсновноеСредство);
БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетКт, ЗХозрасчетный.СубконтоКт, "ОсновныеСредства", ОсновноеСредство);
ЗХозрасчетный.Сумма = ДБФ.AmortB;

ДБФ.Следующая();
КонецЦикла;
ДБФ.ЗакрытьФайл();
НЗХозрасчетный.Записать();

ЗафиксироватьТранзакцию();
Исключение
Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
ОтменитьТранзакцию();
КонецПопытки;
КонецЕсли;

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

Смотрите так же: Корректировка регистров накопления через документ

Информация взята с сайта http://helpf.pro

В этой статье мы научимся программным способом изменять независимые регистры сведений.

Более подробно о регистрах сведений, их видах и о многом другом читайте в моей книге «Программировать в 1С за 11 шагов».

Регистры сведений 1С
Периодические регистры сведений 1С
Подчиненные регистры сведений 1С

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

В конфигурации «Управляемое приложение» цены товаров хранятся в независимом периодическом регистре сведений, который имеет следующие данные

Периодичность этого регистра сведений день.

Создадим внешнюю обработку, которую назовем «ИзменитьЦены», и у которой будет один реквизит ВидЦены (тип СправочникСсылка.ВидыЦен),  второй реквизит – Процент (тип число), а третий реквизит – Дата (тип Дата). Создадим команду «Изменить цену», которую разместим в командной панели.

Для команды «Изменить цену» создадим обработчики на сервере и на клиенте, где будем изменять данные регистра сведений ЦеныТоваров.

&НаСервере
Процедура ИзменитьЦенуНаСервере()
РегистрЦены = РегистрыСведений.ЦеныТоваров.СоздатьНаборЗаписей(); //1
РегистрЦены.Отбор.ВидЦен.Установить(ВидЦены); //2
РегистрЦены.Отбор.Период.Установить(НачалоДня(Дата));//3
РегистрЦены.Прочитать(); //4
Для Каждого стрНабора из РегистрЦены Цикл
стрНабора.Цена = стрНабора.Цена*((100 + Процент)/100); //5
КонецЦикла;
РегистрЦены.Записать();//6
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦену(Команда)
ИзменитьЦенуНаСервере();
КонецПроцедуры

Разберем код на листинге выше. В строке //1 мы создаем набор записей регистра сведений «ЦеныТоваров» с этим набором мы и будем в дальнейшем осуществлять все операции.

Тот набор записей, который мы получили, в принципе, он весь будет содержать все записи регистра сведений, после того как мы его прочтем, а нам нужно обработать только часть этого набора. Поэтому мы в строках //2 и //3 накладываем отборы на регистр сведений. Имейте в виду, что отбор в регистрах сведений можно устанавливать только на равенство! В строка //4 мы прочитали данные регистра сведений, и теперь можем к объекту РегистрЦены обращаться как к коллекции. Что мы и делаем в цикле ниже – мы обходим коллекцию, и в каждой итерации цикла изменяем цену (строка //5). В строке //6 просто записываем объект РегистрЦены, после этого наши изменения появятся в базе.

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

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

Поэтому приходится выдумывать различные методы. Я покажу два из них. В первом мы с помощью запроса получим данные из регистра с отбором по нужному виду цен (это будут все данные), и изменим в поле запроса цены, которые будут входить в заданный период.  После этого получим выгрузку из запроса. Создадим набор записей регистра накопления с отбором по нужному виду цен (это обязательно, иначе мы затрем всё остальное), прочитаем этот отбор и загрузим в него нашу выгрузку из  запроса. После того как мы запишем регистр, обновятся все записи для данного вида цен, но только у тех, которые входят в период, пересчитается дата. Код данного алгоритма ниже. Период – это реквизит формы с типом СтандартныйПериод.

&НаСервере
Процедура ИзменитьЦенуНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
|    ЦеныТоваров.Период КАК Период,
|    ЦеныТоваров.Товар КАК Товар,
|    ЦеныТоваров.ВидЦен КАК ВидЦен,
|    ВЫБОР
|        КОГДА ЦеныТоваров.Период >= НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ)
|                И ЦеныТоваров.Период <= КОНЕЦПЕРИОДА(&ДатаКонца, ДЕНЬ)
|            ТОГДА ЦеныТоваров.Цена * ((100 + &ПроцентЦены) / 100)
|        ИНАЧЕ ЦеныТоваров.Цена
|    КОНЕЦ КАК Цена
|ИЗ
|    РегистрСведений.ЦеныТоваров КАК ЦеныТоваров
|ГДЕ
|    ЦеныТоваров.ВидЦен = &ВидЦен»;
Запрос.УстановитьПараметр(«ДатаНачала»,Период.ДатаНачала);
Запрос.УстановитьПараметр(«ДатаКонца»,Период.ДатаОкончания);
Запрос.УстановитьПараметр(«ВидЦен»,ВидЦены);
Запрос.УстановитьПараметр(«ПроцентЦены»,Процент);
Результат = Запрос.Выполнить();
Если
Результат.Пустой() Тогда
Сообщить(«Нет данных в регистре по заданному отбору»);
Возврат;
КонецЕсли;
Выгрузка = Результат.Выгрузить();
РегистрЦены = РегистрыСведений.ЦеныТоваров.СоздатьНаборЗаписей();
РегистрЦены.Отбор.ВидЦен.Установить(ВидЦены);
РегистрЦены.Прочитать();
РегистрЦены.Загрузить(Выгрузка);
РегистрЦены.Записать();
КонецПроцедуры

Замерим производительность этого способа.

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

&НаСервере
Процедура ИзменитьЦенуНаСервере()
РегистрЦены = РегистрыСведений.ЦеныТоваров.СоздатьНаборЗаписей();
РегистрЦены.Отбор.ВидЦен.Установить(ВидЦены);
РегистрЦены.Прочитать();
ТаблицаСРегистра = РегистрЦены.Выгрузить();
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
|    ТаблицаВыгрузки.Период КАК Период,
|    ТаблицаВыгрузки.ВидЦен КАК ВидЦен,
|    ТаблицаВыгрузки.Товар КАК Товар,
|    ТаблицаВыгрузки.Цена КАК Цена
|ПОМЕСТИТЬ втТаблица
|ИЗ
|    &ТаблицаВыгрузки КАК ТаблицаВыгрузки
|
|ИНДЕКСИРОВАТЬ ПО
|    ВидЦен,
|    Товар
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    втТаблица.Период КАК Период,
|    втТаблица.ВидЦен КАК ВидЦен,
|    втТаблица.Товар КАК Товар,
|    ВЫБОР
|        КОГДА втТаблица.Период >= НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ)
|                И втТаблица.Период <= КОНЕЦПЕРИОДА(&ДатаКонца, ДЕНЬ)
|            ТОГДА втТаблица.Цена * ((100 + &ПроцентЦены) / 100)
|        ИНАЧЕ втТаблица.Цена
|    КОНЕЦ КАК Цена
|ИЗ
|    втТаблица КАК втТаблица»;
Запрос.УстановитьПараметр(«ДатаНачала»,Период.ДатаНачала);
Запрос.УстановитьПараметр(«ДатаКонца»,Период.ДатаОкончания);
Запрос.УстановитьПараметр(«ТаблицаВыгрузки»,ТаблицаСРегистра);
Запрос.УстановитьПараметр(«ПроцентЦены»,Процент);
Результат = Запрос.Выполнить();
Выгрузка = Результат.Выгрузить();
РегистрЦены.Загрузить(Выгрузка);
РегистрЦены.Записать();
КонецПроцедуры

Подробности об использовании таблиц значений в запросах Вы узнаете в моем курсе «Запрос в 1С: от новичка до профи».
Если брать мои замеры производительности, то первый способ в разы быстрее второго.

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

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

&НаСервере
Процедура ИзменитьЦенуНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
|    ЦеныТоваровСрезПоследних.Товар КАК Товар,
|    ЦеныТоваровСрезПоследних.Цена * ((100 + &ПроцентЦены) / 100) КАК Цена,
|    &ВидЦены КАК ВидЦен,
|    НАЧАЛОПЕРИОДА(&ТекущаяДата, ДЕНЬ) КАК Период
|ИЗ
|    РегистрСведений.ЦеныТоваров.СрезПоследних(, ВидЦен = &ВидЦены) КАК ЦеныТоваровСрезПоследних»;
Запрос.УстановитьПараметр(«ВидЦены»,ВидЦены);
Запрос.УстановитьПараметр(«ПроцентЦены»,Процент);
Запрос.УстановитьПараметр(«ТекущаяДата»,ТекущаяДата());
Выборка = Запрос.Выполнить().Выбрать();
РегистрЦены = РегистрыСведений.ЦеныТоваров.СоздатьНаборЗаписей();
РегистрЦены.Отбор.Период.Установить(НачалоДня(ТекущаяДата()));
РегистрЦены.Прочитать();
РегистрЦены.Очистить();
Пока
Выборка.Следующий() Цикл
НоваяЗапись = РегистрЦены.Добавить();
ЗаполнитьЗначенияСвойств(НоваяЗапись,Выборка);
КонецЦикла;
РегистрЦены.Записать();
КонецПроцедуры

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

Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

Книга «Основы разработки в 1С: Такси»

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

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


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

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

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