Технологическое перепроведение документов

Публикация № 18843

Разработка - Практика программирования

14
Многие программисты и сисадмины, работающие с 1С 7.7 иногда ловят себя на мысли: как было бы здорово, если бы регистры можно было бы редактировать так же просто, как и бухгалтерские операции. Несколько лет назад эта проблема стала для меня настолько важной, что пришлось начать искать пути для её решения...

При изучении материала Коррекция регистров вспомнился мой собственный опыт корректировки регистров уже проведенных документов.

В отличие от способа Владислава Цылёва, я не использовал корректирующие документы, так как исправлять нужно было сразу большую последовательность документов. Не пользовался я также и прямыми запросами – для этого мне элементарно не хватило знаний.

 Но всё по порядку:

Было это больше 5 лет назад. Началось всё с того, что начальство поручило мне автоматизировать работу вновь созданного Отдела альтернативной подписки на базе нашей уже работающей программы (1С 7.7 Самописная конфигурация, Оперативный и Бухгалтерский учет). Дело было новое и незнакомое – как работает подписка и что требуется для этого, не знали не только я, но и руководство. Просто нас с начальником созданного отдела поставили перед фактом: Всё должно работать!

В процессе решения этой задачи, на начальном этапе, пока в наших головах не сложилось правильное представление о том, что нам нужно, мне приходилось  многократно переделывать структуры регистров и документов, перепроводить документы в «боевой» базе, в том числе и в закрыто» периоде – резать, что называется, по живому. Бухгалтерия была недовольна и категорически запрещала нам пересчитывать итоги. Если проводки ещё можно было скорректировать, не перепроводя документы, то с регистрами я этого делать не мог.

Постепенно в голове сформировался механизм перепроведения документов без пересчёта регистров и проводок. Идея состояла в том, что нужно перед проведением документа считать его движения в таблицу, а при проведении из этой же таблицы загрузить. Между этими действиями, с таблицей можно делать всё что угодно: менять значения ячеек, пересчитывать выборочно её строки, добавлять туда движения новых регистров или удалять то, что перестало быть необходимым.

Я поделился своими мыслями с друзьями, и мне подсказали, что нечто подобное уже предлагалось фирмой 1С на одном из дисков ИТС. После непродолжительных поисков я нашёл пример под названием «Технологическое перепроведение». На его основе был создан и внедрен в нашей организации механизм «технологического перепроведения документов». Поскольку за основу были взяты разработки 1С, то никакого авторства я за собой не оставляю.

 Для заполнения движений и проводок документа используется функция глобального модуля глЗаполнитьДвижения().

 

Функция глЗаполнитьДвижения(Документ) Экспорт

   ДвиженияРегистров=СоздатьОбъект("СписокЗначений");

   Если ПустоеЗначение(Документ) = 1 Тогда

      Возврат 0;

   КонецЕсли;

   Док = СоздатьОбъект("Документ");

   Док.НайтиДокумент(Документ);

   Для ИндРег = 1 По Метаданные.Регистр() Цикл

      МДРегистр = Метаданные.Регистр(ИндРег);

      ДвиженияРегистра = СоздатьОбъект("ТаблицаЗначений");

      ДвиженияРегистра.НоваяКолонка("ВидДвижения", "Строка", 3);

      ДвиженияРегистра.НоваяКолонка("НомерСтрокиДок", "Число", 5);

      Для Инд = 1 По МДРегистр.Измерение() Цикл

         ДвиженияРегистра.НоваяКолонка(МДРегистр.Измерение(Инд).Идентификатор, МДРегистр.Измерение(Инд));

      КонецЦикла;

      Для Инд = 1 По МДРегистр.Ресурс() Цикл

         ДвиженияРегистра.НоваяКолонка(МДРегистр.Ресурс(Инд).Идентификатор, МДРегистр.Ресурс(Инд));

      КонецЦикла;

      Для Инд = 1 По МДРегистр.Реквизит() Цикл

         ДвиженияРегистра.НоваяКолонка(МДРегистр.Реквизит(Инд).Идентификатор, МДРегистр.Реквизит(Инд));

      КонецЦикла;

      Рег = СоздатьОбъект("Регистр." + МДРегистр.Идентификатор);     

      Рег.ВыбратьДвиженияДокумента(Док.ТекущийДокумент());

      Пока Рег.ПолучитьДвижение() = 1 Цикл

         ДвиженияРегистра.НоваяСтрока();

         Стр = ДвиженияРегистра.КоличествоСтрок();

         ДвиженияРегистра.ВидДвижения = ?(Рег.Приход = 1, "+", "-");

         ДвиженияРегистра.НомерСтрокиДок = Рег.НомерСтроки();

         Для Инд = 1 По МДРегистр.Измерение() Цикл                                                               

            Имя = МДРегистр.Измерение(Инд).Идентификатор;                      

            ДвиженияРегистра.УстановитьЗначение(Стр, Имя, Рег.ПолучитьАтрибут(Имя));

         КонецЦикла;

         Для Инд = 1 По МДРегистр.Ресурс() Цикл

            Имя = МДРегистр.Ресурс(Инд).Идентификатор;                      

            ДвиженияРегистра.УстановитьЗначение(Стр, Имя, Рег.ПолучитьАтрибут(Имя));

         КонецЦикла;

         Для Инд = 1 По МДРегистр.Реквизит() Цикл

            Имя = МДРегистр.Реквизит(Инд).Идентификатор;                      

            ДвиженияРегистра.УстановитьЗначение(Стр, Имя, Рег.ПолучитьАтрибут(Имя));

         КонецЦикла;

      КонецЦикла;

      ДвиженияРегистров.Установить(МДРегистр.Идентификатор, ДвиженияРегистра);    

   КонецЦикла;               

   Операция = СоздатьОбъект("Операция");

   Если Операция.НайтиОперацию(Документ) = 1 Тогда

      ДвиженияРегистров.Установить("СуммаОперации", Операция.СуммаОперации);    

      ДвиженияРегистров.Установить("Содержание", СокрЛП(Операция.Содержание));    

      Проводки = СоздатьОбъект("ТаблицаЗначений");

      Проводки.НоваяКолонка("Дт", "Счет",,,, 5);

      Проводки.НоваяКолонка("СубкД1",,,,, 10);

      Проводки.НоваяКолонка("СубкД2",,,,, 10);

      Проводки.НоваяКолонка("СубкД3",,,,, 10);

      Проводки.НоваяКолонка("Кт", "Счет",,,, 5);

      Проводки.НоваяКолонка("СубкК1",,,,, 10);

      Проводки.НоваяКолонка("СубкК2",,,,, 10);

      Проводки.НоваяКолонка("СубкК3",,,,, 10);

      Проводки.НоваяКолонка("Количество", "Число", 5,,, 3);

      Проводки.НоваяКолонка("Сумма", "Число", 15, 2,, 6);

      Проводки.НоваяКолонка("СодержаниеПроводки", "Строка",,,, 10);

      Проводки.НоваяКолонка("НомерЖурнала", "Строка",,,, 4);

      Операция.ВыбратьПроводки();

      Пока Операция.ПолучитьПроводку() = 1 Цикл

         Проводки.НоваяСтрока();

         ТекСтр = Проводки.НомерСтроки;

         ОперДбСчет = Операция.Дебет.Счет;

         Проводки.Дт = ОперДбСчет;

         Если ОперДбСчет.КоличествоСубконто() > 0 Тогда

            Для ъ = 1 по ОперДбСчет.КоличествоСубконто() Цикл

               Проводки.УстановитьЗначение(ТекСтр, "СубкД" + ъ, Операция.Дебет.Субконто(ъ));

            КонецЦикла;

         КонецЕсли;

         ОперКтСчет = Операция.Кредит.Счет;

         Проводки.Кт = ОперКтСчет;

         Если ОперКтСчет.КоличествоСубконто() > 0 Тогда

            Для ъ = 1 по ОперКтСчет.КоличествоСубконто() Цикл

               Проводки.УстановитьЗначение(ТекСтр, "СубкК" + ъ, Операция.Кредит.Субконто(ъ));

            КонецЦикла;

         КонецЕсли;

         Проводки.Количество = Операция.Количество;

         Проводки.Сумма = Операция.Сумма;

         Проводки.СодержаниеПроводки = Операция.СодержаниеПроводки;

         Проводки.НомерЖурнала = Операция.НомерЖурнала;

      КонецЦикла;

      ДвиженияРегистров.Установить("Операция", Проводки);     

   КонецЕсли;

   ДвиженияРегистров.Установить("Вариант", "ТехнологическоеПерепроведение");

   Возврат ДвиженияРегистров;

