Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

Вход или Регистрация

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[1С:Предприятие 7.7]

Программное копирование Журнала Реализация

CasperSky
читатель
офлайн
Дата регистрации: 21.10.2014
Сообщений: 6
Пост №1
 
21.10.2014 18:20

Здравствуйте!
Уважаемые знатоки и гуру конфигуратора, подскажите пожалуйста решение вопроса темы.

В журнале Реализация, за определенный период, собирается по 500 операций. Мне приходится копировать их по одному и корректировать дату (оставляя другие строки неизменными).

Добавил кнопку и написал обработчик:

Код
 //******************************************************************************
//Копировать реализацию        
Процедура КопироватьРеализацию() 
      НИ = НачалоИнтервала();
      КИ = КонецИнтервала();
      Рез = Вопрос("Ты действительно хочешь скопировать всю реализацию с "+НИ+" по "+КИ+"?", 4);
    Если Рез = 6 Тогда
          Д=ТекущаяДата();
            Если ВвестиДату(Д, "Введите дату новой реализации") = 1 Тогда
              ДатаРеализ = Д;                
              
            
                  Реализ = СоздатьОбъект("Документ.Реализация");  
                  Реализ.ВыбратьДокументы(НИ, КИ);
                  х=1;
                  Пока Реализ.ПолучитьДокумент()=1 Цикл 
                        ТекДок = Реализ.ТекущийДокумент();                        
                        Сообщить(ЗначениеВСтроку(ТекДок));
                        Если х=1 Тогда // для теста, чтобы не открывать 500 форм
                              ОткрытьФормуМодально("Документ.Реализация", , ТекДок);
                        КонецЕсли;
                        х=х+1;
                  КонецЦикла;    
                  
            КонецЕсли;
      КонецЕсли;
КонецПроцедуры //КопироватьРеализацию()  


Вот только в ТекДок содержится только Id операции (номер) и дата

Собственно, возникает 2 вопроса:
  1. Как получить все данные по реализации текущего ID?
  2. Как создать новую реализацию с нужными параметрами?
В интерфейсе есть кнопка "Скопировать" а вот кода её я не нашел.
Спасибо за помощь.

Ответили: пост №2
Prikum
активный пользователь
офлайн
Дата регистрации: 18.02.2002
Сообщений: 20952
Пост №2
 
21.10.2014 21:01
Ответ на пост №1

CasperSky, метод Скопировать() ц объекта метаданных Документ Вам не о чем не говорит?

Thorvardr
читатель
офлайн
Дата регистрации: 25.02.2005
Сообщений: 3082
Пост №3
 
21.10.2014 21:14

> метод Скопировать() объекта метаданных Документ Вам не о чем не говорит?

В 7.7 нет такого. Завтра напишу подсказку, дома нет 1С.

Ответили: пост №4
Prikum
активный пользователь
офлайн
Дата регистрации: 18.02.2002
Сообщений: 20952
Пост №4
 
21.10.2014 22:08
Ответ на пост №3

Thorvardr, да, действительно нет, можно только табличную часть выгрузить, и потом загрузить. А так наверное через цикл методов УстановитьАтрибут() и ПолучитьАтрибут()

Thorvardr
читатель
офлайн
Дата регистрации: 25.02.2005
Сообщений: 3082
Пост №5
 
22.10.2014 09:22

Да, надо перебирать атрибуты.
Примерно, алгоритм выглядит так:

Код
      Реализация=СоздатьОбъект("Документ.Реализация");  
      Копия=СоздатьОбъект("Документ.Реализация");
      КопияТабличнойЧасти=СоздатьОбъект("ТаблицаЗначений");
      
      Реализация.ВыбратьДокументы(ДатаНачала,ДатаОкончания); 
      Пока Реализация.ПолучитьДокумент()=1 Цикл  
            Копия.Новый();
            Копия.ДатаДок=НоваяДата;
            Копия.УстановитьНовыйНомер();
            Копия.АвтовремяКонецДня();
            
            Для i=1 Метаданные.ОбщийРеквизитДокумента() Цикл
                  ИдРеквизита=Метаданные.ОбщийРеквизитДокумента(i).Идентификатор;
                  Копия.УстановитьАтрибут(ИдРеквизита, Реализация.ПолучитьАтрибут(ИдРеквизита));
            КонецЦикла;
            
            Для i=1 Метаданные.Документ("Реализация").РеквизитШапки() Цикл
                  ИдРеквизита=Метаданные.Документ("Реализация").РеквизитШапки(i).Идентификатор;
                  Копия.УстановитьАтрибут(ИдРеквизита, Реализация.ПолучитьАтрибут(ИдРеквизита));
            КонецЦикла;
            
            Реализация.ВыгрузитьТабличнуюЧасть(КопияТабличнойЧасти);
            Копия.ЗагрузитьТабличнуюЧасть(КопияТабличнойЧасти);
            
            Копия.Записать();
            
      КонецЦикла;
 
