СКД не выводит поле в отчет Если в запросе используется конструкция вида регистратор.дата или получение еще какого-либо реквизита через регистратор и это поле не отображается в полях отчета СКД, то:
Допустим Вы сделали запрос по регистру накоплений и через регистратор обратились к дате или сумме документа и при формировании отчета СКД, эти поля недоступны !? как же быть?
Проблема в том - что у регистратором может выступать несколько документов и видимо права чтение/просмотр есть не на все - поэтому через скд эта таблица целиком недоступна, решение:
1. открыть доступ на все регистраторы регистра
2. в запросе четко обозначить тип
Код 1C v 8.3 //примеры
ВЫРАЗИТЬ(ДокументыОплаты.Регистратор КАК Документ.ПлатежноеПоручениеВходящее).СуммаДокумента
//или так
ВЫБОР
КОГДА РАЗНОСТЬДАТ(ВЫРАЗИТЬ(ВзаиморасчетыПоДокументам.ДокументРасчетовСКонтрагентом КАК Документ.ПоступлениеТоваровУслуг).Дата,КонецПериода, ДЕНЬ) > ВзаиморасчетыПоДокументам.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности
ТОГДА ДОБАВИТЬКДАТЕ(ВЫРАЗИТЬ(ВзаиморасчетыПоДокументам.ДокументРасчетовСКонтрагентом КАК Документ.ПоступлениеТоваровУслуг).Дата, ДЕНЬ, ВзаиморасчетыПоДокументам.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности)
ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
КОНЕЦ КАК ДеньВозникновенияЗадолженности
Возможные проблемы с правами доступа: Как сформировать отчет СКД без проверки прав (в привилегированном режиме)?
Схема работы СКД:
Категория:
Схема Компоновки Данных Как сформировать отчет СКД без проверки прав (в привилегированном режиме)? Что при разработке отчетов требуется чтобы у пользователя с ограниченными правами, отчет формировался полностью без проверки прав!
Особенно если настроен RLS
Есть несколько способов как это сделать: 1. Установить привилегированный режим в модуле отчета
Форма отчета должна быть Управляемой, далее в модуле отчета процедура обработчика «При компоновке результата»:
Код 1C v 8.3 //Перехватываем событие вывода компоновки данных в табличный документ и выводим со своим заголовком
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
УстановитьПривилегированныйРежим(Истина);
//Сформируем отчет
СформироватьОтчет(ДокументРезультат, ДанныеРасшифровки);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
2. Формирование в п ривилегированном режиме через Общий модуль с галкой Привелигерованный
Создаем общий модуль
так же как в пункте 1 в обработчике «При компоновке результата» пишем:
Код 1C v 8.3 //Перехватываем событие вывода компоновки данных в табличный документ и выводим со своим заголовком
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
МЕ_ДляОтчетаСКД_ПривелРежим.СформироватьОтчетПривРеж(ДокументРезультат, СхемаКомпоновкиДанных, ДанныеРасшифровки, КомпоновщикНастроек);
КонецПроцедуры
В общем модуле МЕ_ДляОтчетаСКД_ПривелРежим код:
Код 1C v 8.3 Процедура СформироватьОтчетПривРеж(ТабличныйДокумент, СхемаКомпоновкиДанных, ДанныеРасшифровки, КомпоновщикНастроек) Экспорт
ТабличныйДокумент.Очистить();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки,,,Ложь);
ВнешниеНаборыДанных = Новый Структура;
/// можно передать внешние данные ВнешниеНаборыДанных.Вставить("тзПродаж", СформироватьТЗПродаж());
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,ВнешниеНаборыДанных,ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
3. Если включен режим Использовать ограничение на уровне прав доступа - RLS
Часто используется в типовых. Тут в модуле для текущего пользователя можно на время формирования отчету установить параметр сеанса ИспользоватьОграниченияПравДоступаНаУровнеЗаписей в Ложь и RLS не сработает.
Код 1C v 8.3 ПараметрыСеанса.ИспользоватьОграниченияПравДоступаНаУровнеЗаписей=Ложь;
После завершения формирования, не забудьте включить rls обратно установив = Истина
4. Если в запросе используется конструкция вида регистратор.дата и это поле не отображается в полях отчета СКД
Допустим Вы сделали запрос по регистру накоплений и через регистратор обратились к дате или сумме документа и при формировании отчета СКД, эти поля недоступны !? как же быть?
Проблема в том - что у регистратором может выступать несколько документов и видимо права чтение/просмотр есть не на все - поэтому через скд эта таблица целиком недоступна, решение:
1. открыть доступ на все регистраторы регистра
2. в запросе четко обозначить тип
Код 1C v 8.3 //примеры
ВЫРАЗИТЬ(ДокументыОплаты.Регистратор КАК Документ.ПлатежноеПоручениеВходящее).СуммаДокумента
//или так
ВЫБОР
КОГДА РАЗНОСТЬДАТ(ВЫРАЗИТЬ(ВзаиморасчетыПоДокументам.ДокументРасчетовСКонтрагентом КАК Документ.ПоступлениеТоваровУслуг).Дата,КонецПериода, ДЕНЬ) > ВзаиморасчетыПоДокументам.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности
ТОГДА ДОБАВИТЬКДАТЕ(ВЫРАЗИТЬ(ВзаиморасчетыПоДокументам.ДокументРасчетовСКонтрагентом КАК Документ.ПоступлениеТоваровУслуг).Дата, ДЕНЬ, ВзаиморасчетыПоДокументам.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности)
ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
КОНЕЦ КАК ДеньВозникновенияЗадолженности
В дополнении у пункту 1, код процедуры сформировать отчет(). Для вывода отчета я использую шаблон All4CF.ru_Template_SKD_v4.1 в нем уже реализованы почти все необходимые функции и работает в Обычных и УП формах:
Код 1C v 8.3 // Процедура выполняет формирование табличного документа по настройкам СКД
Процедура СформироватьОтчет(ТабличныйДокумент, ДанныеРасшифровки)
УстановитьПривилегированныйРежим(Истина);
// если отчет открывается по расшифровке, отбору, упорядочиванию,
// группировке или условному оформлению - восстановим настройки вывода заголовка,
// т.к., в переданных настройках при этом, вывод заголовка отключен
// для того, чтобы не выводился встроенный заголовок компоновки.
ВосстановитьНастройкиВыводаЗаголовка();
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ТабличныйДокумент.Очистить();
// установим обязательные настройки отчета
УстановитьПараметрыОтчета();
// Сделаем копию настроек вывода заголовка
СохранитьНастройкиВыводаЗаголовка();
ВыводитьЗаголовок = ВыводитьЗаголовокОтчета();
Если ВыводитьЗаголовок Тогда
ПрисоединитьЗаголовокОтчетаКТабличномуДокументу(ТабличныйДокумент, ПолучитьТекстЗаголовкаОтчета());
// Отключим в настройках вывод встроенного заголовка
НайденнаяНастройкаВыводаЗаголовка = КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы.Найти("ВыводитьЗаголовок");
НайденнаяНастройкаВыводаЗаголовка.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить;
НайденнаяНастройкаВыводаЗаголовка.Использование = Истина;
КонецЕсли;
КопияДополнительныхНастроек = УстановитьДополнительныеНастройкиДляРасшифровки();
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
// при необходимости вставим внешние наборы данных в СКД
ВнешниеНаборыДанных = Новый Структура;
ТаблицаВнешнегоНабораДанных = ПолучитьТаблицуВнешнегоНабораДанных();
ВнешниеНаборыДанных.Вставить("ТаблицаВнешнегоНабораДанных",ТаблицаВнешнегоНабораДанных);
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,ВнешниеНаборыДанных,ДанныеРасшифровки);
ВывестиРезультатКомпоновкиСАвтофиксациейСтрок(ТабличныйДокумент, ПроцессорКомпоновкиДанных, ДанныеРасшифровки.Элементы,,,КоличествоФиксируемыхСтолбцов);
ДополнительнаяОбработкаРезультатаОтчета(ТабличныйДокумент);
Если ВыводитьЗаголовок Тогда
// вернем настройки вывода заголовка на место
ВосстановитьНастройкиВыводаЗаголовка();
КонецЕсли;
// восстановим дополнительные настройки
Для Каждого ЭлементСтруктуры Из КопияДополнительныхНастроек Цикл
КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение);
КонецЦикла;
// сохраненные настройки нужны только при расшифровке и т.п.
// и не будуть давать изменить вывоз заголовка при обычном формировании.
ОчиститьСохраненныеНастройкиВыводаЗаголовка();
УстановитьВидимостьЗаголовкаОтчета(ТабличныйДокумент);
УстановитьВидимостьПараметровОтчета(ТабличныйДокумент);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры // СформироватьОтчет()
Категория:
Схема Компоновки Данных Оформление строки в ПриПолученииДанных или ПриВыводеСтроки Событие ПриПолученииДанных использется для оформления ячеек строк данных, отображаемых табличным полем. Обработчик данного события вызывается табличным полем в тех же случаях, что и обработчик ПриВыводеСтроки , т.е. при обновлении данных, отображаемых табличным полем или при поиске по подстроке. Важно отметить, что обработчик данного события вызывается табличным полем перед вызовом обработчиков события ПриВыводеСтроки для всех видимых строк табличного поля. Основным отличием данного события от события ПриВыводеСтроки является то, что в обработчике события ПриПолученииДанных можно изменять настройки ячеек группы строк, а не одной строки как в обработчике события ПриВыводеСтроки .
Обрабатывая данное событие можно изменять шрифт, цвет фона или текста, как определенной ячейки, так и всей строки табличного поля, устанавливать высоту или видимость ячеек строки табличного поля, а также устанавливать картинку, флажок или новый текст в ячейке. Параметром данного события является объект типа ОформлениеСтрок - коллекция объектов типа ОформлениеСтроки , являющихся оформлениями строк табличного поля.
Пример кода:
Код 1C v 8.х Процедура ТППриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Попытка
ОформлениеСтроки.Ячейки.ПредоплатаОтсрочка.УстановитьТекст(?(ОформлениеСтроки.ДанныеСтроки.Ссылка.Счет.ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности, "ОТСРОЧКА","ПРЕДОПЛАТА"));
Исключение
КонецПопытки;
Если ОформлениеСтроки.Ячейки.Доставка.Значение = Неопределено Тогда
возврат;
КонецЕсли;
Если ДанныеСтроки.Доставка.Проведен Тогда
ОформлениеСтроки.Ячейки.Картинка.ИндексКартинки = 0;
ИначеЕсли ДанныеСтроки.Доставка.ПометкаУдаления Тогда
ОформлениеСтроки.Ячейки.Картинка.ИндексКартинки = 1;
Иначе
ОформлениеСтроки.Ячейки.Картинка.ИндексКартинки = 2;
КонецЕсли;
ОформлениеСтроки.Ячейки.Картинка.ОтображатьКартинку = истина;
Если ДанныеСтроки.СтатусНов = "Нет машины" Тогда
ОформлениеСтроки.Ячейки.СтатусНов.ЦветФона = Новый Цвет(255, 196, 196);
ИначеЕсли ДанныеСтроки.СтатусНов = "Нет разрешения" Тогда
текцвет = Новый Цвет(255, 196, 196);
Если ДанныеСтроки.Доставка.ДатаДоставки = НачалоДня(РабочаяДата) Тогда
ТекВремя = Дата(1,1,1)+(ТекущаяДата()-НачалоДня(ТекущаяДата()));
Попытка ПодачаМашины=?(ДанныеСтроки.Доставка.ВремяЗагрузкиФакт[0].ПодачаМашины>ДанныеСтроки.Доставка.ВремяПриездаЭкспедитораФакт,ДанныеСтроки.Доставка.ВремяЗагрузкиФакт[0].ПодачаМашины,ДанныеСтроки.Доставка.ВремяПриездаЭкспедитораФакт); Исключение ПодачаМашины = ДанныеСтроки.Доставка.ВремяПриездаЭкспедитораФакт; КонецПопытки;
Если ПодачаМашины+(15*60)> ТекВремя Тогда ОформлениеСтроки.Ячейки.СтатусНов.УстановитьТекст("Получение разрешения"); текцвет = Новый Цвет(255, 225, 225); КонецЕсли;
КонецЕсли;
ОформлениеСтроки.Ячейки.СтатусНов.ЦветФона = текцвет;
ИначеЕсли ДанныеСтроки.СтатусНов = "Загрузка" Тогда
ОформлениеСтроки.Ячейки.СтатусНов.ЦветФона = Новый Цвет(255, 153, 0);
ИначеЕсли ДанныеСтроки.СтатусНов = "В пути" Тогда
ОформлениеСтроки.Ячейки.СтатусНов.ЦветФона = Новый Цвет(255, 255, 0);
ИначеЕсли ДанныеСтроки.СтатусНов = "На объекте" Тогда
ОформлениеСтроки.Ячейки.СтатусНов.ЦветФона = Новый Цвет(51, 204, 204);
ИначеЕсли ДанныеСтроки.СтатусНов = "Завершено" Тогда
ОформлениеСтроки.Ячейки.СтатусНов.ЦветФона = Новый Цвет(137, 255, 113);
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеСтроки.СтатусSMS) Тогда
Если ДанныеСтроки.СтатусSMS = "Доставлено" Тогда
ОформлениеСтроки.Ячейки.СтатусSMS.ЦветФона = Новый Цвет(137, 255, 113);
ИначеЕсли ДанныеСтроки.СтатусSMS = "Поставлено в очередь" ИЛИ
ДанныеСтроки.СтатусSMS = "Отправляется" ИЛИ
ДанныеСтроки.СтатусSMS = "Отправлено" Тогда
ОформлениеСтроки.Ячейки.СтатусSMS.ЦветФона = Новый Цвет(255, 255, 0);
Иначе
ОформлениеСтроки.Ячейки.СтатусSMS.ЦветФона = Новый Цвет(255, 0, 0);
КонецЕсли;
КонецЕсли;
ОформлениеСтроки.Ячейки.колКОтгрузке.УстановитьТекст(ДанныеСтроки.колКОтгрузке);
Если ДанныеСтроки.колКОтгрузке = "ОК" Тогда
ОформлениеСтроки.Ячейки.колКОтгрузке.ЦветФона = Новый Цвет(200, 255, 200);
Иначе
ОформлениеСтроки.Ячейки.колКОтгрузке.ЦветФона = Новый Цвет(255, 0, 0);
КонецЕсли;
ОформлениеСтроки.Ячейки.колСДоставки.УстановитьТекст(ДанныеСтроки.колСДоставки);
Если ДанныеСтроки.колСДоставки = "ОК" Тогда
ОформлениеСтроки.Ячейки.колСДоставки.ЦветФона = Новый Цвет(200, 255, 200);
Иначе
ОформлениеСтроки.Ячейки.колСДоставки.ЦветФона = Новый Цвет(255, 0,0);
КонецЕсли;
//Доставка до 14.00 раскраска цветом
Если НЕ (ДанныеСтроки.Доставка.ВидДоставки = Перечисления.ВидыДоставки.Самовывоз или ДанныеСтроки.Доставка.ВидДоставки = Перечисления.ВидыДоставки.Централизация) Тогда
Если ДанныеСтроки.Доставка.Дата < НачалоДня(ДанныеСтроки.Доставка.Дата)+60*60*14 Тогда ОформлениеСтроки.Ячейки.Менеджер.ЦветФона = Новый Цвет(166, 255, 166); Иначе ОформлениеСтроки.Ячейки.Менеджер.ЦветФона = Новый Цвет(255, 166,166); КонецЕсли;
КонецЕсли;
КонецПроцедуры
А вот так это выглядит в реальности:
Категория:
Список Справочника, Документов, Регистров Как перенести остаток со счета на счет? Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ХозрасчетныйОстатки.СуммаОстатокДт
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, ,
| Субконто1 = &Контрагент И Организация = &Организация И Субконто2 = &Договор) КАК ХозрасчетныйОстатки";
// Считаем что на счете ведется аналитика только в разрезе контрагентов
// и договоров.
Запрос.УстановитьПараметр("Период", Период1);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("Договор", Договор);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.РасчетыСПокупателями);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Документ = Документы.ОперацияБух.СоздатьДокумент();
Документ.Дата = РабочаяДата;
Документ.Организация = Организация;
Документ.Содержание = "Погашение дебиторской задолженности ";
Проводка = Документ.Движения.Хозрасчетный.Добавить();
Проводка.СчетДт = ПланыСчетов.Хозрасчетный.РасчетыСПокупателями;
Проводка.СчетКт = ПланыСчетов.Хозрасчетный.ПрочиеРасходы;
Проводка.СубконтоДт.Контрагенты = Контрагент;
Проводка.СубконтоДт.Договоры = Договор;
Проводка.Сумма = Выборка.СуммаОстатокДт;
Документ.СуммаОперации = Выборка.СуммаОстатокДт;
Форма = Документ.ПолучитьФорму();
Форма.Открыть();
КонецЕсли;
Категория:
Регистры бухгалтерии Использование предложения ДЛЯ ИЗМЕНЕНИЯ Предложение
ДЛЯ ИЗМЕНЕНИЯ позволяет заблаговременно заблокировать некоторые данные (которые могут читаться транзакцией другого соединения) уже при считывании, чтобы исключить взаимные блокировки при записи. ДЛЯ ИЗМЕНЕНИЯ дает возможность указать в запросе таблицы, считываемые данные которых предполагается изменять. В этом случае другое соединение будет ожидать освобождения этих данных уже в момент считывания внутри транзакции, т.е. не сможет прочесть заблокированные данные до тех пор, пока не будет завершена транзакция, наложившая блокировку. Блокировка от изменения данных считываемых в транзакции выполняется независимо от предложения
ДЛЯ ИЗМЕНЕНИЯ . Это значит, что если внутри какой-либо транзакции считаны некоторые данные, то из другого соединения эти данные не могут быть изменены до тех пор, пока блокировка не будет снята. Если запрос выполняется вне транзакции, то в нем могут быть считаны и заблокированные данные.
Блокировки устанавливаются в момент выполнения запроса, сбрасываются же при окончании транзакции. В случае если запрос выполняется вне транзакции предложение
ДЛЯ ИЗМЕНЕНИЯ игнорируется.
В случае если после предложения
ДЛЯ ИЗМЕНЕНИЯ отсутствуют имена таблиц, блокироваться будут считанные данные из всех таблиц, задействованных в запросе. В случае указания конкретных таблиц будут блокироваться только данные из перечисленных таблиц. Для блокировки можно указывать только таблицы верхнего уровня (т.е. не табличные части), участвующие в запросе. Должны приводиться именно имена таблиц, а не их псевдонимы, определенные в запросе. В случае указания виртуальной таблицы будут блокированы данные из всех таблиц, задействованных в виртуальной таблице. При указании виртуальной таблицы следует записывать ее имя без параметров.
Пример использования предложения
ДЛЯ ИЗМЕНЕНИЯ можно посмотреть в типовой конфигурации "Управление торговлей" в модуле документа РеализацияТоваров, в функции СформироватьЗапросПоШапке(Режим), которая вызывается из обработчика проведения документа. В этой функции, в случае оперативного проведения выполняется запрос, в котором накладывается блокировка на регистр остатков:
Код 1C v 8.х ВЫБРАТЬ
Док.Дата,
Док.Ссылка,
Док.ВидОперации,
Док.Организация,
Док.ОтражатьВРегламентированномУчете,
Док.ОтражатьВУправленческомУчете,
Док.ПодразделениеКомпании,
Док.Контрагент,
Док.ДоговорВзаиморасчетов,
Док.СкладКомпании,
Док.Сделка,
Док.Сделка.ВидОперации КАК ВидЗаказаПокупателя,
Док.КурсДокумента,
Док.КратностьДокумента,
Док.ВалютаДокумента,
Док.СуммаДокумента,
Док.КурсВзаиморасчетов,
Док.КратностьВзаиморасчетов,
Док.СкладКомпании.Розничный КАК СкладКомпанииРозничный,
Док.ДоговорВзаиморасчетов.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
Док.ДоговорВзаиморасчетов.ВедениеВзаиморасчетов КАК ВедениеВзаиморасчетов,
Док.ДоговорВзаиморасчетов.КонтролироватьЧислоДнейЗадолженности
КАК КонтролироватьЧислоДнейЗадолженности,
Док.ДоговорВзаиморасчетов.ДопустимоеЧислоДнейЗадолженности
КАК ДопустимоеЧислоДнейЗадолженности,
Док.ДоговорВзаиморасчетов.КонтролироватьСуммуЗадолженности
КАК КонтролироватьСуммуЗадолженности,
Док.ДоговорВзаиморасчетов.ДопустимаяСуммаЗадолженности
КАК ДопустимаяСуммаЗадолженности,
Док.ДоговорВзаиморасчетов.ПроцентПредоплаты КАК ПроцентПредоплаты,
Док.УчитыватьНДС,
Док.УчитыватьНП,
Док.СуммаВключаетНДС,
Док.СуммаВключаетНП,
Константы.ВалютаУправленческогоУчетаКомпании КАК ВалютаУправленческогоУчета,
КурсыВалютСрезПоследних.Курс КАК КурсВалютыУпрУчета,
КурсыВалютСрезПоследних.Кратность КАК КратностьВалютыУпрУчета,
ВзаиморасчетыПоДоговору.СуммаВалОстаток КАК СуммаВалОстатокПоДоговору,
ВзаиморасчетыПоСделке.СуммаВалОстаток КАК СуммаВалОстатокПоСделке,
ПерваяСделка.ДатаПервойСделки,
СуммыЗаказов.СуммаЗаказаОборот,
СуммыЗаказов.СуммаОплатыОборот
ИЗ
Документ.РеализацияТоваров Док,
Константы
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаДокумента,)
КАК КурсыВалютСрезПоследних
ПО Константы.ВалютаУправленческогоУчетаКомпании = КурсыВалютСрезПоследних.Валюта
ЛЕВОЕ СОЕДИНЕНИЕ // Для контроля суммы задолженности по договору
// (ведение взаиморасчетов - любое) и числа дней задолженности по договору
// (ведение взаиморасчетов - по расчетным документам)
РегистрНакопления.КонтрагентыВзаиморасчетыКомпании.Остатки(,
ДоговорВзаиморасчетов = &ДоговорВзаиморасчетов)
КАК ВзаиморасчетыПоДоговору
ПО Истина
ЛЕВОЕ СОЕДИНЕНИЕ
(ВЫБРАТЬ // Выбирает даты самых ранних сделок по договорам, указанным в т.ч.
МИНИМУМ(Сделка.Дата) КАК ДатаПервойСделки,
ДоговорВзаиморасчетов
ИЗ РегистрНакопления.КонтрагентыВзаиморасчетыКомпании.Остатки(,
ДоговорВзаиморасчетов = &ДоговорВзаиморасчетов)
ГДЕ СуммаВалОстаток > 0 // Дебиторская задолженность больше 0
И ДоговорВзаиморасчетов.ВедениеВзаиморасчетов = &ПоРасчетнымДокументам
И ДоговорВзаиморасчетов.КонтролироватьЧислоДнейЗадолженности
СГРУППИРОВАТЬ ПО ДоговорВзаиморасчетов) КАК ПерваяСделка
ПО Истина
ЛЕВОЕ СОЕДИНЕНИЕ // Для контроля суммы задолженности по расчетному документу
//(ведение взаиморасчетов - по расчетным документам)
РегистрНакопления.КонтрагентыВзаиморасчетыКомпании.Остатки(,
ДоговорВзаиморасчетов = &ДоговорВзаиморасчетов
И Сделка = &Сделка
) КАК ВзаиморасчетыПоСделке
ПО Истина
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрНакопления.СуммыЗаказов.Обороты(,,, Заказ = &Сделка) КАК СуммыЗаказов
ПО Истина
ГДЕ
Док.Ссылка = &ДокументСсылка
ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.КонтрагентыВзаиморасчетыКомпании.Остатки
// Блокирующие чтение таблицы остатков регистра для разрешения
// коллизий многопользовательской работы
Категория:
Запросы Пример загрузки остатков в документ 1С из DBF файла Код 1C v 8.х ФайлОстатков = Новый XBase;
ФайлОстатков.Кодировка = КодировкаXBase.OEM;
ФайлОстатков.ОткрытьФайл(ПутьКТаблицеОстатков);
ФайлОстатков.Первая();
Пока Не ФайлОстатков.ВКонце() Цикл
КодКонтрагента = СокрЛП(ФайлОстатков.ПолучитьЗначениеПоля("ZKPO"));
Если КодКонтрагента = "" Тогда
КодКонтрагента = СокрЛП(ФайлОстатков.ПолучитьЗначениеПоля("IDENKOD"));
КонецЕсли;
НаименованиеКонтрагента = СокрЛП(СтрЗаменить(ФайлОстатков.ПолучитьЗначениеПоля("NAME"),"?","і"));
Контрагент = ПолучитьКонтрагента(КодКонтрагента,НаименованиеКонтрагента);
СимволСчета = СокрЛП(ФайлОстатков.ПолучитьЗначениеПоля("SYMBOL"));
ОстатокДебет = ФайлОстатков.ПолучитьЗначениеПоля("DB_PP");
ОстатокКредит = ФайлОстатков.ПолучитьЗначениеПоля("KR_PP");
Документ = Документы.КорректировкаДолга.СоздатьДокумент();
Документ.Организация = Организация;
Документ.Дата = "20090630235959";
Документ.ВидОперации = Перечисления.ВидыОперацийКорректировкаДолга.ВводНачальныхОстатков;
Если ОстатокДебет > 0 Тогда
Документ.КонтрагентДебитор = Контрагент;
Документ.СуммыДолга.Очистить();
СтрокаСуммыДолга = Документ.СуммыДолга.Добавить();
СтрокаСуммыДолга.ВидЗадолженности = Перечисления.ВидыЗадолженности.Дебиторская;
СтрокаСуммыДолга.ДоговорКонтрагента = ПолучитьДоговор(Документ.КонтрагентДебитор);
Если Лев(СимволСчета,3) = "361" Тогда
СтрокаСуммыДолга.ТипКонтрагента = Перечисления.СтатусыКонтрагентов.Покупатель;
Иначе
СтрокаСуммыДолга.ТипКонтрагента = Перечисления.СтатусыКонтрагентов.Поставщик;
КонецЕсли;
СтрокаСуммыДолга.КратностьВзаиморасчетов = 1.00;
СтрокаСуммыДолга.КурсВзаиморасчетов = 1.00;
СтрокаСуммыДолга.Сумма = ОстатокДебет;
СтрокаСуммыДолга.СуммаВзаиморасчетов = ОстатокДебет;
СтрокаСуммыДолга.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
СтрокаСуммыДолга.СчетУчетаРасчетов = ПланыСчетов.Хозрасчетный.НайтиПоКоду(СимволСчета);
Иначе
Документ.КонтрагентДебитор = Контрагент;
Документ.СуммыДолга.Очистить();
СтрокаСуммыДолга = Документ.СуммыДолга.Добавить();
СтрокаСуммыДолга.ВидЗадолженности = Перечисления.ВидыЗадолженности.Кредиторская;
СтрокаСуммыДолга.ДоговорКонтрагента = ПолучитьДоговор(Документ.КонтрагентДебитор);
Если Лев(СимволСчета,3) = "361" Тогда
СтрокаСуммыДолга.ТипКонтрагента = Перечисления.СтатусыКонтрагентов.Покупатель;
Иначе
СтрокаСуммыДолга.ТипКонтрагента = Перечисления.СтатусыКонтрагентов.Поставщик;
КонецЕсли;
СтрокаСуммыДолга.КратностьВзаиморасчетов = 1.00;
СтрокаСуммыДолга.КурсВзаиморасчетов = 1.00;
СтрокаСуммыДолга.Сумма = ОстатокКредит;
СтрокаСуммыДолга.СуммаВзаиморасчетов = ОстатокКредит;
СтрокаСуммыДолга.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
СтрокаСуммыДолга.СчетУчетаРасчетов = ПланыСчетов.Хозрасчетный.НайтиПоКоду(СимволСчета);
КонецЕсли;
Документ.ВалютаДокумента = Валюта;
Документ.СчетДт = ПланыСчетов.Хозрасчетный.Вспомогательный;
Документ.СчетКт = ПланыСчетов.Хозрасчетный.Вспомогательный;
Документ.Записать(РежимЗаписиДокумента.Проведение);
ФайлОстатков.Следующая();
КонецЦикла;
ФайлОстатков.ЗакрытьФайл();
Категория:
XML, DBF, TXT, CSV