Как удалить движения документа программно? Потребовалось в УТ быстро удалить все движения по банку, дело вроде легкое - отменить проведение всех поступлений и списаний безналичных денежных средств, но не тут то было...
При попытке отмены проведения выполнялись проверки на условия оплаты по заказу и документ ни как не отменял проведения
Ну не может типовым способом, заставим не типовым: Через запрос делаем выбору необходимых нам документов и в обработке результата пишем:
Код 1C v 8.3 Для Каждого СтрокаРезультата Из РезультатТаблица Цикл
ДокОбъект = СтрокаРезультата. Ссылка. ПолучитьОбъект( ) ;
Для Каждого Движение ИЗ ДокОбъект. Движения Цикл
Если Движение. Количество( ) > 0 Тогда
Точка = Найти( Строка( Движение) , "." ) ;
ВидРегистра = Лев( Строка( Движение) , Точка - 13 ) ;
РегистрИмя = СокрП( Сред( Строка( Движение) , Точка + 1 ) ) ;
Если ВидРегистра = "РегистрНакопления" Тогда
НаборЗаписей = РегистрыНакопления[РегистрИмя]. СоздатьНаборЗаписей( ) ;
ИначеЕсли ВидРегистра = "РегистрБухгалтерии" Тогда
НаборЗаписей = РегистрыБухгалтерии[РегистрИмя]. СоздатьНаборЗаписей( ) ;
ИначеЕсли ВидРегистра = "РегистрСведений" Тогда
НаборЗаписей = РегистрыСведений[РегистрИмя]. СоздатьНаборЗаписей( ) ;
ИначеЕсли ВидРегистра = "РегистрРасчета" Тогда
НаборЗаписей = РегистрыРасчета[РегистрИмя]. СоздатьНаборЗаписей( ) ;
КонецЕсли ;
НаборЗаписей. Отбор. Регистратор. Установить( ДокОбъект. Ссылка) ;
Иначе
НаборЗаписей = Движение;
КонецЕсли ;
Попытка
НаборЗаписей. Записать( ) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
КонецПопытки ;
КонецЦикла ;
ДокОбъект. Проведен = Ложь ;
ДокОбъект. Записать( режимзаписидокумента. запись) ;
КонецЦикла ;
Готовая функция для использования в своих обработках или общем модуле:
Код 1C v 8.3 Процедура УдалитьДвиженияДокумента(Документ)
ДокОбъект = Документ. ПолучитьОбъект( ) ;
Для Каждого Движение ИЗ ДокОбъект. Движения Цикл
Если Движение. Количество( ) > 0 Тогда
Точка = Найти( Строка( Движение) , "." ) ;
ВидРегистра = Лев( Строка( Движение) , Точка - 13 ) ;
РегистрИмя = СокрП( Сред( Строка( Движение) , Точка + 1 ) ) ;
Если ВидРегистра = "РегистрНакопления" Тогда
НаборЗаписей = РегистрыНакопления[РегистрИмя]. СоздатьНаборЗаписей( ) ;
ИначеЕсли ВидРегистра = "РегистрБухгалтерии" Тогда
НаборЗаписей = РегистрыБухгалтерии[РегистрИмя]. СоздатьНаборЗаписей( ) ;
ИначеЕсли ВидРегистра = "РегистрСведений" Тогда
НаборЗаписей = РегистрыСведений[РегистрИмя]. СоздатьНаборЗаписей( ) ;
ИначеЕсли ВидРегистра = "РегистрРасчета" Тогда
НаборЗаписей = РегистрыРасчета[РегистрИмя]. СоздатьНаборЗаписей( ) ;
КонецЕсли ;
НаборЗаписей. Отбор. Регистратор. Установить( ДокОбъект. Ссылка) ;
Иначе
НаборЗаписей = Движение;
КонецЕсли ;
Попытка
НаборЗаписей. Записать( ) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
КонецПопытки ;
КонецЦикла ;
КонецПроцедуры
Категория:
Документы Программная корректировка движений документа В некоторых типовых конфигурациях фирмы 1С существует возможность ручной корректировки движений документа по регистрам. В конфигурации 1С: Бухгалтерия 8 для этого, при наличии соответствующих прав, нужно открыть движения документа и установить флаг “Ручная корректировка”. Однако, иногда возникает необходимость выполнить корректировку движений большого количества документов. В этом случае нам понадобится обработка, которая изменит движения документов без перепроведения.
Рассмотрим как изменить движения документа на примере конфигурации 1С: Бухгалтерия 8. Менять будем движения по регистру бухгалтерии “Хозрасчетный”. Пусть перед нами стоит задача заполнить суммы налогового учета по данным бухгалтерского. Предположим, что у нас уже есть обработка, которая выбирает необходимые нам документы и последовательно обрабатывает их с помощью описанной нами процедуры “ИзменитьДвиженияДокумента”. Посмотрим как должна выглядеть эта процедура.
Код 1C v 8.х Процедура ИзменитьДвиженияДокумента(ДокументСсылка)
НаборЗаписей = РегистрыБухгалтерии. Хозрасчетный. СоздатьНаборЗаписей( ) ;
НаборЗаписей. Отбор. Регистратор. Установить( ДокументСсылка) ;
НаборЗаписей. Прочитать( ) ;
Если НаборЗаписей. Количество( ) = 0 Тогда
Возврат ;
КонецЕсли ;
Для каждого Запись из НаборЗаписей Цикл
Если Запись. СчетДт. НалоговыйУчет Тогда
Запись. СуммаНУДт = Запись. Сумма;
КонецЕсли ;
Если Запись. СчетКт. НалоговыйУчет Тогда
Запись. СуммаНУКт = Запись. Сумма;
КонецЕсли ;
КонецЦикла ;
НаборЗаписей. ОбменДанными. Загрузка = Истина ;
НаборЗаписей. Записать( ) ;
ДокументОбъект = ДокументСсылка. ПолучитьОбъект( ) ;
ДокументОбъект. ОбменДанными. Загрузка = Истина ;
ДокументОбъект. РучнаяКорректировка = Истина ;
ДокументОбъект. Записать( ) ;
КонецПроцедуры
Хотелось бы отметить, что без проверки ведения налогового учета на счёте, при попытке записать набор, содержащий проводку с ненулевой суммой по счёту на котором не ведется налоговый учет, возникнет ошибка следующего содержания:
Запись не верна! Поле “Сумма (налоговый учет)” должно быть пустым! (Регистр бухгалтерии: Журнал проводок (бухгалтерский и налоговый учет); Номер строки: 1)
Режим обмена данными устанавливается следующими строками:
Код 1C v 8.х НаборЗаписей. ОбменДанными. Загрузка = Истина ;
ДокументОбъект. ОбменДанными. Загрузка = Истина ;
Это необходимо для того, чтобы не выполнялся программный код, находящийся в обработчиках событий “ПередЗаписью” модуля набора записей регистра бухгалтерии “Хозрасчетный” и модуля корректируемого документа. В каждом из них (для типовых конфигураций) есть проверка следующего вида:
Код 1C v 8.х Если ОбменДанными. Загрузка Тогда
Возврат ;
КонецЕсли ;
Признак ручной корректировки документа (ДокументОбъект.РучнаяКорректировка = Истина ) необходимо устанавливать для того, чтобы изменения сохранились при повторном проведении документа. При проведении такого документа в конфигурации 1С:Бухаглерия 8 выдается следующее сообщение:
Движения документа отредактированы вручную и не могут быть автоматически актуализированы.
Источник
Категория:
Регистры бухгалтерии Обход метаданных (полезные функции) При написании небольших автоматизированных тестов часто надо обойти всю конфигурацию и проверить, например, для всех форм какое-нибудь свойство. Это всё легко делается через свойство глобального контекста "Метаданные", но чтоб дорбаться до обхода реквизитов надо написать кучу вложенных циклов. При этом код становится слабочитаемым и слабомодифицируемым.
Ниже приведен небольшой модуль, который решает задачу легко и удобно. Создана специальная функция РазвернутьСтрокуОбходаМетаданных, которая может по строке типа "Метаданные.Справочники.*.Реквизиты.*" построить массив строк с перечислением всех реквизитов всех справочников. При помощи этой и нескольких других функций в экспортных функциях модуля реализованы вполне прикладные задачи - получение всех реквизитов, всех макетов, всех форм конфигурации и построение таблицы всех составных типов.
Код 1C v 8.х
Функция РазвернутьСтрокуОбходаМетаданных(СтрокаОбхода, ЗаменяемоеЗначение = "*" , ПредставлениеПоУмолчанию = "" )
Рез = Новый Массив;
ЧастиСтрокиОбхода = РазобратьСтрокуОбхода( СтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию) ;
Если ЧастиСтрокиОбхода = Неопределено тогда
Рез. Добавить( СтрокаОбхода) ;
Иначе
ОбъектКоллекции = Вычислить( ЧастиСтрокиОбхода. СтрокаКоллекции) ;
РазвернутаяКоллекция = РазвернутьКоллекциюВПредставления( ОбъектКоллекции, ЧастиСтрокиОбхода. СтрокаПредставление) ;
Для каждого ЭлементРазвернутойКоллекции Из РазвернутаяКоллекция Цикл
ТекущаяСтрокаОбхода = ЧастиСтрокиОбхода. СтрокаНачало + ЭлементРазвернутойКоллекции + ЧастиСтрокиОбхода. СтрокаКонец;
МассивЭлемента = РазвернутьСтрокуОбходаМетаданных( ТекущаяСтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию) ;
Для каждого ПримитивныйЭлементОбхода Из МассивЭлемента Цикл
Рез. Добавить( ПримитивныйЭлементОбхода) ;
КонецЦикла ;
КонецЦикла ;
КонецЕсли ;
Возврат Рез;
КонецФункции
Функция РазобратьСтрокуОбхода(СтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию)
Если ПустаяСтрока( ЗаменяемоеЗначение) Тогда
ВызватьИсключение "Некорректное выражение заменяемого значения" ;
КонецЕсли ;
ПозицияЗамены = Найти( СтрокаОбхода, ЗаменяемоеЗначение) ;
Если ПозицияЗамены = 0 Тогда
Возврат Неопределено ;
КонецЕсли ;
СтрокаНачало = Лев( СтрокаОбхода, ПозицияЗамены - 1 ) ;
СтрокаКоллекции = СтрокаНачало;
Если Прав( СтрокаКоллекции, 1 ) = "." Тогда
СтрокаКоллекции = Лев( СтрокаКоллекции, СтрДлина( СтрокаКоллекции) - 1 ) ;
КонецЕсли ;
ПозицияОкончанияЗамены = ПозицияЗамены + СтрДлина( ЗаменяемоеЗначение) ;
ОстатокВыражения = Сред( СтрокаОбхода, ПозицияОкончанияЗамены) ;
ОткрывающаяСкобка = "[" ;
ЗакрывающаяСкобка = "]" ;
Если Найти( ОстатокВыражения, ОткрывающаяСкобка) = 1 Тогда
ОстатокВыражения = Сред( ОстатокВыражения, СтрДлина( ОткрывающаяСкобка) + 1 ) ;
ПозицияЗакрывающейСкобки = Найти( ОстатокВыражения, ЗакрывающаяСкобка) ;
Если ПозицияЗакрывающейСкобки = 0 Тогда
ВызватьИсключение "Синтаксическая ошибка разбора выражения" ;
КонецЕсли ;
СтрокаПредставление = Лев( ОстатокВыражения, ПозицияЗакрывающейСкобки - 1 ) ;
ОстатокВыражения = Сред( ОстатокВыражения, ПозицияЗакрывающейСкобки + СтрДлина( ЗакрывающаяСкобка) ) ;
Иначе
СтрокаПредставление = ПредставлениеПоУмолчанию;
КонецЕсли ;
СтрокаКонец = ОстатокВыражения;
Рез = Новый Структура( "ПозицияЗамены, СтрокаНачало, СтрокаКоллекции, СтрокаПредставление, СтрокаКонец" ,
ПозицияЗамены, СтрокаНачало, СтрокаКоллекции, СтрокаПредставление, СтрокаКонец) ;
Возврат Рез;
КонецФункции
Функция РазвернутьКоллекциюВПредставления(Коллекция, Знач ПредставлениеЭлемента = "" )
Если не ПустаяСтрока( ПредставлениеЭлемента) Тогда
Если Найти( ПредставлениеЭлемента, ";" ) > 0 Тогда
ВызватьИсключение "Некорректное выражение представления" ;
КонецЕсли ;
ПредставлениеЭлемента = "." + ПредставлениеЭлемента;
КонецЕсли ;
Рез = Новый Массив;
Для каждого ЭлементКоллекции Из Коллекция Цикл
ТекПредставление = Строка( Вычислить( "ЭлементКоллекции" + ПредставлениеЭлемента) ) ;
Рез. Добавить( ТекПредставление) ;
КонецЦикла ;
Возврат Рез;
КонецФункции
Функция РазвернутьМассивСтрокОбходаМетаданных(МассивСтрокОбхода, ЗаменяемоеЗначение = "*" , ПредставлениеПоУмолчанию = "Имя" )
Рез = Новый Массив;
Для каждого СтрокаОбхода Из МассивСтрокОбхода Цикл
ДополнениеРезультата = РазвернутьСтрокуОбходаМетаданных( СтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию) ;
Для каждого ТекСтрока Из ДополнениеРезультата Цикл
Рез. Добавить( ТекСтрока) ;
КонецЦикла ;
КонецЦикла ;
Возврат Рез;
КонецФункции
Функция ПолучитьМассивСтрокМногострочнойСтроки(ПреобразуемаяСтрока, ИгнорироватьПустые = Истина, СокращатьПробелы = Истина)
Рез = Новый Массив;
ЧислоСтрок = СтрЧислоСтрок( ПреобразуемаяСтрока) ;
Для Сч = 1 По ЧислоСтрок Цикл
ТекСтрока = СтрПолучитьСтроку( ПреобразуемаяСтрока, Сч) ;
Если ИгнорироватьПустые и ПустаяСтрока( ТекСтрока) Тогда
Продолжить;
КонецЕсли ;
Если СокращатьПробелы Тогда
ТекСтрока = СокрЛП( ТекСтрока) ;
КонецЕсли ;
Рез. Добавить( ТекСтрока) ;
КонецЦикла ;
Возврат Рез;
КонецФункции
Функция ПолучитьВсеХранимыеРеквизитыКонфигурации() Экспорт
СтрокаВсехРеквизитов =
"
|Метаданные.Константы.*
|Метаданные.ПланыОбмена.*.Реквизиты.*
|Метаданные.ПланыОбмена.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Справочники.*.Реквизиты.*
|Метаданные.Справочники.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Документы.*.Реквизиты.*
|Метаданные.Документы.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Последовательности.*.Измерения.*
|Метаданные.ПланыВидовХарактеристик.*.Реквизиты.*
|Метаданные.ПланыВидовХарактеристик.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.ПланыСчетов.*.Реквизиты.*
|Метаданные.ПланыСчетов.*.ПризнакиУчета.*
|Метаданные.ПланыСчетов.*.ПризнакиУчетаСубконто.*
|Метаданные.ПланыСчетов.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.ПланыВидовРасчета.*.Реквизиты.*
|Метаданные.ПланыВидовРасчета.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.РегистрыСведений.*.Измерения.*
|Метаданные.РегистрыСведений.*.Ресурсы.*
|Метаданные.РегистрыСведений.*.Реквизиты.*
|Метаданные.РегистрыНакопления.*.Измерения.*
|Метаданные.РегистрыНакопления.*.Ресурсы.*
|Метаданные.РегистрыНакопления.*.Реквизиты.*
|Метаданные.РегистрыБухгалтерии.*.Измерения.*
|Метаданные.РегистрыБухгалтерии.*.Ресурсы.*
|Метаданные.РегистрыБухгалтерии.*.Реквизиты.*
|Метаданные.РегистрыРасчета.*.Измерения.*
|Метаданные.РегистрыРасчета.*.Ресурсы.*
|Метаданные.РегистрыРасчета.*.Реквизиты.*
|Метаданные.БизнесПроцессы.*.Реквизиты.*
|Метаданные.БизнесПроцессы.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Задачи.*.Реквизиты.*
|Метаданные.Задачи.*.РеквизитыАдресации.*
|Метаданные.Задачи.*.ТабличныеЧасти.*.Реквизиты.*
|" ;
ВсеХранимыеРеквизитыКонфигурации = РазвернутьМассивСтрокОбходаМетаданных( ПолучитьМассивСтрокМногострочнойСтроки( СтрокаВсехРеквизитов) ) ;
Возврат ВсеХранимыеРеквизитыКонфигурации;
КонецФункции
Функция ПолучитьВсеХранимыеРеквизитыКонфигурацииСоставногоТипа() Экспорт
ВсеХранимыеРеквизитыКонфигурации = ПолучитьВсеХранимыеРеквизитыКонфигурации( ) ;
Рез = Новый ТаблицаЗначений;
Рез. Колонки. Добавить( "Имя" , Новый ОписаниеТипов( "Строка" ) ) ;
Рез. Колонки. Добавить( "Тип" , Новый ОписаниеТипов( "ОписаниеТипов" ) ) ;
Рез. Колонки. Добавить( "КоличествоПростыхТипов" , Новый ОписаниеТипов( "Число" ) ) ;
Для каждого ТекРеквизит Из ВсеХранимыеРеквизитыКонфигурации Цикл
Реквизит = Вычислить( ТекРеквизит) ;
Тип = Реквизит. Тип;
КоличествоПростыхТипов = Тип. Типы( ) . Количество( ) ;
Если КоличествоПростыхТипов< > 1 Тогда
ТекСтрока = Рез. Добавить( ) ;
ТекСтрока. Имя = ТекРеквизит;
ТекСтрока. Тип = Тип;
ТекСтрока. КоличествоПростыхТипов = КоличествоПростыхТипов;
КонецЕсли ;
КонецЦикла ;
Возврат Рез;
КонецФункции
Функция ПолучитьВсеФормыКонфигурации() Экспорт
СтрокаВсехРеквизитов =
"
|Метаданные.ПланыОбмена.*.Формы.*
|Метаданные.КритерииОтбора.*.Формы.*
|Метаданные.ОбщиеФормы.*
|Метаданные.Справочники.*.Формы.*
|Метаданные.Документы.*.Формы.*
|Метаданные.ЖурналыДокументов.*.Формы.*
|Метаданные.Перечисления.*.Формы.*
|Метаданные.Отчеты.*.Формы.*
|Метаданные.Обработки.*.Формы.*
|Метаданные.ПланыВидовХарактеристик.*.Формы.*
|Метаданные.ПланыСчетов.*.Формы.*
|Метаданные.ПланыВидовРасчета.*.Формы.*
|Метаданные.РегистрыСведений.*.Формы.*
|Метаданные.РегистрыНакопления.*.Формы.*
|Метаданные.РегистрыБухгалтерии.*.Формы.*
|Метаданные.РегистрыРасчета.*.Формы.*
|Метаданные.БизнесПроцессы.*.Формы.*
|Метаданные.Задачи.*.Формы.*
|" ;
ВсеФормыКонфигурации = РазвернутьМассивСтрокОбходаМетаданных( ПолучитьМассивСтрокМногострочнойСтроки( СтрокаВсехРеквизитов) ) ;
Возврат ВсеФормыКонфигурации;
КонецФункции
Функция ПолучитьВсеМакетыКонфигурации() Экспорт
СтрокаВсехРеквизитов =
"
|Метаданные.ПланыОбмена.*.Макеты.*
|Метаданные.ОбщиеМакеты.*
|Метаданные.Справочники.*.Макеты.*
|Метаданные.Документы.*.Макеты.*
|Метаданные.ЖурналыДокументов.*.Макеты.*
|Метаданные.Перечисления.*.Макеты.*
|Метаданные.Отчеты.*.Макеты.*
|Метаданные.Обработки.*.Макеты.*
|Метаданные.ПланыВидовХарактеристик.*.Макеты.*
|Метаданные.ПланыСчетов.*.Макеты.*
|Метаданные.ПланыВидовРасчета.*.Макеты.*
|Метаданные.РегистрыСведений.*.Макеты.*
|Метаданные.РегистрыНакопления.*.Макеты.*
|Метаданные.РегистрыБухгалтерии.*.Макеты.*
|Метаданные.РегистрыРасчета.*.Макеты.*
|Метаданные.БизнесПроцессы.*.Макеты.*
|Метаданные.Задачи.*.Макеты.*
|" ;
ВсеМакетыКонфигурации = РазвернутьМассивСтрокОбходаМетаданных( ПолучитьМассивСтрокМногострочнойСтроки( СтрокаВсехРеквизитов) ) ;
Возврат ВсеМакетыКонфигурации;
КонецФункции
Категория:
Метаданные Как получить виды субконто счета Пример получения возможных видов субконто у счета
Код 1C v 8.2 УП &НаСервере
Процедура ВывестиСубконтоСчета(сч)
ТаблицаСубконто = Сч. ВидыСубконто;
Для Каждого ТекущаяСтрока Из ТаблицаСубконто Цикл
Сообщить( ТекущаяСтрока. ВидСубконто) ;
КонецЦикла ;
КонецПроцедуры
Пример получения значений субконто в движениях документа
Код 1C v 8.2 УП &НаСервере
Процедура ВывестиСубконтоДокумента(ДокументПроверки)
Регистр = РегистрыБухгалтерии. Бухгалтерский;
ДвиженияБУ = Регистр. ВыбратьПоРегистратору( ДокументПроверки) ;
Пока ДвиженияБУ. Следующий( ) Цикл
Сообщить( "Проводка " + ДвиженияБУ. НомерСтроки) ;
Сообщить( "Счет Дт " + ДвиженияБУ. СчетДт) ;
ТаблицаСубконтоДт = ДвиженияБУ. СчетДт. ВидыСубконто;
Для Каждого ТекущаяСтрока Из ТаблицаСубконтоДт Цикл
Сообщить( "Субконто Дт" + ТекущаяСтрока. НомерСтроки + " - " + ДвиженияБУ. СубконтоДт[ТекущаяСтрока. ВидСубконто]) ;
КонецЦикла ;
Сообщить( "Счет Кт " + ДвиженияБУ. СчетКт) ;
ТаблицаСубконтоКт = ДвиженияБУ. СчетКт. ВидыСубконто;
Для Каждого ТекущаяСтрока Из ТаблицаСубконтоКт Цикл
Сообщить( "Субконто Кт" + ТекущаяСтрока. НомерСтроки + " - " + ДвиженияБУ. СубконтоКт[ТекущаяСтрока. ВидСубконто]) ;
КонецЦикла ;
КонецЦикла ;
КонецПроцедуры
Категория:
Регистры бухгалтерии Поиск в базе битых ссылок - "объект не найден" В статье
Битая ссылка, <Объект не найден>, Уникальный Идентификатор, GUID мы обсуждали как востановить битые ссылки!
А вот как найти в базе все битые ссылки, которые имеют вид типа "<Объект не найден> (137:8b270030482898d011daad3cc45fc830)"?
Для поиска этого была написана данная обработка:
Скачивать файлы может только зарегистрированный пользователь!
Для поиска: Выбираем объекты метаданных , которые хотим проверить, жмем кнопочку "Выполнить" и наблюдаем в таблице выходные данные. Откуда можем попасть в объекты-источники.
Для программиста:
Код 1C v 8.х Процедура КнопкаВыполнитьНажатие(Кнопка)
ИспользоватьОграничение = ЗначениеЗаполнено( ОграничениеТипов) ;
РезультатПоиска. Очистить( ) ;
Для Каждого ОбъектыМетаданных Из КоллекцияОбъектов Цикл
Для Каждого ОбъектМетаданных Из ОбъектыМетаданных Цикл
Состояние( ОбъектМетаданных. ПолноеИмя( ) ) ;
ПроверитьОбъектНаБитыеСсылки( ОбъектМетаданных) ;
КонецЦикла ;
КонецЦикла ;
Для Каждого ОбъектыМетаданных Из КоллекцияРегистров Цикл
Для Каждого ОбъектМетаданных Из ОбъектыМетаданных Цикл
Состояние( ОбъектМетаданных. ПолноеИмя( ) ) ;
ПроверитьРегистрНаБитыеСсылки( ОбъектМетаданных) ;
КонецЦикла ;
КонецЦикла ;
КонецПроцедуры
Процедура ВывестиДанные(ТекстЗапроса)
Запрос = Новый Запрос( ТекстЗапроса) ;
Попытка
РезультатЗапроса = Запрос. Выполнить( ) ;
Если Не РезультатЗапроса. Пустой( ) Тогда
ТЗ = РезультатЗапроса. Выгрузить( ) ;
Для Каждого Стр Из ТЗ Цикл
ОбработкаПрерыванияПользователя( ) ;
Строка = РезультатПоиска. Добавить( ) ;
ЗаполнитьЗначенияСвойств( Строка, Стр) ;
КонецЦикла ;
КонецЕсли ;
Исключение
Сообщить( ИнформацияОбОшибке( ) . Описание + " " + ИнформацияОбОшибке( ) . Причина) ;
КонецПопытки ;
КонецПроцедуры
Процедура ПроверитьРегистрНаБитыеСсылки(ОбъектМетаданных)
ИмяТаблицы = ОбъектМетаданных. ПолноеИмя( ) ;
Если Метаданные. РегистрыСведений. Содержит( ОбъектМетаданных) Тогда
Если ОбъектМетаданных. РежимЗаписи = НезависимыйРежимЗаписи Тогда
Возврат ;
КонецЕсли ;
АнализСвойствРегистра( ОбъектМетаданных, ОбъектМетаданных. Реквизиты, ИмяТаблицы) ;
КонецЕсли ;
АнализСвойствРегистра( ОбъектМетаданных, ОбъектМетаданных. Измерения, ИмяТаблицы) ;
АнализСвойствРегистра( ОбъектМетаданных, ОбъектМетаданных. Реквизиты, ИмяТаблицы) ;
АнализРегистратораРегистра( ОбъектМетаданных, ИмяТаблицы) ;
Если Метаданные. РегистрыБухгалтерии. Содержит( ОбъектМетаданных) Тогда
КонецЕсли ;
Если Метаданные. РегистрыРасчета. Содержит( ОбъектМетаданных) Тогда
КонецЕсли ;
КонецПроцедуры
Процедура ПроверитьОбъектНаБитыеСсылки(ОбъектМетаданных)
ИмяТаблицы = ОбъектМетаданных. ПолноеИмя( ) ;
АнализСвойствОбъекта( ОбъектМетаданных, ОбъектМетаданных. Реквизиты, ИмяТаблицы) ;
Для Каждого ТабЧасть Из ОбъектМетаданных. ТабличныеЧасти Цикл
Если ТабличныеЧастиИсключения. Найти( ТабЧасть. Имя) < > Неопределено Тогда
Продолжить;
КонецЕсли ;
АнализСвойствОбъекта( ОбъектМетаданных, ТабЧасть. Реквизиты, ИмяТаблицы + "." + ТабЧасть. Имя)
КонецЦикла ;
Если Метаданные. Справочники. Содержит( ОбъектМетаданных) И ОбъектМетаданных. Владельцы. Количество( ) > 0 Тогда
МассивВладельцев = Новый Массив;
Для Каждого Элемент Из ОбъектМетаданных. Владельцы Цикл
МассивВладельцев. Добавить( Элемент) ;
КонецЦикла ;
КонецЕсли ;
ОбработкаПрерыванияПользователя( ) ;
КонецПроцедуры
Процедура АнализСвойствОбъекта(ОбъектМетаданных, Свойства, ИмяТаблицы)
Для Каждого Реквизит Из Свойства Цикл
Если РеквизитыИсключения. Найти( Реквизит. Имя) < > Неопределено Тогда
Продолжить;
КонецЕсли ;
Для Каждого моТип Из Реквизит. Тип. Типы( ) Цикл
ТекстЗапроса = "" ;
МетаданныеТипа = Метаданные. НайтиПоТипу( моТип) ;
Если МетаданныеТипа < > Неопределено
И Не Метаданные. Перечисления. Содержит( МетаданныеТипа) Тогда
Если ИспользоватьОграничение Тогда
Если Не ПоискПоТипу( МетаданныеТипа. ПолноеИмя( ) ) Тогда
Продолжить;
КонецЕсли ;
КонецЕсли ;
ДобавитьВЗапросОбъект( ТекстЗапроса, ОбъектМетаданных, ИмяТаблицы, Реквизит. Имя, моТип) ;
КонецЕсли ;
Если Не ПустаяСтрока( ТекстЗапроса) Тогда
ВывестиДанные( ТекстЗапроса) ;
КонецЕсли ;
КонецЦикла ;
КонецЦикла ;
КонецПроцедуры
Процедура АнализСвойствРегистра(ОбъектМетаданных, Свойства, ИмяТаблицы)
Для Каждого Реквизит Из Свойства Цикл
Если РеквизитыИсключения. Найти( Реквизит. Имя) < > Неопределено Тогда
Продолжить;
КонецЕсли ;
Для Каждого моТип Из Реквизит. Тип. Типы( ) Цикл
ТекстЗапроса = "" ;
МетаданныеТипа = Метаданные. НайтиПоТипу( моТип) ;
Если МетаданныеТипа < > Неопределено
И Не Метаданные. Перечисления. Содержит( МетаданныеТипа) Тогда
Если ИспользоватьОграничение Тогда
Если Не ПоискПоТипу( МетаданныеТипа. ПолноеИмя( ) ) Тогда
Продолжить;
КонецЕсли ;
КонецЕсли ;
ДобавитьВЗапросРегистр( ТекстЗапроса, ОбъектМетаданных, ИмяТаблицы, Реквизит. Имя, моТип) ;
КонецЕсли ;
Если Не ПустаяСтрока( ТекстЗапроса) Тогда
ВывестиДанные( ТекстЗапроса) ;
КонецЕсли ;
КонецЦикла ;
КонецЦикла ;
КонецПроцедуры
Процедура АнализРегистратораРегистра(ОбъектМетаданных, ИмяТаблицы)
МассивРегистраторов = ПолучитьСписокРегистраторов( ОбъектМетаданных) ;
Для Каждого Регистратор Из МассивРегистраторов Цикл
Если РеквизитыИсключения. Найти( "Регистратор" ) < > Неопределено Тогда
Продолжить;
КонецЕсли ;
моТип = Регистратор;
ТекстЗапроса = "" ;
МетаданныеТипа = Метаданные. НайтиПоТипу( моТип) ;
Если МетаданныеТипа < > Неопределено
И Не Метаданные. Перечисления. Содержит( МетаданныеТипа) Тогда
Если ИспользоватьОграничение Тогда
Если Не ПоискПоТипу( МетаданныеТипа. ПолноеИмя( ) ) Тогда
Продолжить;
КонецЕсли ;
КонецЕсли ;
ДобавитьВЗапросРегистр( ТекстЗапроса, ОбъектМетаданных, ИмяТаблицы, "Регистратор" , моТип) ;
КонецЕсли ;
Если Не ПустаяСтрока( ТекстЗапроса) Тогда
ВывестиДанные( ТекстЗапроса) ;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры
Функция ПолучитьСписокРегистраторов(ОбъектМетаданных)
МассивРегистраторов = Новый Массив;
МенеджерОбъект = ПолучитьМенеджерОбъекта( ОбъектМетаданных) ;
Если МенеджерОбъект < > Неопределено Тогда
НаборЗаписей = МенеджерОбъект. СоздатьНаборЗаписей( ) ;
ЭлементОтбора = НаборЗаписей. Отбор. Регистратор;
МассивРегистраторов = ЭлементОтбора. ТипЗначения. Типы( ) ;
КонецЕсли ;
Возврат МассивРегистраторов;
КонецФункции
Функция ПолучитьМенеджерОбъекта(ОбъектМетаданных)
Перем МенеджерОбъекта;
Если Метаданные. РегистрыБухгалтерии. Содержит( ОбъектМетаданных) Тогда
МенеджерОбъекта = РегистрыБухгалтерии[ОбъектМетаданных. Имя];
ИначеЕсли Метаданные. РегистрыНакопления. Содержит( ОбъектМетаданных) Тогда
МенеджерОбъекта = РегистрыНакопления[ОбъектМетаданных. Имя];
ИначеЕсли Метаданные. РегистрыСведений. Содержит( ОбъектМетаданных) Тогда
МенеджерОбъекта = РегистрыСведений[ОбъектМетаданных. Имя];
ИначеЕсли Метаданные. РегистрыРасчета. Содержит( ОбъектМетаданных) Тогда
МенеджерОбъекта = РегистрыРасчета[ОбъектМетаданных. Имя];
КонецЕсли ;
Возврат МенеджерОбъекта;
КонецФункции
Функция ПоискПоТипу(ИмяТипа)
Результат = Ложь ;
Если ИспользоватьОграничение Тогда
МассивСтрок = ОграничениеТипов. НайтиСтроки( Новый Структура( "ТипДанных" , ИмяТипа) ) ;
Если ЗначениеЗаполнено( МассивСтрок) Тогда
Результат = Истина ;
КонецЕсли ;
КонецЕсли ;
Возврат Результат;
КонецФункции
Процедура ДобавитьВЗапросРегистр(ТекстЗапроса, ОбъектМетаданных, ИмяТаблицы, ИмяРеквизита, ТипРеквизита)
Текст = "ВЫБРАТЬ Об." + ИмяРеквизита + " КАК Объект,
| "" " + ИмяТаблицы + "." + ИмяРеквизита + """ КАК ТаблицаИсточник,
| Об.Регистратор КАК ОбъектИсточник,
| " + ДобавитьОписаниеТипа( ИмяРеквизита, ТипРеквизита) + "
|ИЗ
| " + ИмяТаблицы + " КАК Об
|ГДЕ " + ДобавитьУсловия( ИмяРеквизита, ТипРеквизита) ;
ТекстЗапроса = ТекстЗапроса + ? ( ПустаяСтрока( ТекстЗапроса) , "" , Символы. ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы. ПС) + Текст;
КонецПроцедуры
Процедура ДобавитьВЗапросОбъект(ТекстЗапроса, ОбъектМетаданных, ИмяТаблицы, ИмяРеквизита, ТипРеквизита)
Текст = "ВЫБРАТЬ Об." + ИмяРеквизита + " КАК Объект,
| "" " + ИмяТаблицы + "." + ИмяРеквизита + """ КАК ТаблицаИсточник,
| Об.Ссылка КАК ОбъектИсточник,
| " + ДобавитьОписаниеТипа( ИмяРеквизита, ТипРеквизита) + "
|ИЗ
| " + ИмяТаблицы + " КАК Об
|ГДЕ " + ДобавитьУсловия( ИмяРеквизита, ТипРеквизита) ;
ТекстЗапроса = ТекстЗапроса + ? ( ПустаяСтрока( ТекстЗапроса) , "" , Символы. ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы. ПС) + Текст;
КонецПроцедуры
Функция ДобавитьУсловия(ИмяРеквизита, ТипРеквизита)
мдОбъекта = Метаданные. НайтиПоТипу( ТипРеквизита) ;
ИмяТаблицы = мдОбъекта. ПолноеИмя( ) ;
ПроверкаНаПустыеЗначения = " Об." + ИмяРеквизита + " ССЫЛКА " + ИмяТаблицы;
ПроверкаНаПустыеЗначения = ПроверкаНаПустыеЗначения + " И ВЫРАЗИТЬ(Об." + ИмяРеквизита + " КАК " + ИмяТаблицы + ").Ссылка есть null" ;
Если Не Метаданные. Перечисления. Содержит( мдОбъекта) Тогда
ПроверкаНаПустыеЗначения = ПроверкаНаПустыеЗначения + " И Об." + ИмяРеквизита + " <> Значение(" + ИмяТаблицы + ".ПустаяСсылка)" ;
КонецЕсли ;
Возврат ПроверкаНаПустыеЗначения;
КонецФункции
Функция ДобавитьОписаниеТипа(ИмяРеквизита, ТипРеквизита)
ОбъектТипа = Метаданные. НайтиПоТипу( ТипРеквизита) ;
ИмяТаблицы = ОбъектТипа. ПолноеИмя( ) ;
ОписаниеТипа = """ " + ИмяТаблицы + """ КАК ТипДанных" ;
Возврат ОписаниеТипа;
КонецФункции
Процедура ОграничениеТиповТипДанныхНачалоВыбора(Элемент, СтандартнаяОбработка)
Перем ЭлементСписка;
СтандартнаяОбработка = Ложь ;
Строка = ЭлементыФормы. ОграничениеТипов. ТекущиеДанные;
Если Не ПустаяСтрока( Строка. ТипДанных) Тогда
ЭлементСписка = СписокТипов. НайтиПоЗначению( Строка. ТипДанных) ;
КонецЕсли ;
ВыбранныйЭлемент = СписокТипов. ВыбратьЭлемент( , ЭлементСписка) ;
Если ВыбранныйЭлемент < > Неопределено Тогда
Строка. ТипДанных = ВыбранныйЭлемент. Значение;
КонецЕсли ;
КонецПроцедуры
РеквизитыИсключения = Новый Массив;
ТабличныеЧастиИсключения = Новый Массив;
СписокТипов = Новый СписокЗначений;
Для Каждого ОбъектМетаданных Из Метаданные. Справочники Цикл
СписокТипов. Добавить( ОбъектМетаданных. ПолноеИмя( ) , ОбъектМетаданных. Имя, , БиблиотекаКартинок. СправочникОбъект) ;
КонецЦикла ;
Для Каждого ОбъектМетаданных Из Метаданные. Документы Цикл
СписокТипов. Добавить( ОбъектМетаданных. ПолноеИмя( ) , ОбъектМетаданных. Имя, , БиблиотекаКартинок. ДокументОбъект) ;
КонецЦикла ;
КоллекцияОбъектов = Новый Массив;
КоллекцияОбъектов. Добавить( Метаданные. ПланыОбмена) ;
КоллекцияОбъектов. Добавить( Метаданные. Справочники) ;
КоллекцияОбъектов. Добавить( Метаданные. Документы) ;
КоллекцияОбъектов. Добавить( Метаданные. ПланыВидовХарактеристик) ;
КоллекцияОбъектов. Добавить( Метаданные. ПланыСчетов) ;
КоллекцияОбъектов. Добавить( Метаданные. ПланыВидовРасчета) ;
КоллекцияОбъектов. Добавить( Метаданные. БизнесПроцессы) ;
КоллекцияОбъектов. Добавить( Метаданные. Задачи) ;
КоллекцияРегистров = Новый Массив;
КоллекцияРегистров. Добавить( Метаданные. РегистрыСведений) ;
КоллекцияРегистров. Добавить( Метаданные. РегистрыНакопления) ;
КоллекцияРегистров. Добавить( Метаданные. РегистрыБухгалтерии) ;
КоллекцияРегистров. Добавить( Метаданные. РегистрыРасчета) ;
Категория:
1С Общие вопросы - Обычные формы Как в запросе отобрать битые ссылки, поиск Битых Ссылок Когда объект был удален непосредственно, то все ссылки на него в справочниках, в документах, в регистрах стали битыми и отображаются следующим образом:
<Объект не найден> (16:bca8000c6efdd52111d8eaba7c9706eb)
Битая ссылка не является пустой. Т.е. метод Пустая() возвращает Ложь. Определить, что ссылка битая можно так:
Код 1C v 8.х Если Ссылка. ПолучитьОбъект( ) = Неопределено Тогда
КонецЕсли ;
Если Лев( СокрЛП( Ссылка) , 18 ) = "<Объект не найден>" Тогда
Код 1C v 8.х
Попытка
обьект= Ссылка. Ссылка;
Исключение
сообщить( "битая" ) ;
КонецПопытки ;
И последний вариант для проверки в запросах:
ГДЕ Объект.РеквизитОбъекта ЕСТЬ NULL И Не Объект=&ПустаяСсылкаОбъекта
Ниже дана программа для удаления записей регистров, у которых регистратор - битая ссылка, т.е. не существует в базе.
Код 1C v 8.х Процедура УдалениеБитыхСсылок(ИмяРегистра,ТипРегистра,ТипРегистраЗ)
МенеджерРегистра = ТипРегистра[ИмяРегистра];
Запрос = Новый Запрос( "
|ВЫБРАТЬ Регистратор
|ИЗ " + ТипРегистраЗ+ "." + ИмяРегистра+ "
|ГДЕ Регистратор.Ссылка ЕСТЬ NULL И НЕ Регистратор = &ПустаяСсылкаДокумента" ) ;
Запрос. УстановитьПараметр( "ПустаяСсылкаДокумента" , Неопределено ) ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
Набор = ТипРегистра[ИмяРегистра]. СоздатьНаборЗаписей( ) ;
Набор. Отбор. Регистратор. Установить( Выборка. Регистратор) ;
Набор. Записать( ) ;
ОбработкаПрерыванияПользователя( ) ;
Состояние( "" + ТипРегистра+ " " + ИмяРегистра) ;
КонецЦикла ;
КонецПроцедуры
Процедура КнопкаВыполнитьНажатие(Кнопка)
Для Каждого пРегистр из Метаданные. РегистрыСведений Цикл
Подчинен = ( пРегистр. РежимЗаписи = Метаданные. СвойстваОбъектов. РежимЗаписиРегистра. ПодчинениеРегистратору) ;
Если Подчинен Тогда
УдалениеБитыхСсылок( пРегистр. Имя, РегистрыСведений, "РегистрСведений" )
КонецЕсли ;
КонецЦикла ;
Для Каждого пРегистр из Метаданные. РегистрыБухгалтерии Цикл
УдалениеБитыхСсылок( пРегистр. Имя, РегистрыБухгалтерии, "РегистрБухгалтерии" )
КонецЦикла ;
Для Каждого пРегистр из Метаданные. РегистрыРасчета Цикл
УдалениеБитыхСсылок( пРегистр. Имя, РегистрыРасчета, "РегистрРасчета" )
КонецЦикла ;
Для Каждого пРегистр из Метаданные. РегистрыНакопления Цикл
УдалениеБитыхСсылок( пРегистр. Имя, РегистрыНакопления, "РегистрНакопления" )
КонецЦикла ;
КонецПроцедуры
Категория:
Запросы Как реализовать метод "красного сторно" для регистра бухгалтерии? Код 1C v 8.х Процедура ОбработкаПроведения(Отказ, Режим)
СторнируемыеДвижения = РегистрыБухгалтерии. Хозрасчетный. ВыбратьПоРегистратору( СторнируемыйДокумент) ;
Пока СторнируемыеДвижения. Следующий( ) Цикл
Проводка = Движения. Хозрасчетный. Добавить( ) ;
Проводка. Период = Дата;
Проводка. СчетДт = СторнируемыеДвижения. СчетДт;
Проводка. СчетКт = СторнируемыеДвижения. СчетКт;
Для каждого Субконто Из СторнируемыеДвижения. СубконтоДт Цикл
Проводка. СубконтоДт[Субконто. Ключ] = Субконто. Значение;
КонецЦикла ;
Для каждого Субконто Из СторнируемыеДвижения. СубконтоКт Цикл
Проводка. СубконтоКт[Субконто. Ключ] = Субконто. Значение;
КонецЦикла ;
Проводка. ВалютаДт = СторнируемыеДвижения. ВалютаДт;
Проводка. ВалютаКт = СторнируемыеДвижения. ВалютаКт;
Проводка. ВалютнаяСуммаДт = - СторнируемыеДвижения. ВалютнаяСуммаДт;
Проводка. ВалютнаяСуммаКт = - СторнируемыеДвижения. ВалютнаяСуммаКт;
Проводка. КоличествоДт = - СторнируемыеДвижения. КоличествоДт;
Проводка. КоличествоКт = - СторнируемыеДвижения. КоличествоКт;
Проводка. НомерЖурнала = СторнируемыеДвижения. НомерЖурнала;
Проводка. Организация = СторнируемыеДвижения. Организация;
Проводка. Содержание = СторнируемыеДвижения. Содержание;
Проводка. Сумма = - СторнируемыеДвижения. Сумма;
КонецЦикла ;
Движения. Хозрасчетный. Записать( ) ;
КонецПроцедуры
Категория:
Регистры бухгалтерии Документ "Корректировка записей регистров" - Как программно создать и заполнить? Документ «Корректировка записей регистров» в типовых конфигурациях 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.х Процедура КнопкаВыполнитьНажатие(Кнопка)
Для Каждого Рег Из РегистрыНакопления Цикл
Если Рег. ПолучитьИспользованиеИтогов( ) = Ложь Тогда
Рег. УстановитьИспользованиеИтогов( Истина ) ;
Состояние( "Идет пересчет итогов регистра накопления " + Рег) ;
Рег. ПересчитатьИтоги( ) ;
Сообщить( "Для регистра накопления " + Рег + " включено использование итогов" ) ;
КонецЕсли ;
КонецЦикла ;
Для Каждого Рег Из РегистрыБухгалтерии Цикл
Если Рег. ПолучитьИспользованиеИтогов( ) = Ложь Тогда
Рег. УстановитьИспользованиеИтогов( Истина ) ;
Состояние( "Идет пересчет итогов регистра бухгалтерии " + Рег) ;
Рег. ПересчитатьИтоги( ) ;
Сообщить( "Для регистра бухгалтерии " + Рег + " включено использование итогов" ) ;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры
Категория:
Полезные, Универсальные Функции Как программно изменить проводку в Регистре Бухгалтерии? Код 1C v 8.х
Набор = РегистрыБухгалтерии. Хозрасчетный. СоздатьНаборЗаписей( ) ;
Набор. Отбор. Регистратор. Установить( Объект. Ссылка) ;
Набор. Прочитать( ) ;
Для каждого Запись из Набор Цикл
Если Запись. СчетКт = ПланыСчетов. Хозрасчетный. ПрочиеРасчетыСРазнымиДебиторамиИКредиторами Тогда
Запись. СубконтоКт[Запись. СчетКт. ВидыСубконто[1 ]] = Объект. ДоговорКонтрагента;
КонецЕСли ;
КонецЦикла ;
Набор. Записать( ) ;
Код 1C v 8.х
НаборЗаписейБУ = РегистрыБухгалтерии. Типовой. СоздатьНаборЗаписей( ) ;
НаборЗаписейБУ. Отбор. Регистратор. Использование = Истина ;
НаборЗаписейБУ. Отбор. Регистратор. Значение = ОперацияБух;
НаборЗаписейБУ. Прочитать( ) ;
Для Каждого ЗаписьБУ Из НаборЗаписейБУ Цикл
Если ( ЗаписьБУ. СчетКт = ПланыСчетов. Типовой. ИндивидуальныйПодоходныйНалог) или
( ЗаписьБУ. СчетКт = ПланыСчетов. Типовой. СоциальныйНалог) Тогда
ВидСубк = ЗаписьБУ. СчетКт. ВидыСубконто[2 ]. ВидСубконто;
ЗаписьБУ. СубконтоКт. Вставить( ВидСубк, Контрагент) ;
ЕстьИзменения = Истина ;
КонецЕсли ;
КонецЦикла ;
Если ЕстьИзменения Тогда
НаборЗаписейБУ. Записать( ) ;
КонецЕсли ;
Категория:
Регистры бухгалтерии Выгрузка метаданных конфигурации в Microsoft Word и Excel Код 1C v 8.х
Перем ОбъектыКонфы;
Перем СтруктКонфы;
Процедура ВыгрузитьВWord()
Попытка
Word = Новый COMОбъект( "Word.Application" ) ;
Исключение
Сообщить( "Не удалось открыть Word" ) ;
Возврат ;
КонецПопытки ;
Word. Documents. Add( ) ;
Документ = Word. ActiveDocument( ) ;
Для Каждого ТипОбъекта Из ОбъектыКонфы Цикл
Состояние( ТипОбъекта. Значение) ;
Если Метаданные[ТипОбъекта. Ключ]. Количество( ) > 0 Тогда
Документ. Paragraphs. Add( ) ;
Номер = Документ. Paragraphs. Count( ) ;
Документ. Paragraphs( Номер- 1 ) . Range( ) . I_nsertAfter( ТипОбъекта. Значение) ;
Документ. Paragraphs( Номер) . Range( ) . Style= "Заголовок 1" ;
Для каждого Объект Из Метаданные[ТипОбъекта. Ключ] Цикл
Документ. Paragraphs. Add( ) ;
Номер = Документ. Paragraphs. Count( ) ;
Документ. Paragraphs( Номер- 1 ) . Range( ) . I_nsertAfter( Объект. Синоним) ;
Документ. Paragraphs( Номер) . Range( ) . Style= "Заголовок 2" ;
Для каждого Параметр Из СтруктКонфы Цикл
Попытка
Количество = Объект[Параметр. Ключ]. Количество( ) ;
Исключение
Продолжить;
КонецПопытки ;
Если Количество > 0 Тогда
Документ. Paragraphs. Add( ) ;
Номер = Документ. Paragraphs. Count( ) ;
Документ. Paragraphs( Номер- 1 ) . Range( ) . I_nsertAfter( Параметр. Значение + " (" + Количество + ")" ) ;
Документ. Paragraphs( Номер) . Range( ) . Style= "Заголовок 3" ;
Документ. Paragraphs. Add( ) ;
Номер= Документ. Paragraphs. Count( ) ;
Документ. Tables. Add( Документ. Paragraphs( Номер) . Range( ) , Количество+ 1 , 4 ) ;
Счетчик = 1 ;
Таблица = Документ. Tables( Документ. Tables. Count( ) ) ;
Таблица. Cell( Счетчик, 1 ) . Range( ) . I_nsertAfter( "Имя" ) ;
Таблица. Cell( Счетчик, 2 ) . Range( ) . I_nsertAfter( "Синоним" ) ;
Таблица. Cell( Счетчик, 3 ) . Range( ) . I_nsertAfter( "Тип" ) ;
Таблица. Cell( Счетчик, 4 ) . Range( ) . I_nsertAfter( "Комментарий" ) ;
Документ. Range( Таблица. Cell( Счетчик, 1 ) . Range. Start, Таблица. Cell( Счетчик, 4 ) . Range. End) . Font. Bold = Истина ;
Для каждого Значение Из Объект[Параметр. Ключ] Цикл
Счетчик = Счетчик + 1 ;
Попытка
Таблица. Cell( Счетчик, 1 ) . Range( ) . I_nsertAfter( Значение. Имя) ;
Исключение
КонецПопытки ;
Попытка
Таблица. Cell( Счетчик, 2 ) . Range( ) . I_nsertAfter( Значение. Синоним) ;
Исключение
КонецПопытки ;
Попытка
СтрокаТипов = "" ;
Для каждого Тип Из Значение. Тип. Типы( ) Цикл
СтрокаТипов = СтрокаТипов + " " + Строка( Тип) ;
КонецЦикла ;
Таблица. Cell( Счетчик, 3 ) . Range( ) . I_nsertAfter( СтрокаТипов) ;
Исключение
КонецПопытки ;
Попытка
Таблица. Cell( Счетчик, 4 ) . Range( ) . I_nsertAfter( Значение. Комментарий) ;
Исключение
КонецПопытки ;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;
Word. Visible = Истина ;
Word. Activate( ) ;
Word = Неопределено ;
КонецПроцедуры
Процедура ВыгрузитьВExcel()
Попытка
Excel = Новый COMОбъект( "Excel.Application" ) ;
Исключение
Сообщить( "Не удалось открыть Excel" ) ;
Возврат ;
КонецПопытки ;
Excel. Application. Workbooks. Add( 1 ) ;
Лист = Excel. ActiveSheet;
Лист. Name = "Данные" ;
НомерСтроки = 0 ;
Для Каждого ТипОбъекта Из ОбъектыКонфы Цикл
Состояние( ТипОбъекта. Значение) ;
Если Метаданные[ТипОбъекта. Ключ]. Количество( ) > 0 Тогда
НомерСтроки = НомерСтроки + 1 ;
Лист. Cells( НомерСтроки, 1 ) . Value = ТипОбъекта. Значение;
Лист. Cells( НомерСтроки, 1 ) . Font. Size = 16 ;
Лист. Cells( НомерСтроки, 1 ) . Font. ColorIndex = 3 ;
Для каждого Объект Из Метаданные[ТипОбъекта. Ключ] Цикл
НомерСтроки = НомерСтроки + 1 ;
Лист. Cells( НомерСтроки, 1 ) . Value = Объект. Синоним;
Лист. Cells( НомерСтроки, 1 ) . I_nsertIndent( 2 ) ;
Лист. Cells( НомерСтроки, 1 ) . Font. Size = 12 ;
Лист. Cells( НомерСтроки, 1 ) . Font. ColorIndex = 5 ;
Для каждого Параметр Из СтруктКонфы Цикл
Попытка
Количество = Объект[Параметр. Ключ]. Количество( ) ;
Исключение
Продолжить;
КонецПопытки ;
Если Количество > 0 Тогда
НомерСтроки = НомерСтроки + 1 ;
Лист. Cells( НомерСтроки, 1 ) . Value = Параметр. Значение + " (" + Количество + ")" ;
Лист. Cells( НомерСтроки, 1 ) . I_nsertIndent( 4 ) ;
Лист. Cells( НомерСтроки, 1 ) . Font. Bold = Истина ;
Лист. Cells( НомерСтроки, 1 ) . Font. ColorIndex = 16 ;
НомерСтроки = НомерСтроки + 1 ;
Лист. Cells( НомерСтроки, 1 ) . Value = "Имя" ;
Лист. Cells( НомерСтроки, 2 ) . Value = "Синоним" ;
Лист. Cells( НомерСтроки, 3 ) . Value = "Тип" ;
Лист. Cells( НомерСтроки, 4 ) . Value = "Комментарий" ;
Для Ном = 1 По 4 Цикл
Лист. Cells( НомерСтроки, Ном) . ColumnWidth = 20 ;
Лист. Cells( НомерСтроки, Ном) . Font. Bold = Истина ;
Лист. Cells( НомерСтроки, Ном) . Borders( 5 ) . LineStyle = - 4142 ;
Лист. Cells( НомерСтроки, Ном) . Borders( 7 ) . LineStyle = 1 ;
Лист. Cells( НомерСтроки, Ном) . Borders( 8 ) . LineStyle = 1 ;
Лист. Cells( НомерСтроки, Ном) . Borders( 9 ) . LineStyle = 1 ;
Лист. Cells( НомерСтроки, Ном) . Borders( 10 ) . LineStyle = 1 ;
Лист. Cells( НомерСтроки, Ном) . Interior. ColorIndex = 34 ;
КонецЦикла ;
Для каждого Значение Из Объект[Параметр. Ключ] Цикл
НомерСтроки = НомерСтроки + 1 ;
Попытка
Лист. Cells( НомерСтроки, 1 ) . Value = Значение. Имя;
Исключение
КонецПопытки ;
Попытка
Лист. Cells( НомерСтроки, 2 ) . Value = Значение. Синоним;
Исключение
КонецПопытки ;
Попытка
СтрокаТипов = "" ;
Для каждого Тип Из Значение. Тип. Типы( ) Цикл
СтрокаТипов = СтрокаТипов + " " + Строка( Тип) ;
КонецЦикла ;
Лист. Cells( НомерСтроки, 3 ) . Value = СтрокаТипов;
Исключение
КонецПопытки ;
Попытка
Лист. Cells( НомерСтроки, 4 ) . Value = Значение. Комментарий;
Исключение
КонецПопытки ;
Для Ном = 1 По 4 Цикл
Лист. Cells( НомерСтроки, Ном) . Borders( 5 ) . LineStyle = - 4142 ;
Лист. Cells( НомерСтроки, Ном) . Borders( 7 ) . LineStyle = 1 ;
Лист. Cells( НомерСтроки, Ном) . Borders( 8 ) . LineStyle = 1 ;
Лист. Cells( НомерСтроки, Ном) . Borders( 9 ) . LineStyle = 1 ;
Лист. Cells( НомерСтроки, Ном) . Borders( 10 ) . LineStyle = 1 ;
Лист. Cells( НомерСтроки, Ном) . VerticalAlignment = - 4160 ;
Лист. Cells( НомерСтроки, Ном) . WrapText = Истина ;
КонецЦикла ;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;
Excel. Visible = Истина ;
Excel = Неопределено ;
КонецПроцедуры
Процедура Сформировать()
ОбъектыКонфы = Новый Структура( ) ;
ОбъектыКонфы. Вставить( "ОбщиеМодули" , "Общие модули" ) ;
ОбъектыКонфы. Вставить( "ОбщиеФормы" , "Общие формы" ) ;
ОбъектыКонфы. Вставить( "ОбщиеМакеты" , "Общие макеты" ) ;
ОбъектыКонфы. Вставить( "ОбщиеКартинки" , "Общие картинки" ) ;
ОбъектыКонфы. Вставить( "Роли" , "Роли" ) ;
ОбъектыКонфы. Вставить( "Интерфейсы" , "Интерфейсы" ) ;
ОбъектыКонфы. Вставить( "Стили" , "Стили" ) ;
ОбъектыКонфы. Вставить( "Языки" , "Языки" ) ;
ОбъектыКонфы. Вставить( "ПланыОбмена" , "Планы обмена" ) ;
ОбъектыКонфы. Вставить( "Константы" , "Константы" ) ;
ОбъектыКонфы. Вставить( "КритерииОтбора" , "Критерии отбора" ) ;
ОбъектыКонфы. Вставить( "Справочники" , "Справочники" ) ;
ОбъектыКонфы. Вставить( "Документы" , "Документы" ) ;
ОбъектыКонфы. Вставить( "ЖурналыДокументов" , "Журналы документов" ) ;
ОбъектыКонфы. Вставить( "Перечисления" , "Перечисления" ) ;
ОбъектыКонфы. Вставить( "Отчеты" , "Отчеты" ) ;
ОбъектыКонфы. Вставить( "Обработки" , "Обработки" ) ;
ОбъектыКонфы. Вставить( "ПланыВидовХарактеристик" , "Планы видов характеристик" ) ;
ОбъектыКонфы. Вставить( "ПланыСчетов" , "Планы счетов" ) ;
ОбъектыКонфы. Вставить( "ПланыВидовРасчета" , "Планы видов расчета" ) ;
ОбъектыКонфы. Вставить( "РегистрыСведений" , "Регистры сведений" ) ;
ОбъектыКонфы. Вставить( "РегистрыБухгалтерии" , "Регистры бухгалтерии" ) ;
ОбъектыКонфы. Вставить( "РегистрыРасчета" , "Регистры расчета" ) ;
СтруктКонфы = Новый Структура( ) ;
СтруктКонфы. Вставить( "Измерения" , "Измерения" ) ;
СтруктКонфы. Вставить( "Ресурсы" , "Ресурсы" ) ;
СтруктКонфы. Вставить( "Реквизиты" , "Реквизиты" ) ;
СтруктКонфы. Вставить( "Формы" , "Формы" ) ;
СтруктКонфы. Вставить( "Макеты" , "Макеты" ) ;
СтруктКонфы. Вставить( "Графы" , "Графы" ) ;
СтруктКонфы. Вставить( "ТабличныеЧасти" , "Табличные части" ) ;
СтруктКонфы. Вставить( "Значения" , "Значения" ) ;
ВыгрузитьВWord( ) ;
ВыгрузитьВExcel( ) ;
КонецПроцедуры
Код 1C v 7.x
Процедура Справочник()
Ворд= СоздатьОбъект( "Word.Application" ) ;
Ворд. DisplayAlerts= 0 ;
Ворд. ActiveDocument. ActiveWindow. S_election. I_nsertRowsBelow( 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveLeft( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( "Код" ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Тип= ? ( Метаданные. Справочник( СокрЛП( Имя) ) . ТипКода= "Текстовый" , "Строка" , "Число" ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( Тип+ " (" + СокрЛП( Метаданные. Справочник( СокрЛП( Имя) ) . ДлинаКода) + ")" ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( "" ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. I_nsertRowsBelow( 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveLeft( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( "Наименование" ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( "Строка (" + СокрЛП( Метаданные. Справочник( СокрЛП( Имя) ) . ДлинаНаименования) + ")" ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( "" ) ;
Для Сч= 1 По Метаданные. Справочник( СокрЛП( Имя) ) . Реквизит( ) Цикл
Ворд. ActiveDocument. ActiveWindow. S_election. I_nsertRowsBelow( 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveLeft( 1 , 1 ) ;
Реквизит= Метаданные. Справочник( СокрЛП( Имя) ) . Реквизит( Сч) ;
Синоним= Реквизит. Синоним;
Если ПустоеЗначение( Синоним) = 0 Тогда
Если нрег( СтрЗаменить( Синоним, " " , "" ) ) < > нрег( Реквизит. Идентификатор) Тогда
Синоним= " (" + Синоним+ ")" ;
Иначе
Синоним= "" ;
КонецЕсли ;
КонецЕсли ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( СокрЛП( Реквизит. Идентификатор) + Синоним) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Тип= Реквизит. Тип;
Если Тип= "Строка" Тогда
Тип= Тип+ " (" + СокрЛП( Реквизит. Длина) + ")" ;
ИначеЕсли Тип= "Число" Тогда
Тип= Тип+ " (" + СокрЛП( Реквизит. Длина) ;
Если ПустоеЗначение( Реквизит. Точность) = 0 Тогда
Тип= Тип+ "." + СокрЛП( Реквизит. Точность) ;
КонецЕсли ;
Тип= Тип+ ")" ;
Иначе
Тип= Тип+ "." + Реквизит. Вид;
КонецЕсли ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( Тип) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( Реквизит. Комментарий) ;
КонецЦикла ;
Предупреждение( "Готово" , 5 ) ;
КонецПроцедуры
Процедура Документ()
Ворд= СоздатьОбъект( "Word.Application" ) ;
Ворд. DisplayAlerts= 0 ;
Для Сч= 1 По Метаданные. Документ( СокрЛП( Имя) ) . РеквизитШапки( ) Цикл
Ворд. ActiveDocument. ActiveWindow. S_election. I_nsertRowsBelow( 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveLeft( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( "Шапка" ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Реквизит= Метаданные. Документ( СокрЛП( Имя) ) . РеквизитШапки( Сч) ;
Синоним= Реквизит. Синоним;
Если ПустоеЗначение( Синоним) = 0 Тогда
Если нрег( СтрЗаменить( Синоним, " " , "" ) ) < > нрег( Реквизит. Идентификатор) Тогда
Синоним= " (" + Синоним+ ")" ;
Иначе
Синоним= "" ;
КонецЕсли ;
КонецЕсли ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( СокрЛП( Реквизит. Идентификатор) + Синоним) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Тип= Реквизит. Тип;
Если Тип= "Строка" Тогда
Тип= Тип+ " (" + СокрЛП( Реквизит. Длина) + ")" ;
ИначеЕсли Тип= "Число" Тогда
Тип= Тип+ " (" + СокрЛП( Реквизит. Длина) ;
Если ПустоеЗначение( Реквизит. Точность) = 0 Тогда
Тип= Тип+ "." + СокрЛП( Реквизит. Точность) ;
КонецЕсли ;
Тип= Тип+ ")" ;
Иначе
Тип= Тип+ "." + Реквизит. Вид;
КонецЕсли ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( Тип) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( Реквизит. Комментарий) ;
КонецЦикла ;
Для Сч= 1 По Метаданные. Документ( СокрЛП( Имя) ) . РеквизитТабличнойЧасти( ) Цикл
Ворд. ActiveDocument. ActiveWindow. S_election. I_nsertRowsBelow( 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveLeft( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( "Таб. часть" ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Реквизит= Метаданные. Документ( СокрЛП( Имя) ) . РеквизитТабличнойЧасти( Сч) ;
Синоним= Реквизит. Синоним;
Если ПустоеЗначение( Синоним) = 0 Тогда
Если нрег( СтрЗаменить( Синоним, " " , "" ) ) < > нрег( Реквизит. Идентификатор) Тогда
Синоним= " (" + Синоним+ ")" ;
Иначе
Синоним= "" ;
КонецЕсли ;
КонецЕсли ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( СокрЛП( Реквизит. Идентификатор) + Синоним) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Тип= Реквизит. Тип;
Если Тип= "Строка" Тогда
Тип= Тип+ " (" + СокрЛП( Реквизит. Длина) + ")" ;
ИначеЕсли Тип= "Число" Тогда
Тип= Тип+ " (" + СокрЛП( Реквизит. Длина) ;
Если ПустоеЗначение( Реквизит. Точность) = 0 Тогда
Тип= Тип+ "." + СокрЛП( Реквизит. Точность) ;
КонецЕсли ;
Тип= Тип+ ")" ;
Иначе
Тип= Тип+ "." + Реквизит. Вид;
КонецЕсли ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( Тип) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( Реквизит. Комментарий) ;
КонецЦикла ;
Предупреждение( "Готово" , 5 ) ;
КонецПроцедуры
Процедура Общие()
Ворд= СоздатьОбъект( "Word.Application" ) ;
Ворд. DisplayAlerts= 0 ;
Для Сч= 1 По Метаданные. ОбщийРеквизитДокумента( ) Цикл
Ворд. ActiveDocument. ActiveWindow. S_election. I_nsertRowsBelow( 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveLeft( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( "Шапка" ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Реквизит= Метаданные. ОбщийРеквизитДокумента( Сч) ;
Синоним= Реквизит. Синоним;
Если ПустоеЗначение( Синоним) = 0 Тогда
Если нрег( СтрЗаменить( Синоним, " " , "" ) ) < > нрег( Реквизит. Идентификатор) Тогда
Синоним= " (" + Синоним+ ")" ;
Иначе
Синоним= "" ;
КонецЕсли ;
КонецЕсли ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( СокрЛП( Реквизит. Идентификатор) + Синоним) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Тип= Реквизит. Тип;
Если Тип= "Строка" Тогда
Тип= Тип+ " (" + СокрЛП( Реквизит. Длина) + ")" ;
ИначеЕсли Тип= "Число" Тогда
Тип= Тип+ " (" + СокрЛП( Реквизит. Длина) ;
Если ПустоеЗначение( Реквизит. Точность) = 0 Тогда
Тип= Тип+ "." + СокрЛП( Реквизит. Точность) ;
КонецЕсли ;
Тип= Тип+ ")" ;
Иначе
Тип= Тип+ "." + Реквизит. Вид;
КонецЕсли ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( Тип) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( Реквизит. Комментарий) ;
КонецЦикла ;
Предупреждение( "Готово" , 5 ) ;
КонецПроцедуры
Процедура СтруктураРегистра()
Ворд= СоздатьОбъект( "Word.Application" ) ;
Ворд. DisplayAlerts= 0 ;
Для Сч= 1 По Метаданные. Регистр( СокрЛП( Имя) ) . Измерение( ) Цикл
Ворд. ActiveDocument. ActiveWindow. S_election. I_nsertRowsBelow( 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveLeft( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( "Измерение" ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Реквизит= Метаданные. Регистр( СокрЛП( Имя) ) . Измерение( Сч) ;
Синоним= Реквизит. Синоним;
Если ПустоеЗначение( Синоним) = 0 Тогда
Если нрег( СтрЗаменить( Синоним, " " , "" ) ) < > нрег( Реквизит. Идентификатор) Тогда
Синоним= " (" + Синоним+ ")" ;
Иначе
Синоним= "" ;
КонецЕсли ;
КонецЕсли ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( СокрЛП( Реквизит. Идентификатор) + Синоним) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Тип= Реквизит. Тип;
Если Тип= "Строка" Тогда
Тип= Тип+ " (" + СокрЛП( Реквизит. Длина) + ")" ;
ИначеЕсли Тип= "Число" Тогда
Тип= Тип+ " (" + СокрЛП( Реквизит. Длина) ;
Если ПустоеЗначение( Реквизит. Точность) = 0 Тогда
Тип= Тип+ "." + СокрЛП( Реквизит. Точность) ;
КонецЕсли ;
Тип= Тип+ ")" ;
Иначе
Тип= Тип+ "." + Реквизит. Вид;
КонецЕсли ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( Тип) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( Реквизит. Комментарий) ;
КонецЦикла ;
Для Сч= 1 По Метаданные. Регистр( СокрЛП( Имя) ) . Ресурс( ) Цикл
Ворд. ActiveDocument. ActiveWindow. S_election. I_nsertRowsBelow( 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveLeft( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( "Ресурс" ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Реквизит= Метаданные. Регистр( СокрЛП( Имя) ) . Ресурс( Сч) ;
Синоним= Реквизит. Синоним;
Если ПустоеЗначение( Синоним) = 0 Тогда
Если нрег( СтрЗаменить( Синоним, " " , "" ) ) < > нрег( Реквизит. Идентификатор) Тогда
Синоним= " (" + Синоним+ ")" ;
Иначе
Синоним= "" ;
КонецЕсли ;
КонецЕсли ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( СокрЛП( Реквизит. Идентификатор) + Синоним) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Тип= Реквизит. Тип;
Если Тип= "Строка" Тогда
Тип= Тип+ " (" + СокрЛП( Реквизит. Длина) + ")" ;
ИначеЕсли Тип= "Число" Тогда
Тип= Тип+ " (" + СокрЛП( Реквизит. Длина) ;
Если ПустоеЗначение( Реквизит. Точность) = 0 Тогда
Тип= Тип+ "." + СокрЛП( Реквизит. Точность) ;
КонецЕсли ;
Тип= Тип+ ")" ;
Иначе
Тип= Тип+ "." + Реквизит. Вид;
КонецЕсли ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( Тип) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( Реквизит. Комментарий) ;
КонецЦикла ;
Для Сч= 1 По Метаданные. Регистр( СокрЛП( Имя) ) . Реквизит( ) Цикл
Ворд. ActiveDocument. ActiveWindow. S_election. I_nsertRowsBelow( 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveLeft( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( "Реквизит" ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Реквизит= Метаданные. Регистр( СокрЛП( Имя) ) . Реквизит( Сч) ;
Синоним= Реквизит. Синоним;
Если ПустоеЗначение( Синоним) = 0 Тогда
Если нрег( СтрЗаменить( Синоним, " " , "" ) ) < > нрег( Реквизит. Идентификатор) Тогда
Синоним= " (" + Синоним+ ")" ;
Иначе
Синоним= "" ;
КонецЕсли ;
КонецЕсли ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( СокрЛП( Реквизит. Идентификатор) + Синоним) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Тип= Реквизит. Тип;
Если Тип= "Строка" Тогда
Тип= Тип+ " (" + СокрЛП( Реквизит. Длина) + ")" ;
ИначеЕсли Тип= "Число" Тогда
Тип= Тип+ " (" + СокрЛП( Реквизит. Длина) ;
Если ПустоеЗначение( Реквизит. Точность) = 0 Тогда
Тип= Тип+ "." + СокрЛП( Реквизит. Точность) ;
КонецЕсли ;
Тип= Тип+ ")" ;
Иначе
Тип= Тип+ "." + Реквизит. Вид;
КонецЕсли ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( Тип) ;
Ворд. ActiveDocument. ActiveWindow. S_election. MoveRight( 1 , 1 ) ;
Ворд. ActiveDocument. ActiveWindow. S_election. TypeText( Реквизит. Комментарий) ;
КонецЦикла ;
Предупреждение( "Готово" , 5 ) ;
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Выгрузка и Загрузка проводок документа через файл Код 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 ;
Движение. Содержание = "Оплата поставщику" ;
НаборЗаписей. Записать( ) ;
Категория:
Регистры бухгалтерии Установить Использование Итогов Регистров Бухгалтерии УстановитьИспользованиеИтогов(Истина) - Устанавливает признак использования итогов. Если использование итогов отключено, то при записи набора записей регистра не будет производиться пересчет итогов, но при этом будут не доступны виртуальные таблицы расчета остатков и оборотов.
Данный режим работы регистра позволяет повысить скорость записи набора записей регистра. Он может быть полезен при массовых загрузках данных.
При установке признака использования итогов производится пересчет всех итогов.
Код 1C v 8.х
для каждого регистр из метаданные.регистрыбухгалтерии цикл
регистрыбухгалтерии [регистр.имя].УстановитьИспользованиеИтогов(истина);
конеццикла;
Категория:
Регистры бухгалтерии