Но! Есть куча нюансов.
1. ТС не написал что у него за конфигурация, поэтому непонятно как происходит нумерация документов с префиксом или нет, поэтому, конструкция

Код
Копия.УстановитьНовыйНомер();
 


возможно, должна выглядеть иначе.
2. Среди реквизитов могут попасться такие, для которых на уровне конфигуратора указан тип = <Неопределенный> или тип=Справочник, но его вид неизвестен. Перед тем как писать значения в такие реквизиты, надо явно указывать что то вроде НазначитьТип() или НазначитьВид(), иначе туда ничего и не попадет.
3. Среди реквизитов могут попасться ссылки на документы, например, если у нас Реализация вида "Возврат поставщику" (если так сделано в конфигурации), то в нем может быть ссылка на документ-основание и алгоритм сделан так, что имеется смысловая связь с документом-основанием и, поскольку, создаваемый документ является копией какого то раннего, который по данной ситуации уже отработал, то непонятно как по ней же отработает копия.
4. Среди реквизитов (в том числе реквизитов табличной части) есть такие, которые явно ссылаются на какой нибудь справочник Партий и при проведении система будет снова пытаться с них что то списать в то время, когда по ним, возможно, уже ничего и не осталось после проведения первичного документа, поэтому значения в таком реквизите в копии, скорее всего, надо чистить.
5. Как поступать с создаваемыми документами? Просто записывать их в базу или сразу пытаться проводить? Но это Реализация и если это реализация товаров, то проведение может и не получиться если их нет в наличии. Да даже если это и реализация услуг, то оно тоже может не получиться, т.к. существуют механизмы контроля размера кредита покупателю или просрочки платежа.

Ответили: пост №6
CasperSky
читатель
офлайн
Дата регистрации: 21.10.2014
Сообщений: 6
Пост №6
 
22.10.2014 09:31
Ответ на пост №5

Thorvardr, спасибо огромное, буду пробовать.

1с Предприятие, упрощенка 1,3

Thorvardr
читатель
офлайн
Дата регистрации: 25.02.2005
Сообщений: 3082
Пост №7
 
22.10.2014 09:45

Для УСН, скорее всего, предложенного алгоритма будет достаточно.

Ответили: пост №8
CasperSky
читатель
офлайн
Дата регистрации: 21.10.2014
Сообщений: 6
Пост №8
 
22.10.2014 15:19
Ответ на пост №7

Thorvardr, Спасибо Огромнейшее, спас меня! Благодарю от всего сердца! Работает так как надо.

CasperSky
читатель
офлайн
Дата регистрации: 21.10.2014
Сообщений: 6
Пост №9
 
01.12.2014 13:33

Здравствуйте!
Обращаюсь еще раз к Вам за помощью, по этому же вопросу.

Все работает как надо, но возникли непонятки в одном моменте.

в коде

Код
 Копия.Записать();


добавил


Код
Копия.Записать();
Копия.Провести(0);

в результате получается следующее (красные блоки на рисунке):



Проблема в том, что "Содержание и сумма не отображаются в списке, пока не откроешь каждую операцию и не нажмешь "ОК"", после чего появляется сообщение о проведении реализации и отображается содержание и сумма (рис ниже)

Thorvardr
читатель
офлайн
Дата регистрации: 25.02.2005
Сообщений: 3082
Пост №10
 
01.12.2014 15:36

Ну напишите так:

Код
Копия.Операция.СуммаОперации = Окр(Копия.Итог("Сумма"),2,1);
Копия.Операция.Содержание = "Отгрузка тов.(продукции)";
Копия.Записать();
Копия.Провести(); 

Ответили: пост №11
Показывать по 10 20 40 сообщений

Читают тему:

Быстрый переход
Для технических специалистов
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация