Имя: Пароль:
1C
 
документ операция - нет дублям проводок
0 pro3ri
 
13.08.15
13:16
ДОбрый день.

В тз:
Создайте документ «Операция» для формирования произвольных проводок
пользователем. Обеспечьте следующее поведение документа:
•  В документе не должно быть проводок с одинаковыми счетами и аналитикой;
Как такое реализовать?
1 Asmody
 
13.08.15
13:20
Что-то где-то надо сгруппировать
2 jsmith82
 
13.08.15
13:20
Свернуть строки в запросе группировкой с применением агрегатных функций
3 pro3ri
 
13.08.15
13:24
(2) а в каком событии это надо делать?
4 pro3ri
 
13.08.15
13:24
я так понимаю ПередЗаписью модуля набора записей?
5 jsmith82
 
13.08.15
13:25
(4) Я так понимаю, тебе надо профессию менять )
6 StanleyMarsh
 
13.08.15
13:33
(5) так в конфигурациях 1С при проведении они так и сворачиваются.
7 pro3ri
 
13.08.15
13:43
(6) самописка
8 pro3ri
 
13.08.15
13:54
написал такой код в модуле набора записей:
Процедура ПередЗаписью(Отказ, РежимЗаписи)
    
    Ссылка = Отбор.Регистратор.Значение;
    Если ТипЗнч(Ссылка)= Тип("ДокументСсылка.Операция") Тогда
        Для каждого Запись Из ЭтотОбъект Цикл
        
            Запись.Период = Ссылка.Дата;
                    
        КонецЦикла;
    КонецЕсли;    
    
КонецПроцедуры

Процедура ПриЗаписи(Отказ, РежимЗаписи)
    
    Ссылка = Отбор.Регистратор.Значение;
    Если ТипЗнч(Ссылка)= Тип("ДокументСсылка.Операция") Тогда

        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    РегистрБухгалтерии1ДвиженияССубконто.СчетДт КАК СчетДт,
            |    РегистрБухгалтерии1ДвиженияССубконто.СубконтоДт1 КАК СубконтоДт1,
            |    РегистрБухгалтерии1ДвиженияССубконто.СчетКт КАК СчетКт,
            |    РегистрБухгалтерии1ДвиженияССубконто.СубконтоКт2 КАК СубконтоКт2,
            |    СУММА(РегистрБухгалтерии1ДвиженияССубконто.Сумма) КАК Сумма,
            |    РегистрБухгалтерии1ДвиженияССубконто.Период КАК Период
            |ИЗ
            |    РегистрБухгалтерии.РегистрБухгалтерии1.ДвиженияССубконто КАК РегистрБухгалтерии1ДвиженияССубконто
            |ГДЕ
            |    РегистрБухгалтерии1ДвиженияССубконто.Регистратор = &Ссылка
            |
            |СГРУППИРОВАТЬ ПО
            |    РегистрБухгалтерии1ДвиженияССубконто.СчетДт,
            |    РегистрБухгалтерии1ДвиженияССубконто.СубконтоДт1,
            |    РегистрБухгалтерии1ДвиженияССубконто.СчетКт,
            |    РегистрБухгалтерии1ДвиженияССубконто.СубконтоКт2,
            |    РегистрБухгалтерии1ДвиженияССубконто.Период";
        
        Запрос.УстановитьПараметр("Ссылка", Ссылка);
        
        
        Если Не Запрос.Выполнить().Пустой() Тогда
        
            ТЗ = Запрос.Выполнить().Выгрузить();
            ЭтотОбъект.Загрузить(ТЗ);
            
        Иначе
            Отказ = Истина;
            Сообщить("документ пустой");
        КонецЕсли;
        
        
    КонецЕсли;    
    
    
КонецПроцедуры
но как результат запроса записать в базу данных? Не проходит ЭтотОбъект.Загрузить(ТЗ);
9 pro3ri
 
13.08.15
14:26
переделал код на такой: в результате все правильно, только почему-то запись не происходит:

Процедура ПриЗаписи(Отказ, РежимЗаписи)
    
    Ссылка = Отбор.Регистратор.Значение;
    Если ТипЗнч(Ссылка)= Тип("ДокументСсылка.Операция") Тогда

        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    РегистрБухгалтерии1ДвиженияССубконто.СчетДт КАК СчетДт,
            |    РегистрБухгалтерии1ДвиженияССубконто.СубконтоДт1 КАК СубконтоДт1,
            |    РегистрБухгалтерии1ДвиженияССубконто.СчетКт КАК СчетКт,
            |    СУММА(РегистрБухгалтерии1ДвиженияССубконто.Сумма) КАК Сумма,
            |    РегистрБухгалтерии1ДвиженияССубконто.Период КАК Период,
            |    РегистрБухгалтерии1ДвиженияССубконто.СубконтоКт1
            |ИЗ
            |    РегистрБухгалтерии.РегистрБухгалтерии1.ДвиженияССубконто КАК РегистрБухгалтерии1ДвиженияССубконто
            |ГДЕ
            |    РегистрБухгалтерии1ДвиженияССубконто.Регистратор = &Ссылка
            |
            |СГРУППИРОВАТЬ ПО
            |    РегистрБухгалтерии1ДвиженияССубконто.СчетДт,
            |    РегистрБухгалтерии1ДвиженияССубконто.СубконтоДт1,
            |    РегистрБухгалтерии1ДвиженияССубконто.СчетКт,
            |    РегистрБухгалтерии1ДвиженияССубконто.Период,
            |    РегистрБухгалтерии1ДвиженияССубконто.СубконтоКт1";
        
        Запрос.УстановитьПараметр("Ссылка", Ссылка);
        
        Если Не Запрос.Выполнить().Пустой() Тогда
        
            Выборка = Запрос.Выполнить().Выбрать();
            Пока Выборка.Следующий() Цикл
            
                ЭтотОбъект.Очистить();
                Проводка = Добавить();
                Проводка.Период = Ссылка.Дата;
                Если Выборка.СчетДт<>NUll Тогда
                    Проводка.СчетДт = Выборка.СчетДт;
                КонецЕсли;
                Если Выборка.СчетКт<>NUll Тогда
                    Проводка.СчетКт = Выборка.СчетКт;
                КонецЕсли;
                
                Если Выборка.СубконтоДт1<>NUll Тогда
                    Проводка.СубконтоДт[Проводка.СчетДт.ВидыСубконто[0].ВидСубконто] =Выборка.СубконтоДт1;
                КонецЕсли;
                
                Если Выборка.СубконтоКт1<>NUll Тогда
                    Проводка.СубконтоКт[Проводка.СчетКт.ВидыСубконто[0].ВидСубконто] =Выборка.СубконтоКт1;
                КонецЕсли;
                Проводка.Сумма = Выборка.Сумма;
                Проводка.Регистратор = Отбор.Регистратор.Значение;
                
            КонецЦикла;
            
        Иначе
            Отказ = Истина;
            Сообщить("документ пустой");
        КонецЕсли;
        
        
    КонецЕсли;    
    
    
КонецПроцедуры
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший