Имя: Пароль:
1C
1С v8
Установка пометки удаления на док.
0 SeregaMW
 
27.09.11
10:44
В цикле перебераю документы и по условию устанавливаю пометку на удаление документов.

Сообщить(РучнойДокумент.Номер);    
Пометка = Док.ПолучитьОбъект();
Пометка.УстановитьПометкуУдаления(Истина);

В отладчике вижу что Пометка это всегда ссылка на документ.
На втором документе выдает ошибку Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!
запуская повторно обработку ошибка выскакивает на следуюшем документе и так по анологии.
1 ZanderZ
 
27.09.11
10:46
цикл то напиши полностью
2 butterbean
 
27.09.11
10:46
весь код давай
3 SeregaMW
 
27.09.11
10:47
Док = Документы.РеализацияТоваровУслуг.Выбрать(ДатаС, ДатаПо);
   Пока Док.Следующий() Цикл
       Комментарий = Лев(Док.Комментарий,54);
       Комментарий =Сред(Комментарий,45,20);
       Если Комментарий = "ЗаказНаряд" тогда
           Если Док.Контрагент.Наименование = "ООО "+Символ(34)+" Автодин"+Символ(34) или Док.Контрагент.Наименование = "ООО"+Символ(34)+"Автодин"+Символ(34)+" - Автосалон" тогда
               НомерЗН=Лев(Док.Комментарий,66);    
               НомерЗН= Сред(НомерЗН,57);
               ЗаказН = connection.Документы.ЗаказНаряд.Выбрать(ДатаС-1000000, ДатаПо+1000000);
               Пока ЗаказН.Следующий() Цикл
                   Если   ЗаказН.Номер = НомерЗН тогда
                       Если ЗаказН.Товары.Количество()=0 тогда
                           Пометка = Док.ПолучитьОбъект();
                           Пометка.УстановитьПометкуУдаления(Истина);
                           прервать;
                       КонецЕсли;    
                       Если (ЗаказН.ВидРемонта.Наименование ="Внутренний ремонт")  тогда
                           РучнойДокумент = Документы.ОперацияБух.СоздатьДокумент();
                           РучнойДокумент.Дата = Док.Дата;
                           РучнойДокумент.Организация = Док.Организация;
                           Проводка = РучнойДокумент.Движения.Хозрасчетный;
                           Реализация = Док.ПолучитьОбъект();
                           Если Реализация.Проведен = Ложь тогда
                           Иначе
                               Реализация.Проведен = Ложь;
                               Реализация.Записать();
                           КонецЕсли;
                           РучнойДокумент.Комментарий = Док.Комментарий;
                           РучнойДокумент.Записать();
                           Для каждого товар из Док.Товары Цикл    
                               ДокОперацияСсылка = РучнойДокумент.Ссылка;
                               РегХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
                               РегХозрасчетный.Отбор.Регистратор.Значение = ДокОперацияСсылка;
                               РегЗапись = РегХозрасчетный.Добавить();
                               РегЗапись.Период = Док.Дата;
                               РегЗапись.Регистратор = ДокОперацияСсылка;
                               РегЗапись.Организация = Справочники.Организации.НайтиПоНаименованию("ООО Автодин");
                               РегЗапись.СчетДт =ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.05");
                               РегЗапись.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01");
                               БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетДт, РегЗапись.СубконтоДт, 1, товар.Номенклатура);
                               БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетДт, РегЗапись.СубконтоДт, 2,  Док.Склад);
                               РегЗапись.КоличествоДт =  товар.Количество;
                               БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетКт, РегЗапись.СубконтоКт, 1, товар.Номенклатура);
                               БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетКт, РегЗапись.СубконтоКт, 2,  Док.Склад);
                               ТЗ=новый ТаблицаЗначений;    
                               Запрос = Новый Запрос;
                               Запрос.Текст=
                               "ВЫБРАТЬ
                               |    ХозрасчетныйОбороты.Счет,
                               |    ХозрасчетныйОбороты.Субконто1,
                               |    ХозрасчетныйОбороты.Субконто2,
                               |    ХозрасчетныйОбороты.КоличествоОборот,
                               |    ХозрасчетныйОбороты.СуммаОборот,
                               |    ХозрасчетныйОбороты.СуммаОборотДт
                               |ИЗ
                               |    РегистрБухгалтерии.Хозрасчетный.Обороты КАК ХозрасчетныйОбороты
                               |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                               |        ПО ХозрасчетныйОбороты.Субконто1 = РеализацияТоваровУслуг.Ссылка
                               |            И ХозрасчетныйОбороты.Субконто2 = РеализацияТоваровУслуг.Ссылка
                               |            И ХозрасчетныйОбороты.Субконто3 = РеализацияТоваровУслуг.Ссылка
                               |            И ХозрасчетныйОбороты.КорСубконто1 = РеализацияТоваровУслуг.Ссылка
                               |            И ХозрасчетныйОбороты.КорСубконто2 = РеализацияТоваровУслуг.Ссылка
                               |            И ХозрасчетныйОбороты.КорСубконто3 = РеализацияТоваровУслуг.Ссылка
                               |ГДЕ
                               |    ХозрасчетныйОбороты.Счет = &Счет
                               |    И ХозрасчетныйОбороты.Субконто1 = &Субконто1
                               |    И ХозрасчетныйОбороты.Субконто2 = &Субконто2";
                               Запрос.УстановитьПараметр("Субконто1",товар.Номенклатура);
                               Запрос.УстановитьПараметр("Субконто2",Док.Склад);
                               Запрос.УстановитьПараметр("Номер",Док.Номер);
                               Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01"));
                               ТЗ = Запрос.Выполнить().Выгрузить();
                               Для каждого цена из ТЗ Цикл
                                   переменная = РегЗапись.КоличествоДт*(Цена.суммаОборот/Цена.КоличествоОборот);
                                   прервать;
                               КонецЦикла;
                               РегЗапись.Сумма = переменная;
                               РегХозрасчетный.Записать();      
                               РегХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
                               РегХозрасчетный.Отбор.Регистратор.Значение = ДокОперацияСсылка;
                               РегЗапись = РегХозрасчетный.Добавить();
                               РегЗапись.Период = Док.Дата;
                               РегЗапись.Регистратор = ДокОперацияСсылка;
                               РегЗапись.Организация = Справочники.Организации.НайтиПоНаименованию("ООО Автодин");
                               РегЗапись.СчетДт =ПланыСчетов.Хозрасчетный.НайтиПоКоду("44.01");
                               РегЗапись.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.05");
                               БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетДт, РегЗапись.СубконтоДт, 1, Справочники.СтатьиЗатрат.НайтиПоНаименованию("Прочие расходы"));
                               //РегЗапись.КоличествоДт =  товар.Количество;
                               БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетКт, РегЗапись.СубконтоКт, 1, товар.Номенклатура);
                               БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетКт, РегЗапись.СубконтоКт, 2,  Док.Склад);                                  
                               РегЗапись.Сумма = переменная;
                               РегХозрасчетный.Записать();                                  
                           КонецЦикла;
                           Сообщить(РучнойДокумент.Номер);    
                           Пометка = Док.ПолучитьОбъект();
                           Пометка.УстановитьПометкуУдаления(Истина);
                           Пометка.Записать();
                               Продолжить;
                       ИначеЕсли (ЗаказН.ВидРемонта.Наименование ="Дополнительное оборудование") тогда
                           Если ЗаказН.Товары.Количество()=0 тогда
                                  Пометка = Док.ПолучитьОбъект();
                                  Пометка.УстановитьПометкуУдаления(Истина);
                                  Пометка.Записать();
                               прервать;
                           КонецЕсли;
                           РучнойДокумент = Документы.ОперацияБух.СоздатьДокумент();
                           РучнойДокумент.Дата = Док.Дата;
                           РучнойДокумент.Организация = Док.Организация;
                           Проводка = РучнойДокумент.Движения.Хозрасчетный;
                           Реализация = Док.ПолучитьОбъект();
                           Если Реализация.Проведен = Ложь тогда
                           Иначе
                               Реализация.Проведен = Ложь;
                               Реализация.Записать();
                           КонецЕсли;
                           РучнойДокумент.Комментарий = Док.Комментарий;
                           Для каждого товар из Док.Товары Цикл    
                               ТЗ=новый ТаблицаЗначений;    
                               Запрос = Новый Запрос;
                               Запрос.Текст=
                               "ВЫБРАТЬ
                               |    ХозрасчетныйОбороты.Счет,
                               |    ХозрасчетныйОбороты.Субконто1,
                               |    ХозрасчетныйОбороты.Субконто2,
                               |    ХозрасчетныйОбороты.КоличествоОборот,
                               |    ХозрасчетныйОбороты.СуммаОборот,
                               |    ХозрасчетныйОбороты.СуммаОборотДт
                               |ИЗ
                               |    РегистрБухгалтерии.Хозрасчетный.Обороты КАК ХозрасчетныйОбороты
                               |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                               |        ПО ХозрасчетныйОбороты.Субконто1 = РеализацияТоваровУслуг.Ссылка
                               |            И ХозрасчетныйОбороты.Субконто2 = РеализацияТоваровУслуг.Ссылка
                               |            И ХозрасчетныйОбороты.Субконто3 = РеализацияТоваровУслуг.Ссылка
                               |            И ХозрасчетныйОбороты.КорСубконто1 = РеализацияТоваровУслуг.Ссылка
                               |            И ХозрасчетныйОбороты.КорСубконто2 = РеализацияТоваровУслуг.Ссылка
                               |            И ХозрасчетныйОбороты.КорСубконто3 = РеализацияТоваровУслуг.Ссылка
                               |ГДЕ
                               |    ХозрасчетныйОбороты.Счет = &Счет
                               |    И ХозрасчетныйОбороты.Субконто1 = &Субконто1
                               |    И ХозрасчетныйОбороты.Субконто2 = &Субконто2";
                               Запрос.УстановитьПараметр("Субконто1",товар.Номенклатура);
                               Запрос.УстановитьПараметр("Субконто2",Док.Склад);
                               Запрос.УстановитьПараметр("Номер",Док.Номер);
                               Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01"));
                               ТЗ = Запрос.Выполнить().Выгрузить();
                               Для каждого цена из ТЗ Цикл
                                   Переменная = РегЗапись.КоличествоДт*(Цена.суммаОборот/Цена.КоличествоОборот);
                                   прервать;
                               КонецЦикла;
                           КонецЦикла;
                           РегХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
                           РегХозрасчетный.Отбор.Регистратор.Значение = ДокОперацияСсылка;
                           РегЗапись = РегХозрасчетный.Добавить();
                           РегЗапись.Период = Док.Дата;
                           РегЗапись.Регистратор = ДокОперацияСсылка;
                           РегЗапись.Организация = Справочники.Организации.НайтиПоНаименованию("ООО Автодин");
                           РегЗапись.СчетДт =ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02.1");
                           РегЗапись.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01");
                           БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетДт, РегЗапись.СубконтоДт, 1, товар.Номенклатура.НоменклатурнаяГруппа);
                           БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетКт, РегЗапись.СубконтоКт, 1, товар.Номенклатура);
                           БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетКт, РегЗапись.СубконтоКт, 2,  Док.Склад);                                  
                           РегЗапись.Сумма = переменная;
                           РегХозрасчетный.Записать();    
                           Сообщить(РучнойДокумент.Номер);    
                           Пометка = Док.ПолучитьОбъект();
                           Пометка.УстановитьПометкуУдаления(Истина);
                        КонецЕсли;
                       продолжить;
                   КонецЕсли;    
               КОнецЦикла;        
           КонецЕсли;    
       КонецЕсли;
   КонецЦикла;
