Как удалить две повторяющихся строки подряд? У нас есть таблица в которой есть повторяющиеся подряд строки (после сортировки) и обе они ненужны!
Например в таблице будут будущие проводки и если суммы совпадают, то эти проводки нам не нужны.
Значит нужно удалить повторяющиеся строки:
Код 1C v 8.х #Область УдалениеЛишнихСтрок
Индекс=0;
Для каждого СтрТаб Из ТаблицаКурсовыхРазниц Цикл
Индекс = ТаблицаКурсовыхРазниц.Индекс(СтрТаб);
СтрТаб2 = ТаблицаКурсовыхРазниц.Получить(Индекс);
Если СтрТаб.СубконтоДт1 = СтрТаб2.СубконтоДт1 И СтрТаб.Сумма = СтрТаб2.Сумма Тогда //Условие совпадиния
ТаблицаКурсовыхРазниц.Удалить(Индекс+1);
ТаблицаКурсовыхРазниц.Удалить(Индекс);
КонецЕсли;
КонецЦикла;
#КонецОбласти
На выходе получим уже чистую таблицу.
Категория:
Работа с Таблицей Значений Как в запросе объединить несколько значений в один столбец отобрав по условию? Бывают ситуации, особенно когда формируешь отчеты по проводкам, где надо вывести отчет по одному типу значений и эти значения могут быть в разных колонках регистра.
В примере ниже, необходимо собрать отчет в разбивке по Номенклатурным группам.
Проводки разные - поэтому Субконто с типом Номенклатурная группа может быть как Дт1 и Дт2 или Дт3
Пример запроса объединяющий несколько значений в один столбец отобрав по условию и собирающий данные по этим условиям:
Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВЫБОР
| КОГДА ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт1 ССЫЛКА Справочник.НоменклатурныеГруппы
| ТОГДА ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт1
| КОГДА ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт2 ССЫЛКА Справочник.НоменклатурныеГруппы
| ТОГДА ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт2
| КОГДА ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт3 ССЫЛКА Справочник.НоменклатурныеГруппы
| ТОГДА ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт3
| КОНЕЦ КАК Измерение,
| ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.LOCATION_ACTIVITY,
| ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.REVENUE_COST_CENTER,
| ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.Сумма,
| ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.Ссылка.Организация,
| ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.Ссылка.Комментарий,
| ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.Ссылка КАК Документ
|ПОМЕСТИТЬ втПоИзмерениям
|ИЗ
| Документ.ОтражениеЗарплатыВРеглУчете.ОтражениеВУчете КАК ОтражениеЗарплатыВРеглУчетеОтражениеВУчете
|ГДЕ
| ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.Ссылка.Проведен
| И ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.Ссылка.ПериодРегистрации МЕЖДУ &НачалоПериода И &ОкончаниеПериода
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втПоИзмерениям.Измерение,
| втПоИзмерениям.LOCATION_ACTIVITY,
| втПоИзмерениям.REVENUE_COST_CENTER,
| втПоИзмерениям.Сумма,
| втПоИзмерениям.Организация,
| втПоИзмерениям.Комментарий,
| втПоИзмерениям.Документ
|ИЗ
| втПоИзмерениям КАК втПоИзмерениям
|ГДЕ
| втПоИзмерениям.Измерение ССЫЛКА Справочник.НоменклатурныеГруппы";
Запрос.УстановитьПараметр("НачалоПериода", Дата("01.09.2014 0:00:00"));
Запрос.УстановитьПараметр("ОкончаниеПериода", Дата("30.09.2014 23:59:59"));
Результат = Запрос.Выполнить();
Выборка = Результат.Выгрузить();
Для каждого СтрокаТЗ Из Выборка Цикл
КонецЦикла;
Категория:
Запросы Как получить виды субконто счета Пример получения возможных видов субконто у счета
Код 1C v 8.2 УП &НаСервере
Процедура ВывестиСубконтоСчета(сч)
ТаблицаСубконто = Сч.ВидыСубконто;
Для Каждого ТекущаяСтрока Из ТаблицаСубконто Цикл
Сообщить(ТекущаяСтрока.ВидСубконто);
КонецЦикла;
КонецПроцедуры
Пример получения значений субконто в движениях документа
Код 1C v 8.2 УП &НаСервере
Процедура ВывестиСубконтоДокумента(ДокументПроверки)
Регистр = РегистрыБухгалтерии.Бухгалтерский;
ДвиженияБУ = Регистр.ВыбратьПоРегистратору(ДокументПроверки);
Пока ДвиженияБУ.Следующий() Цикл
Сообщить("Проводка "+ДвиженияБУ.НомерСтроки);
Сообщить("Счет Дт " +ДвиженияБУ.СчетДт);
ТаблицаСубконтоДт = ДвиженияБУ.СчетДт.ВидыСубконто;
Для Каждого ТекущаяСтрока Из ТаблицаСубконтоДт Цикл
Сообщить("Субконто Дт"+ТекущаяСтрока.НомерСтроки +" - "+ДвиженияБУ.СубконтоДт[ТекущаяСтрока.ВидСубконто]);
КонецЦикла;
Сообщить("Счет Кт " +ДвиженияБУ.СчетКт);
ТаблицаСубконтоКт = ДвиженияБУ.СчетКт.ВидыСубконто;
Для Каждого ТекущаяСтрока Из ТаблицаСубконтоКт Цикл
Сообщить("Субконто Кт"+ТекущаяСтрока.НомерСтроки +" - "+ДвиженияБУ.СубконтоКт[ТекущаяСтрока.ВидСубконто]);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Категория:
Регистры бухгалтерии Проведение документа по регистру бухгалтерии Задача: Есть два склада Склад1 и Склад2. Нужно переместить определенное количество товара со склада1 на склад2. При списании со склада1 нужно проверять остаток, что хватает товара. Проведение сделать по регистру бухгалтерии.(проверку тоже по регистру бухгалтерии).
Решение: В Шапке документа Склад1 и Склад2. В Табличной части номенклатура и количество.
Код 1C v 8.х Процедура ОбработкаПроведения(Отказ, Режим)
Движения.Хозрасчетный.Очистить();
Движения.Хозрасчетный.Записать();
Движения.Хозрасчетный.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Запрос = Новый Запрос; //проверяем сколько осталось на складе1
Запрос.Текст = "ВЫБРАТЬ
| ХозрасчетныйОстатки.КоличествоОстатокДт
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки
|ГДЕ
| ХозрасчетныйОстатки.Счет = &Счет
| И ХозрасчетныйОстатки.Субконто1 = &Субконто1
| И ХозрасчетныйОстатки.Субконто2 = &Субконто2";
Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.ТоварыНаСкладах); //41.1
Запрос.УстановитьПараметр("Субконто1",ТекСтрокаТовары.Номенклатура);
Запрос.УстановитьПараметр("Субконто2",Склад1);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Если Выборка.КоличествоОстатокДт < ТекСтрокаТовары.Количество Тогда
Сообщить("На складе1 остака: " + СокрЛП(Выборка.КоличествоОстатокДт));
Отказ = Истина;
Возврат;
КонецЕсли;
Иначе
Сообщить("нет остатка на складе1");
Отказ = Истина;
Возврат;
КонецЕсли;
Движение = Движения.Хозрасчетный.Добавить();
Движение.СчетКт = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах; //Списываем
Движение.СчетДт = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах; //приходуем
Движение.Период = Дата;
Движение.КоличествоКт = ТекСтрокаТовары.Количество;
Движение.ДатаЗаписи = Дата;
Движение.Содержание = "Перемещение";
БухгалтерскийУчет.УстановитьСубконто(Движение.СчетКт,Движение.СубконтоКт,
"Номенклатура",ТекСтрокаТовары.Номенклатура);
БухгалтерскийУчет.УстановитьСубконто(Движение.СчетКт,Движение.СубконтоКт,
"Склады",Склад1);
БухгалтерскийУчет.УстановитьСубконто(Движение.СчетДт,Движение.СубконтоДт,
"Номенклатура",ТекСтрокаТовары.Номенклатура);
БухгалтерскийУчет.УстановитьСубконто(Движение.СчетДт,Движение.СубконтоДт,
"Склады",Склад2);
//Или так
//Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] = Номенклатура;
//Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады] = Склад1;
//Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] = Номенклатура;
//Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады] = Склад2;
КонецЦикла;
КонецПроцедуры
Категория:
Регистры бухгалтерии Как реализовать метод "красного сторно" для регистра бухгалтерии? Код 1C v 8.х Процедура ОбработкаПроведения(Отказ, Режим)
СторнируемыеДвижения = РегистрыБухгалтерии.Хозрасчетный.ВыбратьПоРегистратору(СторнируемыйДокумент);
Пока СторнируемыеДвижения.Следующий() Цикл
Проводка = Движения.Хозрасчетный.Добавить();
Проводка.Период = Дата;
Проводка.СчетДт = СторнируемыеДвижения.СчетДт;
Проводка.СчетКт = СторнируемыеДвижения.СчетКт;
Для каждого Субконто Из СторнируемыеДвижения.СубконтоДт Цикл
Проводка.СубконтоДт[Субконто.Ключ] = Субконто.Значение;
КонецЦикла;
Для каждого Субконто Из СторнируемыеДвижения.СубконтоКт Цикл
Проводка.СубконтоКт[Субконто.Ключ] = Субконто.Значение;
КонецЦикла;
Проводка.ВалютаДт = СторнируемыеДвижения.ВалютаДт;
Проводка.ВалютаКт = СторнируемыеДвижения.ВалютаКт;
Проводка.ВалютнаяСуммаДт = - СторнируемыеДвижения.ВалютнаяСуммаДт;
Проводка.ВалютнаяСуммаКт = - СторнируемыеДвижения.ВалютнаяСуммаКт;
Проводка.КоличествоДт = - СторнируемыеДвижения.КоличествоДт;
Проводка.КоличествоКт = - СторнируемыеДвижения.КоличествоКт;
Проводка.НомерЖурнала = СторнируемыеДвижения.НомерЖурнала;
Проводка.Организация = СторнируемыеДвижения.Организация;
Проводка.Содержание = СторнируемыеДвижения.Содержание;
Проводка.Сумма = - СторнируемыеДвижения.Сумма;
КонецЦикла;
Движения.Хозрасчетный.Записать();
КонецПроцедуры
Категория:
Регистры бухгалтерии Как перенести остаток со счета на счет? Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ХозрасчетныйОстатки.СуммаОстатокДт
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, ,
| Субконто1 = &Контрагент И Организация = &Организация И Субконто2 = &Договор) КАК ХозрасчетныйОстатки";
// Считаем что на счете ведется аналитика только в разрезе контрагентов
// и договоров.
Запрос.УстановитьПараметр("Период", Период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;
ДБФ.Следующая();
КонецЦикла;
ДБФ.ЗакрытьФайл();
НЗХозрасчетный.Записать();
ЗафиксироватьТранзакцию();
Исключение
Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
ОтменитьТранзакцию();
КонецПопытки;
КонецЕсли;
Как видно из примера, документ «Корректировка записей регистров» используется в качестве регистратора, движения же записываются непосредственно в регистр. Движения по регистрам накопления и регистрам сведений делаются аналогично.
Смотрите так же:
Корректировка регистров накопления через документ
Источник Категория:
Документы Документ "Операция" - Как программно создать и заполнить? В бухгалтерских подсистемах типовых конфигураций есть всем известный документ «Операция». Бухгалтерам не приходится долго объяснять, как им пользоваться. Все по-бухгалтерски просто и лаконично: счет дебета, счет кредита, субконто, количество, сумма и прочие атрибуты бухгалтерских проводок. Проводки вводятся вручную, поэтому результат абсолютно прозрачен и понятен.
Время от времени возникает необходимость массово ввести большое количество проводок. Ситуации могут быть самыми разными: загрузка остатков или наоборот - списание с учета, исправление ошибок в учете и т. д. И тут уже дело за программистом.
На первый взгляд задача может показаться простой: создать документ, заполнить таблицу проводок данными и провести. Но не тут-то было! Как только дело доходит до «Конфигуратора», начинаются сюрпризы. Оказывается, у документа «Операция» вообще нет таблицы проводок, которую мы видим в пользовательском режиме.
Как же так? А вот так! Документ «Операция" используется в качестве регистратора, а проводки пишутся непосредственно в регистр бухгалтерии.
Решается задача довольно просто. Рассмотрим в качестве примера фрагмент кода обработки загрузки остатков по счету 001 «Арендованные основные средства» из dbf-таблицы.
Код 1C v 8.х
ДокОперация = Документы.ОперацияБух.СоздатьДокумент();
ДокОперация.Дата = ДатаДокумента;
ДокОперация.Организация = Организация;
ДокОперация.Ответственный = Ответственный;
ДокОперация.Содержание = Содержание;
ДокОперация.Комментарий = Комментарий;
ДокОперация.Записать();
ДокОперацияСсылка = ДокОперация.Ссылка;
РегХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
РегХозрасчетный.Отбор.Регистратор.Значение = ДокОперацияСсылка;
ДБФ.Первая();
Пока Не ДБФ.ВКонце() Цикл
КодКонтрагента = СокрП(ДБФ.CA);
Контрагент = Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента);
Если Контрагент.Пустая() Тогда
Сообщить("Не найден контрагент с кодом " + КодКонтрагента, СтатусСообщения.Внимание);
КонецЕсли;
КодОС = СокрП(ДБФ.OS);
ОсновноеСредство = Справочники.ОсновныеСредства.НайтиПоКоду(КодОС);
Если ОсновноеСредство.Пустая() Тогда
Сообщить("Не найдено ОС с кодом " + КодОС, СтатусСообщения.Внимание);
КонецЕсли;
РегЗапись = РегХозрасчетный.Добавить();
РегЗапись.Период = ДатаДокумента;
РегЗапись.Регистратор = ДокОперацияСсылка;
РегЗапись.Организация = Организация;
РегЗапись.Содержание = "Корректировка стоимости ОС с 0 стоимостью";
РегЗапись.СчетДт = Сч001;
БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетДт, РегЗапись.СубконтоДт, "Контрагенты", Контрагент);
БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетДт, РегЗапись.СубконтоДт, "ОсновныеСредства", ОсновноеСредство);
РегЗапись.Сумма = ДБФ.Sum;
ДБФ.Следующая();
КонецЦикла;
РегХозрасчетный.Записать();
Я полагаю, принцип работы кода понятен из примера. Сначала создаем и записываем документ «Операция». Сам документ не содержит никаких проводок. Затем создаем набор записей регистра бухгалтерии и записываем в него проводки, используя документ «Операция» в качестве регистратора.
Источник Категория:
Документы Как установить значение Субконто Код 1C v 8.х Процедура УстановитьСубконто(Счет, Субконто, ИмяСубконто, ЗначениеСубконто) Экспорт
Если Счет = Неопределено ИЛИ Счет.Пустая() Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ИмяСубконто) = Тип("Число") Тогда
Если ИмяСубконто > Счет.ВидыСубконто.Количество() Тогда
Возврат;
КонецЕсли;
ВидСубк = Счет.ВидыСубконто[ИмяСубконто - 1].ВидСубконто;
Иначе
ВидСубк = ПланыВидовХарактеристик[Метаданные.НайтиПоТипу(ТипЗнч(Счет)).ВидыСубконто.Имя][ИмяСубконто];
Если Счет.ВидыСубконто.Найти( ВидСубк) = Неопределено Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Если ВидСубк.ТипЗначения.СодержитТип(ТипЗнч(ЗначениеСубконто)) Тогда
Субконто.Вставить(ВидСубк, ЗначениеСубконто);
Иначе
Сообщить("Неверное значение """ + ЗначениеСубконто + """ для вида субконто <" + ВидСубк + ">");
КонецЕсли;
КонецПроцедуры
Пример использования:
Код 1C v 8.х // где Выборка - Выборка из результата запроса
Проводка = Движения.Международный.Добавить();
Проводка.Период = ДатаЗакрытияПериода;
Проводка.СчетДт = Выборка.Счет;
Проводка.СчетКт = ПланыСчетов.Международный.СуммарныеДоходыИРасходы;
Проводка.Организация = Организация;
Проводка.Сумма = Выборка.СуммаОстатокКт;
Проводка.Содержание = "Закрытие счетов в конце финансового года";
Проводка.НомерЖурнала = "Рег";
НомерСубконто = 0;
Для каждого ВидСубконто Из Проводка.СчетДт.ВидыСубконто Цикл
НомерСубконто = НомерСубконто + 1;
ЗначениеСубконто = Выборка["Субконто"+НомерСубконто];
Если ЗначениеЗаполнено(ЗначениеСубконто) Тогда
УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, НомерСубконто, ЗначениеСубконто);
КонецЕсли;
КонецЦикла;
Категория:
Регистры бухгалтерии Как получить список реквизитов операции и проводок? Код 1C v 7.x // Пример 1
Для к = 1 по Метаданные.РеквизитПроводки()
Сообщить(Метаданные.РеквизитПроводки(к).Идентификатор);
КонецЦикла;
Код 1C v 7.x // Пример 2
СписокРеквизитов = СоздатьОбъект("СписокЗначений");
// реквизиты формы операции
СписокРеквизитов.ДобавитьЗначение("ДатаОперации");
СписокРеквизитов.ДобавитьЗначение("НомерДок");
СписокРеквизитов.ДобавитьЗначение("СуммаОперации");
СписокРеквизитов.ДобавитьЗначение("Содержание");
// Дополнительные реквизиты операции
Для М1 = 1 По Метаданные.РеквизитОперации() Цикл
СписокРеквизитов.ДобавитьЗначение(Метаданные.РеквизитОперации(М1).Идентификатор);
КонецЦикла;
// Общие реквизиты документов
Для М1 = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл
СписокРеквизитов.ДобавитьЗначение(Метаданные.ОбщийРеквизитДокумента(М1).Идентификатор);
КонецЦикла;
СписокРеквизитов.ДобавитьЗначение("НомерПроводки");
СписокРеквизитов.ДобавитьЗначение("ПланСчетов");
СписокРеквизитов.ДобавитьЗначение("СчетДт");
СписокРеквизитов.ДобавитьЗначение("СчетКт");
СписокРеквизитов.ДобавитьЗначение("Субконто");
СписокРеквизитов.ДобавитьЗначение("СубконтоДт");
СписокРеквизитов.ДобавитьЗначение("СубконтоКт");
Для М1 = 1 По Метаданные.МаксимальноеКоличествоСубконто Цикл
СписокРеквизитов.ДобавитьЗначение("Субконто" + М1);
СписокРеквизитов.ДобавитьЗначение("СубконтоКт" + М1);
СписокРеквизитов.ДобавитьЗначение("СубконтоДт" + М1);
КонецЦикла;
СписокРеквизитов.ДобавитьЗначение("Валюта");
СписокРеквизитов.ДобавитьЗначение("Курс");
СписокРеквизитов.ДобавитьЗначение("Количество");
СписокРеквизитов.ДобавитьЗначение("ВалСумма");
СписокРеквизитов.ДобавитьЗначение("Сумма");
СписокРеквизитов.ДобавитьЗначение("НомерСтроки");
// Дополнительные реквизиты проводки
Для М1 = 1 По Метаданные.РеквизитПроводки() Цикл
СписокРеквизитов.ДобавитьЗначение(Метаданные.РеквизитПроводки(М1).Идентификатор);
КонецЦикла;
// журнал операций
СписокРеквизитов.ДобавитьЗначение("ВидДок");
СписокРеквизитов.ДобавитьЗначение("ВремяОперации");
// Дополнительные графы журнала операций
Для М1 = 1 По Метаданные.ГрафаЖурналаОпераций() Цикл
СписокРеквизитов.ДобавитьЗначение(Метаданные.ГрафаЖурналаОпераций(М1).Идентификатор);
КонецЦикла;
Категория:
Метаданные Выгрузка и Загрузка проводок документа через файл Код 1C v 8.х Процедура ВыгрузкаПроводок(Кнопка)
Если Не ЗначениеЗаполнено(Документ) Тогда
Сообщить("Заполните поле Документ!");
Иначе
Движ = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
Движ.Отбор.Регистратор.Установить(Документ);
Движ.Прочитать();
ТЗ = Движ.Выгрузить();
ПараметрОтбора = Новый Структура("СчетДт",Счет);
ТЗИтог = ТЗ.Скопировать(ПараметрОтбора);
Если ЗначениеВФайл("D:\OUT.TXT",ТЗ) Тогда
Сообщить("Создан файл ""D:\OUT.TXT""");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ЗагрузитьПроводки(Кнопка)
ТЗЗагрузка = ЗначениеИзФайла("D:\OUT.TXT");
Движ = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
Движ.Отбор.Регистратор.Установить(Документ);
Движ.Прочитать();
ТЗ = Движ.Выгрузить();
Для Каждого Эл Из ТЗЗагрузка Цикл
ПараметрОтбора = Новый Структура("СчетДт,СубконтоДт1",Эл.СчетДт,Эл.СубконтоДт1);
Массив = ТЗ.НайтиСтроки(ПараметрОтбора);
Если Массив.Количество()>0 Тогда
Сообщить("Запись есть - Пропускаем!");
Продолжить;
Иначе
Сообщить("Записи нет - Добавляем!");
НоваяСтрока = ТЗ.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,Эл);
КонецЕсли;
КонецЦикла;
Движ.Загрузить(ТЗ);
Движ.Записать();
Сообщить("Проводки для данного документа созданы успешно!");
КонецПроцедуры
Категория:
Регистры бухгалтерии Формирование проводок в регистре бухгалтерии Код 1C v 8.х
// Задать выбираемые значения.
ВыбранныйОтветственный = Справочники.Пользователи.НайтиПоНаименованию("Иванцова");
ВыбранныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду("00027");
ВыбранныйДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоКоду("00013");
ВыбранныйДокумент = Документы.ДокументРасчетовСКонтрагентом.НайтиПоНомеру(2, '20050101');
ВыбранныйСчет = Справочники.БанковскиеСчета.НайтиПоКоду("00001");
ВыбраннаяСтатья = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("00002");
ВыбраннаяОрганизация = Справочники.Организации.НайтиПоКоду("00001");
ВыбраннаяВалюта = Справочники.Валюты.НайтиПоКоду(810);
// Создать будущий регистратор.
ДатаЗаписи = ТекущаяДата();
Документ = Документы.ОперацияБух.СоздатьДокумент();
Документ.Дата = ДатаЗаписи;
Документ.Организация = ВыбраннаяОрганизация;
Документ.Ответственный = ВыбранныйОтветственный;
Документ.Содержание = "Оплата поставщику";
Документ.Записать();
// Создать набор записей.
НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Документ.Ссылка);
Движение = НаборЗаписей.Добавить();
Движение.Регистратор = Документ.Ссылка;
Движение.Период = ДатаЗаписи;
// Заполнить счет дебета.
Движение.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.01");
// Заполнить аналитику счета дебета.
Движение.СубконтоДт.Контрагенты = ВыбранныйКонтрагент;
Движение.СубконтоДт.Договоры = ВыбранныйДоговор;
Движение.СубконтоДт.ДокументыРасчетовСКонтрагентами = ВыбранныйДокумент;
// Заполнить счет кредита.
Движение.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("51");
// Заполнить аналитику счета кредита.
Движение.СубконтоКт.БанковскиеСчета = ВыбранныйСчет;
Движение.СубконтоКт.СтатьиДвиженияДенежныхСредств = ВыбраннаяСтатья;
// Балансовое измерение.
Движение.Организация = ВыбраннаяОрганизация;
// Балансовый ресурс.
Движение.Сумма = 300000;
// Реквизиты.Движение.НомерЖурнала = "БК";
Движение.Содержание = "Оплата поставщику";
// Записать набор записей.
НаборЗаписей.Записать();
Категория:
Регистры бухгалтерии