КонецФункции

Для демонстрации результата выполнения функции я использую разработку глПоказать() многоуважаемого zorro, которой пользуюсь уже много лет. (Выражаю огромную благодарность её автору).

Вот так в ней выглядит список ДвиженияРегистров. В качестве значений этого списка – таблицы, повторяющие структуру регистров и содержащие движения регистра документом.

 spisok

 

 

Вот пример таблицы ОстаткиТоваров. Её структура копирует структуру регистра ОстаткиТоваров, кроме двух служебных колонок: ВидДвижения, и НомерСтрокиДок.

ostatki 

 

Если документ имеет бухпроводки, то они записываются в таблицу с названием Операция.

operacia 

Для реквизитов СуммаОперации и Содержание в этой таблице места не нашлось, и они занимают «особое» положение в списке значений ДвижениеРегистров.

Заполнение таблицы Операция сделано для того, чтобы контролировать проводки во время технологического перепроведения, и не обрабатывать документ дважды, фактически двумя способами. Ведь если уж мы всё равно его перепроводим, зачем дополнительно править операцию?

В глобальный модуль также нужно поместить процедуру глТехнологическоеПерепроведение(), назначение которой – проводить документ «из таблицы».

Процедура глТехнологическоеПерепроведение(Конт, ДвиженияРегистров)Экспорт         

   Для ИндРег = 1 По Метаданные.Регистр() Цикл

      МДРегистр = Метаданные.Регистр(ИндРег);

      ДвиженияРегистра = ДвиженияРегистров.Получить(МДРегистр.Идентификатор);

      Если ПустоеЗначение(ДвиженияРегистра) = 1 Тогда

         Продолжить;

      КонецЕсли;

      Рег = Конт.Регистр.ПолучитьАтрибут(МДРегистр.Идентификатор);     

      Для Стр = 1 По ДвиженияРегистра.КоличествоСтрок() Цикл

         Рег.ПривязыватьСтроку(ДвиженияРегистра.ПолучитьЗначение(Стр, "НомерСтрокиДок"));

         Для Инд = 1 По МДРегистр.Измерение() Цикл                                                               

            Имя = МДРегистр.Измерение(Инд).Идентификатор;                      

            ПрисвоитьЗначениеСТипом(Рег, Имя, МДРегистр.Измерение(Инд), ДвиженияРегистра.ПолучитьЗначение(Стр, Имя));

         КонецЦикла;

         Для Инд = 1 По МДРегистр.Ресурс() Цикл

            Имя = МДРегистр.Ресурс(Инд).Идентификатор;                      

            Рег.УстановитьАтрибут(Имя, ДвиженияРегистра.ПолучитьЗначение(Стр, Имя));

         КонецЦикла;

         Для Инд = 1 По МДРегистр.Реквизит() Цикл

            Имя = МДРегистр.Реквизит(Инд).Идентификатор;                      

            ПрисвоитьЗначениеСТипом(Рег, Имя, МДРегистр.Реквизит(Инд), ДвиженияРегистра.ПолучитьЗначение(Стр, Имя));

         КонецЦикла;

         Если МДРегистр.ТипРегистра = "Остатки" Тогда

            Если СокрЛП(ДвиженияРегистра.ПолучитьЗначение(Стр, "ВидДвижения")) = "+" Тогда

               Рег.ДвижениеПриходВыполнить();           

            Иначе

               Рег.ДвижениеРасходВыполнить();           

            КонецЕсли;

         Иначе

            Рег.ДвижениеВыполнить();           

         КонецЕсли;

      КонецЦикла;

   КонецЦикла;               

   Если ТипЗначенияСтр(ДвиженияРегистров.Получить("Операция")) = "ТаблицаЗначений" Тогда

      Опер = Конт.Операция;

      ДвиженияРегистра = ДвиженияРегистров.Получить("Операция");

      Для Стр = 1 По ДвиженияРегистра.КоличествоСтрок() Цикл

         Опер.НоваяПроводка();

         Опер.Дебет.Счет = ДвиженияРегистра.ПолучитьЗначение(Стр, "Дт");

         Если Опер.Дебет.Счет.КоличествоСубконто() > 0 Тогда

            Для ъ = 1 по Опер.Дебет.Счет.КоличествоСубконто() Цикл

               СубкД = ДвиженияРегистра.ПолучитьЗначение(Стр, "СубкД" + ъ);

               Опер.Дебет.Субконто(ъ, СубкД);

            КонецЦикла;

         КонецЕсли;

         Опер.Кредит.Счет = ДвиженияРегистра.ПолучитьЗначение(Стр, "Кт");

         Если Опер.Кредит.Счет.КоличествоСубконто() > 0 Тогда

            Для ъ = 1 по Опер.Кредит.Счет.КоличествоСубконто() Цикл

               СубкК = ДвиженияРегистра.ПолучитьЗначение(Стр, "СубкК" + ъ);

               Опер.Кредит.Субконто(ъ, СубкК);

            КонецЦикла;

         КонецЕсли;

         Если ПустоеЗначение(ДвиженияРегистра.ПолучитьЗначение(Стр, "Количество")) = 0 Тогда

            Опер.Количество = ДвиженияРегистра.ПолучитьЗначение(Стр, "Количество");

         КонецЕсли;

         Опер.Сумма = ДвиженияРегистра.ПолучитьЗначение(Стр, "Сумма");

         Опер.СодержаниеПроводки = ДвиженияРегистра.ПолучитьЗначение(Стр, "СодержаниеПроводки");

         Если ПустоеЗначение(ДвиженияРегистра.ПолучитьЗначение(Стр, "НомерЖурнала")) = 0 Тогда

            Опер.НомерЖурнала = ДвиженияРегистра.ПолучитьЗначение(Стр, "НомерЖурнала");

         КонецЕсли;

      КонецЦикла;

      Опер.СуммаОперации = ДвиженияРегистров.Получить("СуммаОперации");

      Опер.Содержание = ДвиженияРегистров.Получить("Содержание");

      Опер.Записать();           

   КонецЕсли;

КонецПроцедуры

В обработки проведения документов нужно добавить следующие строки:

 Процедура ОбработкаПроведения(Реж)

   Если ТипЗначенияСтр(Реж) = "СписокЗначений" Тогда

      Если Реж.Получить("Вариант") = "ТехнологическоеПерепроведение" Тогда

         глТехнологическоеПерепроведение(Контекст, Реж);

         Возврат;              

      КонецЕсли;

   КонецЕсли;

  

 

Теперь если при проведении документа «подсунуть» ему в качестве параметра список с движениями:  

    Док.Провести(0, ДвиженияРегистров);

, то с этими движениями он и проведётся.

Вот собственно говоря и всё. Хотя отдел альтернативной подписки успешно работает и «подписная компонента» в корпоративной базе 1С «функцикулирует», от использования технологического перепроведения мы не отказались. Периодически бывает нужно скорректировать движения документа вслед за менеджерами.

Вот пример обработки, которую я использую, если они оприходовали не тот товар (и почему такие случаи выявляются только через полгода?):

 

Процедура Выполнить()

   Если ВыбТов2=ВыбТов1 Тогда

      Сигнал(); Предупреждение("Товары не должны быть одинаковыми!",5);

      Возврат;

   КонецЕсли;

   Сообщить("Время начала обработки: " + ТекущееВремя(), "i");  

   Запрос = СоздатьОбъект("Запрос");

   ТекстЗапроса =

   "Период с НачДата по КонДата;

   |Товар = Регистр.ОстаткиТоваров.Товар;

   |Док = Регистр.ОстаткиТоваров.ТекущийДокумент;

   |Кол = Регистр.ОстаткиТоваров.Количество;

   |Функция КолПриход = Приход(Кол);

   |Функция КолРасход = Расход(Кол);

   |Группировка Док;

   |Условие(Товар = ВыбТов1);";

   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

      Предупреждение("Не вышло?"); Возврат;

   КонецЕсли;

   Й=0;

   Пока Запрос.Группировка(1) = 1 Цикл

      Зап=0;

      ДД = Запрос.Док; ДДВид=ДД.Вид();

      ТД = СоздатьОбъект("Документ." + ДДВид);

      ТД.НайтиДокумент(ДД);

      Если ТД.Проведен() = 1 Тогда

         ДвиженияРегистров = глЗаполнитьДвижения(ТД.ТекущийДокумент(), 1);

         Состояние(""+ТД);

         Если (ДДВид="НакладнаяПередачи") Тогда

            ТЗ=ДвиженияРегистров.Получить("ПередачаТовара");

            ТЗ.ВыбратьСтроки();

            Пока ТЗ.ПолучитьСтроку()=1 Цикл

               Если ТЗ.Товар=ВыбТов1 Тогда

                  ТЗ.Товар=ВыбТов2;

                  Зап=1;

               КонецЕсли;

            КонецЦикла;

         КонецЕсли;

         Если (ДДВид="ВозвратПоставщику") Тогда

            ТЗ=ДвиженияРегистров.Получить("Поставщики");

            ТЗ.ВыбратьСтроки();

            Пока ТЗ.ПолучитьСтроку()=1 Цикл

               Если ТЗ.Товар=ВыбТов1 Тогда

                  ТЗ.Товар=ВыбТов2;

                  Зап=1;

               КонецЕсли;

            КонецЦикла;

         КонецЕсли;

         Если (ДДВид="РасходнаяНакладная") Или (ДДВид="ВозвратнаяНакладная") Или (ДДВид="ПередачаТовара") Тогда

            ТЗ=ДвиженияРегистров.Получить("Оборот");

            ТЗ.ВыбратьСтроки();

            Пока ТЗ.ПолучитьСтроку()=1 Цикл

               Если ТЗ.Товар=ВыбТов1 Тогда

                  ТЗ.Товар=ВыбТов2;

                  Зап=1;

               КонецЕсли;

            КонецЦикла;

         КонецЕсли;

         ТЗ=ДвиженияРегистров.Получить("ОстаткиТоваров");

         ТЗ.ВыбратьСтроки();

         Пока ТЗ.ПолучитьСтроку()=1 Цикл

            Если ТЗ.Товар=ВыбТов1 Тогда

               ТЗ.Товар=ВыбТов2;

               Зап=1;

            КонецЕсли;

         КонецЦикла;

         ТЗ=ДвиженияРегистров.Получить("Операция");

         ТЗ.ВыбратьСтроки();

         Пока ТЗ.ПолучитьСтроку()=1 Цикл

            Если Лев(ТЗ.Дт,3)="41." Тогда

               Если ТЗ.СубкД1=ВыбТов1 Тогда

                  ТЗ.СубкД1=ВыбТов2;

                  Зап=1;

               КонецЕсли;

            КонецЕсли;

            Если Лев(ТЗ.Кт,3)="41." Тогда

               Если ТЗ.СубкК1=ВыбТов1 Тогда

                  ТЗ.СубкК1=ВыбТов2;

                  Зап=1;

               КонецЕсли;

            КонецЕсли;

         КонецЦикла;

         Если Зап=1 Тогда

            Попытка

               Й=Й+1;

               Сообщить("            "+Й+". " + ТД, "i");

               Если ТД.Провести(0, ДвиженияРегистров) = 0 Тогда

                  ОтменитьТранзакцию();

                  Сообщить("- Документ не перепроведён " + ДД, "!");

                  Прервать;

               КонецЕсли;

            Исключение

               Сообщить("-- " + ОписаниеОшибки(), "!!!");

               Прервать;

            КонецПопытки;

         КонецЕсли;  

      КонецЕсли;  

   КонецЦикла;

   Сообщить("Обработка завершена: " + ТекущееВремя() + " " + РазделительСтраниц, "i");  

   Сообщить("");

   Сигнал();

   Предупреждение("Готово!");