4 DrShad
 
27.09.11
10:52
(3) нет слов!
5 unregistered
 
27.09.11
10:52
(3) Жесть....

А вообще код работает правильно.
Во внешнем цикле ты получаешь Док.
Во внутреннем (перебор ЗаказНарядов) - ты этот Док несколько раз пытаешься удалить.
6 unregistered
 
27.09.11
10:53
(3) Ехал бы ты обратно в свою Корею...
7 Wobland
 
27.09.11
10:53
Пометка = РучнойДокумент.ПолучитьОбъект(); ?
код не смотрел
8 Goggy
 
27.09.11
10:55
Если Док.Контрагент.Наименование = "ООО "+Символ(34)+" Автодин"+Символ(34) или Док.Контрагент.Наименование = "ООО"+Символ(34)+"Автодин"+Символ(34)+" - Автосалон" тогда

дальше и читать не стал...
9 SeregaMW
 
27.09.11
10:55
РучнойДокумент это док. который создается. Помечается на удаление реализация.
10 butterbean
 
27.09.11
10:56
ну как тут не вспомнить про 86...
11 unregistered
 
27.09.11
10:56
(9) Ну вот ты и помечаешь реализацию на удаление каждый раз во внутреннем цикле обхода ЗаказНарядов.
12 unregistered
 
27.09.11
10:57
(8) >> дальше и читать не стал...

А зря. Там еще много интересного :))
13 DrShad
 
27.09.11
10:58
(12) я бы так не сказал :)
14 Wobland
 
27.09.11
11:02
(13) как тебе: Документы.ЗаказНаряд.Выбрать(ДатаС-1000000, ДатаПо+1000000)
15 Wobland
 
27.09.11
11:05
а запрос-то работает? условие, если все субконты - конкретный документ
16 Wobland
 
27.09.11
11:06
Реализация.Проведен = Ложь;
Реализация.Записать();

Распроводка делается так: Реализация.Записать(РежимЗаписиДокумента.ОтменаПроведения)
17 SeregaMW
 
27.09.11
11:07
(16) Спасибо за содержательное сообщение.

А вообще Пишу как умею )))
18 SeregaMW
 
27.09.11
11:09
(15) Запрос работает
19 DrShad
 
27.09.11
11:09
(17) за это хоть платят?
20 unregistered
 
27.09.11
11:15
(15) Запрос у него работает. Не работает соединение - из таблицы РеализацияТоваровУслуг ни чего не выбирается.

При внутреннем соединении результат запроса будет пустым.

(18) Можешь из запроса соединение убрать. Написанное условие соединения всё равно ни когда не выполнится.
21 unregistered
 
27.09.11
11:17
(17) >> А вообще Пишу как умею )))

Молодец! Так держать!

Благодаря тебе у кого-то всегда будет заработок на маслице к хлебушку - за выгребание косяков.