КонецПроцедуры 

 

Хочу отметить, что технологическое перепроведение проходит значительно быстрее обычного, т.к. предварительные расчеты не проводятся, а берутся сразу готовые результаты из таблицы.

 

Если требуется распечатать  движение регистра документа, можно использовать последовательность процедур глЗаполнитьДвижения() и глПоказать().

На основе этой методики мой бывший напарник сваял обработку для интерактивной правки движений документа:

obrabotka 

Чтобы при повторном проведении после исправления старые движения не восстанавливались, эту штуку использую совместно с обработкой Editrekv.ert Владислава Цилёва.

 

Ну вот наверное и всё, что я хотел сказать. Если будете использовать, то имейте ввиду, что при работе с бухпроводками процедуры глЗаполнитьДвижения() и глТехнологическоеПерепроведение () не сохраняют и не восстанавливают реквизиты Валюта, ВалСумма, Основание… Просто не используем мы их. Ну если до сюда дочитали, то добавить сами сможете :-)

 

14

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. lmm 14 22.01.09 20:49 Сейчас в теме
Приношу свои извинения за несколько сумбурное описание, но это моя первая статья на Infostart
AlexandrSmith; +1 Ответить
2. Altair777 639 22.01.09 20:58 Сейчас в теме
(0) пытался читать, не осилил.
День был тяжелый, устал - работа навалилась.
Но, имхо, плюсик заслуживаешь хотя бы только за подачу материала.
Но попытаюсь позже разобраться.
Если что, плюсик плавным движением и кликом мышки превращается... превращается... превращается... в.. :-)
3. CheBurator 22.01.09 21:37 Сейчас в теме
не уловил - в чем основное назначение такого "перепроведения"? то что движения регистра не рассчитываются "штатным" алгоритмом, а берутся уже готовые "старые" движения и немного подправляются? что будет с итогами, если после вашего "технологического перепроведения" будет осуществлена штатная "восстановление последовательност"? итоги - что с ними будет?
5. lmm 14 23.01.09 08:21 Сейчас в теме
(3)В том то и дело, что изменения в движениях требовались только для вновь созданных регистров.(конфа то самописная, и новые регистры постоянно правились, ну и обработка то админская -- не знаешь, не трогай;))
AlexandrSmith; +1 Ответить
6. lmm 14 23.01.09 08:42 Сейчас в теме
(3)"Восстановлением последовательности" мы не пользуемся, поэтому что будет в этом случае, я сказать к сожалению не могу(
Наверное этот метод подходит не для всех случаев
AlexandrSmith; +1 Ответить
4. CheBurator 22.01.09 21:51 Сейчас в теме
подсказка: если глПоказать сделать функцией, то ей можно будет пользоваться в отладчике очень удобно...
7. lmm 14 23.01.09 10:13 Сейчас в теме
Разумеется, чтобы в последущем при повторном перепроведении итоги "не поплыли", реквизиты документа тоже требуется исправить. Этот момент я в своём примере опустил.

В этом случае в моём примере перед заполнением движений документа в "таблицу" надо будет добавить строчки:

ТД.ВыбратьСтроки();
Пока ТД.ПолучитьСтроку() = 1 Цикл
Если ТД.Товар = ВыбТов1 Тогда
ТД.Товар = ВыбТов2;
ТД.Записать();
КонецЕсли;
КонецЦикла;
AlexandrSmith; +1 Ответить
8. lmm 14 23.01.09 10:46 Сейчас в теме
Процедура ПрисвоитьЗначениеСТипом, вызывается из глТехнологическоеПерепроведение():

Процедура ПрисвоитьЗначениеСТипом(Объект, Имя, МД, Значение) Экспорт
Если МД.Тип = "Неопределенный" Тогда
Тип = ТипЗначенияСтр(Значение);
Если Тип = "Перечисление" Тогда
Объект.НазначитьТип(Имя, Тип + "." + Значение.Вид());
ИначеЕсли Тип = "Число" Тогда
Стр = СокрЛП(Строка(Значение));
ПозТочки = Найти(Стр, ".");
Если ПозТочки > 0 Тогда
Объект.НазначитьТип(Имя, Тип, СтрДлина(Стр), СтрДлина(Стр) - ПозТочки);
Иначе
Объект.НазначитьТип(Имя, Тип, СтрДлина(Стр), 0);
КонецЕсли;
ИначеЕсли Тип = "Строка" Тогда
Объект.НазначитьТип(Имя, Тип, СтрДлина(Значение));
Иначе
Объект.НазначитьТип(Имя, Тип);
КонецЕсли;
КонецЕсли;
Объект.УстановитьАтрибут(Имя, Значение);
КонецПроцедуры

AlexandrSmith; +1 Ответить
9. Ёпрст 1036 23.01.09 11:41 Сейчас в теме
(0) Аналогичное решение сто лет в обед живёт в МОДе ...
12. lmm 14 23.01.09 13:41 Сейчас в теме
13. Ёпрст 1036 23.01.09 14:10 Сейчас в теме
(12) Будешь знать... Там сделано для того, чтобы можно было переносить документы вместе с движениями из базы в базу один в один ....
Или , если не переносить движения - они сами будут формироваться в базе приёмнике...
Ну и механизм тот же самый.

Вообще, часто используется, если надо допровести документ по каким-либо признакам..Добавить лишнее измерение, к примеру и т.д и т.п..
вещь очень полезная.
14. lmm 14 23.01.09 14:34 Сейчас в теме
(13) Вот последнее -- это самое интересное))) Можно двигать такие регистры, для которых этот документ изначально не был предназначен. Осталось придумать, как это использовать;)

А итоги пусть пересчитываются, лишь бы в процессе пересчета не менялись.
Вот только последовательности канешна нарушаются...
10. Ёпрст 1036 23.01.09 11:44 Сейчас в теме
+9 И самое главное автор забыл вообще сказать
11. Ёпрст 1036 23.01.09 11:45 Сейчас в теме
Что у документов должна быть снята галка "Автоматическое удаление движений"
И еще... пересчет итогов один хрен будет :)

А так, ничего нового.
15. slawa 26 17.04.09 05:52 Сейчас в теме
Не могу скачать глПоказать()
Все ссылки ведут на proclub, а там архив битый. (у меня есть право все качать)
скиньте пожалуйста show.zip на мыло gslawa(гав)gmail.com
Спасибо !!!

за статью +
16. apvl 26.08.09 15:10 Сейчас в теме
17. xxx6662000 26.05.10 11:06 Сейчас в теме
Было очень не плохо получить ссылку или саму обработку приведенную как пример. Ссылки на обработкой Editrekv.ert Владислава Цилёва, к сожалению ведут только в поиск где ни по имени ни по фамилии ни по названию обработки найти ничего не получается.
Если автор статьи сможет или другие пользователи имеющие данную обработку будьте добры вышлите мне на isn978@gmail.com
18. xxx6662000 26.05.10 11:25 Сейчас в теме
я столкнулся с технической проблемой при правке регистров обработкой "коррекция регистров". у нас сложный учет на 7.7. каждый день у нас открывается документом "открытие дня". задним числом проводить и перепроводить ничего нельзя. в этом документе задействованы три регистра и проводки, а править надо только одну запись в одном регистре из 10000 строк в каждом регистре и не затрагивая формирование операций. При использовании обработки время на корекцию занимает много, около 30 минут как минимум. А мне надо править за 2009 год около 200 документов - кошмар. Не подскажет ли автор правка регистров занимает меньше времени чем "коррекция регистров"?
19. lmm 14 26.05.10 14:00 Сейчас в теме
Скорректировал ссылку на обработку Editrekv.ert. Старая приказала долго жить ;)
21. isn 13 26.05.10 14:17 Сейчас в теме
(19) А ознакомится с обработкой, которую наваял Ваш бывший напарник для интерактивной правки движений документа, можно?
Я наверное не правильно выразился, я думал что "Editrekv.ert Владислава Цилёва" это обработка про которую Вы упоминали (которую наваял Ваш бывший напарник).
20. lmm 14 26.05.10 14:08 Сейчас в теме
isn2, как раз для таких целей эта технология и создавалась. Как я уже указал в статье, технологическое перепроведение проходит значительно быстрее обычного, т.к. предварительные расчеты не проводятся, а берутся сразу готовые результаты из таблицы. Насколько это быстрее, чем "коррекция регистров", я не знаю. Но это точно должно быть гораздо быстрее, чем реальное перепроведение этих 200 документов, поскольку 9999 строк из 10000 заново пересчитываться не будут.
22. lmm 14 26.05.10 15:02 Сейчас в теме
23. isn 13 26.05.10 15:27 Сейчас в теме
24. isn 13 26.05.10 15:35 Сейчас в теме
пока переписывался решил написать свою обработку для интерактивной правки движений документа.
Предлагаю Вам функцию аналогичную Вашей РедактированиеСтроки(Очистить = 0)
25. isn 13 26.05.10 15:36 Сейчас в теме
Там всего несколько строк и она универсальна, не зависимо от типа колонок позволяет присваивать требуемые значения
Процедура Клик(ТЗ)
перем Тип, НовоеЗначение;
ТЗ.ПолучитьПараметрыКолонки(ТЗ.ТекущаяКолонка(),Тип,,,,,,);
НовоеЗначение = ПолучитьПустоеЗначение(Тип);
Ответ = 0;
Ответ = ВвестиЗначение(НовоеЗначение,,,,Тип);
Если Ответ = 1 Тогда
ТЗ.УстановитьЗначение(ТЗ.ТекущаяСтрока(),ТЗ.ТекущаяКолонка(),НовоеЗначение);
КонецЕсли;
КонецПроцедуры // Клик()
26. isn 13 26.05.10 15:46 Сейчас в теме
жаль в работе не могу проверить отсутствуют процедуры
27. isn 13 26.05.10 15:46 Сейчас в теме
Посчитать (Контекст, "Обработка: ТехнологическоеПерепроведение");
глПечатьДвижений(Список,, 1);
28. lmm 14 18.12.11 14:11 Сейчас в теме
Спасибо всем за плюсики! Каждый из них для меня очень ценен, поэтому моя благодарность очень искренняя!
Жаль, что мало кому оказался полезным этот труд... Слишком уж специфическая работа!
Вот если какую-нибудь новую форму документа опубликовать -- это да!!! :)))))
Оставьте свое сообщение

См. также

Дистрибьюция 7.7. Часть 1. Жизненный цикл заявки покупателя. Одна заявка покупателя, много адресов доставки. 1

Статья Программист Нет файла v7.7 1С7:Комплекс 1С7:ТиС УУ Бесплатно (free) Практика программирования Адаптация типовых решений

Описан способ работы с учетом расписания с приоритетными покупателями - торговыми сетями (основными покупателями) в торговой или комплексной учетной системе на 1С 7.7. Множественная заявка покупателя на несколько торговых точек.

14.10.2019    1189    ksnik    0       

Проверка часового пояса 9

Статья Программист Нет файла v7.7 Windows Бесплатно (free) Практика программирования

При использовании терминалок для удаленных баз, иногда при входе в базу данных необходимо исключить возможность входа пользователей с компьютеров с другим часовым поясом. Например, работают в Новосибирской базе с временем UTC +6 и пытаются зайти в базу с UTC +3.

16.05.2016    8498    kudenzov    3       

[ПОЛЕЗНЯШКА, 7.7] Как посчитать итоги по документам черным запросом с изподвывертом? 13

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Практика программирования

Мелкая полезняшка, считает запросом итоговую сумму документов и количество документов.

12.03.2016    15781    CheBurator    18       

.Net в 1С. На примере использования HTTPClient, AngleSharp. Удобный парсинг сайтов с помощью библиотеки AngleSharp, в том числе с авторизацией аля JQuery с использованием CSS селекторов. Динамическая компиляция 111

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования WEB

Часто приходится парсить сайты, в том числе с авторизацией, перескакивая со страницы на страницу по ссылкам. Тот, кто занимался вэб программированием, знает, как удобно использовать JQuery и CSS селекторы. На .Net написана очень удобная библиотека AngleSharp. Я покажу, как с её помощью можно значительно облегчить себе труд.

10.03.2016    49139    Serginio    33       

.Net в 1С. Асинхронные HTTP запросы, отправка Post нескольких файлов multipart/form-data, сжатие трафика с использованием gzip, deflate, удобный парсинг сайтов и т.д. 37

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования Разработка внешних компонент WEB

Очень часто нужно при работе с HTTP сервисами или сайтами использовать Асинхронные HTTP запросы, отправку на сервер нескольких файлов, использование сжатия трафика. Эта статья про то, как этого легко добиться.

09.03.2016    26072    Serginio    22       

Использование классов .Net в 1С для новичков 147

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования Разработка внешних компонент Универсальные функции

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    63884    Serginio    104       

Пример HTTP запроса к УТМ ЕГАИС на платформе 1С 7.7 15

Статья Программист Нет файла v7.7 1cv7.md Россия Windows Оптовая торговля Розничная торговля Бесплатно (free) Практика программирования Внешние источники данных

Запрос реализован на объекте ServerXMLHTTP из встроенной в Windows библиотеки MSXML, результатом запроса является XML объект DOMDocument из той же библиотеки MSXML со встроенным интерфейсом его обработки

16.12.2015    20484    Palmer1976    3       

Экспорт нескольких MXL таблиц в один XLS файл, на отдельные листы. Простой алгоритм 20

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования Загрузка и выгрузка в Excel

Статья посвящена распространённому вопросу - как сохранить несколько таблиц (отчетов) в формате MXL, с которым работает 1С, на отдельные листы одного Excel файла. Освещается простой алгоритм решения проблемы штатными средствами, без использования внешних модулей и библиотек (не относящихся к 1С и Excel).

23.11.2015    14292    etmarket    14       

Процедура расшифровки ячейки таблицы в отчетах 1С 7.7 11

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Практика программирования Универсальные функции

Хочу поделиться с вами универсальной процедурой для расшифровки ячеек печатной формы отчетов в 1С 7.7.

24.09.2015    14087    Anzhey    13       

Универсальный способ сравнения таблиц 15

Статья Программист Нет файла v7.7 v8 Бесплатно (free) Практика программирования

На эту тему уже есть статьи, но этот способ нигде не описан. Хотя я его использую с тех пор, как занимаюсь программированием. Его преимущество в простоте и универсальности: можно применять на 1С, SQL, а также в любом другом языке программирования.

05.07.2015    15298    json    1       

Числа прописью в родительном падеже в 7.7? Легко! 13

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Практика программирования

Вывод числительных прописью в родительном падеже штатными средствами в три строчки кода.

20.06.2015    10329    gimalaj    3       

Хитрости сохранения табличного документа в Excel для дальнейшей работы с ним 78

Статья Программист Нет файла v7.7 v8 1cv8.cf 1cv7.md Windows Бесплатно (free) Практика программирования Загрузка и выгрузка в Excel

Все пользователи 1С всех версий (начиная с 7-й) сталкиваются с проблемой нормальной работы с данными, сохраненными в Excel файл. Есть некоторые хитрости, которые позволяют облегчить работу с сохраненными данными из 1С в формат Excel.

16.01.2015    72391    shmellevich    35       

Исправление в типовой комплексной конфигурации глобальной функции глВсеРеквизитыДокументаЗаполнены() 4

Статья Программист Нет файла v7.7 1С7:Комплекс Россия Windows Бесплатно (free) Практика программирования

В типовых конфигурациях глобальная функция глВсеРеквизитыДокументаЗаполнены() не работает с реквизитами табличной части. Данная статья содержит текст исправленной функции, корректно проверяющей табличную часть.

20.08.2014    6215    hvv2002    0       

ЗаполнитьЗначенияСвойств - заставляем работать в 7.7 11

Статья Программист Нет файла v7.7 1cv7.md Бесплатно (free) Практика программирования

Если вы используете в работе 1С:Предприятие 8.х, то наверняка знакомы и с замечательной системной процедурой, как ЗаполнитьЗначенияСвойств(). Ее использование помогает значительно упростить написание программного кода в ряде случае, делает его (код) более наглядным и простым. Но что же делать тем, кто до сих пор использует (постоянно или иногда) 1С:Предприятие 7.7?

24.07.2014    19051    tomvlad    5       

Полезные функции. Склонение (должность и фамилия подписантов). Любой язык 3

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования

Уехал директор в командировку, отпуск... , оставил доверенность на хозяйственные операции на другого сотрудника. Все договора и другие документы в обмороке - "подписант" теперь другой, по тексту тоже много правок... Пересмотрел много публикаций, вариантов много, не приглянулось. Сделал свой "Баян" . У меня всего-то крутится пять фигурантов ... Нет простого, наглядного и всепогодного варианта без языкового барьера. Всем процессом управляет пользователь.

03.03.2014    15576    kompas-dm    5       

Реализация Ctrl+Z в 1С 7.7 (ТиС) 7

Статья Программист Нет файла v7.7 1С7:ТиС Windows Бесплатно (free) Практика программирования

В семерке отсутствует возможность отменять последнее действие в формах документов. В данной статье будет рассмотрен пример реализации данной функции. Возможно, кому-нибудь пригодится.

15.07.2013    5793    a.o.popova    10       

Копия напечатанного документа или как спрятать документ. 2

Статья Программист Нет файла v7.7 Бесплатно (free) Журнал регистрации Практика программирования

Возникла необходимость, чтобы при печати определённого документа (даже потом не сохранённого), создавалась его копия, т.е. запись всех напечатанных документов. (В результате чего возникла такая потребность, полагаюсь на вашу фантазию). В итоге получилось два варианта решения, остановился на втором.

11.04.2013    13384    Dima_    8       

Автосохранение документа в 1С 7.7 3

Статья Программист Нет файла v7.7 1cv7.md Россия Windows Бесплатно (free) Практика программирования

В данной статье мы рассмотрим автосохранение документа в 1С 7.7!

22.03.2013    11306    aagubarev    25       

Конвертация данных 2.1 (2.1.3.1) 1С 7.7 - 1С 8.Х передача параметра ПКО 14

Статья Системный администратор Программист Нет файла v7.7 v8 КД Бесплатно (free) Практика программирования Перенос данных из 1С7.7 в 1C8.X

Передача параметров по умолчанию доступна только для баз 1С 8.х -1С 8.х. Показан пример, как передать параметры из 1С 7.7 - 1С 8.х

10.12.2012    22536    serg_gres    6       

Устранение проблемы при работе с полем, которое ограничено маской ввода 3

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

Для поля, у которого установлена маска ввода, перед программной инициализацией необходимо начальное значение преобразовать к значению в соответствии с маской, иначе буду потеряны символы в местах разделителях. В данной публикации приведена функция, которая универсально выполняет данное действие.

08.08.2012    14389    www2000    4       

Динамическая фильтрация в справочнике при вводе наименования 15

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

Позволяет в открытой форме списка, выбора или подбора справочника производить динамическую фильтрацию по набранному наименованию.

02.07.2012    14503    maxpiter    62       

Обновление базы 1с 7.7. с помощью движка 1с 8.х 92

Статья Системный администратор Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования Администрирование данных 1С

Если Вас угораздило в стандартную типовую конфу внести правки, причем в самый большой модуль, а именно глобальный. Если к тому же Вы внесли изменение в какую-то стандартную функцию, в которой 1с сама регулярно чего-то меняет, то любое обновление начинает доставать. Используя возможности движка платформы 1с 8.х можно существенно сэкономить себе время и нервы.

28.04.2012    16209    Valerich    31       

v77. Робот 43

Инструменты и обработки no Внешняя обработка (ert,epf) v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

Исполнитель Робот. Учебное пособие по программированию для детей дошкольного возраста. Без внешних компонент.

09.04.2012    10452    54    item    18       

Запуск внешней обработки по расписанию v7.7 39

Статья Программист Нет файла v7.7 1cv7.md Россия Windows Бесплатно (free) Практика программирования Администрирование данных 1С

Неоднократно возникали задачи организовать, например ежедневную выгрузку и отправку отчетов по эл.почте, и вот…

20.03.2012    40032    Yury1001    17       

v77. Закладки в многоуровневом справочнике аля Total Commander 28

Инструменты и обработки Программист Конфигурация (md, cf) v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

В больших многоуровневых справочниках можно ускорить доступ пользователю к наиболее популярным группам.

09.03.2012    9088    44    item    17       

v77. Паинт 53

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

v77. 1С:Паинт :) Такая вот игрушка. Без внешних компонент.

06.03.2012    12294    81    item    38       

Как уменьшить количество заблокированных объектов 26

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

История о том как я решил пересобрать форму справочника клиентов и чем это все закончилось...

12.01.2012    13482    ShEvOvIcH    18       

Регистрация текста окна сообщений 4

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

Для контроля работы пользователей потребовалось записывать текст окна сообщений в файл. Получился простейший механизм регистрации лог-файла. Удержать роста папки "Temp", в качестве рекомендации, может использование bat-файла, который будет чистить или архивировать получаемые логи. Таких батников в инете полным-полно. P.S. Особо по форуму не смотрел, может, есть уже такое.

28.11.2011    6595    sdin101    9       

7.7.: Готовим md-файл для публикации. В картинках. 46

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

Вы доработали типовую конфигурацию: скажем, добавили новый Документ, и хотите им поделиться с обществом ИС. Но нельзя же выложить МД-шник целиком, это будет нарушением правил. И как тут быть?

14.09.2011    15326    Арчибальд    21       

Учет доверенностей 6

Статья Программист Нет файла v7.7 1С7:Бух 1С7:Комплекс 1С7:ТиС 1С7:ПУБ Документооборот и делопроизводство Бесплатно (free) Практика программирования

В расходных документах есть необходимость проставления доверенности. Но заносить каждый раз одни и те же данные бывает утомительно. особенно при больших оборотах.

08.09.2011    9888    Sykoku    8       

Методика расчета резервов отпусков (счет 96) в 1С Зарплата и Кадры 7.7 с 2011 года (вариант) 32

Статья Программист Нет файла v77::Расчет 1С7:Бух 1С7:ЗиК Россия БУ Зарплата Бесплатно (free) Практика программирования

В статье рассмотрен один из возможных вариантов расчета резервов отпусков (счет 96) в 1С Зарплата и Кадры 7.7 с 2011 года.

14.06.2011    19620    vkr    48       

Выбор Движений документа по конкретному регистру, с помощью прямого запроса 0

Инструменты и обработки Программист Конфигурация (md, cf) v7.7 openconf 1cv7.md Россия Бесплатно (free) Практика программирования

Чтобы узнать какие движения сделал документ по конкретному регистру, в моем случае это регистр "ОстаткиПоСчетам" (оборотный), была написана следующая функция в глобальном модуле. Работает только для SQL версии и установленной внешнй компонентой 1С++!

26.05.2011    10749    Vix    4       

Прямой запрос на выборку подчиненных документов 6

Инструменты и обработки Программист Конфигурация (md, cf) v7.7 openconf 1cv7.md Россия Бесплатно (free) Практика программирования

Иногда необходимо получить список или таблицу документов, подчиненных выбранному. Для этого в глобальном модуле была написана функция с прямым запросом на выборку подчиненных документов. Работает только в SQL версии и при установленной внешней компоненте 1С++ !

26.05.2011    17120    Vix    5       

Некоторые ошибки и «проблемные» особенности реализации встроенного языка платформы 1С:Предприятие 7.7 96

Статья Программист Нет файла v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free) Практика программирования

Описание некоторых ошибок и особенностей реализации встроенного языка, которые создают «подводные камни» при программировании, а также возможных способов обхода этих проблем из собственного опыта работы на платформе 1С:Предприятие 7.7.

08.04.2011    42567    AleksR    102       

Монопольно ли запущена база 7.7 для SQL. Снятие single user в sql 9

Статья Системный администратор Программист Нет файла v7.7 openconf 1cv7.md Россия Бесплатно (free) Информационная безопасность Практика программирования

T-SQL скрипт, позволяющий определить монопольно ли запущена база на сервере SQL, а также перевести базу в multi user

11.03.2011    16658    d0dger    12       

Отпуск по уходу за ребенком. Расчет по-новому и по-старому 32

Статья Программист Нет файла v77::Расчет 1С7:ЗиК Россия Управление персоналом (HRM) Бесплатно (free) Практика программирования

По новому законодательству расчет среднего заработка для отпуска по уходу можно производить как по старым правилам, так и по новым, на усмотрение сотрудника. Реализуем это в ЗиК.

11.03.2011    10451    Nicholas    9       

Ошибки формата файла 2-НДФЛ в ЗиК релиз 306 100

Статья Программист Нет файла v77::Расчет 1С7:ЗиК Россия НУ Зарплата НДФЛ Бесплатно (free) Практика программирования

Ошибки 2НДФЛ в релизе: файл формируется как для ЮЛ, даже если работодатель ИП, опечатка "Отчетсвто", и указание имени файла с расширением. Нужно подправить отчет "СправкиПоНДФЛ".

02.02.2011    17474    1st    6       

ЗиК 305 ЗиК 306 Больничный лист. 107

Статья Программист Нет файла v77::Расчет 1С7:ЗиК Россия Зарплата Бесплатно (free) Практика программирования

Для переходящих больничных листов за счет работодателя оплачивается 2 дня, а не 3. Первоисточник: http://forums.kuban.ru/forum/viewtopi...669&page=2

25.01.2011    12514    Cvetic    26